Docs
Alert channels
Slack, Discord, Telegram, email and signed webhooks — included on every plan. Plus the guardrails that stop alerting becoming noise.
Obsevo does not resell notification infrastructure. Every channel uses a credential you own, which is why alerting is included on every plan rather than being a paid feature.
Add channels under Settings → Alerts.
The channels
| Channel | What it needs |
|---|---|
| Slack | An incoming webhook URL |
| Discord | A channel webhook URL |
| Telegram | A bot token and a chat ID |
| Nothing — we send it | |
| Webhook | Any URL that accepts a signed JSON POST |
There is deliberately no SMS channel. It would be the only channel requiring an account and a balance with a third party, which would undo the property that makes the rest of this list free.
Email is the one channel you bring nothing to
Every other channel uses a credential you create in the app it posts to. Email is sent by us, so there is nothing to configure — an address is enough. Scheduled client reports go out the same way.
The webhook channel is the escape hatch
A signed JSON POST with the event, a timestamp and an HMAC signature in headers. This is how you reach PagerDuty, Opsgenie, or n8n itself — so Obsevo does not have to integrate with everything, and you are not blocked waiting for us to.
Routing
Each channel can be scoped, so the right thing goes to the right place:
- By instance or client — production alerts to the on-call channel, staging to a quieter one.
- By minimum severity — a channel that only ever sees
critical. - By escalation delay — an incident nobody has resolved is re-offered to another channel after a delay you set. This is the "nobody noticed, wake someone" path.
Delivery is de-duplicated per incident per channel and recorded in the database, so a worker restart does not re-send everything. A channel that is failing never blocks the others.
Guardrails
The thing being protected is a person's attention, not the webhook. Three limits exist by default:
Quiet hours. A UTC window, which may wrap midnight, during which only alerts
at or above a chosen severity get through — critical by default. Setting the
start and end to the same time disables quiet hours rather than silencing
everything forever, because silencing everything forever is never what someone
means.
A rate cap. Sixty alerts per hour per workspace by default. A workflow failing in a loop should produce one useful page, not two hundred.
Runbook links. A workflow can carry a runbook URL, which is appended to every alert about it. The point of paging someone is that they can act, so the fix steps should arrive with the page rather than be hunted for afterwards.