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
- En el panel, ve a Alertas → Canales → Crear canal.
- Selecciona Webhook (URL propia).
- Introduce la URL de destino.
- (Opcional) Configura un Secret para firmar las peticiones.
- 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)
| Valor | Cuándo se envía |
|---|---|
down | El monitor pasa a DOWN. |
recovery | El monitor se recupera a UP desde DOWN. |
degraded | El monitor pasa a DEGRADED. |
degraded_recovery | El monitor sale de DEGRADED. |
ssl_expiring | Certificado SSL próximo a vencer. |
ssl_expired | Certificado SSL expirado. |
maintenance_started | Monitor entra en mantenimiento. |
maintenance_ended | Monitor sale de mantenimiento. |
test | Prueba manual de canal. |
Campos de nivel superior adicionales
| Campo | Descripción |
|---|---|
multi_region_summary | Resumen en texto del consenso multi-región (ej. "2/3 regiones reportaron fallo"). null en planes con una sola región. |
multi_region | Array con el resultado detallado por sonda/región. Presente cuando el plan incluye múltiples probes. |
branding | Marca 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):
| Campo | Cuándo aparece | Descripción |
|---|---|---|
http_code | HTTP | Código HTTP de la respuesta (ej. 503). |
http_method | HTTP | Método HTTP de la petición (ej. GET). |
error_code | Todos | Código corto del tipo de error (ej. connection_timeout). |
error_message | Todos | Descripción legible del error. |
latency_ms | Todos | Latencia en milisegundos del check. |
degraded_reason | HTTP, Heartbeat | Causa del estado DEGRADED. |
resolved_ip | DNS, Ping, TCP | IP resuelta del host monitorizado. |
dns_answer | DNS | Respuesta completa de la consulta DNS. |
ssl_not_after | SSL, HTTP | Fecha de expiración del certificado TLS (ISO 8601). |
ssl_expiry_tier_days | SSL expiring | Umbral de días que activó la alerta (30, 14 o 7). |
ssl_days_remaining | SSL expiring | Días restantes hasta la expiración en el momento del check. |
recovery_duration_seconds | Recovery | Duración del incidente en segundos. |
recovery_duration_human | Recovery | Duración en formato legible (ej. "5,2 min"). |
recovery_duration_started_at | Recovery | ISO 8601 UTC — inicio del periodo de caída. |
recovery_duration_ended_at | Recovery | ISO 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.