Static Documentation

Notification channels

Version latest · Updated 2026-09-17
Interactive docs View on GitHub

Notification channels#

A channel is an outgoing notification target. Channels do not receive alerts directly and do not have intake tokens.

Incoming alert -> Route -> Notification channels

A route can have one or more channels. When an alert is created or updated, IncidentRelay checks every channel attached to the matched route.

Browser push is profile-level

Browser push is not a channel type. Users enable browser/PWA push in Profile, and alerts are sent to active browser push devices of the assigned user.

Browser push does not need a route-channel binding. Read more: Browser Push.

Delivery checks#

For each channel IncidentRelay checks:

1. Is the channel enabled?
2. Is the channel attached to the matched route?
3. Does notify_on_severities allow this alert severity?
4. Does the notifier have all required channel or global settings?
5. Does the assigned user have the required contact field, if the channel needs one?

Supported channel types#

TypeRequired channel configUser profile requirementGlobal config requirement
mattermostWebhook URL or Bot API settingsOptional Mattermost user ID for user attributionpublic_base_url for buttons
telegrambot_token, chat_idTelegram user ID for actionsOptional Telegram proxy
emailOptional html_templateAssigned user must have emailSMTP settings
slackWebhook mode: webhook_url; Bot API: bot_token, channel_id, and either signing_secret or app_tokenOptional Slack user ID for action attributionPublic HTTPS endpoint for HTTP actions, or Slack worker for Socket Mode
larkwebhook_url, optional signing_secretNoneNone
discordwebhook_urlNoneNone
teamswebhook_urlNoneNone
webhookwebhook_urlNoneNone
voice_callOptional notification policyAssigned user must have phoneVoice provider settings

Severity filter#

Every channel can limit which severities it receives using the canonical notify_on_severities key in channel config.

Example:

{
  "notify_on_severities": ["critical", "high"]
}

If notify_on_severities is missing or empty, the channel receives all alert severities attached to its route.

Use canonical severity names:

critical
high
medium
warning
low
info

IncidentRelay normalizes common incoming severity aliases before comparing them with the filter.

Incoming valueNormalized value
crit, error, fatal, disastercritical
avg, averagemedium
warnwarning
information, informational, not_classified, not classifiedinfo

Do not use old or channel-specific severity fields such as severities or call_on_severities. Use notify_on_severities for every channel type.

Notification updates#

Some channels can update an existing notification after ACK, Resolve, Shelve or Unshelve.

ChannelSupports updatesNotes
Mattermost Bot APIYesRequires Bot API mode
Slack Bot APIYesRequires stored Slack channel/message metadata
TelegramYesRequires stored Telegram message metadata and polling for actions
EmailNoNew email can be sent for notification events
Voice callNoCalls are one-way notifications
Feishu/Lark, Slack incoming webhook, Discord, Teams, generic webhookNoWebhook delivery creates new messages and cannot update the original notification

Channel-specific pages#

Troubleshooting#

Channel is not called for a real alert#

Check:

  • The alert has a route_id.
  • The channel is attached to that route.
  • The channel is enabled.
  • The alert is not silenced.
  • The channel severity filter allows the alert severity.
  • The assigned user has required contact data, such as email or phone.

Test works but real alert does not#

A channel test bypasses some of the real alert routing path.

Real alerts still require:

route match -> route channel binding -> allowed severity -> assignee contact data

For browser push, the check is different:

alert assignee -> assignee has active browser push subscription

Browser push test sends to the current profile user. Real alert push sends to the assigned user.

Logs show notification sent, but the user did not receive it#

notification sent means IncidentRelay handed the message to the external provider or SMTP relay without an exception. It does not guarantee final mailbox, chat or phone delivery. Check the downstream provider logs as well.