Slack
Overview
The Slack integration lets an ElevenLabs agent send and receive messages in Slack. Once connected, the agent replies in a thread when mentioned in a channel and maintains separate conversation context per thread.
Setup
The integration offers two ways to connect:
- OAuth — install the shared ElevenLabs Slack app into your workspace. A single Slack workspace maps to a single ElevenLabs connection. Fastest setup, no Slack app management required.
- Bring your own app — connect using a Slack app you create and own. Use this when you need the bot to appear under your brand or when your workspace policies require apps to be installed by an admin.
Option A — OAuth
The user installing the app must have permission to add apps to the target Slack workspace.
Open the integrations page
In the ElevenLabs dashboard, go to Agents > Integrations and select Slack.
Option B — Bring your own Slack app
Use this if you want the bot to show up under your own app name and icon, or if your workspace requires apps to be reviewed and installed by your admin.
Create a Slack app
Go to Slack API: Your Apps and click Create New App > From scratch. Name the app and pick the Slack workspace to install it into.
Add bot scopes
Open OAuth & Permissions and add the following Bot Token Scopes:
app_mentions:read, channels:history, channels:join, channels:manage, chat:write, groups:history, groups:write, im:history, reactions:write.
Then click Install to Workspace and approve. Copy the Bot User OAuth Token (starts with xoxb-).
Create the connection in ElevenLabs
In the ElevenLabs dashboard, go to Integrations, click the Add integration button and choose Slack. Pick the Bring your own app credential. Paste the bot token and signing secret, then save. ElevenLabs verifies the token against Slack and records your workspace id.
After the connection is created, the connection page shows two webhook URLs derived from your Slack app’s identity. The same Slack app, reconnected from the same ElevenLabs workspace, always produces the same URLs — so you can delete and recreate the connection without re-updating your Slack app’s configuration. Keep that page open for the next steps.
Configure Event Subscriptions
In your Slack app, open Event Subscriptions, enable events, and paste the Events URL from the ElevenLabs connection page into Request URL. Slack will verify the URL using the signing secret you provided.
Subscribe to bot events based on how you want the agent to behave in channels:
- Mention-only — subscribe to
app_mention. The agent responds only when a user@-mentions the bot. - All messages — subscribe to
message.channelsandmessage.groups. The agent responds to every message in channels the bot is in, without requiring a mention.
If you use the SlackDirectMessage trigger, also subscribe to message.im.
Do not subscribe to both app_mention and the message.* channel events unless you intend to handle duplicate deliveries. When a user @-mentions the bot, Slack can send both an app_mention event and a message event for the same message, which causes the agent to respond twice.
A Slack workspace can only be connected once via the shared ElevenLabs OAuth app. Reinstalling
from a different ElevenLabs workspace returns a duplicate Slack workspace error — remove the
existing connection first. Bring-your-own-app connections are independent and do not conflict.
OAuth scopes
The ElevenLabs Slack app requests the following scopes:
Agent tools
When you add Slack tools to an agent, the following built-in tools are available:
Removing the connection
Removing the connection from the Integrations page uninstalls the ElevenLabs Slack app from the Slack workspace. After removal, the bot is no longer present in any channel.
For bring-your-own-app connections, ElevenLabs cannot uninstall an app it does not own — removing the connection only deletes the local mapping. To fully remove the bot from your Slack workspace, uninstall the app from your Slack admin settings.
Configure the trigger
The integration exposes a single trigger, SlackMessage. It fires when the bot sees a new user message in a configured channel.
Add a SlackMessage trigger
On your agent’s configuration page, add a new trigger and select SlackMessage.
Slack does not allow apps to auto-join private channels. For a private channel, run /invite @Eleven in that channel after saving the trigger so the bot can see messages.
Only one trigger is allowed per (Slack workspace, channel) pair. Edit the existing trigger
instead of creating a duplicate.
Configure the DM trigger
The SlackDirectMessage trigger lets any Slack user chat with the agent by sending a direct message to the bot. Unlike the channel trigger, no @ mention is needed — every message a user sends in a DM with the bot is processed.
For BYO apps, make sure you have subscribed to the message.im bot event and added the
im:history bot scope. Reinstall the app if prompted after adding these.
Only one DM trigger is allowed per Slack connection. To change the agent, edit the existing trigger.
Talking to the bot in Slack
Once the trigger is active and the bot is in the channel, start a conversation in a channel thread. How you continue the thread depends on your Slack app’s event subscriptions (OAuth uses mention-only behavior).
Mention-only (app_mention)
All messages (message.channels, message.groups)
While the bot is generating a response, it adds a :eyes: reaction to the user’s triggering message and removes it once the reply is posted.
The bot ignores its own messages, messages authored by other bot users, edited messages (message_changed), and deleted messages (message_deleted). It handles message and app_mention events and works in both public and private channels.
If your Slack app subscribes to both app_mention and message.channels / message.groups, a
single @-mention can trigger two agent responses. Subscribe to one mode or the other.
Conversation model
The conversation ID is deterministic per (agent_id, channel_id, thread_ts):
- A new Slack thread maps to a new ElevenLabs conversation.
- Continuing the same thread continues the same conversation, including transcript history and dynamic variables.
When constructing chat history, the bot reads the Slack thread directly. Messages from other Slack users are treated as user turns and the bot’s own messages as agent turns. Mentions of the bot user (<@BOT_USER_ID>) are rewritten to @<agent_name> before the agent processes them.
Dynamic variables
When an agent runs from Slack, the following dynamic variables are available in prompts and tools:
See dynamic variables for how to reference these in prompts and tool calls.