Slack: como funciona a entrega de webhooks

O Slack quer 2xx em 3 segundos, tenta de novo 3 vezes e desativa as inscrições de eventos com mais de 95% de falhas em uma hora. Formato e verificador Node.

Comportamento de entrega

Lido na documentação do próprio provedor, verificado pela última vez em 2026-08-06. Onde o provedor não informa um número, esta tabela também não traz nenhum.

Prazo de resposta3 s

Verifique se seu handler responde a tempo

Novas tentativas3 novas tentativas: imediatamente, após 1 min, após 5 min
DesisteInscrições de eventos desativadas se mais de 95% das tentativas falharem num intervalo de 60 min
Fontehttps://docs.slack.dev/apis/events-api/

Assinatura

Verificada com um verificador funcional, comprovado por uma suíte de testes, e não lida na documentação. Última verificação em 2026-08-20.

AlgoritmoHMAC-SHA256
Payload assinadov0:{timestamp}:{body}
Codificaçãohex
Cabeçalhox-slack-signature = v0=hex
Tolerância5 min

Verifique a assinatura

O corpo bruto da requisição, byte a byte, antes de qualquer parsing de JSON. Todos os esquemas desta página quebram no momento em que um framework serializa o payload de novo.

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

Armadilhas

Três segundos é o prazo mais curto entre os grandes remetentes, e as três novas tentativas acontecem em até cinco minutos: um handler lento, e não fora do ar, falha nas quatro tentativas dentro de um mesmo incidente.

A regra de desativação é uma taxa, não uma contagem: mais de 95% de tentativas com falha em 60 minutos desliga as inscrições de eventos do app inteiro, e seus usuários veem o bot ficar em silêncio no canal enquanto isso acontece.

Leia também

O AnyHook fica entre Slack e seus endpoints: responde em cerca de um segundo, tenta de novo segundo um cronograma próprio quando seu servidor está fora do ar e guarda cada evento disponível para replay. Troque uma URL e mantenha seu código; para aceitar novas tentativas e replays, verifique o cabeçalho AnyHook-Signature, porque a assinatura original do remetente (Slack) expira após 5 min.

Como funciona →