Webhook
Terima notifikasi real-time saat pesan masuk di akun WhatsApp Anda.
Cara Kerja
Konfigurasikan URL webhook di pengaturan perangkat. Saat pesan diterima, engine mengirim permintaan POST ke URL Anda dengan payload pesan.
Example Handler
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook', (req, res) => {
const { event, node, message } = req.body;
console.log(`[${event}] from ${node.phone}`);
console.log(`Message: ${message.content.text}`);
// ** Return 2xx to acknowledge
res.status(200).json({ received: true });
});
app.listen(3000);Payload Webhook
Saat pesan diterima, engine mengirim permintaan POST ke URL webhook Anda.
eventstringTipe event. Saat ini:
MESSAGE_RECEIVED.eventAtstringTimestamp ISO 8601 saat webhook dipicu.
nodeobjectNode WhatsApp yang menerima pesan. Berisi
guid dan phone.messageobjectPayload pesan yang diterima. Berisi
id, from, type, content, messagedAt, isGroup.message.fromobjectInfo pengirim dengan
jid, name, dan phone.message.isGroupbooleanApakah pesan berasal dari grup. Jika
true, groupJid akan disertakan.{
"event": "MESSAGE_RECEIVED",
"eventAt": "2026-02-01T10:30:45.123Z",
"node": {
"guid": "abc-123-def",
"phone": "+6281234567890"
},
"message": {
"id": "3EB0ABC123DEF456",
"from": {
"jid": "[email protected]",
"name": "John Doe",
"phone": "+6289876543210"
},
"type": "TEXT",
"content": {
"text": "Hello, how are you?"
},
"messagedAt": 1706780445,
"isGroup": false
}
}Tipe Pesan
Field message.type menentukan struktur message.content.
| Type | Field Konten |
|---|---|
| TEXT | text |
| IMAGE | caption, mimetype |
| VIDEO | caption, mimetype |
| AUDIO | mimetype |
| DOCUMENT | fileName, mimetype |
| STICKER | mimetype |
| REACTION | emoji, reactedMessageId |
| OTHER | (varies) |
Content by Type
// TEXT
{ "text": "Hello!" }
// IMAGE
{ "caption": "Photo", "mimetype": "image/jpeg" }
// VIDEO
{ "caption": "Video", "mimetype": "video/mp4" }
// AUDIO
{ "mimetype": "audio/ogg" }
// DOCUMENT
{ "fileName": "report.pdf", "mimetype": "application/pdf" }
// STICKER
{ "mimetype": "image/webp" }
// REACTION
{ "emoji": "๐", "reactedMessageId": "3EB0..." }Mekanisme Percobaan Ulang
Webhook yang gagal akan dicoba ulang secara otomatis dengan jeda yang meningkat.
| Percobaan | Jeda |
|---|---|
| 1 | Segera |
| 2 | 3 detik |
| 3 | 5 menit |
| 4 | 1 jam |
Setelah 4 percobaan gagal, webhook ditandai sebagai gagal permanen untuk pesan tersebut.
Respons yang diharapkan dari server Anda
{
"received": true
}