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 | 3 detik Endpoint interaksi harus mengirim respons awal dalam 3 detik |
|---|---|
| Percobaan ulang | tidak dipublikasikan vendor |
| Berhenti mencoba | tidak dipublikasikan vendor |
| Sumber | https://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.
| Algoritma | Ed25519 |
|---|---|
| Payload bertanda tangan | {timestamp}{body} |
| Encoding | hex |
| Header | x-signature-ed25519 + x-signature-timestamp |
| 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.
// 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.