Saltar al contenido

Notificaciones ​

Zenavo envía un correo a tu equipo cuando algo requiere atención, para que no tengas que tener la consola abierta, y puede publicar las mismas alertas en Slack, Discord, Telegram o tu propio webhook.

Eventos ​

EventoCuándo se envía
Deployment failedUn despliegue o una reversión no terminó. El correo indica si falló al compilar un servicio o al desplegarlo.
Server setup failedLa configuración o reinstalación de un servidor no terminó. El correo da el motivo y hasta cuándo se guardan las credenciales SSH para reintentarlo.
Service suspendedUn servicio se reinició más veces que su límite de fallos y se detuvo.
Server offlineUn servidor no respondió a 3 comprobaciones de estado seguidas (unos 3 minutos). Llega un segundo correo cuando vuelve a responder.
Disk or memory almost fullEl disco de un servidor supera el 90 %, o su memoria se mantiene por encima del 90 % durante 3 comprobaciones seguidas. Puede volver a avisar cuando el uso baja del 85 %.
New SSH login sourceUna dirección IP inició sesión por SSH en uno de los servidores del equipo por primera vez. Es normal si acabas de conectarte desde otra red; si no, es una señal de alarma.
Usage limitLa transferencia de imágenes del equipo llegó al 80 % o al 100 % de lo que permite el periodo de facturación. Al 100 %, los servidores dejan de descargar imágenes nuevas.

Cada alerta se envía como mucho una vez por hora para el mismo proyecto, servicio o servidor. Un corte breve de una o dos comprobaciones no envía nada.

Los correos de seguridad sobre tu propia cuenta (inicios de sesión desde dispositivos nuevos, inicios de sesión de la CLI aprobados, claves de API nuevas) se describen en Seguridad. Solo te llegan a ti, están activados por defecto para todos los roles y aparecen en Security en la página de notificaciones.

Quién los recibe ​

Los correos van a los miembros del equipo propietario del proyecto o del servidor:

  • Propietarios y administradores reciben todos los eventos hasta que los desactiven.
  • Miembros no reciben nada hasta que activen eventos.
  • Viewers nunca reciben notificaciones.

Elige tus eventos en Account settings → Notifications. La elección es por cuenta y se aplica a todos los equipos a los que perteneces.

Qué contiene un correo ​

El nombre del proyecto, servicio o servidor, la hora (UTC) y un enlace a él en la consola. Los correos nunca contienen valores de variables, secretos, comandos ni texto de registros. Abre la consola para leer los registros.

Canales ​

Los administradores del equipo también pueden enviar las notificaciones del equipo a aplicaciones de chat y webhooks: Account settings → Notifications → Team channels, para el equipo seleccionado en la barra lateral. Cada canal elige sus eventos; además de los de arriba, los canales pueden recibir Deployment succeeded (que nunca se envía por correo). Los canales reciben las mismas alertas que el correo, con el mismo límite de una por hora, y no dependen de los ajustes de correo de nadie.

CanalQué necesitas
SlackUna URL de webhook entrante del canal (https://hooks.slack.com/services/…).
DiscordUn webhook del canal: ajustes del canal → Integraciones → Webhooks (https://discord.com/api/webhooks/…).
TelegramUn token de bot de @BotFather y el ID del chat (un número como -1001234567890, o el @username de un canal público). Añade antes el bot al chat.
WebhookCualquier URL https://. Zenavo le envía JSON por POST, firmado (ver abajo).

Test envía un mensaje en el momento y muestra si llegó. Cada canal muestra su última entrega, o por qué falló; las entregas fallidas se reintentan tres veces en unos 13 minutos. Hasta 20 canales por equipo.

Las URL de webhook y los tokens de bot son secretos: se guardan cifrados y la consola solo muestra su host o chat. Zenavo solo envía a hosts cuyas direcciones son todas públicas, y no sigue redirecciones.

Contenido del webhook ​

json
{
  "type": "deploy_failed",
  "team_id": "team_…",
  "subject": "Deployment failed: shop",
  "text": "The deployment of project \"shop\" failed at 2026-10-19 08:12 UTC.\nIt failed while building service \"web\".\n",
  "url": "https://zenavo.app/projects/proj_…/deployments/job_…",
  "time": "2026-10-19T08:12:03Z"
}

type es uno de deploy_failed, deploy_succeeded, service_suspended, server_offline (también se envía cuando el servidor vuelve), server_resources, usage_limit o test. Cualquier respuesta 2xx cuenta como entregada.

Cada petición lleva X-Zenavo-Event, X-Zenavo-Timestamp (segundos Unix) y X-Zenavo-Signature: v1=<hex>, el HMAC-SHA256 de <timestamp>.<cuerpo sin procesar> con el secreto de firma del canal. El secreto (whsec_…) se muestra una vez al añadir el webhook; Edit no puede volver a mostrarlo, pero puedes rotarlo a través de la API. Verifica la firma sobre los bytes sin procesar y rechaza las marcas de tiempo antiguas:

js
import crypto from 'node:crypto'

function verify(rawBody, headers, secret) {
  const ts = headers['x-zenavo-timestamp']
  const expected = 'v1=' + crypto.createHmac('sha256', secret).update(`${ts}.${rawBody}`).digest('hex')
  const given = headers['x-zenavo-signature'] ?? ''
  const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300
  const a = Buffer.from(given), b = Buffer.from(expected)
  return fresh && a.length === b.length && crypto.timingSafeEqual(a, b)
}

Sin relación con Zeabur.