plugins/plugin-slack/README.md
Slack integration plugin for ElizaOS agents with Socket Mode support.
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:write scope
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 addressesEnable 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 removedInstall 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
}
}
}
Slack messaging is exposed through the canonical message connector actions. Use
source: "slack" when a request needs to target Slack explicitly.
| Primary action | Operation | Description |
|---|---|---|
MESSAGE | send | Send a message to a channel, DM, or thread |
MESSAGE | read | Read recent message history from a channel, DM, or thread |
MESSAGE | search | Search Slack message history |
MESSAGE | list_channels | List available channels |
MESSAGE | list_servers | List connected Slack workspaces |
MESSAGE | react | Add or remove emoji reactions |
MESSAGE | edit | Edit an existing message |
MESSAGE | delete | Delete a message |
MESSAGE | pin | Pin or unpin a message |
MESSAGE | get_user | Get information about a user |
| 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 sharedThe 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();
SLACK_BOT_TOKEN and SLACK_APP_TOKEN are correctSLACK_SHOULD_RESPOND_ONLY_TO_MENTIONS is enabledSLACK_APP_TOKEN starts with xapp-connections:write scopeMIT