Skip to content

Varsler

NotificationService er Triggerfish sin førsteklasses abstraksjon for å levere varsler til agentens eier på tvers av alle tilkoblede kanaler.

Hvorfor en varslingstjeneste?

Uten en dedikert tjeneste har varslingslogikk en tendens til å spre seg i koden — hver funksjon implementerer sitt eget «varsle eieren»-mønster. Dette fører til inkonsistent atferd, tapte varsler og duplikater.

Triggerfish sentraliserer all varslingslevering gjennom en enkelt tjeneste som håndterer prioritet, køing og deduplicering.

Slik fungerer det

Notification routing: sources flow through NotificationService with priority routing, queuing, and deduplication to channels

Når en komponent trenger å varsle eieren — en cron-jobb som fullføres, en trigger som oppdager noe viktig, en webhook som utløses — kaller den NotificationService. Tjenesten bestemmer hvordan og hvor varslet leveres.

Grensesnitt

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>;
}

Prioritetsnivåer

Hvert varsel bærer en prioritet som påvirker leveringsatferden:

PrioritetAtferd
criticalLeveres umiddelbart til alle tilkoblede kanaler. Omgår stille-timer.
normalLeveres til den foretrukne kanalen. Køes hvis brukeren er frakoblet.
lowKøes og leveres i samlinger. Kan oppsummeres.

Leveringsalternativer

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

Køing og frakoblet levering

Når målbrukeren er frakoblet eller ingen kanaler er tilkoblet, køes varsler. De leveres når:

  • Brukeren starter en ny sesjon.
  • En kanal kobler til igjen.
  • Brukeren eksplisitt ber om ventende varsler.

Ventende varsler kan hentes med getPending() og bekreftes med acknowledge().

Deduplicering

NotificationService forhindrer at dupliserte varsler når brukeren. Hvis det samme varselinnholdet leveres flere ganger innenfor et tidsvindu, går bare den første leveringen gjennom.

Konfigurasjon

Konfigurer varslingsatferd i triggerfish.yaml:

yaml
notifications:
  preferred_channel: telegram # Standard leveringskanal
  quiet_hours: "22:00-07:00" # Undertrykk normal/lav i disse timene
  batch_interval: 15m # Saml lavprioritets-varsler

Brukseksempler

Varsler brukes gjennom hele systemet:

  • Cron-jobber varsler eieren når en planlagt oppgave fullføres eller feiler.
  • Triggers varsler eieren når overvåking oppdager noe som trenger oppmerksomhet.
  • Webhooks varsler eieren når en ekstern hendelse utløses (GitHub PR, Sentry-varsel).
  • Policy-brudd varsler eieren når en blokkert handling forsøkes.
  • Kanalstatus varsler eieren når en kanal kobles fra eller tilkobles igjen.

Varselskøen er vedvarende via StorageProvider (navnerom:

notifications:) med standard oppbevaring på 7 dager etter levering. Uleverte varsler beholdes inntil de bekreftes. :::