Slack
Send walkerOS events to Slack as formatted messages. Supports both Incoming Webhooks (simple, single-channel) and the Web API (multi-channel routing, threading, DMs, ephemeral messages, Block Kit).
Slack is a server destination in the walkerOS flow:
Turns events into Slack messages for real-time alerts, sales notifications, moderation queues, or incident routing, without coupling your product code to Slack.
Installation
- Integrated
- Bundled
Configuration
This destination uses the standard destination config wrapper (consent, data, env, id, ...). For the shared fields see destination configuration. Package-specific fields live under config.settings and are listed below.
Settings
| Property | Type | Description | More |
|---|---|---|---|
token | string | Slack Bot token (xoxb-...). Enables Web API mode. Mutually exclusive with webhookUrl. | |
webhookUrl | string | Incoming Webhook URL. Enables webhook mode. Mutually exclusive with token. | |
channel | string | Default Slack channel ID or name (e.g. "#alerts" or "C024BE91L"). Required for Web API mode unless every rule supplies one. Ignored in webhook mode. | |
text | string | Default text template. Supports `${data.field}` interpolation against the walkerOS event. | |
blocks | Array<object> | Default Block Kit blocks applied when no mapping override is set. | |
includeHeader | boolean | Auto-add an event-name header block when generating default blocks. Default: true. | |
unfurlLinks | boolean | Enable link unfurling. Default: false (cleaner for automated alerts). | |
unfurlMedia | boolean | Enable media unfurling. Default: false. | |
mrkdwn | boolean | Use mrkdwn formatting in text. Default: true. | |
threadTs | string | Static thread_ts for replies (rarely set at destination level). | |
retryConfig | Retry policy passed to WebClient. Default: "default". |
Mapping
Per-event rules under config.mapping. For the standard rule fields (consent, condition, data, batch, name, policy) see mapping.
| Property | Type | Description | More |
|---|---|---|---|
channel | string | Override the destination channel for this rule. Web API mode only -- ignored in webhook mode. | |
text | string | Override the text template for this rule. Supports `${data.field}` interpolation. | |
blocks | Array<object> | Override Block Kit blocks for this rule. | |
threadTs | string | thread_ts for posting as a reply in a thread. | |
replyBroadcast | boolean | Also broadcast the threaded reply back to the channel. | |
ephemeral | boolean | Send via chat.postEphemeral. Requires `user`. | |
user | string | Slack user ID for ephemeral or DM delivery. | |
dm | boolean | Send as DM via conversations.open + chat.postMessage. Requires `user`. |
Examples
default blocks
deploy notification
ephemeral message
error alert
purchase alert
threaded checkout step
welcome d m
Webhook vs Web API modes
Pick exactly one auth method per destination. Each mode trades capability for simplicity.
| Capability | Incoming Webhook (webhookUrl) | Web API (token) |
|---|---|---|
| Setup | Paste a URL, done | Create a Slack app, install bot, manage scopes |
| Channels | Fixed to the webhook's channel | Any channel the bot is in, routable per rule |
| Threading | Not supported | threadTs + replyBroadcast |
| Direct messages | Not supported | dm: true + user |
| Ephemeral messages | Not supported | ephemeral: true |
| Retries | Plain HTTP | SDK-managed (retryConfig) |
| Block Kit | Yes | Yes |
Use webhooks for a single firehose channel and minimal setup. Use the Web API whenever you need routing, threading, DMs, or ephemeral messages.
Channel routing
With Web API mode, route events to different channels using nested entity > action mapping. Each rule can override channel, text, blocks, and threading behavior.
Events that don't match any rule fall back to the default channel in settings.
Message formatting
Messages support two formatting styles, set at destination level or per rule:
- Text templates:
${data.field}placeholders interpolate against the walkerOS event. Good for terse alerts. - Block Kit: structured layouts via Slack's Block Kit (headers, sections, buttons, context). Use the
blockssetting when you need rich formatting.
When neither text nor blocks is provided, the destination generates a default message with an event-name header (toggle via includeHeader).