Skip to content

Notifiche ​

Il NotificationService è l'astrazione di prima classe di Triggerfish per la consegna delle notifiche al proprietario dell'agent attraverso tutti i canali connessi.

Perché un Servizio di Notifica? ​

Senza un servizio dedicato, la logica delle notifiche tende a sparpagliarsi nel codebase -- ogni funzionalità implementa il proprio pattern "notifica il proprietario". Questo porta a comportamenti incoerenti, notifiche mancate e duplicati.

Triggerfish centralizza tutta la consegna delle notifiche attraverso un singolo servizio che gestisce priorità, accodamento e deduplicazione.

Come Funziona ​

Routing delle notifiche: le fonti fluiscono attraverso il NotificationService con routing per priorità, accodamento e deduplicazione verso i canali

Quando qualsiasi componente ha bisogno di notificare il proprietario -- un cron job che si completa, un trigger che rileva qualcosa di importante, un webhook che si attiva -- chiama il NotificationService. Il servizio determina come e dove consegnare la notifica.

Interfaccia ​

typescript
interface NotificationService {
  /** Consegnare o accodare una notifica per un utente. */
  deliver(options: DeliverOptions): Promise<void>;

  /** Ottenere le notifiche pendenti (non consegnate) per un utente. */
  getPending(userId: UserId): Promise<Notification[]>;

  /** Confermare una notifica come consegnata. */
  acknowledge(notificationId: string): Promise<void>;
}

Livelli di Priorità ​

Ogni notifica porta una priorità che influenza il comportamento di consegna:

PrioritàComportamento
criticalConsegnata immediatamente a tutti i canali connessi. Ignora le ore di silenzio.
normalConsegnata al canale preferito. Accodata se l'utente è offline.
lowAccodata e consegnata in batch. Potrebbe essere riassunta.

Opzioni di Consegna ​

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

Accodamento e Consegna Offline ​

Quando l'utente target è offline o nessun canale è connesso, le notifiche vengono accodate. Vengono consegnate quando:

  • L'utente avvia una nuova sessione.
  • Un canale si riconnette.
  • L'utente richiede esplicitamente le notifiche pendenti.

Le notifiche pendenti possono essere recuperate con getPending() e confermate con acknowledge().

Deduplicazione ​

Il NotificationService previene le notifiche duplicate dal raggiungere l'utente. Se lo stesso contenuto di notifica viene consegnato più volte all'interno di una finestra, solo la prima consegna viene effettuata.

Configurazione ​

Configurare il comportamento delle notifiche in triggerfish.yaml:

yaml
notifications:
  preferred_channel: telegram # Canale di consegna predefinito
  quiet_hours: "22:00-07:00" # Sopprimere normal/low durante queste ore
  batch_interval: 15m # Raggruppare le notifiche a bassa priorità

Esempi di Utilizzo ​

Le notifiche sono utilizzate in tutto il sistema:

  • I cron job notificano il proprietario quando un'attività programmata si completa o fallisce.
  • I trigger notificano il proprietario quando il monitoraggio rileva qualcosa che richiede attenzione.
  • I webhook notificano il proprietario quando un evento esterno si attiva (PR GitHub, allerta Sentry).
  • Le violazioni delle policy notificano il proprietario quando viene tentata un'azione bloccata.
  • Lo stato dei canali notifica il proprietario quando un canale si disconnette o si riconnette.

La coda delle notifiche è persistita tramite StorageProvider

(namespace: notifications:) con una conservazione predefinita di 7 giorni dopo la consegna. Le notifiche non consegnate vengono conservate fino alla conferma. :::