Cara GitHub mengirim webhook

GitHub tidak pernah mencoba ulang pengiriman yang gagal, dan catatannya hilang setelah 3 hari. Apa artinya, 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 respons10 detik

Periksa apakah handler Anda menjawab tepat waktu

Percobaan ulangTidak ada. GitHub tidak mengirim ulang pengiriman yang gagal secara otomatis
Berhenti mencobaTidak ada penonaktifan. Pengiriman tetap dapat dikirim ulang secara manual selama 3 hari, lalu catatannya hilang
Sumberhttps://docs.github.com/en/webhooks/using-webhooks/best-practices-for-using-webhooks

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");

// x-hub-signature-256: "sha256=" + hex(HMAC-SHA256(secret, raw body))
const expected =
  "sha256=" +
  crypto.createHmac("sha256", webhookSecret).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);

Yang sering menjebak

Anda hanya mendapat satu upaya. Setiap pengirim lain di daftar ini mencoba ulang dengan sendirinya; GitHub tidak, jadi deploy yang memakan 30 detik membuat event hilang tanpa kesempatan kedua. Tombol Redeliver (begitu pula Redelivery API) bekerja per pengiriman, secara manual, selama 3 hari; setelah itu catatannya sendiri hilang.

Baca juga

AnyHook berada di depan endpoint yang menerima webhook dari GitHub: 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 →