How to send a Slack message - Slack
You will create a Slack app with a bot user, install it in your workspace, add its bot token into Batch, and finally configure a Universal step that posts a message via the Slack Web API (chat.postMessage).
When to use Slack via Universal Channel
Slack via Universal Channel is for internal team communication, not end-user messaging. Common use cases:
Operational visibility - get notified when a profile reaches a key step (churn risk segment, lead qualification, onboarding completed)
Debug and QA - mirror an automation to a Slack channel to validate branches and triggers before going live
Not for customer messaging (your users are not in your workspace) or high-volume broadcasts to one channel (Slack rate-limits chat.postMessage at ~1 message/second/channel).
Prerequisite - workspace admin approval may be required Many Slack workspaces (especially on Business+ and Enterprise plans) restrict app installation. If your workspace has this restriction enabled:
The Install to Workspace button (Step 2 below) will appear as Request to Install
A workspace Owner or Admin must approve the request before you can retrieve the bot token
No bot token will be generated until approval is granted
Confirm with your Slack admin before starting if you are not sure of your workspace's policy. The whole setup is blocked at Step 2 otherwise.
Step 1 - Create a Slack app and add bot scopes
Start in Slack. You need a Slack app with a bot user that has permission to post messages.
What to do
Go to api.slack.com/apps
Click Create New App → From scratch
Give the app a name (e.g., "Batch Universal Channel") and select your Slack workspace, then click Create App
In the left menu, open OAuth & Permissions
Scroll to Scopes → Bot Token Scopes and add:
chat:write- allows the bot to post messages in channels it has been added tochat:write.public- allows the bot to post in any public channel without being invitedchat:write.customize(optional) - allows the bot to override its display name and avatar per message
Note: Adding scopes after the app is installed requires reinstalling it for the new permissions to take effect.
Step 2 - Install the app to your workspace
This is the step where workspace admin approval kicks in if restrictions are enabled.
What to do
Scroll back to the top of the OAuth & Permissions page
Click Install to Workspace
Review the requested permissions and click Allow
If you see "Request to Install" instead of "Install to Workspace":
Your workspace requires admin approval for new apps.
Click Request to Install
Optionally add a justification message for the admin
Submit the request
A workspace Owner or Admin will receive a notification in Slack and must approve
Once approved, return to the OAuth & Permissions page to complete installation and retrieve the token
After installation (or admin approval), Slack will display a Bot User OAuth Token that starts with xoxb-. Keep this page open, you will copy the token in the next step.
Step 3 - Add the Slack bot token into Batch
Batch needs the bot token to authenticate every call to the Slack API.
In Slack
From the OAuth & Permissions page, copy the full Bot User OAuth Token starting with xoxb-.
In Batch
Go to Settings → Channels → Universal
Click New Credential Headers
Choose a name (e.g., "SLACK")
Key →
AuthorizationValue →
Bearer xoxb-your-token-hereSave
Note: If you create multiple automations sending messages to the same Slack workspace, they will all use the same token. You only need to add the credential once in Batch.
Step 4 - Get the Slack channel ID (or user ID for a DM)
You will need the Slack ID of the destination in the JSON body of the Universal step.
For a channel
In Slack, open the channel where Batch should post
Click the channel name at the top to open Channel details
Scroll to the bottom of the About tab
Copy the Channel ID (e.g.,
C0123ABCD)
For a Direct Message
Open the user's profile in Slack
Click the three dots menu → Copy member ID
The user ID looks like
U0123ABCD
Public vs private channels
For public channels, the
chat:write.publicscope (added in Step 1) lets the bot post without being invitedFor private channels, the bot must first be invited explicitly: in the channel, type
/invite @your-bot-name
Step 5 - Configure the Universal step in Batch
In this step, you will add the Universal step in your Batch automation and configure it to post a message to Slack.
Add the Universal Step
Open the Batch automation where you want to trigger a Slack message
Click the + button
Select Universal
This opens the Universal step configuration screen.
Configure the Slack request
Fill in the fields using the information below:
1. Destination URL
Paste the Slack API endpoint:
https://slack.com/api/chat.postMessage2. Headers
Select the credential header you created in Step 3 (e.g., SLACK)
3. JSON Body
Provide the Slack channel (or user ID) from Step 4 and the message text. You can personalize the message with Batch attributes:
{
"channel": "C0123ABCD",
"text": "The profile {{ b.custom_id }} was in the automation {{b.campaign_token}} at {{now}}"
}Step 6 - Test the connection
Once your Universal Step is configured, you can test it directly from Batch.
How to test
In the Universal Step, click Test API
If your JSON body includes personalization (e.g.,
{{b.first_name}}), choose a test profile so Batch can fill in real dataClick to send the test request
What Batch validates
Batch will display whether the request was successfully delivered to Slack or if something needs fixing.
Slack always returns HTTP 200
chat.postMessage returns 200 OK even on business errors (channel not found, missing scope, invalid token). The actual outcome is in the JSON response body:
"ok": true→ message posted"ok": false, "error": "..."→ something is wrong; theerrorfield tells you what
Batch reports Delivered as long as the call returns 2xx, so for debugging a missing message, check the Slack response payload or your Slack app logs.
Common error values:
not_authed
No token detected. Check the Bearer prefix in Step 3.
invalid_auth
Token is malformed, revoked, or expired.
channel_not_found
The channel ID is wrong, or the bot has not been invited to a private channel.
missing_scope
The bot is missing one of the scopes from Step 1. Add it and reinstall the app.
Step 7 - Activate your Batch automation
When the test is successful, you can turn your Batch automation live.
To activate
Review your workflow, including the Universal step
Run your automation
Once live
Every time a profile moves through this step in your automation, Batch will send the API request to Slack
Slack will post the message in the configured channel or DM
Additional Universal steps
If you want to trigger multiple Slack messages (e.g., a follow-up message, a notification to a different channel, or a DM to a manager), you can add more Universal Steps within the same Batch automation or in a new one by following these steps again (Step 3 can be skipped, the credential is shared).
Good to know - rate limits
Slack applies a rate limit of approximately one message per second per channel on chat.postMessage (Slack rate limits doc). Universal Channel suits journey-based, per-profile triggers and is not designed for bulk broadcasts to a single channel.
Last updated

