Slack is the communication hub for millions of teams worldwide, and connecting it to your n8n workflows unlocks a powerful layer of automation. Whether you need to send deployment alerts, daily digest reports, or build an interactive approval bot — the n8n Slack integration makes it straightforward once you understand the setup.
In this guide we cover everything from credentials configuration to advanced Block Kit messages, Slack triggers, and complete workflow patterns you can use today.
Don't want to build the workflow manually? Describe what you need in plain English at Scriflow and get a ready-to-import n8n JSON in seconds.
Setting Up Slack Credentials in n8n
Before sending any message you need a Slack App with the right OAuth scopes. Here's the minimal setup:
1. Create a Slack App
- Go to api.slack.com/apps and click Create New App → From Scratch.
- Give it a name (e.g. n8n Bot) and select your workspace.
- Under OAuth & Permissions → Scopes → Bot Token Scopes, add the permissions you need.
- Click Install to Workspace and authorize.
- Copy the Bot User OAuth Token (starts with
xoxb-).
Required OAuth Scopes
2. Add Credentials in n8n
- In n8n, go to Credentials → New → Slack OAuth2 API.
- Paste your Bot User OAuth Token.
- Name it something recognizable (e.g. Slack – n8n Bot) and save.
For production, create a dedicated Slack App per workspace to avoid accidentally posting to the wrong team. Store the token securely using n8n's built-in credential encryption.
Slack Node Overview
The n8n Slack node exposes all major Slack API endpoints as operations. The most commonly used ones are:
| Resource | Operation | What It Does |
|---|---|---|
| Message | Send | Post a text or Block Kit message to a channel or user |
| Message | Update | Edit a previously sent message by its ts timestamp |
| Message | Delete | Remove a message from a channel |
| Message | Get Permalink | Get a permanent link to any message |
| Channel | Get Many | List all channels in the workspace |
| User | Get | Fetch user info by ID or email |
| Reaction | Add | React to a message with an emoji |
| File | Upload | Upload and share files in channels |
Sending Messages to Channels
The most fundamental operation is sending a message. Here's a minimal Slack node configuration:
You can reference any field from the incoming data using n8n expressions inside double curly braces. This makes messages dynamic and context-aware without any coding.
Sending Direct Messages to Users
To send a DM, first use the User → Get operation to fetch the user's Slack ID by their email, then use that ID as the channel:
Using Block Kit for Rich Messages
Plain text messages work, but Block Kit is where Slack automation becomes visually impressive. Block Kit lets you build messages with sections, buttons, dividers, images, and interactive elements.
In the Slack node, enable JSON Parameters and switch to the Blocks field to provide a Block Kit JSON array:
Use the official Slack Block Kit Builder to visually design your message layout, then paste the JSON directly into n8n's Blocks field.
Slack Triggers in n8n
Beyond sending messages, n8n can listen to Slack events and react to them. The Slack Trigger node connects to the Slack Events API via webhooks.
Setting Up the Slack Trigger
- Add a Slack Trigger node to your workflow.
- Copy the Webhook URL generated by n8n.
- In your Slack App settings, go to Event Subscriptions, enable it, and paste the URL.
- Subscribe to the events you need (e.g.
message.channels,reaction_added). - Reinstall the app to your workspace after adding new event subscriptions.
Available Trigger Events
| Event | Fires When | Use Case |
|---|---|---|
message | Any message posted to a channel | Commands, Q&A bots |
reaction_added | Someone reacts to a message | Approval workflows via emoji |
app_mention | Bot is @mentioned | Interactive chatbot |
channel_created | A new channel is created | Auto-invite members, set topic |
member_joined_channel | Someone joins a channel | Welcome message automation |
Building a Monitoring Alert System
One of the most popular use cases for n8n + Slack is operational monitoring. Here's a complete workflow pattern for sending server health alerts:
Workflow: CPU / Memory Alert → Slack
- Schedule Trigger — runs every 5 minutes.
- HTTP Request — calls your monitoring API (e.g. Prometheus, Datadog, or a custom endpoint) to fetch current metrics.
- IF Node — checks if CPU > 80% or memory > 90%.
- Slack Node (true branch) — sends a Block Kit alert to
#ops-alerts. - Slack Node (false branch, optional) — updates a status message to "All systems normal".
Common Workflow Patterns
Pattern 1: Error Notifications
Wrap any workflow's error path with a Slack notification so you're always aware of failures. Use n8n's Error Workflow setting (in workflow settings) to route all errors to a dedicated error-handling workflow that sends a Slack DM to the on-call engineer.
Pattern 2: Daily Reports
Use a Schedule Trigger set to run every morning at 9 AM, query your database or analytics tool, aggregate the data with a Code node, and post a formatted summary to a #daily-metrics channel.
Pattern 3: Approval Workflows
When an action requires human approval (e.g. a large refund request or a production deployment), post a Block Kit message with Approve and Reject buttons to Slack. Use n8n's Wait node to pause execution until a webhook callback is received when the button is clicked.
- Trigger event arrives (e.g. refund request from Stripe webhook).
- Slack node sends a message with interactive buttons to
#approvals. - Wait node pauses the workflow (up to 24 hours).
- Manager clicks Approve/Reject in Slack → webhook received.
- Workflow resumes, processes the decision, and sends a confirmation.
For interactive button callbacks to work, you need to configure an Interactivity & Shortcuts Request URL in your Slack App settings pointing to a separate n8n webhook workflow that receives the button action and triggers the main workflow's resume endpoint.
Tips & Best Practices
- Rate limits: Slack allows ~1 message per second per channel. Use a Wait node or batch your messages if sending in bulk.
- Thread replies: Use the
thread_tsparameter to reply in threads and keep channels clean. Pass the original message'stsvalue. - Avoid message floods: Add an IF node to check whether an alert was already sent in the last N minutes before re-alerting.
- Use channel IDs, not names: Channel names can change; IDs never do. Find the ID by right-clicking a channel in Slack → Copy Link.
- Test with Bolt: During development, use Slack's Bolt framework playground or the Block Kit Builder to preview messages without sending real notifications.
Frequently Asked Questions
/invite @YourBotName in the channel, then use the channel ID in your n8n Slack node.chat.scheduleMessage endpoint via the HTTP Request node. The native Slack node doesn't expose this operation directly, but a raw POST to the API works perfectly.xoxb-) post as the bot identity — recommended for automation. User tokens (xoxp-) post as a real user but require user-level OAuth and are harder to manage. Always prefer bot tokens.