Webhook

Callback memberi tahu sistem kamu saat status pengiriman berubah. Setiap delivery ditandatangani dengan secret endpoint kamu.

Mengatur endpoint

  1. Buka Dashboard → Webhooks.
  2. Isi URL HTTPS publik. URL dengan kredensial atau HTTP ditolak.
  3. Simpan signing secret yang ditampilkan sekali.
  4. 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.

EndpointFungsi
GET /v1/webhooks/endpointKonfigurasi saat ini; secret tidak dikembalikan.
PUT /v1/webhooks/endpointSet URL atau rotate secret.
POST /v1/webhooks/endpoint/testKirim delivery bertanda tangan untuk pengujian.
GET /v1/webhooks/deliveriesRiwayat delivery dan signature.
GET /v1/webhooks/dlqDelivery yang gagal permanen.

Webhook Meta masuk ke platform Nala, bukan ke endpoint kamu. Callback ke sistem kamu adalah event Nala yang sudah dinormalisasi.