Notifications
Get alerted when jobs succeed, fail, or complete via webhook, email, Slack, Discord, or Telegram.
TrigRun can notify you when job executions succeed, fail, or complete — and when monitors go down or recover. Notifications are configured in two steps: create a channel (where to send), then attach a rule to a job or monitor (when to send).
All sensitive credentials (webhook URLs, bot tokens) are encrypted at rest and never exposed in API responses.
Channel types
| Type | Description | Credentials stored |
|---|---|---|
webhook | POST JSON to any URL with optional HMAC signing | URL in config, signing secret encrypted |
email | HTML email via Resend | Email address in config |
slack | Rich messages with blocks to a Slack channel | Webhook URL encrypted |
discord | Embeds to a Discord channel | Webhook URL encrypted |
telegram | HTML messages to a Telegram chat or group | Bot token encrypted, chat ID in config |
Slack setup
- Go to your Slack workspace settings: Apps → Manage → Custom Integrations → Incoming Webhooks (or create a new Slack app with an incoming webhook).
- Choose the channel you want alerts posted to.
- Copy the webhook URL (starts with
https://hooks.slack.com/services/...). - Create the channel in TrigRun — the webhook URL is stored encrypted and never shown again:
Config options:
| Field | Required | Description |
|---|---|---|
webhook_url | Yes | Slack incoming webhook URL |
mention_text | No | Text prepended to messages, e.g. @channel or @here |
include_output | No | Include response body preview in messages (default: false) |
Messages are sent with both a plaintext fallback and rich blocks showing the event, status, and timestamp.
Discord setup
- In your Discord server, go to Server Settings → Integrations → Webhooks.
- Click New Webhook, choose a channel, and copy the webhook URL.
- Create the channel in TrigRun:
Config options:
| Field | Required | Description |
|---|---|---|
webhook_url | Yes | Discord webhook URL |
thread_id | No | Post to a specific thread in a forum channel |
mention_role_ids | No | Array of role IDs to mention (e.g. ["123456"]) |
include_output | No | Include response body preview in embeds (default: false) |
Messages use Discord embeds with color-coded status (green for success/recovery, red for failure/down).
Telegram setup
- Open Telegram and message @BotFather.
- Send
/newbot, follow the prompts, and copy the bot token (format:123456:ABC-DEF...). - Send a message to your bot (or add it to a group/channel) so it has permission to send messages.
- Get your chat ID:
- For personal chats: message @userinfobot to get your numeric ID.
- For groups: add @RawDataBot to the group, it will show the chat ID (negative number like
-1001234567890).
- Create the channel in TrigRun:
Config options:
| Field | Required | Description |
|---|---|---|
bot_token | Yes | Bot token from BotFather (stored encrypted) |
chat_id | Yes | Numeric chat ID as string (negative for groups) |
message_thread_id | No | Thread ID for forum topic groups |
disable_web_page_preview | No | Disable link previews in messages (default: true) |
include_output | No | Include response body preview (default: false) |
Messages are sent as HTML with bold titles and formatted status lines.
Webhook setup
POST JSON payloads to any HTTP endpoint. Optionally sign payloads with HMAC-SHA256.
Config options:
| Field | Required | Description |
|---|---|---|
url | Yes | Endpoint URL (must be public, not private/loopback) |
signing_secret | No | HMAC-SHA256 signing key (stored encrypted). Signature sent in X-Webhook-Signature: sha256=<hex> header. |
Webhook payload format (execution events):
Webhook payload format (monitor events):
Verifying signatures:
Email setup
Emails are sent as styled HTML with status-colored headers and a summary table.
Testing a channel
After creating a channel, verify it works by sending a test notification:
The test sends a synthetic success payload through the full delivery pipeline (secret resolution, rendering, provider send) without creating a delivery record. Response:
Or on failure:
You can also test from the dashboard — each channel row has a Test button.
Notification events
| Event | Fires when |
|---|---|
on_success | An execution completes with a success status |
on_failure | An execution exhausts all retry attempts and fails |
on_completion | An execution finishes, regardless of outcome |
on_down | A monitor misses its expected ping window |
on_recovery | A monitor receives a ping after being down |
Attaching rules to jobs
A rule connects a channel to a job for a specific event:
You can attach multiple rules to the same job — for example, send failures to Slack and all completions to a webhook.
Attaching rules to monitors
Listing and removing rules
Delivery tracking
Every notification sent is tracked as a delivery with retry status.
Delivery statuses
| Status | Meaning |
|---|---|
pending | Queued, waiting to be sent |
processing | Currently being sent |
sent | Successfully delivered |
failed | All delivery attempts exhausted or permanent provider error |
Retry behavior
- Transient failures (5xx, timeouts, network errors) are retried with exponential backoff up to 5 attempts.
- Provider rate limits (429) are respected — the retry delay uses the
Retry-Afterheader when present. - Permanent failures (400, 403, 404 depending on provider) are marked failed immediately without retrying.
- Missing or deleted secrets are treated as permanent failures.
Limits
- Maximum 25 notification channels per workspace.
- Secrets referenced by channels cannot be deleted (returns 409). Delete the channel first.