Notification channels
Setup steps for Slack, Discord, Telegram, Email, and generic webhook channels.
- In Slack, + Add apps → Incoming Webhooks → Add to channel. Slack gives you a URL like
https://hooks.slack.com/services/T0.../B0.../.... - In Pulse: Settings → Channels → + Add → Slack. Paste the URL. Save.
- Attach the channel to alert rules.
Payload uses Slack’s legacy attachments (still supported and the cleanest way to get a tinted side-bar + structured fields out of a webhook).
Discord
Section titled “Discord”- In Discord, channel → Edit channel → Integrations → Webhooks → New webhook. Copy the URL.
- In Pulse, add channel of type Discord. Paste URL. Save.
Payload posts an embed with severity-tinted color, title, body, and two inline fields (severity + status).
Telegram
Section titled “Telegram”- In Telegram, message
@BotFather. Run/newbot, name it, copy the bot token (1234567:ABC...). - Add the bot to the target chat (DM, group, or channel).
- Get the chat ID:
- DM: message
@userinfobot, it replies with your numeric ID. - Group / channel: send any message there, visit
https://api.telegram.org/bot<TOKEN>/getUpdatesand look forchat.id(negative for groups).
- DM: message
- In Pulse: Settings → Channels → + Add → Telegram. Paste bot token + chat ID. Save.
Messages are HTML-formatted with <b>{severity} · {title}</b>, escaped body, severity/status in <code> tags. Web previews are disabled to avoid spammy URL cards.
Per-channel config: recipient address. Transport uses the global SMTP_* env vars (see SMTP and email). If SMTP isn’t configured the channel runs in dev-log mode — payloads are written to stdout instead of sent.
Webhook
Section titled “Webhook”Generic HTTPS POST to a URL you control. Use this for custom integrations (PagerDuty event API, OpsGenie, your own automation).
- Payloads are signed: header
X-Pulse-Signature: t=<unix>,v1=<hex>wherev1isHMAC-SHA256(secret, "{t}.{body}"). The secret is generated on channel create and shown once. - Retries: exponential backoff, 5 attempts, ~10 minute envelope. After exhaustion the delivery is dropped and the failure surfaces in the audit log.
- Timeout: 8 seconds per attempt.
See Outbound webhooks for the full event schema and verification example.