Connect a Slack workspace so a workflow's Integration step can run Send Message (post to a channel) or Send Direct Message (message one person). Messages post as your Slack app's bot.
If you followed Post to Slack when a record is created, Slack is already connected — skip to the variations at the end of this page.
At api.slack.com/apps, create an app From scratch and add these bot token scopes under OAuth & Permissions. Anythink requests all of them when you connect:
| Scope | Used for |
|---|---|
chat:write, chat:write.public |
Posting messages, including to public channels the bot hasn't joined |
channels:read, groups:read |
Listing channels for the Channel picker in the Anythink dashboard |
users:read |
Listing people for the User ID picker in the dashboard |
im:write |
Opening direct message conversations |
users:read.email, reactions:write, files:write, channels:history |
Requested by the Slack definition; not used by the current operations |
Copy the Client ID and Client Secret from Basic Information.
Add http://localhost:8745/callback to your Slack app's Redirect URLs, then:
anythink integrations oauth configure slack --client-id <CLIENT_ID> --client-secret <CLIENT_SECRET>
anythink integrations oauth connect slack --name "Team workspace"
oauth connect opens your browser, waits up to five minutes for you to approve the app, then prints the connection ID. Use --port if 8745 is taken, and add the matching redirect URL to the Slack app.
Connect Slack to this project with the anythink CLI and tell me the connection ID.
The assistant calls the cli tool with integrations oauth connect slack. The browser opens on your machine for you to approve the app, so this needs the MCP server running locally in stdio mode. Run oauth configure yourself first, so the client secret stays out of the conversation.
Add an Integration step for Slack with operation Send Message, choose a channel, enter a message and run Test Workflow. The message appears in the channel, and the step's output in View Job History has ok: true.
chat:write.public covers public channels only. Invite the bot to a private channel before posting to it.U024BE7LH in user.thread_ts to the ts a previous Send Message step returned, for example {{ $anythink.steps.notify_slack.ts }}.anythink integrations oauth connect slack --name "Support workspace", then set the step's Credential Source to Specific Connection (by ID) so each step uses the right workspace.