Canales de alerta

Autenticación
La clave de API se envía como token Bearer en la cabecera Authorization de la petición. Obtén tu clave de API.
Listar

Dirección de la API

GET
https://api.monitoraweb.com/v1/alert-channels

Ejemplo de petición

curl --location --request GET 'https://api.monitoraweb.com/v1/alert-channels' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {api_key}'

Parámetros

Nombre
Tipo
Descripción
search
opcional string
Texto de búsqueda.
search_by
opcional string
Buscar por. Valores posibles: name para Nombre. Por omisión: name.
type
opcional string
Tipo. Valores posibles: email, sms, phone_call, webhook, slack, teams, discord, flock, telegram, mattermost, googlechat, pushover, pagerduty, whatsapp, web_push, mobile_push.
sort_by
opcional string
Ordenar por. Valores posibles: id para Fecha de creación, name para Nombre. Por omisión: id.
sort
opcional string
Orden. Valores posibles: desc para Descendente, asc para Descendente. Por omisión: desc.
per_page
opcional integer
Resultados por página. Valores posibles: 10, 25, 50, 100. Por omisión: 10.
Ver

Dirección de la API

GET
https://api.monitoraweb.com/v1/alert-channels/{id}

Ejemplo de petición

curl --location --request GET 'https://api.monitoraweb.com/v1/alert-channels/{id}' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {api_key}'
Crear

Dirección de la API

POST
https://api.monitoraweb.com/v1/alert-channels

Ejemplo de petición

curl --location --request POST 'https://api.monitoraweb.com/v1/alert-channels' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Bearer {api_key}' \
--data-urlencode 'name={name}' \
--data-urlencode 'type={type}' \
--data-urlencode 'value={value}'

Parámetros

Nombre
Tipo
Descripción
name
obligatorio string
Nombre.
type
obligatorio string
Tipo. Valores posibles: email para Correo, sms para SMS, phone_call para Llamada, webhook para Webhook, slack para Slack, teams para Microsoft Teams, discord para Discord, telegram para Telegram, whatsapp para WhatsApp, mobile_push para Mobile app.
value[email]
opcional string
Correo.
value[phone]
opcional string
Teléfono.
value[webhook_url]
opcional string
Dirección del webhook.
value[slack_url]
opcional string
Dirección del webhook de Slack.
value[discord_url]
opcional string
Dirección del webhook de Discord.
value[teams_url]
opcional string
Dirección del webhook de Microsoft Teams.
value[telegram_token]
opcional string
Token de Telegram.
value[telegram_chat_id]
opcional string
ID de chat de Telegram.
Actualizar

Dirección de la API

PUT PATCH
https://api.monitoraweb.com/v1/alert-channels/{id}

Ejemplo de petición

curl --location --request PUT 'https://api.monitoraweb.com/v1/alert-channels/{id}' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Bearer {api_key}'

Parámetros

Nombre
Tipo
Descripción
name
opcional string
Nombre.
type
opcional string
Tipo. Valores posibles: email para Correo, sms para SMS, phone_call para Llamada, webhook para Webhook, slack para Slack, teams para Microsoft Teams, discord para Discord, telegram para Telegram, whatsapp para WhatsApp, mobile_push para Mobile app.
value[email]
opcional string
Correo.
value[phone]
opcional string
Teléfono.
value[webhook_url]
opcional string
Dirección del webhook.
value[slack_url]
opcional string
Dirección del webhook de Slack.
value[discord_url]
opcional string
Dirección del webhook de Discord.
value[teams_url]
opcional string
Dirección del webhook de Microsoft Teams.
value[telegram_token]
opcional string
Token de Telegram.
value[telegram_chat_id]
opcional string
ID de chat de Telegram.
Eliminar

Dirección de la API

DELETE
https://api.monitoraweb.com/v1/alert-channels/{id}

Ejemplo de petición

curl --location --request DELETE 'https://api.monitoraweb.com/v1/alert-channels/{id}' \
--header 'Authorization: Bearer {api_key}'
Comprobar los avisos por webhook

Cada aviso que mandamos a un canal webhook va firmado. La dirección que lo recibe es pública, así que cualquiera que la vea en un registro o en una captura podría mandarle una caída falsa. Comprobar la firma te dice que el aviso salió de nosotros, que nadie lo tocó por el camino y que no es uno viejo reenviado.

Cabeceras que mandamos

X-MonitoraWeb-Timestamp: 1758402000
X-MonitoraWeb-Signature: 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

Cómo se construye la firma

signature = HMAC_SHA256(signing_secret, timestamp + "." + raw_request_body)

Tu secreto de firma está en la pantalla del canal de aviso, y en el campo signing_secret de esta API. Firma el cuerpo crudo tal y como llegó: volver a codificar el JSON cambia los bytes y la firma ya no cuadra.

Ejemplo en PHP

$cuerpo    = file_get_contents('php://input');
$instante  = $_SERVER['HTTP_X_MONITORAWEB_TIMESTAMP'] ?? '';
$firma     = $_SERVER['HTTP_X_MONITORAWEB_SIGNATURE'] ?? '';
$secreto   = '{signing_secret}';

// Un aviso viejo reenviado no vale, aunque la firma cuadre.
if (abs(time() - (int) $instante) > 300) {
    http_response_code(400);
    exit;
}

$esperada = hash_hmac('sha256', $instante . '.' . $cuerpo, $secreto);

if (! hash_equals($esperada, $firma)) {
    http_response_code(401);
    exit;
}

Firmamos de nuevo en cada intento, así que un reintento que llegue una hora después sigue pasando la comprobación de frescura. Rotar el secreto surte efecto al momento: los avisos que ya estén en la cola salen con el secreto con el que se encolaron.