SuperAPI AI 工具集

slack

办公与效率

查看项目

更新于 10-16 02:15

技能介绍

Slack 技能通过 Slack Web API 与 Slack 进行交互,可读取、写入、搜索消息,添加表情回应、置顶内容以及管理会话。适用场景为用户分享 Slack 链接,或需要操作 Slack 会话时。

【首次使用初始化】 在执行任何 Slack 操作前,需检查模式配置文件是否存在:cat ~/.agents/config/slack/config.env。若文件不存在或不含 SLACK_MODE,必须询问用户选择模式,共三种:

  • Token(仅 macOS):直接从 Chrome 提取会话令牌,速度最快。需 Chrome 打开 Slack、启用 AppleScript,并安装 uvx。
  • Browser(跨平台):使用本地 Playwright 浏览器发起 API 调用,支持 macOS、Linux、Windows。需 Node.js 18+,支持 SSO 和 2FA 登录。
  • Auto-detect(推荐):若存在 Playwright 会话则自动使用浏览器模式,否则回退到 token 模式。 选定后立即保存:mkdir -p ~/.agents/config/slack 并写入 echo 'SLACK_MODE=<selected_value>' > ~/.agents/config/slack/config.env(<selected_value> 为 token、browser 或 auto)。保存后不再询问。若选择 browser 模式,还需运行浏览器会话设置:{SKILL_DIR}/scripts/slack-browser-session.sh login-manual,该命令会打开可见浏览器供用户登录 Slack(支持 SSO/2FA),会话保存后供后续所有 API 调用复用。

【模式配置】 可通过 ~/.agents/config/slack/config.env 或 SLACK_MODE 环境变量设置。环境变量优先于配置文件。例如:SLACK_MODE=browser slack-api.sh conversations.history channel=C041RSY6DN2 limit=20。

【配置与状态目录】 所有配置和状态位于 ~/.agents/config/slack/:config.env(模式选择)、tokens.env(缓存的会话令牌 xoxc、xoxd、user-agent)、browser-session(活动浏览器会话 ID)、sessions/<id>/storageState.json(Playwright 会话 cookie 与 localStorage)。该目录首次使用时自动创建。

【API 封装】 所有调用通过统一脚本进行:{SKILL_DIR}/scripts/slack-api.sh <method> [key=value ...]。脚本根据配置自动路由到正确模式。完整方法参考见 references/api-methods.md。

【Token 模式(macOS)】 从正在运行的 Chrome 浏览器提取会话令牌并直接 curl 调用 Slack Web API。前提:Chrome 运行且 Slack 打开于 app.slack.com;启用 Chrome > View > Developer > Allow JavaScript from Apple Events;安装 uvx(brew install uv)。无需手动设置,首次 API 调用时自动提取令牌。

【Browser 模式(跨平台)】 使用本地 Playwright Chromium 实例维持 Slack 会话,通过浏览器上下文内的 fetch() 发起 API 调用,无需提取令牌。支持 macOS、Linux、Windows。前提:Node.js 18+,Playwright 首次使用时自动安装(下载 Chromium,约 150 MB)。详见 references/browser-mode.md。

【Browser 模式快速开始】

  1. echo 'SLACK_MODE=browser' > ~/.agents/config/slack/config.env;2) {SKILL_DIR}/scripts/slack-browser-session.sh login-manual 手动登录(支持 SSO/2FA),或使用 start 与 login user@example.com mypassword 自动登录;3) 用 status 验证登录;4) 用 slack-api.sh 发起 API 调用;5) 完成后用 stop 关闭。

【UI 自动化(API 能力缺口)】 浏览器模式还可直接与 Slack Web UI 交互,用于缺乏 API 支持的功能,例如 Canvas 创建与编辑、Huddle 互动、Workflow Builder 配置、Slack Connect 邀请、管理与设置页面、通过截图进行可视化消息验证。使用方式涉及获取会话 ID、goto 导航、snapshot 获取交互元素、interact 点击、screenshot 截图。

【解析 Slack URL】 从链接 https://{WORKSPACE}.slack.com/archives/{CHANNEL_ID}/p{TIMESTAMP_WITHOUT_DOT} 中提取频道与时间戳,在时间戳最后 6 位数字前插入小数点,例如 p1770725748342899 对应 ts 1770725748.342899。线程消息 URL 可能包含 ?thread_ts= 参数。

【读取操作】 读取线程:conversations.replies channel=CHANNEL_ID ts=THREAD_TS limit=100;读取频道历史:conversations.history channel=CHANNEL_ID limit=20(可选 oldest/latest 限定时间范围);搜索消息:search.messages query="search terms" count=10,支持 in:#channel、from:@user、before:YYYY-MM-DD、after:YYYY-MM-DD、has:link、has:reaction、has:pin 等修饰符;按名称查找频道:conversations.list 结合 Python 过滤;查询用户:users.info user=USER_ID;列出置顶项:pins.list channel=CHANNEL_ID;列出频道成员:conversations.members channel=CHANNEL_ID limit=100。

【写入操作】 重要:任何写操作前必须确认。在发送、编辑、删除消息,添加/移除表情回应,或置顶/取消置顶前,始终向用户展示预览并请求确认,格式为:To(#channel-name 或 DM 的 @username)、Message(确切消息文本)、Action(Send / Edit / Delete / React / Pin)。未获得用户明确确认前不得执行写 API 调用。

  • 发送消息:chat.postMessage channel=CHANNEL_ID text="Hello world";线程回复加 thread_ts=PARENT_TS,广播到频道加 reply_broadcast=true。
  • 发送格式化多行消息:含换行、加粗、列表等 mrkdwn 格式时应使用 blocks 而非 text。browser 模式下 text 参数经 URLSearchParams 会双重转义换行,blocks 更可靠。用 Python 构建 blocks JSON 后传入,并始终附带 text 作为纯文本摘要回退。每个 block 的 text 字段限 3000 字符,超长需拆分到多个 section 块。
  • 编辑消息:chat.update channel=CHANNEL_ID ts=MESSAGE_TS text="Updated text"。
  • 删除消息:chat.delete channel=CHANNEL_ID ts=MESSAGE_TS。
  • 添加表情回应:reactions.add channel=CHANNEL_ID timestamp=MESSAGE_TS name=thumbsup(表情名不带冒号,支持肤色如 thumbsup::skin-tone-3)。
  • 移除表情回应:reactions.remove。
  • 置顶消息:pins.add channel=CHANNEL_ID timestamp=MESSAGE_TS;取消置顶:pins.remove。

【图片与文件处理】 消息可能含文件。token 模式下,source ~/.agents/config/slack/tokens.env 后用 curl 携带 Authorization: Bearer ${SLACK_XOXC} 与 Cookie: d=${SLACK_XOXD} 下载到本地。browser 模式下,导航到文件 URL 并截图,再用 Read 工具查看。

【输出格式化】 用 python3 -c 解析 JSON;通过 users.info 将用户 ID(U...)解析为真实姓名(缓存查询);展示消息时附带时间戳与姓名;将 <@U...> 提及替换为解析后的真实姓名;将 Slack 标记(实体、链接语法、频道引用)解码为纯文本。

【速率限制】 连续 API 调用之间加 sleep 1;不要对大数据集(users.list)进行批量分页,会拖垮会话;优先使用定向查询而非批量抓取;浏览器模式每次调用有额外延迟,尽可能批处理。

【令牌刷新(Token 模式,自动)】 令牌刷新完全自动:tokens.env 缺失时自动刷新;遇 invalid_auth 错误自动刷新并重试。令牌从运行中的 Chrome 提取:xoxc 通过 AppleScript 从 Slack localStorage 获取,xoxd 通过 lsof + pycookiecheat 从 Chrome cookie 数据库获取。

【安装设置】 Token 模式(macOS):打开 Chrome 并访问 app.slack.com;启用 Allow JavaScript from Apple Events;brew install uv;可选设置 SLACK_MODE=token。Browser 模式(跨平台):从 https://nodejs.org 安装 Node.js 18+;设置 SLACK_MODE=browser 并运行 slack-browser-session.sh login-manual;Playwright 与 Chromium 首次使用时自动安装。Auto-detect(默认):无需配置,优先检查活动浏览器会话并通过 Playwright 调用,若返回 invalid_auth、not_authed 或 no_teams_found,则自动回退到 token 模式。

【完整 API 参考】 更多方法(bookmarks、用户组、提醒、emoji、文件、用户资料等)见 references/api-methods.md。

【错误处理】 not_in_channel:用户无权访问该频道;channel_not_found:频道 ID 无效;invalid_auth:令牌过期,已尝试自动刷新(token 模式);ratelimited:等待并用 sleep 5 重试;cant_update_message / cant_delete_message:只能修改自己的消息;no_browser_session:无活动浏览器会话,运行 slack-browser-session.sh start;node_not_found:未安装 Node.js;no_teams_found:Slack 尚未在浏览器中加载工作区数据,等待后重试。自动回退:auto 模式下,若浏览器调用返回 invalid_auth、not_authed 或 no_teams_found,技能会自动通过 token 模式重试,无需手动干预。