Skip to content

Notificaciones ​

El NotificationService es la abstracción de primera clase de Triggerfish para entregar notificaciones al propietario del agente a través de todos los canales conectados.

¿Por qué un servicio de notificaciones? ​

Sin un servicio dedicado, la lógica de notificación tiende a dispersarse por el código -- cada funcionalidad implementando su propio patrón de "notificar al propietario". Esto genera un comportamiento inconsistente, notificaciones perdidas y duplicados.

Triggerfish centraliza toda la entrega de notificaciones a través de un único servicio que gestiona prioridad, cola y deduplicación.

Cómo funciona ​

Enrutamiento de notificaciones: las fuentes fluyen a través del NotificationService con enrutamiento por prioridad, cola y deduplicación a los canales

Cuando cualquier componente necesita notificar al propietario -- un trabajo cron completado, un trigger detectando algo importante, un webhook activándose -- llama al NotificationService. El servicio determina cómo y dónde entregar la notificación.

Interfaz ​

typescript
interface NotificationService {
  /** Entregar o encolar una notificación para un usuario. */
  deliver(options: DeliverOptions): Promise<void>;

  /** Obtener notificaciones pendientes (no entregadas) para un usuario. */
  getPending(userId: UserId): Promise<Notification[]>;

  /** Confirmar la entrega de una notificación. */
  acknowledge(notificationId: string): Promise<void>;
}

Niveles de prioridad ​

Cada notificación lleva una prioridad que afecta al comportamiento de entrega:

PrioridadComportamiento
criticalSe entrega inmediatamente a todos los canales conectados. Elude horas de silencio.
normalSe entrega al canal preferido. Se encola si el usuario está desconectado.
lowSe encola y se entrega en lotes. Puede resumirse.

Opciones de entrega ​

typescript
interface DeliverOptions {
  readonly userId: UserId;
  readonly message: string;
  readonly priority: NotificationPriority; // "critical" | "normal" | "low"
}

Cola y entrega offline ​

Cuando el usuario destino está desconectado o no hay canales conectados, las notificaciones se encolan. Se entregan cuando:

  • El usuario inicia una nueva sesión.
  • Un canal se reconecta.
  • El usuario solicita explícitamente las notificaciones pendientes.

Las notificaciones pendientes se pueden recuperar con getPending() y confirmar con acknowledge().

Deduplicación ​

El NotificationService previene que notificaciones duplicadas lleguen al usuario. Si el mismo contenido de notificación se entrega múltiples veces dentro de una ventana, solo la primera entrega se realiza.

Configuración ​

Configure el comportamiento de notificaciones en triggerfish.yaml:

yaml
notifications:
  preferred_channel: telegram # Canal de entrega predeterminado
  quiet_hours: "22:00-07:00" # Suprimir normal/low durante estas horas
  batch_interval: 15m # Agrupar notificaciones de baja prioridad

Ejemplos de uso ​

Las notificaciones se utilizan en todo el sistema:

  • Trabajos cron notifican al propietario cuando una tarea programada se completa o falla.
  • Triggers notifican al propietario cuando la monitorización detecta algo que necesita atención.
  • Webhooks notifican al propietario cuando se activa un evento externo (PR de GitHub, alerta de Sentry).
  • Violaciones de política notifican al propietario cuando se intenta una acción bloqueada.
  • Estado de canal notifica al propietario cuando un canal se desconecta o reconecta.

La cola de notificaciones se persiste vía StorageProvider (espacio de nombres: notifications:) con una retención predeterminada de 7 días después de la entrega. Las notificaciones no entregadas se retienen hasta ser confirmadas. :::