Skip to content

Benachrichtigungen

Der NotificationService ist Triggerfishs erstklassige Abstraktion fuer die Zustellung von Benachrichtigungen an den Agenten-Eigentuemer ueber alle verbundenen Kanaele.

Warum ein Benachrichtigungsdienst?

Ohne einen dedizierten Dienst verstreut sich Benachrichtigungslogik ueblicherweise ueber die Codebasis -- jedes Feature implementiert sein eigenes "Eigentuemer-benachrichtigen"-Muster. Dies fuehrt zu inkonsistentem Verhalten, verpassten Benachrichtigungen und Duplikaten.

Triggerfish zentralisiert alle Benachrichtigungszustellung ueber einen einzigen Dienst, der Prioritaet, Warteschlangen und Deduplizierung verwaltet.

So funktioniert es

Benachrichtigungs-Routing: Quellen fliessen durch NotificationService mit Prioritaets-Routing, Warteschlangen und Deduplizierung zu Kanaelen

Wenn eine Komponente den Eigentuemer benachrichtigen muss -- ein Cron-Job abgeschlossen, ein Trigger etwas Wichtiges erkannt, ein Webhook ausgeloest -- ruft sie den NotificationService auf. Der Dienst bestimmt, wie und wohin die Benachrichtigung zugestellt wird.

Interface

typescript
interface NotificationService {
  /** Deliver or queue a notification for a user. */
  deliver(options: DeliverOptions): Promise<void>;

  /** Get pending (undelivered) notifications for a user. */
  getPending(userId: UserId): Promise<Notification[]>;

  /** Acknowledge a notification as delivered. */
  acknowledge(notificationId: string): Promise<void>;
}

Prioritaetsstufen

Jede Benachrichtigung traegt eine Prioritaet, die das Zustellverhalten beeinflusst:

PrioritaetVerhalten
criticalSofortige Zustellung an alle verbundenen Kanaele. Umgeht Ruhezeiten.
normalZustellung an den bevorzugten Kanal. Warteschlange, wenn Benutzer offline.
lowWarteschlange und Zustellung in Chargen. Kann zusammengefasst werden.

Zustelloptionen

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

Warteschlangen und Offline-Zustellung

Wenn der Zielbenutzer offline ist oder keine Kanaele verbunden sind, werden Benachrichtigungen in die Warteschlange gestellt. Sie werden zugestellt, wenn:

  • Der Benutzer eine neue Session startet.
  • Ein Kanal sich erneut verbindet.
  • Der Benutzer ausstehende Benachrichtigungen explizit anfordert.

Ausstehende Benachrichtigungen koennen mit getPending() abgerufen und mit acknowledge() bestaetigt werden.

Deduplizierung

Der NotificationService verhindert doppelte Benachrichtigungen an den Benutzer. Wenn derselbe Benachrichtigungsinhalt mehrfach innerhalb eines Fensters zugestellt wird, geht nur die erste Zustellung durch.

Konfiguration

Konfigurieren Sie das Benachrichtigungsverhalten in triggerfish.yaml:

yaml
notifications:
  preferred_channel: telegram # Standard-Zustellkanal
  quiet_hours: "22:00-07:00" # Normal/Low waehrend dieser Zeiten unterdruecken
  batch_interval: 15m # Niedrig-priorisierte Benachrichtigungen buendeln

Verwendungsbeispiele

Benachrichtigungen werden im gesamten System verwendet:

  • Cron-Jobs benachrichtigen den Eigentuemer, wenn eine geplante Aufgabe abgeschlossen ist oder fehlschlaegt.
  • Triggers benachrichtigen den Eigentuemer, wenn die Ueberwachung etwas erkennt, das Aufmerksamkeit erfordert.
  • Webhooks benachrichtigen den Eigentuemer, wenn ein externes Ereignis ausloest (GitHub-PR, Sentry-Alert).
  • Policy-Verletzungen benachrichtigen den Eigentuemer, wenn eine blockierte Aktion versucht wird.
  • Kanal-Status benachrichtigt den Eigentuemer, wenn ein Kanal sich trennt oder erneut verbindet.

Die Benachrichtigungswarteschlange wird ueber StorageProvider (Namensraum: notifications:) mit einer Standard-Aufbewahrung von 7 Tagen nach Zustellung persistiert. Nicht zugestellte Benachrichtigungen werden bis zur Bestaetigung aufbewahrt. :::