名称:slack-automation 描述:通过Rube MCP(Composio)自动化Slack消息发送、频道管理、搜索、反应和线程。程序化地发送消息、搜索对话、管理频道/用户和反应消息。 requires: mcp: [rube] category: communication
通过Rube MCP的Slack自动化
自动化Slack工作空间操作,包括消息发送、搜索、频道管理和反应工作流程,通过Composio的Slack工具包。
工具包文档: composio.dev/toolkits/slack
先决条件
- Rube MCP必须已连接(RUBE_SEARCH_TOOLS可用)
- 通过
RUBE_MANAGE_CONNECTIONS与工具包slack的活跃Slack连接 - 始终首先调用
RUBE_SEARCH_TOOLS以获取当前工具模式
设置
获取Rube MCP: 在客户端配置中添加https://rube.app/mcp作为MCP服务器。无需API密钥 — 只需添加端点即可工作。
- 通过确认
RUBE_SEARCH_TOOLS响应验证Rube MCP可用 - 使用工具包
slack调用RUBE_MANAGE_CONNECTIONS - 如果连接不是ACTIVE,按照返回的认证链接完成Slack OAuth
- 在运行任何工作流程前确认连接状态显示为ACTIVE
核心工作流程
1. 发送消息到频道
使用时机: 用户想要向Slack频道或DM发送消息
工具序列:
SLACK_FIND_CHANNELS- 将频道名称解析为频道ID [先决条件]SLACK_LIST_ALL_CHANNELS- 如果FIND_CHANNELS返回空/模糊结果时的备用方案 [备用]SLACK_FIND_USERS- 为DM或@提及解析用户 [可选]SLACK_OPEN_DM- 如果直接消息用户,打开/重用DM频道 [可选]SLACK_SEND_MESSAGE- 使用解析的频道ID发布消息 [必需]SLACK_UPDATES_A_SLACK_MESSAGE- 如果需要更正,编辑已发布的消息 [可选]
关键参数:
channel: 频道ID或名称(不带’#'前缀)markdown_text: 格式化消息的推荐字段(支持标题、粗体、斜体、代码块)text: 原始文本备用(推荐使用markdown_text)thread_ts: 父消息的时间戳以在线程中回复blocks: Block Kit布局块(推荐使用markdown_text)
常见问题:
SLACK_FIND_CHANNELS需要query参数;缺少它会导致错误“提供了无效的请求数据”SLACK_SEND_MESSAGE需要有效的频道加上markdown_text/text/blocks/attachments之一- 无效的块载荷返回error=invalid_blocks(最多50个块)
- 如果省略
thread_ts,回复成为顶级帖子 - 从SEND_MESSAGE响应中持久化
response.data.channel和response.data.message.ts以用于编辑/线程操作
2. 搜索消息和对话
使用时机: 用户想要在工作空间中查找特定消息
工具序列:
SLACK_FIND_CHANNELS- 使用in:#channel解析频道以进行范围搜索 [可选]SLACK_FIND_USERS- 使用from:@user解析用户以进行作者筛选 [可选]SLACK_SEARCH_MESSAGES- 在可访问的对话中运行关键字搜索 [必需]SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION- 为相关命中展开线程 [必需]
关键参数:
query: 支持修饰符的搜索字符串(in:#channel,from:@user,before:YYYY-MM-DD,after:YYYY-MM-DD,has:link,has:file)count: 每页结果数(最多100),或使用auto_paginate=true时的总数sort: ‘score’(相关性)或’timestamp’(时间顺序)sort_dir: ‘asc’或’desc’
常见问题:
- 如果
query缺失/为空,验证失败 ok=true仍然可能意味着没有命中(response.data.messages.total=0)- 匹配在
response.data.messages.matches下(有时也在response.data_preview.messages.matches) match.text可能为空/截断;关键信息可能出现在matches[].attachments[]中- 通过FETCH_MESSAGE_THREAD的线程扩展可能在
response.data.has_more=true时截断;通过response_metadata.next_cursor分页
3. 管理频道和用户
使用时机: 用户想要列出频道、用户或工作空间信息
工具序列:
SLACK_FETCH_TEAM_INFO- 验证连接性并获取工作空间身份 [必需]SLACK_LIST_ALL_CHANNELS- 枚举公共频道 [必需]SLACK_LIST_CONVERSATIONS- 包括私有频道和DMs [可选]SLACK_LIST_ALL_USERS- 列出工作空间成员 [必需]SLACK_RETRIEVE_CONVERSATION_INFORMATION- 获取详细的频道元数据 [可选]SLACK_LIST_USER_GROUPS_FOR_TEAM_WITH_OPTIONS- 列出用户组 [可选]
关键参数:
cursor: 从response_metadata.next_cursor的分页游标limit: 每页结果数(默认值不同;为大型工作空间显式设置)types: 频道类型筛选器(‘public_channel’, ‘private_channel’, ‘im’, ‘mpim’)
常见问题:
- 工作空间元数据嵌套在
response.data.team下,而不是顶级 SLACK_LIST_ALL_CHANNELS仅返回公共频道;使用SLACK_LIST_CONVERSATIONS覆盖私有/IMSLACK_LIST_ALL_USERS可能达到HTTP 429速率限制;尊重Retry-After头部- 通过
response_metadata.next_cursor分页直到为空;通过id去重
4. 反应和线程消息
使用时机: 用户想要添加反应或管理线程对话
工具序列:
SLACK_SEARCH_MESSAGES或SLACK_FETCH_CONVERSATION_HISTORY- 查找目标消息 [先决条件]SLACK_ADD_REACTION_TO_AN_ITEM- 添加表情反应 [必需]SLACK_FETCH_ITEM_REACTIONS- 列出消息上的反应 [可选]SLACK_REMOVE_REACTION_FROM_ITEM- 移除反应 [可选]SLACK_SEND_MESSAGE- 使用thread_ts在线程中回复 [可选]SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION- 读取完整线程 [可选]
关键参数:
channel: 消息所在的频道IDtimestamp/ts: 消息时间戳(唯一标识符如’1234567890.123456’)name: 表情名称无冒号(例如’thumbsup’, ‘wave::skin-tone-3’)thread_ts: 用于线程回复的父消息时间戳
常见问题:
- 反应需要精确的频道ID + 消息时间戳对
- 表情名称使用Slack的命名约定无冒号
SLACK_FETCH_CONVERSATION_HISTORY仅返回主频道时间线,不包括线程回复- 使用父消息的
thread_ts的SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION获取线程回复
5. 安排消息
使用时机: 用户想要为未来交付安排消息
工具序列:
SLACK_FIND_CHANNELS- 解析频道ID [先决条件]SLACK_SCHEDULE_MESSAGE- 使用post_at时间戳安排消息 [必需]
关键参数:
channel: 解析的频道IDpost_at: 交付的Unix时间戳(最多提前120天)text/blocks: 消息内容
常见问题:
- 安排最多提前120天
post_at必须是Unix时间戳,而不是ISO 8601
常见模式
ID解析
始终在操作前将显示名称解析为ID:
- 频道名称 -> 频道ID: 带
query参数的SLACK_FIND_CHANNELS - 用户名称 -> 用户ID: 带
search_query或email的SLACK_FIND_USERS - DM频道: 带解析的用户ID的
SLACK_OPEN_DM
分页
大多数列表端点使用游标分页:
- 跟随
response_metadata.next_cursor直到为空 - 为可靠分页设置显式
limit值(例如100-200) - 跨页面通过
id去重结果
消息格式化
- 推荐使用
markdown_text而不是text或blocks用于格式化消息 - 使用
<@USER_ID>格式提及用户(不是@用户名) - 在markdown_text中使用
进行换行
已知问题
- 频道解析: 如果频道是私有的且机器人未被邀请,
SLACK_FIND_CHANNELS可能返回空结果 - 速率限制:
SLACK_LIST_ALL_USERS和其他列表端点可能达到HTTP 429;尊重Retry-After头部 - 嵌套响应: 在包装的执行中,结果可能嵌套在
response.data.results[0].response.data下 - 线程与频道:
SLACK_FETCH_CONVERSATION_HISTORY仅返回主时间线;使用SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION用于线程回复 - 消息编辑: 需要
channel和原始消息ts;从SEND_MESSAGE响应持久化这些 - 搜索延迟: 最近发布的消息可能不会立即出现在搜索结果中
- 范围限制: 缺少OAuth范围可能导致403错误;使用
SLACK_GET_APP_PERMISSION_SCOPES检查
快速参考
| 任务 | 工具标识 | 关键参数 |
|---|---|---|
| 查找频道 | SLACK_FIND_CHANNELS |
query |
| 列出所有频道 | SLACK_LIST_ALL_CHANNELS |
limit, cursor, types |
| 发送消息 | SLACK_SEND_MESSAGE |
channel, markdown_text |
| 编辑消息 | SLACK_UPDATES_A_SLACK_MESSAGE |
channel, ts, markdown_text |
| 搜索消息 | SLACK_SEARCH_MESSAGES |
query, count, sort |
| 获取线程 | SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION |
channel, ts |
| 添加反应 | SLACK_ADD_REACTION_TO_AN_ITEM |
channel, name, timestamp |
| 查找用户 | SLACK_FIND_USERS |
search_query或email |
| 列出用户 | SLACK_LIST_ALL_USERS |
limit, cursor |
| 打开DM | SLACK_OPEN_DM |
用户ID |
| 安排消息 | SLACK_SCHEDULE_MESSAGE |
channel, post_at, text |
| 获取频道信息 | SLACK_RETRIEVE_CONVERSATION_INFORMATION |
频道ID |
| 频道历史 | SLACK_FETCH_CONVERSATION_HISTORY |
channel, oldest, latest |
| 工作空间信息 | SLACK_FETCH_TEAM_INFO |
(无) |
由Composio提供支持