Cara Discord mengirim webhook

Discord meminta respons awal untuk interaksi dalam 3 detik, ditandatangani dengan Ed25519, bukan HMAC. Format terverifikasi dan verifier Web Crypto.

Perilaku pengiriman

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

Batas waktu respons3 detik

Endpoint interaksi harus mengirim respons awal dalam 3 detik

Periksa apakah handler Anda menjawab tepat waktu

Percobaan ulangtidak dipublikasikan vendor
Berhenti mencobatidak dipublikasikan vendor
Sumberhttps://docs.discord.com/developers/interactions/receiving-and-responding

Tanda tangan

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

AlgoritmaEd25519
Payload bertanda tangan{timestamp}{body}
Encodinghex
Headerx-signature-ed25519 + x-signature-timestamp
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.

// Ed25519, not HMAC: verify with the application's public key (hex).
const hex = (s) => Uint8Array.from(s.match(/../g), (b) => parseInt(b, 16));

const key = await crypto.subtle.importKey(
  "raw",
  hex(publicKey), // Developer Portal → Application → Public Key
  { name: "Ed25519" },
  false,
  ["verify"],
);
const valid = await crypto.subtle.verify(
  "Ed25519",
  key,
  hex(req.headers["x-signature-ed25519"]),
  new TextEncoder().encode(req.headers["x-signature-timestamp"] + rawBody),
);

Discord secara aktif menguji endpoint dengan tanda tangan yang tidak valid dan menolak URL-nya jika lolos, jadi verifier yang hanya berupa stub gagal saat onboarding, bukan hanya saat review keamanan.

Yang sering menjebak

Batas waktu 3 detik berlaku untuk respons interaksi awal. Jalan keluarnya adalah type 5 (deferred): konfirmasi penerimaan di dalam batas waktu itu, lalu kirim follow-up saat pekerjaan sebenarnya selesai.

Baca juga

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