Skip to main content
This feature is currently in public beta, please contact us at [email protected] to enable it for your organization.
The Slack chat integration lets your application send notifications directly to your subscribers’ Slack workspaces using their own Slack accounts and workspace permissions. With this integration, Novu can deliver messages to Slack channels, direct messages (DMs) to Slack users, and incoming webhooks. For incoming webhooks, Novu can use Slack’s native channel picker during OAuth. Novu handles the full lifecycle of Slack connections and message delivery. You define where notifications should be delivered, and Novu automatically routes each message to the correct Slack workspace, channel, or user. This guide walks you through setting up Slack chat, connect workspaces, and deliver notifications to the exact Slack destinations your users expect it.

Send notifications

Trigger a workflow to deliver a message to a subscriber’s Slack channel, DM, or webhook.

Format with Block Kit

Send rich Slack messages with sections, buttons, and context blocks using trigger overrides or Framework.
The Chat step in the dashboard sends plain text by default. To send Slack Block Kit messages from a dashboard workflow, pass blocks in trigger overrides when you call the API. See Format messages with Block Kit for examples, including _passthrough for raw Slack API fields.
Check out the agents documentation for more information on how to build agents using Slack.

Configure a Slack app

Before integrating Slack chat with Novu, you must create and configure a Slack app. The Slack app manages the OAuth permissions, bot token scopes, and redirect URLs needed for Novu to connect to your users’ workspaces securely.
Token rotation is not supported. Novu does not currently support Slack apps with token rotation enabled. If token rotation is turned on in your Slack app settings, bot tokens expire after about 12 hours and message delivery fails with errors such as token_revoked or invalid_auth until the workspace is manually reconnected. Keep token rotation disabled on your Slack app until this is supported. Reach out to [email protected] if this is a blocker for your usecase.

Create a Slack app

First, you need to create a Slack app. This provides you with the credential you need to create a Slack integration in Novu.
1

Open the Slack API dashboard

Sign in at the Slack API dashboard.
2

Create an app

In Slack, click Create an App to start a new app registration.
3

Select From scratch

Choose From scratch and enter an app name and workspace.
4

Enter app name and workspace

Enter an app name of your choice in the App Name field. Pick a Slack workspace to develop your app in.Create app
5

Create the app

Click Create App. You’ll be directed to the Basic Application for the Slack app which contains the credentials you need for configuring Slack chat inside Novu:
  • App ID
  • Client ID
  • Client Secret Basic application

Configure scopes (Permissions)

Your app needs permission to perform actions like sending messages or reading channel lists.
1

Open OAuth & Permissions

In the sidebar, select OAuth & Permissions.
2

Open Scopes

Scroll down to the Scopes section.
3

Add an OAuth Scope

Under Bot Token Scopes, click Add an OAuth Scope.Add an OAuth Scope
4

Add recommended scopes

  • chat:write
  • chat:write.public
  • channels:read
  • groups:read
  • users:read
  • users:read.email
  • (optional) incoming-webhook if you want Slack’s built-in channel picker.
These scopes are required for Novu to send messages, read channels and read users (for DMs and pickers). If you remove some of them, then certain features like channel or user selection might not work.

Set the redirect URL

This tells Slack where to send the user after they successfully authorize your app.
1

Open OAuth & Permissions

In the sidebar, select OAuth & Permissions.
2

Open Redirect URLs

Scroll down to the Redirect URLs section.
3

Add a redirect URL

Add New Redirect URL
4

Paste the Novu callback URL

Paste the Novu OAuth callback URL. Add the redirect URL that matches your Novu region:
5

Save the URLs

Configure Slack integration in Novu

Once your Slack app is set up, the next step is to configure the Slack Chat integration inside Novu.
1

Log in to the Novu dashboard

Open the Novu Dashboard.
2

Open Integrations Store

In the sidebar, click Integrations Store.
3

Connect a provider

In the Integration Store, click Connect provider to begin setup.
4

Select Slack

5

Fill in credentials

Fill in the required fields using the credentials from your Slack app:
  • Application Id: Paste your Slack app App ID.
  • Client ID: Paste your Slack App Client ID.
  • Client Secret: Paste your Slack App Client Secret.
  • Redirect URL (Optional): Enter the URL where you want users to be redirected to after they successfully connect their workspace. If there is no redirect URL, then Novu closes the tab immediately after the OAuth flow completes. Connect slack integration in Novu
6

Create the integration

Click Create Integration to create the Slack integration. Once saved, Novu is able to:
  • Generate OAuth (Connect Slack) URLs for your users
  • Receive Slack’s OAuth callback.
  • Store workspace tokens as connections.
You are now ready to implement the frontend flow to let users connect their workspaces.

Let users connect their Slack workspace

To send messages to Slack, your users must first authorize Novu to access one of their Slack workspaces. This authorization happens through Slack’s OAuth flow, which Novu generates and manages for you.

Generate the OAuth URL

When a user clicks Connect Slack in your application, your backend should request a unique authorization URL from Novu.
The generated OAuth URL is valid for only 5 minutes. Do not cache this URL; generate it dynamically when the user initiates the flow.
Your application can support multiple Slack workspace connections per user or per tenant by triggering separate OAuth flows. Novu allows one connection per (integration + subscriber + context). To connect multiple workspaces, trigger separate OAuth flows with different combinations of those values.

Redirect the user

Once your backend returns the oauthUrl, open it in a new tab or window.
Slack then guides the user through:
1

Review permissions

Reviewing your app’s requested permissions
2

Approve authorization

Approving the authorization
3

Redirect to Novu

Redirecting back to Novu’s callback URL
After the user approves access, Novu handles the rest of the OAuth flow automatically.
1

Novu exchanges the code

Novu stores the Slack access token for the connected workspace.
2

Novu creates a connection

Novu creates a Slack connection for that workspace, it is referenced by connectionIdentifier when creating endpoints.You can also provider a custom connectionIdentifier to the generateChatOAuthUrl() and then connection with such identifier will be created instead of randomly generated one.
Alternative: handle OAuth yourself. Instead of generateChatOAuthUrl(), you can run the Slack OAuth flow with your own app, use the access token with Slack’s APIs directly, then register the workspace with Novu via channelConnections.create (or POST /v1/channel-connections):

Choose delivery destinations

After a workspace is connected, you or users decide where in Slack to send the messages. This can either be a Slack channel, to a user or an incoming webhook URLs. After the delivery location has been selected, a Slack endpoint is then created for that location.
This is the typical flow for sending notifications to public or private channels.
1

Get the channel ID

To learn more about using Slack conversations API to either get public or private channels, refer Slack documentation.
2

Create the endpoint

Send notifications

Once you have at least one Slack connection, and one or more Slack endpoints. You can trigger the workflow:
When the workflow is triggered, Novu will:
1

Find Slack endpoints

Novu looks up Slack endpoints that match the subscriber ID and context.
2

Use the workspace connection

3

Deliver messages

Novu sends the notification to each configured Slack destination. By default, the Chat step body is sent as plain text. To send Block Kit formatting, see Format messages with Block Kit.
Message formatting: The dashboard Chat step editor supports a plain text body. For rich Slack messages (sections, buttons, context blocks), use trigger overrides at send time or Framework provider overrides in code-first workflows. Digest summaries in the dashboard work as plain text using digest variables.

Format messages with Block Kit

The Chat step in the Novu dashboard sends a plain text message body to Slack. There is no Block Kit editor in the workflow UI today. You still have a few ways to send richer Slack messages:

Plain text and digest summaries

For digest workflows built in the dashboard, use digest variables in the Chat step body to build a text summary. For example:
This renders as plain text in Slack. It does not produce Block Kit formatting such as buttons or styled sections.

Send Block Kit with trigger overrides

To send Slack Block Kit messages from a dashboard workflow, pass blocks in the overrides object when you trigger the workflow. The Chat step body from your template is still sent as the fallback text field unless you override it. Copy the step identifier from your workflow in the dashboard and use it under overrides.steps.
Replace slack-chat-step with the step identifier from your workflow. Step-level overrides take priority over workflow-level overrides.

Workflow-level overrides

If your workflow has a single Slack Chat step, you can apply Block Kit to all Slack steps in that workflow without targeting a step ID:

Send extra Slack fields with _passthrough

Use _passthrough when you need raw Slack chat.postMessage fields that are not exposed in the dashboard. Values in _passthrough.body are merged last and take priority over other override fields.
For a full guide on how overrides work, including workflow-level and step-level scopes, see Trigger overrides.

Block Kit with digest workflows

Trigger overrides are set when you call the trigger API. They work well when each trigger carries the data you need to build the message. For digest workflows, Novu batches multiple triggers into one notification. The Chat step body can use digest variables to summarize batched events, but overrides are not re-evaluated with that aggregated data. To build Block Kit dynamically from a digest batch, use Framework provider overrides in a code-first workflow.

Using Slack with agents

Slack is a supported agent provider. Connect your Slack app to an agent so users can message in channels or DMs and get replies in the same thread, without building Slack event handling yourself.

Build agents on Slack

Learn how Novu agents work, including managed and custom code agents.

What you get

When Slack is connected to an agent:
  • Users message your app in Slack and your agent responds in the same thread
  • Conversations appear in the dashboard under Agent Conversations
  • Supported content includes text, markdown, files, interactive cards, reactions, and typing indicators
See agent conversations for capabilities across all providers.

Agent conversations vs. workflow notifications

Both can use the same Slack integration. Your agent handles back-and-forth conversations while workflows send updates such as deploy alerts to the same workspace.

Trigger overrides

Pass Slack blocks and _passthrough fields when triggering a workflow from your application.

Agents and providers

Connect Slack and other providers to an agent.