Slack integration plugin for ElizaOS agents with Socket Mode support.
- Socket Mode: Real-time event handling via Slack Socket Mode
- Message Operations: Send, edit, delete, read messages
- Reactions: Add and remove emoji reactions
- Pins: Pin and unpin messages, list pinned items
- Channels: List channels, read channel history
- User Info: Get user profile information
- Threads: Full thread support with reply tracking
- Media: Handle file uploads and attachments
- Custom Emoji: List workspace custom emoji
npm install @elizaos/plugin-slack
# or
bun add @elizaos/plugin-slack# Bot Token (starts with xoxb-)
SLACK_BOT_TOKEN=xoxb-your-bot-token
# App Token for Socket Mode (starts with xapp-)
SLACK_APP_TOKEN=xapp-your-app-token# Signing Secret for request verification
SLACK_SIGNING_SECRET=your-signing-secret
# User Token for enhanced permissions (starts with xoxp-)
SLACK_USER_TOKEN=xoxp-your-user-token
# Comma-separated list of channel IDs to restrict bot to
SLACK_CHANNEL_IDS=C123456789,C987654321
# Ignore messages from other bots
SLACK_SHOULD_IGNORE_BOT_MESSAGES=false
# Only respond when mentioned
SLACK_SHOULD_RESPOND_ONLY_TO_MENTIONS=false-
Create a new Slack App at https://api.slack.com/apps
-
Enable Socket Mode in your app settings
-
Generate an App-Level Token with
connections:writescope -
Add the following Bot Token Scopes:
channels:history- Read messages in public channelschannels:read- View basic channel informationchat:write- Send messagesemoji:read- View custom emojifiles:read- View filesgroups:history- Read messages in private channelsgroups:read- View basic private channel informationim:history- Read direct messagesim:read- View basic direct message informationmpim:history- Read group direct messagesmpim:read- View basic group direct message informationpins:read- View pinned itemspins:write- Add and remove pinned itemsreactions:read- View reactionsreactions:write- Add and remove reactionsteam:read- View workspace informationusers:read- View basic user informationusers:read.email- View user email addresses
-
Enable Events and subscribe to:
message.channels- Messages in public channelsmessage.groups- Messages in private channelsmessage.im- Direct messagesmessage.mpim- Group direct messagesapp_mention- When the app is mentionedmember_joined_channel- When a user joins a channelmember_left_channel- When a user leaves a channelreaction_added- When a reaction is addedreaction_removed- When a reaction is removed
-
Install the app to your workspace
import slackPlugin from "@elizaos/plugin-slack";
const agent = {
// ... other configuration
plugins: [slackPlugin],
};{
"name": "MyAgent",
"clients": ["slack"],
"settings": {
"slack": {
"shouldIgnoreBotMessages": true,
"shouldRespondOnlyToMentions": false
}
}
}| Action | Description |
|---|---|
SLACK_SEND_MESSAGE |
Send a message to a channel or thread |
SLACK_REACT_TO_MESSAGE |
Add or remove emoji reactions |
SLACK_READ_CHANNEL |
Read message history from a channel |
SLACK_EDIT_MESSAGE |
Edit an existing message |
SLACK_DELETE_MESSAGE |
Delete a message |
SLACK_PIN_MESSAGE |
Pin a message to a channel |
SLACK_UNPIN_MESSAGE |
Unpin a message from a channel |
SLACK_LIST_PINS |
List pinned messages in a channel |
SLACK_LIST_CHANNELS |
List available channels |
SLACK_GET_USER_INFO |
Get information about a user |
SLACK_EMOJI_LIST |
List custom emoji in the workspace |
| Provider | Description |
|---|---|
slackChannelState |
Current channel context and metadata |
slackWorkspaceInfo |
Workspace-level information |
slackMemberList |
Members in the current channel |
The plugin emits the following events:
SLACK_MESSAGE_RECEIVED- When a message is receivedSLACK_MESSAGE_SENT- When a message is sentSLACK_REACTION_ADDED- When a reaction is addedSLACK_REACTION_REMOVED- When a reaction is removedSLACK_APP_MENTION- When the bot is mentionedSLACK_MEMBER_JOINED_CHANNEL- When a member joins a channelSLACK_MEMBER_LEFT_CHANNEL- When a member leaves a channelSLACK_FILE_SHARED- When a file is shared
The main service class providing direct access to Slack functionality:
import { SlackService, SLACK_SERVICE_NAME } from "@elizaos/plugin-slack";
// Get service from runtime
const slackService = runtime.getService(SLACK_SERVICE_NAME) as SlackService;
// Send a message
await slackService.sendMessage(channelId, "Hello!", { threadTs: "..." });
// Add a reaction
await slackService.sendReaction(channelId, messageTs, "thumbsup");
// Get user info
const user = await slackService.getUser(userId);
// List channels
const channels = await slackService.listChannels();- Verify your
SLACK_BOT_TOKENandSLACK_APP_TOKENare correct - Check that Socket Mode is enabled in your Slack app
- Ensure the bot has been invited to the channel
- Check if
SLACK_SHOULD_RESPOND_ONLY_TO_MENTIONSis enabled
- Verify the bot has all required OAuth scopes
- Reinstall the app to your workspace after adding new scopes
- Check if the channel is private and the bot is a member
- Verify your
SLACK_APP_TOKENstarts withxapp- - Check that the app-level token has
connections:writescope - Ensure only one instance of the bot is running per token
MIT