Webhook
Callback memberi tahu sistem kamu saat status pengiriman berubah. Setiap delivery ditandatangani dengan secret endpoint kamu.
Mengatur endpoint
- Buka Dashboard → Webhooks.
- Isi URL HTTPS publik. URL dengan kredensial atau HTTP ditolak.
- Simpan signing secret yang ditampilkan sekali.
- Gunakan Send test untuk memverifikasi kode kamu.
Header signature
X-Nala-Signature: t=1700000000,v1=hex(hmac_sha256(secret, t + "." + rawBody)) Verifikasi HMAC atas timestamp + "." + raw body, bandingkan dengan timing-safe
comparison, dan tolak timestamp di luar toleransi (default 5 menit).
Contoh verifikasi (Node.js)
import crypto from 'node:crypto';
export function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(',').map((p) => p.trim().split('=')));
const timestamp = Number(parts.t);
if (!Number.isFinite(timestamp) || Math.abs(Date.now() / 1000 - timestamp) > 300) return false;
const expected = crypto
.createHmac('sha256', secret)
.update(`${parts.t}.${rawBody}`)
.digest('hex');
const a = Buffer.from(expected);
const b = Buffer.from(parts.v1 ?? '');
return a.length === b.length && crypto.timingSafeEqual(a, b);
} Retry dan DLQ
Delivery yang gagal di-retry maksimal 3 kali. Setelah itu masuk DLQ selama 7 hari dan bisa dilihat atau diputar ulang dari dashboard. Endpoint harus idempoten.
| Endpoint | Fungsi |
|---|---|
GET /v1/webhooks/endpoint | Konfigurasi saat ini; secret tidak dikembalikan. |
PUT /v1/webhooks/endpoint | Set URL atau rotate secret. |
POST /v1/webhooks/endpoint/test | Kirim delivery bertanda tangan untuk pengujian. |
GET /v1/webhooks/deliveries | Riwayat delivery dan signature. |
GET /v1/webhooks/dlq | Delivery yang gagal permanen. |
Webhook Meta masuk ke platform Nala, bukan ke endpoint kamu. Callback ke sistem kamu adalah event Nala yang sudah dinormalisasi.
