Post, edit and react to messages, manage channels, set statuses and reminders, read channels and threads, search the workspace and route approvals through Slack from any Windmill script, flow or app. Connect once — as the Slack app (bot) or as yourself (user) — then reuse the same resource everywhere, and let Slack events, slash commands and interactive buttons trigger your flows back.
What you can do with Slack
Complete, deployable projects built around Slack — the fastest way to get something real running.
Set up in 2 steps
Connect from the Resources page
Open Resources, click Add a resource/API and pick slack from the OAuth APIs list. Choose a bot token to act as the Slack app, or a user token to act as yourself, click Connect and allow access. You are redirected to the Slack workspace your browser is signed in to.
Run your first script
Fork any script below and run it against a test channel. With a bot token, messages are posted by the app and only public channels it has joined can be read. With a user token, scripts see and post exactly what you can — including private channels, DMs and search.
Scripts
Building blocks, if none of the projects above fit. Fork one, run it, or call it as a step inside your own flow.
Update User Profile
Update User Group Members
Update Message
Set User Status
Set Channel Topic
Invite Users to Channel
Create Reminder
Create Channel
Archive Channel
Add Reaction
Search Messages
Get User
Get Thread Replies
Variable expiration handler
Send direct message
Set Channel Purpose
List Conversation History
Send error to slack channel
Ask channel for approval
Suspend/resume a flow by sending approval URL via slack direct message
List Slack channels, last message date, and whether it contains external members
Join Channel
Find User by Email
List Users
Get File
Delete Message
Leave Channel
Kick User
Schedule error handler
Example of responding to Slack commands and @mentions
Flows
Multi-step workflows that already wire Slack to something else.
List Slack channels and send shared message to selected channels
Example handler for slack bot commands and @mentions
Whenever an HackerNews message contains a mention, publish it to slack with sentiment analysed
OCR receipt pictures in gdrive folder and send result to Slack
See account data over the last 3 days as a pie chart
Ban a user, notify them by email, and us by Slack
Slack Alert EUR/USD Exchange rate
Trigger flows from Slack
Slack is not only a destination. These inbound paths are supported today.
Slash commands
A command like /deploy staging hits a webhook and starts a flow with the arguments as inputs.
Events API
Subscribe to message, reaction_added or app_mention and run a script once per event.
Interactive blocks
Buttons and modals resume a suspended flow step.
Resource type
The shape of the credential every script on this page expects.
slack
View raw schema →| Field | Type | Required | What it is |
|---|---|---|---|
| token | string | No | The slack token |
Questions
Bot token or user token?
A bot token acts as the Slack app: it posts under the app's name and reads only public channels it has joined. Its default scopes cover posting, joining channels, uploading files, reading public channels and looking up users. A user token acts as the person who connected: it reads their private channels, DMs and group DMs, and is the only kind that can search messages. Both are stored in the same slack resource, so scripts work with either — the ones that need a user token say so.
A script fails with missing_scope or not_allowed_token_type
not_allowed_token_type means the script needs the other kind of token — Search Messages, Set User Status, Update User Profile and Create Reminder only work with a user token. missing_scope means the connection lacks a scope the script names in its description, such as reactions:write or channels:manage: connect again and tick that scope in the connect dialog. A resource connected before the current defaults also needs reconnecting.
Do I need a paid Slack plan?
No. A free workspace covers everything the scripts here do.
Is my token stored on the hub?
Never. It lives only in your own Windmill workspace, encrypted at rest.
There is no Connect button on my instance
Self-hosted instances need an OAuth client configured once by an admin before the tile appears. Until then, use a bot token.