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,50against91.50), timestamps are alwaysYYYY-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.