What exists
| Channel | Configuration | Carries attachments |
|---|---|---|
| The workspace SMTP server, or ours; sender verifiable by domain | Yes | |
| Meta’s WhatsApp Cloud API: phone number id, access token, and the template they approved | Yes — when the approved template declares a DOCUMENT header | |
| Telegram | Bot token, and the destination’s numeric chat id; the bot has to be in the group or chat | Yes — sent as a document, with the text as its caption |
| Webhook | URL, optional headers, and a secret for signing | Yes — the body is the result |
| Slack | Incoming webhook URL; a bot token with files:write for uploads | Only with a bot token |
| Discord | Webhook URL of the channel | No — summary and link |
| PagerDuty | Events API v2 routing key of the service | No — it opens an incident |
| Opsgenie | API key of an integration, and the region (US or EU) | No — it opens an alert |
The WhatsApp integration uses Meta’s official Cloud API. Messages outside the 24-hour window need a template they approved — that is Meta’s rule, not ours. On Telegram, a bot only reaches whoever messaged it first: the destination is the numeric chat id, and a person’s @name is not addressable by the Bot API.
Test before depending on it
Every channel has a test button that validates the credentials against the provider without sending a message, and records the outcome — date, status, and the provider’s error when there was one. A channel that has never been tested is flagged in the list. To check delivery end to end, run the report: the run log says which channel each recipient went through and what the provider answered.
Webhook signature
When you set a secret, every POST carries an HMAC-SHA256 signature of the body in a header. Verify it before processing: without that, anyone who discovers the URL can inject a fake report into your system.