Solución de problemas
Soluciones a los problemas más comunes.
No recibo entregas de webhooks
1. Primero revise sus registros.
Vaya a Aplicación → Registros. Encuentre el monitor correspondiente y verifique el estado de la entrega. Si muestra failed, expanda la entrada para ver el código de estado HTTP que devolvió su punto final.
2. Su terminal devolvió un estado distinto de 2xx o se agotó el tiempo de espera.
DiffHook considera que una entrega se realizó correctamente solo cuando su punto final devuelve 2xx dentro de 10 segundos. Causas comunes:
- Devolviendo
500debido a un error en su controlador - Procesamiento lento antes de responder: mueva el procesamiento asíncrono y devuelva
200inmediatamente - Firewall o WAF que bloquea el rango de IP de DiffHook
3. La URL de su punto final es incorrecta.
Vuelva a verificar la URL del webhook en el monitor. Asegúrese de que sea accesible públicamente (no localhost).
4. Se utilizaron todos los reintentos automáticos.
DiffHook lo intenta una vez inmediatamente, luego hasta 10 veces más con retrasos exponenciales en minutos (1, 2, 4,… hasta 512 minutos entre intentos). Cuando todos los intentos fallan, la entrega se detiene; la entrada en Registros muestra failed o exhausted. Arregle su punto final, luego use Activar ahora en el monitor para volver a disparar.
Un monitor se disparó pero no recibí ninguna notificación.
Verifique que al menos un canal de notificación esté configurado y conectado:
- Aplicación → Configuración → Integraciones: verifica que Slack/Discord/Telegram/Email esté conectado
- Utilice el botón Prueba para confirmar que el canal funciona independientemente de los eventos del monitor.
Mi monitor no detecta los cambios que puedo ver en la página
Contenido renderizado en JavaScript. Si la página carga contenido a través de JavaScript (React, Vue, SPA), el HTML estático obtenido por DiffHook no lo incluirá. Habilite renderizado JS en el monitor para usar un navegador sin cabeza.
Selector CSS demasiado estrecho o roto.
Si especificó un css_selector, verifique que aún coincida con un elemento de la página. Rediseño de sitios: los selectores pueden volverse obsoletos. Elimine el selector temporalmente para confirmar que DiffHook vea el cambio y luego refine.
El cambio está dentro del filtro de diferencias. DiffHook elimina el ruido dinámico (marcas de tiempo, espacios publicitarios, tokens de sesión). Si el contenido de destino coincide con un patrón de filtro, es posible que se suprima. Póngase en contacto con el soporte con la URL y podremos inspeccionar la diferencia sin formato.
Variación en el sondeo. El sondeo se ejecuta en una ventana de ±30 segundos alrededor del tiempo programado. No se detectará un cambio que apareció y desapareció dentro de su intervalo de sondeo.
Recibo demasiadas alertas de falsos positivos
Utilice un selector de CSS. Alcance el monitor solo para el contenido que le interesa:
{ "css_selector": "#pricing-table" }
Esto filtra los banners de cookies, las actualizaciones de anuncios, los cambios de marca de tiempo y otros ruidos.
Aumentar el intervalo. Si una página cambia con frecuencia pero a usted solo le importan los cambios significativos, un intervalo más largo reduce el ruido.
Comprueba si hay contenido dinámico. Algunos sitios incorporan tokens de sesión o nonces en el cuerpo de la página. Estos cambian en cada carga y siempre activarán una diferencia. Utilice un selector CSS para excluir el elemento afectado.
Mi monitor aparece como en pausa inesperadamente
Los monitores se pausan automáticamente en dos escenarios:
- Reducción de plan: redujo su plan y tiene más monitores activos de los que permite el nuevo límite. Vaya a Aplicación → Monitores, reanude los monitores que desea conservar y elimine o pausa el resto.
- Cuenta suspendida: un pago fallido puso su cuenta en espera. Resuelve el pago en App → Facturación para reactivarlo.
Una entrega fue enviada dos veces.
Las entregas duplicadas pueden ocurrir en escenarios poco comunes de falla de la red (la solicitud se entregó pero se perdió la confirmación, lo que provocó un reintento). Este es el comportamiento esperado.
Proteja su controlador con una clave de deduplicación 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 Mejores prácticas para obtener más información sobre la idempotencia.
No puedo verificar la firma del webhook
- Asegúrese de calcular el HMAC sobre los bytes del cuerpo de la solicitud sin procesar, no sobre el JSON analizado.
- El secreto de firma está en Aplicación → Configuración → Claves API
- Después de rotar su secreto, actualice su implementación antes de que se revoque el secreto anterior.
Consulte Verificar firmas para ver ejemplos completos de implementación.
¿Sigues estancado?
Si nada de lo anterior resuelve su problema, envíe un correo electrónico a support@diffhook.com con:
- Su ID de equipo (visible en la URL del panel)
- El ID o URL del monitor
- El ID de entrada del registro si falló una entrega
- Una descripción del comportamiento esperado frente al real.