Solução de problemas
Soluções para os problemas mais comuns.
Não estou recebendo entregas de webhook
1. Verifique seus registros primeiro.
Vá para Aplicativo → Registros. Encontre o monitor relevante e verifique o status da entrega. Se mostrar failed, expanda a entrada para ver o código de status HTTP que seu endpoint retornou.
2. Seu endpoint retornou um status diferente de 2xx ou expirou.
O DiffHook considera uma entrega bem-sucedida somente quando seu endpoint retorna 2xx em 10 segundos. Causas comuns:
- Retornando
500devido a um erro no seu manipulador - Processamento lento antes de responder – mova o processamento assíncrono e retorne
200imediatamente - Firewall ou WAF bloqueando o intervalo de IP do DiffHook
3. O URL do seu endpoint está errado.
Verifique novamente o URL do webhook no monitor. Certifique-se de que seja acessível publicamente (não localhost).
4. Todas as novas tentativas automáticas foram usadas.
O DiffHook tenta uma vez imediatamente e depois até mais 10 vezes com atrasos exponenciais em minutos (1, 2, 4,… até 512 minutos entre tentativas). Quando todas as tentativas falham, a entrega é interrompida; a entrada em Logs mostra failed ou exhausted. Corrija seu endpoint e use Trigger now no monitor para disparar novamente.
Um monitor disparou, mas não recebi nenhuma notificação
Verifique se pelo menos um canal de notificação está configurado e conectado:
- Aplicativo → Configurações → Integrações – verifique se Slack/Discord/Telegram/Email está conectado
- Use o botão Test para confirmar se o canal está funcionando independentemente dos eventos do monitor
Meu monitor não está detectando alterações que posso ver na página
Conteúdo renderizado em JavaScript. Se a página carregar conteúdo via JavaScript (React, Vue, SPAs), o HTML estático obtido pelo DiffHook não o incluirá. Ative a renderização JS no monitor para usar um navegador headless.
Seletor CSS muito estreito ou quebrado.
Se você especificou css_selector, verifique se ele ainda corresponde a um elemento na página. Redesenho de sites – os seletores podem ficar obsoletos. Remova o seletor temporariamente para confirmar que o DiffHook vê a alteração e depois refine.
A alteração está dentro do filtro de diferenças. O DiffHook remove ruído dinâmico (carimbos de data e hora, espaços de anúncio, tokens de sessão). Se o seu conteúdo alvo corresponder a um padrão de filtro, ele poderá ser suprimido. Entre em contato com o suporte com o URL e podemos inspecionar a diferença bruta.
Jitter de pesquisa. Verifica o incêndio dentro de uma janela de ±30 segundos em torno do horário programado. Uma alteração que apareceu e desapareceu dentro do seu intervalo de pesquisa não será detectada.
Estou recebendo muitos alertas de falsos positivos
Use um seletor CSS. Defina o monitor apenas para o conteúdo de seu interesse:
{ "css_selector": "#pricing-table" }
Isso filtra banners de cookies, atualizações de anúncios, alterações de carimbo de data/hora e outros ruídos.
Aumente o intervalo. Se uma página muda com frequência, mas você só se preocupa com alterações significativas, um intervalo mais longo reduz o ruído.
Verifique o conteúdo dinâmico. Alguns sites incorporam tokens de sessão ou nonces no corpo da página. Eles mudam a cada carga e sempre acionarão uma diferença. Use um seletor CSS para excluir o elemento afetado.
Meu monitor aparece como pausado inesperadamente
Os monitores são pausados automaticamente em dois cenários:
- Rebaixamento do plano — Você reduziu seu plano e tem mais monitores ativos do que o novo limite permite. Vá para Aplicativo → Monitores, retome os monitores que deseja manter e exclua ou pause o restante.
- Conta suspensa — Uma falha no pagamento colocou sua conta em espera. Resolva o pagamento em App → Faturamento para reativar.
Uma entrega foi enviada duas vezes
Entregas duplicadas podem acontecer em raros cenários de falha de rede (a solicitação foi entregue, mas a confirmação foi perdida, causando uma nova tentativa). Este é o comportamento esperado.
Proteja seu manipulador com uma chave de desduplicação usando monitor_id + triggered_at:
const key = `${body.monitor_id}:${body.triggered_at}`
if (await redis.get(key)) return
await redis.set(key, '1', 'EX', 86400)
Consulte Melhores práticas para obter mais informações sobre idempotência.
Não consigo verificar a assinatura do webhook
- Certifique-se de calcular o HMAC sobre os bytes brutos do corpo da solicitação, não sobre o JSON analisado
- O segredo de assinatura está em Aplicativo → Configurações → Chaves de API
- Depois de alternar seu segredo, atualize sua implantação antes que o segredo antigo seja revogado
Consulte Verificar assinaturas para exemplos completos de implementação.
Ainda preso?
Se nenhuma das opções acima resolver seu problema, envie um e-mail para support@diffhook.com com:
- O ID da sua equipe (visível na URL do painel)
- O ID ou URL do monitor
- O ID de entrada de log se uma entrega falhar
- Uma descrição do comportamento esperado versus comportamento real