Notification channels

Channels decide where alerts go. They are stored encrypted in the database (not in appsettings) so credentials stay protected.

Supported channels

  • Email – via Office 365 / Microsoft Graph (client-credentials flow), falling back to plain SMTP.
  • Microsoft Teams – via incoming webhook (Adaptive/MessageCard).
  • PagerDuty – Events API v2, including acknowledge/resolve when an alert resolves.

Routing by severity

Each channel is mapped to one or more severities – e.g. warnings by email only, critical also to Teams and PagerDuty. See Alerts & hysteresis for how this works with rules.

Language

Settings → Notifications → Language of notifications decides which language everything this application sends out is written in — alert mails, Teams cards, PagerDuty payloads and the scheduled reports: German, English or system default. A report and an alert land in the same mailbox, and nobody wants them in two languages.

It is deliberately separate from the UI language. The interface follows each user's browser; a notification is produced by a background service, which has no session and therefore no language to inherit. System default means the locale of the account the service runs as — and German if that is neither German nor English.

The test buttons on the same page send in exactly that language, so a test shows what will actually land in the mailbox.

Three things are deliberately not translated:

  • Numbers and timestamps are treated differently: numbers follow the language (91,50 against 91.50), timestamps are always YYYY-MM-DD HH:MM:SS UTC — unambiguous in either language and readable next to a log file.
  • Messages from the server, such as an error-log line: that is the wording people search for.
  • The field names in the PagerDuty payload (server, rule, severity, …). PagerDuty event rules and any attached webhook match on those; only the prose inside is translated.

The same applies to reports in three further places: the preview under Reports → Scheduled reports shows the language of the mail rather than of the browser, query text and error-log messages stay in the original, and the Recovery column names the models the way SQL Server names them (SIMPLE, FULL).

If messages don't arrive: check whether a silence window is active and whether the channel is mapped to the severity.