Guías›Recibir webhooks

Recibir webhooks

Cuando DiffHook detecta un cambio, envía un HTTP POST a la URL de entrega resuelta: por monitor notification_config.webhook_url si está configurado; de lo contrario, el webhook predeterminado de su espacio de trabajo desde Integraciones. El cuerpo JSON a continuación es la carga útil que envía DiffHook (no la configuración del monitor).

Carga útil del 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 — …"
}

Referencia de campo

event: siempre page.changed para eventos de cambio de contenido.

monitor_id: ID del monitor que desencadenó el evento.

url: la URL monitoreada para este evento.

triggered_at: marca de tiempo ISO 8601 de cuando se detectó el cambio.

content: el contenido de la nueva página después del cambio (texto normalizado/extraído utilizado para el monitoreo, igual que la instantánea que DiffHook diferenció de la versión anterior).

Garantías de entrega

  • En cada cambio detectado, DiffHook realiza una POST HTTP inmediata. Si eso falla (no 2xx, error de red o tiempo de espera), programa hasta 10 intentos más: 11 intentos de entrega en total si su punto final nunca tiene éxito.
  • El retraso entre intentos es exponencial en minutos: después de cada error, el siguiente intento es elegible después de 1, 2, 4, 8, 16, 32, 64, 128, 256 y luego 512 minutos (cada retraso es el doble del anterior). Los reintentos se realizan aproximadamente una vez por minuto, por lo que el tiempo no es preciso en menos de un segundo.
  • Una entrega se considera exitosa cuando su punto final devuelve 2xx en 10 segundos.
  • Una vez utilizados todos los intentos, la entrega se detiene; la fila en Aplicación → Registros muestra failed o exhausted según el estado del canal.

Responder a webhooks

Su punto final debería devolver 200 OK lo más rápido posible. Procese la carga útil de forma asincrónica:

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

Comportamiento de reintento

IntentoCuando se ejecuta
1ºInmediatamente cuando se detecta el cambio
2do≥ 1 minuto después del primer fallo
3º≥ 2 minutos después del segundo fallo
4to≥ 4 minutos después del tercer fallo
5to≥ 8 minutos después del 4º fallo
6to≥ 16 minutos después del quinto fallo
7mo≥ 32 minutos después del sexto fallo
8vo≥ 64 minutos (~1 h) después del séptimo fallo
9no≥ 128 minutos (~2 h) después del octavo fallo
10mo≥ 256 minutos (~4 h) después del noveno fallo
11≥ 512 minutos (~8,5 h) después del décimo fallo

Después de 11 intentos fallidos (1 inicial + 10 reintentos), no se ejecutarán más entregas automáticas para ese evento. Arregle su punto final y use Activar ahora en el monitor si necesita otro disparo.