关于 slack-automation
slack-automation 是通过 Rube MCP 调用 Composio Slack 工具包的自动化技能,适用于管理 Slack 工作区,支持消息、搜索、频道、用户和会话操作。
主要功能
- 01发送、编辑和定时发送消息
- 02搜索消息并读取会话串
- 03列出频道、用户和工作区信息
- 04添加或移除消息表情回应
适用场景
- 01发布或安排频道消息
- 02搜索工作区消息并查看会话串
- 03列出工作区频道和成员
- 04回应消息或在会话串中回复
MCP 相关
通过 Rube MCP 使用 Composio 的 Slack 工具包。运行工作流前需要发现工具并建立有效的 Slack 连接。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ davepoon/ buildwithclaude --skill slack-automation安装后在 Claude Code 中输入/slack-automation确认已加载。
详细介绍
通过 Rube MCP 自动化 Slack
通过 Composio 的 Slack 工具包自动化 Slack 工作区操作,包括消息发送、搜索、频道管理和反应工作流。
工具包文档:composio.dev/toolkits/slack
前提条件
- 必须已连接 Rube MCP(
RUBE_SEARCH_TOOLS可用) - 通过工具包为
slack的RUBE_MANAGE_CONNECTIONS建立有效的 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 频道或私信发送消息
工具调用顺序:
SLACK_FIND_CHANNELS- 将频道名称解析为频道 ID [前置条件]SLACK_LIST_ALL_CHANNELS- 如果 FIND_CHANNELS 返回空结果或不明确的结果,则作为后备方案使用 [后备方案]SLACK_FIND_USERS- 为私信或 @提及解析用户 [可选]SLACK_OPEN_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参数;缺少该参数会报错 "Invalid request data provided"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- 包含私密频道和私信 [可选]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_CONVERSATIONSSLACK_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 - 私信频道:使用已解析的用户 ID 调用
SLACK_OPEN_DM
分页
大多数列表端点使用基于游标的分页:
- 持续读取
response_metadata.next_cursor,直到游标为空 - 明确设置
limit值(例如 100-200),以确保分页可靠 - 跨页按
id去重
消息格式
- 格式化消息优先使用
markdown_text,而非text或blocks - 使用
<@USER_ID>格式提及用户(不要使用 @username) - 在 markdown_text 中使用
\n换行
已知陷阱
- 频道解析:如果频道是私有的,且机器人尚未受邀,
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 |
| 打开私信 | 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 提供支持
评论
支持 Markdown