Choose “From scratch”, give your app a name, and select your development workspace.
Under “OAuth & Permissions”, add these Bot Token Scopes: chat:write, im:write, users:read, users:read.email.
Click “Install App to Workspace” and authorize.
Copy the Bot User OAuth Access Token (starts with xoxb-).
Slack OAuth Scopes
3
Design a Slack Notification Template
Go to the Courier Assets page and click + New > Message Template.
Select Slack from your list of integrations.
In the sidebar, click the newly added Slack block to open the Slack template editor.
Add your desired message content to the template.
4
Send a Test Message
Click Preview, then select Create Test Event.
Enter your bot token in the Access Token field.
Click Send—your message should appear in Slack!
Slack is also available as a channel in Journeys. Add a Slack send node and you get the same targeting options as above, exposed as form fields instead of JSON.
Send node setting
Send API field
Send to: Channel
channel
Send to: Direct message, addressed by User ID
user_id
Send to: Direct message, addressed by Email
email
Access Token
access_token
Each field takes a fixed value or a path into the journey’s data, so the channel and token can vary per user or per tenant. See Slack recipients for the full configuration.
You can override the payload sent to Slack’s chat.postMessage using providers.slack.override.body. This is useful for advanced formatting, interactivity, and threading.
Slack automatically parses text for @name patterns and turns them into mentions. If your message content includes text that resembles a mention but shouldn’t trigger one, set verbatim: true on the Block Kit text object to disable this parsing.Courier’s standard template blocks (text, quote, etc.) don’t expose the verbatim flag. To use it, either pass raw Block Kit JSON via providers.slack.override.body.blocks or use a Jsonnet block in the template designer:
{ "type": "section", "text": { "type": "mrkdwn", "text": ">>> Message from @jennifer about the deployment", "verbatim": true }}
To update a previously sent Slack message, set a “replacement key” (usually ts) in your notification template’s Slack channel settings. Courier will use this key to update the message instead of posting a new one.
When Courier sends a Slack message via Bot OAuth (chat.postMessage), it captures Slack’s ts (message timestamp identifier) and channel (conversation ID) from the API response. You can use these values to thread replies, update messages, or link back to the original Slack message.
Slack conversation ID where the message was posted.
providers[].channel
Courier routing metadata (template and channel key); not the Slack channel ID.
Slack messages are marked as DELIVERED immediately after sending because Slack’s API confirms delivery synchronously. The delivered and sent timestamps will be very close together.
Incoming Webhook sends may not include reference data because Slack’s Incoming Webhook API does not return ts or channel in its response.
Double-check the email, user_id, or channel ID. For channels, copy the ID from the Slack URL.
Message Truncated:
Slack blocks limit the characters in a single section to 3k characters. Courier automatically truncates Slack messages over 3k characters by removing escape and formating characters that are added by Slack after submitting the block.