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 |
|---|---|
| Percobaan ulang | 3 percobaan ulang: langsung, setelah 1 menit, setelah 5 menit |
| Berhenti mencoba | Langganan event dinonaktifkan jika lebih dari 95% upaya gagal dalam 60 menit |
| Sumber | https://docs.slack.dev/apis/events-api/ |
Tanda tangan
Diverifikasi dengan verifier yang berfungsi dan dibuktikan oleh test suite, bukan dibaca dari dokumentasi. Terakhir diverifikasi 2026-08-20.
| Algoritma | HMAC-SHA256 |
|---|---|
| Payload bertanda tangan | v0:{timestamp}:{body} |
| Encoding | hex |
| Header | x-slack-signature = v0=hex |
| Toleransi | 5 menit |
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");
const ts = req.headers["x-slack-request-timestamp"];
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) throw new Error("stale");
const expected =
"v0=" +
crypto
.createHmac("sha256", signingSecret) // Slack App → Basic Information
.update(`v0:${ts}:${rawBody}`)
.digest("hex");
const received = Buffer.from(req.headers["x-slack-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
Tiga detik adalah batas waktu paling ketat di antara pengirim besar, dan ketiga percobaan ulangnya tiba dalam lima menit: handler yang lambat, bukan mati, gagal di keempat upaya dalam satu insiden.
Aturan penonaktifannya berbasis rasio, bukan jumlah: jika lebih dari 95% upaya gagal dalam 60 menit, langganan event dimatikan untuk seluruh aplikasi, dan pengguna Anda melihat bot diam di channel selama itu terjadi.
Baca juga
AnyHook berada di depan endpoint yang menerima webhook dari Slack: 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; agar percobaan ulang dan putar ulang diterima, periksa AnyHook-Signature, karena tanda tangan milik Slack kedaluwarsa setelah 5 menit.