Skip to content

Webhook

Terima event Wazapin di endpoint HTTPS kamu pakai developer webhooks API.

Updated View as Markdown

Pakai webhook biar event masuk langsung ke server kamu — nggak usah polling API terus.

Hubungin WhatsApp dulu di dashboard, terus daftarin endpoint HTTPS di Settings → Developer → Webhooks (atau lewat API di bawah). Tiap ada event yang kamu subscribe, Wazapin bakal nge-POST JSON yang udah di-sign ke URL kamu.

Atur endpoint

Aksi Method dan path
Cek pengaturan webhook GET /v1/settings/developer/webhooks
Buat endpoint POST /v1/settings/developer/webhooks/endpoints
Update endpoint PATCH /v1/settings/developer/webhooks/endpoints/{endpointID}
Hapus endpoint DELETE /v1/settings/developer/webhooks/endpoints/{endpointID}
Rotate signing secret POST /v1/settings/developer/webhooks/endpoints/{endpointID}/rotate-secret
Kirim test delivery POST /v1/settings/developer/webhooks/endpoints/{endpointID}/test
Cek daftar delivery GET /v1/settings/developer/webhooks/deliveries
Retry delivery POST /v1/settings/developer/webhooks/deliveries/{messageID}/retry

Lengkapnya cek di API reference → Webhooks.

Bentuk payload-nya (bukan wrapper event_type)

Beda sama beberapa docs BSP yang bungkus tiap event kayak { "type": "...", "data": { } }, Wazapin pakai model webhook signing yang standar:

Di mana Isinya
Header HTTP ID pengiriman (svix-id / webhook-id), timestamp, signature — lihat Contoh signature webhook
Body JSON Cuma field khusus event itu aja (flat object)

Nama event-nya (misalnya message.new) itu nunjukin jenis subscription / delivery-nya. Nama ini nggak dimunculin lagi sebagai event_type di dalam body.

Pakai header ID delivery buat idempotency (sama kayak event_id di provider lain). Cek Siklus hidup pesan dan idempotency.

Jenis event messaging (yang paling sering dipakai)

Subscribe event ini di aplikasi pas kamu integrasi kirim/terima:

Event Ke-trigger kapan
message.new Ada pesan baru di conversation (masuk dari kontak, atau echo outbound tertentu).
message.sent Pesan outbound kekirim dari workspace kamu.
message.status_update Status pesan terkirim berubah — sent, delivered, read, atau failed.
conversation.updated Metadata conversation berubah (assignee, status, preview, dll.).
contact.updated Profil kontak yang nyambung ke conversation ke-update.
template.status_update Status approval template WhatsApp berubah.

Daftar lengkap plus contohnya: Katalog event webhook. Kamu bisa filter jenis event per endpoint di pengaturan webhook.

Contoh body: message.new (teks masuk)

{
  "message_id": "9f1fd66d-c37a-4b50-a8c2-b4dca523f9c8",
  "conversation_id": "0f89b0f9-74b4-44f9-b9b6-48f6d4de57aa",
  "contact_id": "c1a2b3c4-d5e6-7890-abcd-ef1234567890",
  "channel_id": "wzp_abc123",
  "direction": "inbound",
  "from_phone": "6281234567890",
  "msg_type": "text"
}

Contoh body: message.status_update

{
  "message_id": "9f1fd66d-c37a-4b50-a8c2-b4dca523f9c8",
  "conversation_id": "0f89b0f9-74b4-44f9-b9b6-48f6d4de57aa",
  "status": "delivered",
  "organization_id": "org_123"
}

Contoh lainnya: Contoh payload webhook.

Verifikasi signature

Pakai signing secret endpoint kamu (whsec_…) dan verifikasi header-nya pakai raw body sebelum kamu parse JSON.

Pengiriman & retry

  • Langsung balas 2xx secepatnya; prosesnya belakangan aja secara async.
  • Cek dan retry delivery yang gagal lewat deliveries API.
  • Deduplikasi pakai header ID delivery + message_id kalau ada.

Halaman terkait

List webhook endpoints

curl "https://api.wazapin.com/v1/settings/developer/webhooks" \
	--request GET \
	--header "X-Api-Key: $WAZAPIN_API_KEY"
const response = await fetch("https://api.wazapin.com/v1/settings/developer/webhooks", {
  method: "GET",
});
const data = await response.json();
console.log(data);
import os
import requests

response = requests.get(
    "https://api.wazapin.com/v1/settings/developer/webhooks",
    headers={
        "X-Api-Key": os.environ["WAZAPIN_API_KEY"],
    },
    timeout=30,
)
print(response.status_code, response.json())

Create webhook endpoint

curl "https://api.wazapin.com/v1/settings/developer/webhooks/endpoints" \
	--request POST \
	--header "X-Api-Key: $WAZAPIN_API_KEY" \
	--json '{
		"url": "https://your-app.com/webhook",
		"events": [
				"message.received",
				"message.delivered"
		]
	}'
const response = await fetch("https://api.wazapin.com/v1/settings/developer/webhooks/endpoints", {
  method: "POST",
  body: JSON.stringify({
      "url": "https://your-app.com/webhook",
      "events": [
        "message.received",
        "message.delivered"
      ]
    }),
});
const data = await response.json();
console.log(data);
import os
import requests

response = requests.post(
    "https://api.wazapin.com/v1/settings/developer/webhooks/endpoints",
    headers={
        "X-Api-Key": os.environ["WAZAPIN_API_KEY"],
        "Content-Type": "application/json",
    },
    json={
                "url": "https://your-app.com/webhook",
                "events": [
                        "message.received",
                        "message.delivered"
                ]
        },
    timeout=30,
)
print(response.status_code, response.json())
Navigation

Type to search…

↑↓ navigate↵ selectEsc close