Setup Webhook Kirimin: Terima Notifikasi Pesan Masuk & Status Blast Real-Time

Setup Webhook Kirimin: Terima Notifikasi Pesan Masuk & Status Blast Real-Time

Selain mengirim pesan, Anda juga bisa menerima event dari Kirimin secara real-time — pesan masuk, perubahan status device, hingga hasil akhir blast — lewat webhook. Berikut cara setup dan mengamankannya.

1. Daftarkan Webhook URL

Buka Dashboard → API Keys → Webhook, isi URL endpoint di server Anda yang siap menerima POST request, misalnya https://tokoanda.com/webhook/kirimin. Kirimin akan otomatis membuatkan webhook secret untuk menandatangani setiap request.

2. Event yang Dikirim

EventKapan Terjadi
message.receivedAda pesan masuk ke device yang terhubung
session.connectedDevice berhasil terhubung (setelah scan QR)
session.disconnectedDevice terputus dari WhatsApp

3. Struktur Payload

Semua event dikirim dengan struktur body yang konsisten:

{
  "event": "message.received",
  "timestamp": "2026-08-22T09:15:00+00:00",
  "account_id": 42,
  "data": {
    "session_id": "u42_default",
    "message_id": "3EB0C767D...",
    "from": "628123456789@s.whatsapp.net",
    "body": "Halo, saya mau tanya soal produk",
    "type": "text",
    "is_group": false
  }
}

Setiap request juga menyertakan header berikut:

Content-Type: application/json
X-Kirimin-Event: message.received
X-Kirimin-Signature: sha256=6b6f8f1c9a...
X-Kirimin-Delivery-Id: wh_64f9a2b1c3e4d
User-Agent: Kirimin-Webhook/1.0

4. Verifikasi Signature (Wajib!)

Agar endpoint Anda tidak menerima request palsu, selalu verifikasi header X-Kirimin-Signature menggunakan webhook secret sebelum memproses payload:

Route::post('/webhook/kirimin', function (Illuminate\Http\Request $request) {
    $secret    = config('services.kirimin.webhook_secret');
    $body      = $request->getContent();
    $expected  = 'sha256=' . hash_hmac('sha256', $body, $secret);
    $signature = $request->header('X-Kirimin-Signature');

    if (!hash_equals($expected, $signature)) {
        return response()->json(['error' => 'invalid_signature'], 401);
    }

    $event = $request->input('event');
    $data  = $request->input('data');

    if ($event === 'message.received') {
        // Contoh: simpan ke tabel percakapan / trigger auto-reply
        \App\Models\IncomingMessage::create([
            'from' => $data['from'],
            'body' => $data['body'],
        ]);
    }

    return response()->json(['success' => true]);
});
⚠️ Gunakan hash_equals(), bukan == atau ===, untuk membandingkan signature — ini mencegah celah timing attack pada proses verifikasi.

5. Auto-Reply Sederhana

Karena webhook memberi tahu setiap pesan masuk, Anda bisa membalasnya otomatis dengan memanggil endpoint /send di dalam handler yang sama:

if ($event === 'message.received' && !$data['is_group']) {
    $phone = str_replace('@s.whatsapp.net', '', $data['from']);

    app(\App\Services\KiriminService::class)->sendText(
        $phone,
        'Terima kasih, pesan Anda kami terima. Tim kami akan segera membalas.'
    );
}

6. Tips Reliabilitas

Siap Coba Integrasinya Sendiri?

Trial gratis 7 hari, semua fitur unlimited aktif — API Key bisa langsung dipakai dari dashboard.

Daftar Gratis Sekarang →