Dirección de la API
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
search
search_by
name para Nombre. Por omisión: name.
type
email, sms, phone_call, webhook, slack, teams, discord, flock, telegram, mattermost, googlechat, pushover, pagerduty, whatsapp, web_push, mobile_push.
sort_by
id para Fecha de creación, name para Nombre. Por omisión: id.
sort
desc para Descendente, asc para Descendente. Por omisión: desc.
per_page
10, 25, 50, 100. Por omisión: 10.
Dirección de la API
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}'
Dirección de la API
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
name
type
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]
value[phone]
value[webhook_url]
value[slack_url]
value[discord_url]
value[teams_url]
value[telegram_token]
value[telegram_chat_id]
Dirección de la API
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
name
type
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]
value[phone]
value[webhook_url]
value[slack_url]
value[discord_url]
value[teams_url]
value[telegram_token]
value[telegram_chat_id]
Dirección de la API
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}'
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.