@elizaos/plugin-slack
Slack integration plugin for elizaOS agents with Socket Mode support.
Features
- 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
Installation
npm install @elizaos/plugin-slack
# or
bun add @elizaos/plugin-slack
Configuration
Required Environment Variables
# 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
Optional Environment Variables
# 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
Slack App Setup
-
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
Usage
Add to your agent configuration
import slackPlugin from "@elizaos/plugin-slack";
const agent = {
// ... other configuration
plugins: [slackPlugin],
};
Character file configuration
{
"name": "MyAgent",
"settings": {
"slack": {
"shouldIgnoreBotMessages": true,
"shouldRespondOnlyToMentions": false
}
}
}
Connector capabilities
This plugin registers no elizaOS actions. Slack messaging is handled via the MessageConnector interface. The registered connector exposes these capabilities: send_message, read_messages, search_messages, resolve_targets, list_rooms, list_servers, chat_context, user_context, react_message, edit_message, delete_message, pin_message, get_user.
Events
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
API Reference
SlackService
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();
Troubleshooting
Bot not responding to messages
- 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
Permission errors
- 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
Socket Mode connection issues
- 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