Skip to Content

Slack

WatchDeck delivers Slack notifications via incoming webhooks. One webhook = one Slack channel. To send to multiple channels, create multiple WatchDeck channels.

There’s no Slack OAuth app to install — pasting a webhook URL is the entire setup.

Required fields

FieldNotes
Webhook URLMust match https://hooks.slack.com/services/<TEAM>/<CHANNEL>/<TOKEN>. Encrypted at rest.

The URL is encrypted at rest (AES-256-GCM) and never echoed back to the browser after creation. Leaving the field empty on edit keeps the existing value.

Where the webhook URL comes from

In Slack:

  1. Open your workspace’s Apps → search for Incoming Webhooks.
  2. Add the integration to the destination channel.
  3. Copy the generated Webhook URL — that’s what WatchDeck needs.

The URL implicitly carries the destination channel. To change channels, generate a new webhook in the new channel and update the WatchDeck channel.

Add a Slack channel

Message format

Each dispatch sends a Block Kit payload with a text fallback (used by mobile notifications and accessibility readers). The shape:

{ "text": "Endpoint down — Production API", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": ":rotating_light: *Endpoint down*\nHTTP 502 — expected 200" } }, { "type": "section", "fields": [ { "type": "mrkdwn", "text": "*Endpoint*\nProduction API" }, { "type": "mrkdwn", "text": "*Target*\nhttps://api.example.com/health" }, { "type": "mrkdwn", "text": "*Cause*\nEndpoint down" } ] }, { "type": "section", "text": { "type": "mrkdwn", "text": "<https://app.watchdeck.dev/incidents/abc123|View in WatchDeck>" } } ] }

The fields section is capped at 10 rows.

Severity emojis

SeverityEmoji
critical:rotating_light: 🚨
warning:warning: ⚠️
success:white_check_mark:
info:information_source: ℹ️

User-supplied content (endpoint names, cause details) is mrkdwn-escaped — &, <, > become &amp;, &lt;, &gt; so an endpoint name containing those characters renders correctly.

Test send

Click Test on the channel card to fire a synthetic channel_test block into the channel. The result is shown inline on the card and recorded in the Delivery log with kind='channel_test'.

A successful test sets is_connected=true and updates last_success_at; a failed test does the opposite.

Failure handling

The dispatcher considers any 2xx response a success. Slack returns 200 with body ok for accepted messages.

Slack responseCaptured as
Non-2xxfailure_reason = HTTP <code> · <body excerpt>
429 Too Many RequestsSame, plus the Retry-After header is captured into provider_meta
Network / timeout (10s)failure_reason = the underlying error message

There’s no retry path today, so a failed delivery stays failed. Slack rate-limits incoming webhooks at roughly one message per second per webhook; if you’re firing many opens at once, you’ll see 429s.

What’s not in the Slack channel today

  • No threading. Each incident kind (open, resolve) is a top-level message. There’s no thread_ts linking — a resolution does not thread under the open.
  • No mention helpers. WatchDeck does not auto-prepend <!channel>, <!here>, or <@user> to messages. If you need a mention, use a webhook channel and craft the body yourself.
  • No interactive components. No buttons, no app-style “Acknowledge” actions. (Acknowledgement isn’t a concept on the WatchDeck side either — see Incidents → Lifecycle.)
  • No Slack OAuth app. Webhook only.

Troubleshooting

  • “no_service” or 404 on Test — the webhook has been revoked in Slack. Generate a new one and update the channel.
  • “channel_not_found” — the webhook’s destination channel was archived. Generate a new webhook in a live channel.
  • Messages arrive without colour bars — Block Kit doesn’t surface a coloured banner the way email does. The severity emoji at the start of the headline carries the visual cue.
  • A message lands in the wrong channel — incoming webhooks are bound to one channel at creation time; you cannot retarget without a new URL.

Quotas and limits

  • Counts toward your per-plan channel cap — see Notifications → Quotas.
  • WatchDeck doesn’t apply its own per-channel rate limit. Slack will rate-limit you if you exceed their incoming-webhook budget.

What’s next

Last updated on