mcpField
S
slack-automation

slack-automation

github.com/davepoon生产力3.7k122 次安装2 天前更新
代码仓库

关于 slack-automation

slack-automation 是通过 Rube MCP 调用 Composio Slack 工具包的自动化技能,适用于管理 Slack 工作区,支持消息、搜索、频道、用户和会话操作。

主要功能

  1. 01发送、编辑和定时发送消息
  2. 02搜索消息并读取会话串
  3. 03列出频道、用户和工作区信息
  4. 04添加或移除消息表情回应

适用场景

  1. 01发布或安排频道消息
  2. 02搜索工作区消息并查看会话串
  3. 03列出工作区频道和成员
  4. 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 密钥,只需添加端点即可使用。

  1. 确认 RUBE_SEARCH_TOOLS 能够响应,以验证 Rube MCP 已就绪
  2. 使用工具包 slack 调用 RUBE_MANAGE_CONNECTIONS
  3. 如果连接状态不是 ACTIVE,请按照返回的授权链接完成 Slack OAuth
  4. 运行任何工作流前,确认连接状态显示为 ACTIVE

核心工作流

1. 向频道发送消息

适用场景:用户希望向 Slack 频道或私信发送消息

工具调用顺序:

  1. SLACK_FIND_CHANNELS - 将频道名称解析为频道 ID [前置条件]
  2. SLACK_LIST_ALL_CHANNELS - 如果 FIND_CHANNELS 返回空结果或不明确的结果,则作为后备方案使用 [后备方案]
  3. SLACK_FIND_USERS - 为私信或 @提及解析用户 [可选]
  4. SLACK_OPEN_DM - 直接向用户发送消息时,打开或复用私信频道 [可选]
  5. SLACK_SEND_MESSAGE - 使用解析出的频道 ID 发送消息 [必需]
  6. 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. 搜索消息和对话

适用场景:用户希望在整个工作区中查找特定消息

工具调用顺序:

  1. SLACK_FIND_CHANNELS - 为限定频道的搜索解析频道,以便使用 in:#channel [可选]
  2. SLACK_FIND_USERS - 为作者筛选条件解析用户,以便使用 from:@user [可选]
  3. SLACK_SEARCH_MESSAGES - 在可访问的对话中进行关键词搜索 [必需]
  4. 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. 管理频道和用户

适用场景:用户想要列出频道、用户或工作区信息

工具调用顺序:

  1. SLACK_FETCH_TEAM_INFO - 验证连接并获取工作区标识 [必需]
  2. SLACK_LIST_ALL_CHANNELS - 列出所有公开频道 [必需]
  3. SLACK_LIST_CONVERSATIONS - 包含私密频道和私信 [可选]
  4. SLACK_LIST_ALL_USERS - 列出工作区成员 [必需]
  5. SLACK_RETRIEVE_CONVERSATION_INFORMATION - 获取详细的频道元数据 [可选]
  6. 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
  • SLACK_LIST_ALL_USERS 可能触发 HTTP 429 速率限制;请遵循 Retry-After 标头
  • 始终通过 response_metadata.next_cursor 分页,直到游标为空;按 id 去重
4. 对消息作出回应并管理消息串

适用场景:用户想要添加回应或管理消息串对话

工具调用顺序:

  1. SLACK_SEARCH_MESSAGES 或 SLACK_FETCH_CONVERSATION_HISTORY - 查找目标消息 [前置条件]
  2. SLACK_ADD_REACTION_TO_AN_ITEM - 添加表情符号回应 [必需]
  3. SLACK_FETCH_ITEM_REACTIONS - 列出消息上的回应 [可选]
  4. SLACK_REMOVE_REACTION_FROM_ITEM - 移除回应 [可选]
  5. SLACK_SEND_MESSAGE - 使用 thread_ts 在消息串中回复 [可选]
  6. SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATION - 阅读完整消息串 [可选]

关键参数:

  • channel:消息所在频道的 ID
  • timestamp / 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. 定时发送消息

适用场景:用户想要安排在未来发送消息

工具调用顺序:

  1. SLACK_FIND_CHANNELS - 确定频道 ID [前置条件]
  2. SLACK_SCHEDULE_MESSAGE - 使用 post_at 时间戳安排消息 [必需]

关键参数:

  • channel:已确定的频道 ID
  • post_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_CHANNELSquery
列出所有频道SLACK_LIST_ALL_CHANNELSlimit、cursor、types
发送消息SLACK_SEND_MESSAGEchannel、markdown_text
编辑消息SLACK_UPDATES_A_SLACK_MESSAGEchannel、ts、markdown_text
搜索消息SLACK_SEARCH_MESSAGESquery、count、sort
获取线程SLACK_FETCH_MESSAGE_THREAD_FROM_A_CONVERSATIONchannel、ts
添加回应SLACK_ADD_REACTION_TO_AN_ITEMchannel、name、timestamp
查找用户SLACK_FIND_USERSsearch_query 或 email
列出用户SLACK_LIST_ALL_USERSlimit、cursor
打开私信SLACK_OPEN_DM用户 ID
安排消息SLACK_SCHEDULE_MESSAGEchannel、post_at、text
获取频道信息SLACK_RETRIEVE_CONVERSATION_INFORMATION频道 ID
频道历史记录SLACK_FETCH_CONVERSATION_HISTORYchannel、oldest、latest
工作区信息SLACK_FETCH_TEAM_INFO(无)

由 Composio 提供支持

评论

支持 Markdown