Skip to content

Notification channels

Setup steps for Slack, Discord, Telegram, Email, and generic webhook channels.

  1. In Slack, + Add apps → Incoming Webhooks → Add to channel. Slack gives you a URL like https://hooks.slack.com/services/T0.../B0.../....
  2. In Pulse: Settings → Channels → + Add → Slack. Paste the URL. Save.
  3. 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).

  1. In Discord, channel → Edit channel → Integrations → Webhooks → New webhook. Copy the URL.
  2. 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).

  1. In Telegram, message @BotFather. Run /newbot, name it, copy the bot token (1234567:ABC...).
  2. Add the bot to the target chat (DM, group, or channel).
  3. 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>/getUpdates and look for chat.id (negative for groups).
  4. 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.

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> where v1 is HMAC-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.