Home / Ecosystems / Slack
Grok Bot for Slack: Channel Routing with Dry-Run Guards
This article was produced with AI assistance. Editorial standards apply.
AI Edited Key takeaways
- A Grok bot posts to Slack only after you grant
incoming-webhookorchat:write. - Incoming webhooks post to the channel chosen at install.
chat.postMessageneedschat:write. - Write a dry-run preview before any channel post. A 401 means the Bearer token is missing or invalid.
How a Grok bot posts to a Slack channel
A Grok bot for Slack posts into a workspace channel through Slack’s API, not by scraping the client. Slack documents two install paths. The incoming-webhook scope opens a channel picker during OAuth and returns an incoming_webhook.url you can POST JSON to. The chat:write scope lets the app call chat.postMessage as the bot.
Start from the executive and ops directory when the routine is an alert or a stand-in, then open the typed skill instead of inventing a second Slack product.
incoming-webhook versus chat:write
| Scope | What Slack allows | Use it when |
|---|---|---|
incoming-webhook | Post to the channel picked at install | One alert channel is enough |
chat:write | Send as the app via chat.postMessage | The bot must choose the channel at runtime |
Slack’s scope reference lists chat:write as “send messages as your Slack app” and incoming-webhook as “post messages to specific channels.” Do not request both unless the routine actually needs both. Official notes: incoming webhooks and chat:write.
Dry-run before the channel post
The bot should print the channel id, the message text, and the scope it will use, then wait. Only the confirmed preview may call the webhook or chat.postMessage. If Slack or xAI returns 401, the xAI debugging table says the cause is a missing or invalid Authorization: Bearer token. Do not retry the same key.
Verified routines already on this directory:
Tool JSON for either routine follows the same pattern as a custom Grok bot: typed parameters, then a dry-run, then the write.
FAQ
How do I connect Grok to Slack?
Install a Slack app with incoming-webhook or chat:write, store the webhook URL or bot token outside the prompt, and pass only the channel and text into the skill.
Is OAuth required?
Yes for a distributable app. Slack’s OAuth install flow is what issues the webhook URL or the bot token. A pasted legacy webhook still posts, but it is not the current install path.
What if the bot fails to post?
Check the scope first, then the Bearer token. Map HTTP 401 and 429 with the Grok bot troubleshooting guide.