Skip to content

Notificaciones

El NotificationService es la abstraccion de primera clase de Triggerfish para entregar notificaciones al propietario del agente a traves de todos los canales conectados.

Por que un Servicio de Notificaciones?

Sin un servicio dedicado, la logica de notificacion tiende a dispersarse por el codigo -- cada funcionalidad implementando su propio patron de "notificar al propietario". Esto lleva a comportamiento inconsistente, notificaciones perdidas y duplicados.

Triggerfish centraliza toda la entrega de notificaciones a traves de un solo servicio que maneja prioridad, encolamiento y deduplicacion.

Como Funciona

Enrutamiento de notificaciones: las fuentes fluyen a traves de NotificationService con enrutamiento por prioridad, encolamiento y deduplicacion hacia canales

Cuando cualquier componente necesita notificar al propietario -- un cron job completandose, un trigger detectando algo importante, un webhook disparandose -- llama al NotificationService. El servicio determina como y donde entregar la notificacion.

Interfaz

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

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

  /** Confirmar una notificacion como entregada. */
  acknowledge(notificationId: string): Promise<void>;
}

Niveles de Prioridad

Cada notificacion lleva una prioridad que afecta el comportamiento de entrega:

PrioridadComportamiento
criticalEntregada inmediatamente a todos los canales conectados. Evita horas de silencio.
normalEntregada al canal preferido. Encolada si el usuario esta offline.
lowEncolada y entregada en lotes. Puede ser resumida.

Opciones de Entrega

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

Encolamiento y Entrega Offline

Cuando el usuario destino esta offline o no hay canales conectados, las notificaciones se encolan. Se entregan cuando:

  • El usuario inicia una nueva sesion.
  • Un canal se reconecta.
  • El usuario solicita explicitamente las notificaciones pendientes.

Las notificaciones pendientes pueden recuperarse con getPending() y confirmarse con acknowledge().

Deduplicacion

El NotificationService previene que notificaciones duplicadas lleguen al usuario. Si el mismo contenido de notificacion se entrega multiples veces dentro de una ventana, solo la primera entrega se realiza.

Configuracion

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 usan en todo el sistema:

  • Los cron jobs notifican al propietario cuando una tarea programada se completa o falla.
  • Los triggers notifican al propietario cuando el monitoreo detecta algo que necesita atencion.
  • Los webhooks notifican al propietario cuando un evento externo se dispara (PR de GitHub, alerta de Sentry).
  • Las violaciones de politica notifican al propietario cuando se intenta una accion bloqueada.
  • El estado de canal notifica al propietario cuando un canal se desconecta o reconecta.

La cola de notificaciones se persiste via StorageProvider (namespace:

notifications:) con una retencion predeterminada de 7 dias despues de la entrega. Las notificaciones no entregadas se retienen hasta que se confirmen.