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!
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.