Developer

Webhook Setup

Terima notifikasi real-time dari Wahero ke sistem Anda via webhook

Apa itu Webhook?

Webhook adalah cara untuk Wahero mengirim notifikasi otomatis ke server Anda ketika ada event tertentu (seperti pesan masuk, status berubah, dll).

Berbeda dengan polling (mengecek API berulang kali), webhook push data langsung ke Anda secara real-time.

⚡ Real-time

Terima event instant tanpa delay

🔄 Automatic

Tidak perlu polling API secara berkala

💰 Efisien

Hemat API calls dan bandwidth

Event yang Tersedia

message.received

Triggered ketika menerima pesan masuk dari customer

message.sent

Triggered ketika pesan berhasil dikirim

message.delivered

Triggered ketika pesan terkirim ke device customer

message.read

Triggered ketika pesan dibaca customer

device.connected

Triggered ketika WhatsApp berhasil terhubung

device.disconnected

Triggered ketika WhatsApp terputus

Cara Setup Webhook

1

Siapkan Endpoint di Server Anda

Buat HTTP endpoint yang akan menerima POST request dari Wahero

Example (Node.js/Express):

app.post('/webhook/wahero', (req, res) => {
  const event = req.body;
  console.log('Webhook received:', event);
  
  // Process event here
  
  res.status(200).send('OK');
});
2

Daftarkan Webhook URL di Dashboard

Login ke dashboard → Settings → Webhook → Add Webhook URL

URL: https://yourdomain.com/webhook/wahero
Events: Pilih event yang ingin Anda subscribe
3

Verifikasi Signature

Untuk keamanan, verifikasi signature di header X-Wahero-Signature

const crypto = require('crypto');

const signature = req.headers['x-wahero-signature'];
const body = JSON.stringify(req.body);
const secret = 'YOUR_WEBHOOK_SECRET';

const hash = crypto
  .createHmac('sha256', secret)
  .update(body)
  .digest('hex');

if (hash !== signature) {
  return res.status(401).send('Invalid signature');
}
4

Test Webhook

Klik "Test Webhook" di dashboard untuk mengirim test payload. Pastikan endpoint Anda return status 200.

Webhook Aktif!

Webhook sudah aktif dan akan mengirim event ke endpoint Anda secara real-time

Contoh Payload

message.received event:

{
  "event": "message.received",
  "timestamp": "2025-12-04T10:30:00Z",
  "data": {
    "message_id": "msg_abc123xyz",
    "from": "628123456789",
    "to": "628987654321",
    "message": "Halo, saya mau order",
    "media_url": null,
    "chat_id": "chat_xyz789"
  }
}

Best Practices

Respond Cepat (dalam 5 detik)

Return status 200 secepat mungkin. Jika processing lama, jalankan async/background job

Verifikasi Signature

Selalu verify signature untuk memastikan request memang dari Wahero

Handle Idempotency

Webhook bisa terkirim lebih dari sekali untuk event yang sama. Gunakan message_id untuk dedup

Log Semua Request

Simpan log untuk debugging. Berguna ketika ada issue atau discrepancy

Troubleshooting

Webhook tidak terkirim?

• Pastikan URL webhook accessible dari internet (bukan localhost)

• Cek firewall/security group apakah allow incoming dari Wahero IPs

• Pastikan endpoint return status 200

• Cek webhook logs di dashboard untuk error details

Signature verification failed?

• Pastikan menggunakan webhook secret yang benar

• Hash body sebelum parsing (raw body, bukan parsed JSON)

• Check case-sensitive header name

Butuh Bantuan Setup?

Tim support kami siap membantu setup webhook Anda