Perilaku pengiriman
Diambil dari dokumentasi resmi vendor, terakhir diperiksa 2026-08-06. Jika vendor tidak menyebut angka, tabel ini juga tidak mencantumkannya.
| Batas waktu respons | tidak dipublikasikan vendor |
|---|---|
| Percobaan ulang | tidak dipublikasikan vendor |
| Berhenti mencoba | tidak dipublikasikan vendor |
Tanda tangan
Diverifikasi dengan verifier yang berfungsi dan dibuktikan oleh test suite, bukan dibaca dari dokumentasi. Terakhir diverifikasi 2026-08-20.
| Algoritma | HMAC-SHA1 |
|---|---|
| Payload bertanda tangan | raw body |
| Encoding | hex |
| Header | x-hub-signature = sha1=hex |
| Toleransi | tidak 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");
// x-hub-signature: "sha1=" + hex(HMAC-SHA1(client secret, raw body))
const expected =
"sha1=" +
crypto.createHmac("sha1", clientSecret).update(rawBody).digest("hex");
const received = Buffer.from(req.headers["x-hub-signature"] ?? "");
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);Yang sering menjebak
Header-nya x-hub-signature, versi SHA-1 yang asli, bukan x-hub-signature-256 milik GitHub. Kode deteksi otomatis yang mencocokkan prefiks harus memeriksa nama header secara utuh, atau kode itu akan memverifikasi dengan algoritma dan encoding yang salah.
Baca juga
AnyHook berada di depan endpoint yang menerima webhook dari Intercom: 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.