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)
- Crea un proyecto en app.thealerthub.com.
- Pon
ALERTHUB_KEYen el entorno del servidor. - 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