Saltar al contenido principal

Webhooks

Los webhooks envían una petición HTTP POST con un cuerpo JSON a cualquier URL que configures. Son la forma más flexible de integrar StatusInspector con sistemas propios, plataformas de automatización (Zapier, Make) o herramientas de gestión de incidentes.


Crear un canal Webhook

  1. En el panel, ve a Alertas → Canales → Crear canal.
  2. Selecciona Webhook (URL propia).
  3. Introduce la URL de destino.
  4. (Opcional) Configura un Secret para firmar las peticiones.
  5. Guarda y envía una alerta de prueba.

Estructura del payload

Cada alerta envía un POST con Content-Type: application/json y este cuerpo:

{
"schema_version": 1,
"event_type": "down",
"monitor_name": "API Producción",
"monitor_type": "http",
"monitor_target": "https://api.mi-empresa.com/health",
"triggered_at": "2026-05-14 10:30:00",
"status": "down",
"message": "El monitor API Producción está caído.",
"multi_region_summary": "2/3 regiones reportaron fallo",
"branding": {
"product_name": "Status Inspector",
"product_logo_url": "https://panel.ejemplo.com/images/logo-light.png"
},
"diagnostic": {
"http_code": 503,
"error_code": "http_unexpected_code",
"error_message": "Código HTTP 503 inesperado.",
"latency_ms": 1200,
"degraded_reason": null
}
}

Tipos de evento (event_type)

ValorCuándo se envía
downEl monitor pasa a DOWN.
recoveryEl monitor se recupera a UP desde DOWN.
degradedEl monitor pasa a DEGRADED.
degraded_recoveryEl monitor sale de DEGRADED.
ssl_expiringCertificado SSL próximo a vencer.
ssl_expiredCertificado SSL expirado.
maintenance_startedMonitor entra en mantenimiento.
maintenance_endedMonitor sale de mantenimiento.
testPrueba manual de canal.

Campos de nivel superior adicionales

CampoDescripción
multi_region_summaryResumen en texto del consenso multi-región (ej. "2/3 regiones reportaron fallo"). null en planes con una sola región.
multi_regionArray con el resultado detallado por sonda/región. Presente cuando el plan incluye múltiples probes.
brandingMarca del producto: product_name (siempre «Status Inspector») y product_logo_url (URL absoluta de logo-light.png en el panel; null si backendUrl no está configurado).

Objeto diagnostic

Contiene el detalle técnico del último check. Todos los campos son opcionales (pueden ser null cuando no aplican al tipo de monitor o al evento):

CampoCuándo apareceDescripción
http_codeHTTPCódigo HTTP de la respuesta (ej. 503).
http_methodHTTPMétodo HTTP de la petición (ej. GET).
error_codeTodosCódigo corto del tipo de error (ej. connection_timeout).
error_messageTodosDescripción legible del error.
latency_msTodosLatencia en milisegundos del check.
degraded_reasonHTTP, HeartbeatCausa del estado DEGRADED.
resolved_ipDNS, Ping, TCPIP resuelta del host monitorizado.
dns_answerDNSRespuesta completa de la consulta DNS.
ssl_not_afterSSL, HTTPFecha de expiración del certificado TLS (ISO 8601).
ssl_expiry_tier_daysSSL expiringUmbral de días que activó la alerta (30, 14 o 7).
ssl_days_remainingSSL expiringDías restantes hasta la expiración en el momento del check.
recovery_duration_secondsRecoveryDuración del incidente en segundos.
recovery_duration_humanRecoveryDuración en formato legible (ej. "5,2 min").
recovery_duration_started_atRecoveryISO 8601 UTC — inicio del periodo de caída.
recovery_duration_ended_atRecoveryISO 8601 UTC — fin del periodo de caída (resolución).

Verificación de la firma (seguridad)

Si configuras un Secret en el canal, cada petición incluye el header:

X-Uptimeweb-Signature: <hmac-sha256-hex>

La firma es el HMAC-SHA256 del cuerpo JSON exacto enviado, usando el Secret como clave. Verifica la firma en tu servidor para confirmar que la petición proviene de StatusInspector.

Ejemplo de verificación en PHP

$secret = 'tu-secret-configurado';
$body = file_get_contents('php://input');
$signature = hash_hmac('sha256', $body, $secret);

if (!hash_equals($_SERVER['HTTP_X_UPTIMEWEB_SIGNATURE'] ?? '', $signature)) {
http_response_code(401);
exit;
}

Compatibilidad hacia atrás

El esquema v1 garantiza que solo se añadirán campos opcionales nuevos. Los campos existentes no se eliminarán ni renombrarán sin incrementar schema_version.


Relacionado