Guias›Recebendo webhooks

Recebendo webhooks

Quando o DiffHook detecta uma alteração, ele envia um HTTP POST para o URL de entrega resolvido: notification_config.webhook_url por monitor, se definido, caso contrário, o webhook padrão do seu espaço de trabalho de Integrações. O corpo JSON abaixo é a carga útil enviada pelo DiffHook (não a configuração do monitor).

Carga útil do webhook

{
  "event": "page.changed",
  "monitor_id": "mon_abc123",
  "url": "https://competitor.com/pricing",
  "triggered_at": "2026-03-16T14:22:00Z",
  "content": "Pro plan: $59/month — …"
}

Referência de campo

event — Sempre page.changed para eventos de alteração de conteúdo.

monitor_id — O ID do monitor que acionou o evento.

url — O URL monitorado para este evento.

triggered_at — carimbo de data/hora ISO 8601 de quando a alteração foi detectada.

content — O novo conteúdo da página após a alteração (texto normalizado/extraído usado para monitoramento — igual ao instantâneo DiffHook diferido da versão anterior).

Garantias de entrega

  • Em cada alteração detectada, o DiffHook faz um HTTP POST imediato. Se isso falhar (diferente de 2xx, erro de rede ou tempo limite), ele agendará até mais 10 tentativas — 11 tentativas de entrega no total se seu endpoint nunca tiver êxito.
  • O atraso entre tentativas é exponencial em minutos: após cada falha, a próxima tentativa é elegível após 1, 2, 4, 8, 16, 32, 64, 128, 256 e depois 512 minutos (cada atraso é o dobro do anterior). As novas tentativas são realizadas em uma programação de aproximadamente uma vez por minuto, portanto, o tempo não é preciso em menos de um segundo.
  • Uma entrega é considerada bem-sucedida quando seu endpoint retorna 2xx em 10 segundos.
  • Após todas as tentativas serem utilizadas, a entrega é interrompida; a linha em App → Logs mostra failed ou exhausted dependendo do estado do canal.

Respondendo a webhooks

Seu endpoint deve retornar 200 OK o mais rápido possível. Processe a carga de forma assíncrona:

app.post('/webhook', (req, res) => {
  res.status(200).send('OK')       // Respond first
  processChangeAsync(req.body)     // Then process
})

Comportamento de nova tentativa

TentativaQuando é executada
1ºImediatamente quando a alteração for detectada
2º≥ 1 minuto após a 1ª falha
3º≥ 2 minutos após a 2ª falha
4º≥ 4 minutos após a 3ª falha
5º≥ 8 minutos após a 4ª falha
6º≥ 16 minutos após a 5ª falha
7º≥ 32 minutos após a 6ª falha
8º≥ 64 minutos (~1 h) após a 7ª falha
9º≥ 128 minutos (~2 h) após a 8ª falha
10º≥ 256 minutos (~4 h) após a 9ª falha
11º≥ 512 minutos (~8,5 h) após a 10ª falha

Após 11 tentativas malsucedidas (1 inicial + 10 tentativas), nenhuma outra entrega automática será executada para esse evento. Corrija seu endpoint e use Disparar agora no monitor se precisar de outro disparo.