Enviar alertas AlertHub desde Node.js, Python y PHP

Enviar alertas AlertHub desde Node.js, Python y PHP

Si tu app puede hacer un HTTPS POST, puede alertar. No necesitas un SDK de Slack de cada vendor en cada servicio. Apunta todos los lenguajes a la misma API de ingestión: POST https://api.thealerthub.com/sendAlert.

Guarda el secreto del proyecto en variables de entorno. Nunca lo embarques en un bundle de navegador — esa clave escribe alertas.

Solo warning y critical llegan a Slack, Telegram y el resto. info es solo panel. Niveles.

Configuración (una sola vez)

  1. Crea un proyecto en app.thealerthub.com.
  2. Pon ALERTHUB_KEY en el entorno del servidor.
  3. Conecta al menos un destino y ejecuta un snippet de abajo.

Los placeholders ({{user.id}}) funcionan si envías campos JSON extra. Detalles: constructor de webhooks.

Node.js (fetch nativo)

const ALERTHUB_URL = 'https://api.thealerthub.com/sendAlert';

export async function sendAlert({ title, description, level = 'warning', source = 'api' }) {
  const res = await fetch(ALERTHUB_URL, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      ah_key: process.env.ALERTHUB_KEY,
      ah_title: title,
      ah_description: description,
      ah_level: level,
      ah_source: source,
    }),
  });
  if (!res.ok) throw new Error(`AlertHub ${res.status}`);
  return res.json();
}

// await sendAlert({ title: 'Queue depth', description: 'jobs=900', level: 'critical' });

Úsalo desde handlers de error de Express, workers y GitHub Actions (curl vale en el YAML; Node es para la propia app).

Python (requests)

import os
import requests

ALERTHUB_URL = "https://api.thealerthub.com/sendAlert"

def send_alert(title, description, level="warning", source="api"):
    r = requests.post(
        ALERTHUB_URL,
        json={
            "ah_key": os.environ["ALERTHUB_KEY"],
            "ah_title": title,
            "ah_description": description,
            "ah_level": level,
            "ah_source": source,
        },
        timeout=10,
    )
    r.raise_for_status()
    return r.json()

Llámalo desde Django/except, handlers de fallo de Celery o middleware de FastAPI. No bloquees el request path en una red lenta sin timeout (arriba va uno).

PHP (cURL)

<?php
function alerthub_send(string $title, string $description, string $level = 'warning', string $source = 'api'): void {
    $payload = json_encode([
        'ah_key' => getenv('ALERTHUB_KEY'),
        'ah_title' => $title,
        'ah_description' => $description,
        'ah_level' => $level,
        'ah_source' => $source,
    ]);
    $ch = curl_init('https://api.thealerthub.com/sendAlert');
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
        CURLOPT_POSTFIELDS => $payload,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
    ]);
    $body = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($body === false || $code >= 400) {
        error_log('AlertHub failed: ' . $code);
    }
}

Los sitios WordPress que necesitan más que hooks pueden seguir usando el plugin para add_action, y este snippet para plugins propios.

Ideas para sacarle más partido

  • Envuélvelo una vez. Un helper por repo gana a copiar y pegar en 12 workers.
  • Cron sin lenguaje. Guía bash y uptime.
  • n8n / Zapier cuando el evento está en un SaaS, no en tu código. n8n.

Preguntas frecuentes

¿Hay paquete oficial npm/PyPI/Composer?
La integración estable es HTTP a api.thealerthub.com. Usa los snippets de arriba.

¿Query string en vez de JSON?
Soportado. JSON es más cómodo para {{placeholders}} anidados.

¿Puede llamarlo el navegador?
No expongas ah_key a visitantes. Envía desde el backend.

Siguientes pasos

Mete un helper en tu API, dispara un warning y confirma el panel y Telegram.

Relacionado: API de ingestión · GitHub Actions