Distribution channels
Channels are the destinations firings get delivered to. You define them once per workspace on the Alerts page, then attach any of them to any alert from that alert’s details page (the Delivers to section). While an alert is enabled, every firing goes to each of its attached, enabled channels.
Channels are admin-only, including viewing them: a member does not see the Distribution channels section or an alert’s Delivers to list.

Webhook
A webhook channel POSTs a JSON payload to an HTTPS URL you provide. You can
add request headers, for example an Authorization token your receiver
expects; header values are stored encrypted, are write-only, and are never
shown again, in the console or over MCP.
Every delivery sends one JSON body per firing:
{
"text": "Consistent Error Pattern: TimeoutError: model call exceeded 60s",
"alert_id": "01J9…",
"workspace_id": "01J8…",
"kind": "consistent_error_pattern",
"service": "support-bot",
"step": "llm.call",
"error": "TimeoutError: model call exceeded 60s",
"title": "TimeoutError: model call exceeded 60s",
"labels": { "service": "support-bot", "step": "llm.call" },
"occurrences": 14,
"runs": 5,
"first_seen": "2026-09-03T14:02:11Z",
"last_seen": "2026-09-03T15:27:40Z",
"sample_trace_ids": ["9f3a2c81…", "b04e11d9…"],
"url": "https://eu.console.rius-glassflow.com/…"
}text is a render-ready one-liner, so the same payload posts usefully to a
generic receiver and to chat webhooks. service, step, and error are
present when the detector attaches them, and labels carries the same
values plus any detector-specific keys such as tool or trace_id.
sample_trace_ids is a bounded sample (at most 10), never the complete
list; follow url for the full firing. For a Consistent Error Pattern
firing, that page lists every trace the firing counted, not only the sample.
Timestamps are RFC3339 in UTC.
An email channel sends each firing to every recipient on the channel: a designed HTML mail with a plain-text fallback, a deep link to the firing, and the firing’s age alongside its UTC timestamp.
Each recipient gets their own copy of the mail, so recipients don’t see each other’s addresses. Every mail has an unsubscribe link in its footer, and mail clients such as Gmail show their own Unsubscribe button for it. That button unsubscribes from this channel at once, without opening the page.
Unsubscribing
The unsubscribe link removes that address from that channel’s recipient list. It stops emails from that channel only: other email channels, other workspaces, and Slack and webhook channels are not affected. The footer says so next to the link.
- No Rius account needed. The link opens a page that names the address, the channel, and the workspace, and the recipient confirms with a button. Opening the page changes nothing.
- Unsubscribe from all. When the address is also on other email channels in the same workspace, the page offers Unsubscribe from all alert emails for that workspace, which removes it from every email channel there. It shows how many other channels the address is on, not their names.
- Admins stay in control. A workspace admin sees the address gone from the channel’s recipients and can add it back. An address that is added back gets mail again.
- The last recipient. If the last recipient unsubscribes, the channel is disabled and has no recipients. To turn it back on, an admin adds a recipient and then enables the channel.
Slack
Slack delivery uses the Rius Slack app, which you install into your Slack workspace once per Rius workspace:
- In the new channel dialog, choose Slack and click Add to Slack. Slack’s authorization page opens; the app requests permission to post messages and to list the channels you can pick from.
- Once the workspace is connected, name the channel and pick the Slack channel to post into. Public channels work as they are. For a private channel, invite the app in Slack first; Rius refuses a channel the app cannot post to rather than saving a channel that will never deliver.
The Slack connection is shared: after the first install, additional Slack channels skip straight to the channel picker. Disconnecting the workspace disables every Slack channel that uses it, and each of those rows reads Slack disconnected. Reconnect, then enable it again.
Rius also checks with Slack that the stored connection still works. If Slack refuses it, for example because the app was removed from your Slack workspace, a failing Slack channel’s warning reads reconnect Slack. Clicking it opens the channel’s dialog, where you reconnect.
When a channel fails
A channel row on the Alerts page shows a warning when its deliveries are failing, with the number of failures in a row and where to look: check the receiver for a webhook, check the recipients for email, Slack refused the post for Slack. Under it, the row prints the last error the receiver returned, word for word, and when it happened. Each firing’s page also shows the outcome of every delivery attempt.
The warning and the error clear on the next successful delivery. After five failed deliveries in a row, Rius disables the channel so it stops retrying a destination that is not answering. The last error stays on the disabled row, so you can see why. Fix the cause, then enable the channel again.
Channel deliveries are per firing, not batched. A noisy alert posts once per firing; tune the alert’s thresholds rather than muting the channel.
Next steps
- Pre-defined alerts: attach your first channel to Consistent Error Pattern.
- Custom alerts: build rules that deliver to the same channels.