Slack Integration
Connection
- Base URL:
https://slack.com/api/
- Auth:
Authorization: Bearer $SLACK_BOT_TOKEN (or $SLACK_BOT_TOKEN_2 for secondary workspace)
- Credentials:
SLACK_BOT_TOKEN (primary), SLACK_BOT_TOKEN_2 (secondary workspace)
- Caching: 2-minute in-memory cache, max 200 entries; separate user/bot caches
Server Lib
- File:
server/lib/slack.ts
Exported Functions
| Function |
Description |
getTeamInfo(workspace) |
Get workspace info |
listChannels(workspace) |
List channels (paginated, first page cached) |
getChannelHistory(workspace, channelId, limit?, cursor?) |
Channel message history |
searchMessages(workspace, query, count?) |
Search messages |
getUserInfo(workspace, userId) |
Get user info (cached per user) |
getBotInfo(workspace, botId) |
Get bot info (cached) |
resolveUsers(workspace, userIds, messages?) |
Batch resolve user names |
Agent Action
Use slack-messages for agent-facing Slack reads. Do not call
/api/slack/* directly from the agent.
| Mode |
Args |
Description |
team |
workspace |
Get workspace info |
channels |
workspace |
List channels |
history |
workspace, channel, limit, cursor |
Read channel history |
multi-history |
workspace, channels, names, limit, cursors |
Read multiple channels |
search |
workspace, query |
Search messages |
Key Patterns & Gotchas
- Two workspaces supported via workspace parameter ("primary" / "secondary")
getChannelHistory auto-joins channels on "not_in_channel" error, then retries — requires channels:join scope
- If auto-join fails, throws a detailed message explaining how to invite the bot
searchMessages may require user token; bot token tried first
listChannels paginates via cursor; only first page is cached
getUserInfo resolves bots via getBotInfo when needed