Cara Meta (Instagram, Facebook, Threads) mengirim webhook

Meta mencoba ulang dengan frekuensi yang makin jarang selama 36 jam, lalu membuang event-nya. Handshake hub.challenge, format signature, dan verifier Node.

Perilaku pengiriman

Diambil dari dokumentasi resmi vendor, terakhir diperiksa 2026-08-06. Jika vendor tidak menyebut angka, tabel ini juga tidak mencantumkannya.

Batas waktu responstidak dipublikasikan vendor
Percobaan ulangDicoba ulang dengan frekuensi yang makin jarang selama 36 jam, lalu dibuang. WhatsApp Cloud API mencoba ulang hingga 7 hari
Berhenti mencobatidak dipublikasikan vendor
Sumberhttps://developers.facebook.com/docs/graph-api/webhooks/getting-started

Tanda tangan

Diverifikasi dengan verifier yang berfungsi dan dibuktikan oleh test suite, bukan dibaca dari dokumentasi. Terakhir diverifikasi 2026-08-20.

AlgoritmaHMAC-SHA256
Payload bertanda tanganraw body
Encodinghex
Headerx-hub-signature-256 = sha256=hex
Toleransitidak diberlakukan

Verifikasi

Raw body dari permintaan, byte demi byte, sebelum parsing JSON apa pun. Setiap skema di halaman ini rusak begitu framework melakukan serialisasi ulang pada payload.

const crypto = require("node:crypto");

// Same scheme as GitHub: "sha256=" + hex HMAC of the raw body, keyed by the
// app secret.
const expected =
  "sha256=" +
  crypto.createHmac("sha256", appSecret).update(rawBody).digest("hex");
const received = Buffer.from(req.headers["x-hub-signature-256"] ?? "");
const wanted = Buffer.from(expected);
// timingSafeEqual throws on a length mismatch, so check that first.
const valid =
  received.length === wanted.length && crypto.timingSafeEqual(received, wanted);

Sebelum semua ini berjalan, Meta harus menerima URL callback: Meta mengirim GET berisi hub.mode=subscribe dan mengharapkan hub.challenge dikembalikan apa adanya. Tanpa echo, tanpa langganan.

Yang sering menjebak

Meta memublikasikan rentang percobaan ulang (36 jam, frekuensi makin jarang, lalu notifikasi dibuang), tetapi tidak memublikasikan batas waktu respons per permintaan atau ambang penonaktifan. Jika vendor tidak menyebut angka, halaman ini juga tidak mencantumkannya.

Baca juga

AnyHook berada di depan endpoint yang menerima webhook dari Meta: AnyHook menjawab dalam sekitar satu detik, mencoba ulang sesuai jadwalnya sendiri saat server Anda mati, dan menyimpan setiap event agar dapat diputar ulang (replay). Ganti satu URL, kode Anda tetap.

Cara kerjanya →