mcpField
S
slack

slack

github.com/acedatacloud生产力17207 次安装今天更新
代码仓库

关于 slack

slack 是一项使用 Slack Web API 的技能,适用于读取已加入频道的内容、搜索公开频道消息及发送经确认的消息。它区分 Bot token 与用户 token,并明确限定各自可执行的操作。

主要功能

  1. 01读取应用已加入频道的历史和线程
  2. 02搜索授权用户可见的公开频道消息
  3. 03列出频道并查询成员
  4. 04经确认后发送频道消息或线程回复
  5. 05校验 Slack 响应并遵守速率限制

适用场景

  1. 01查找公开频道中的部署讨论
  2. 02查看已加入频道的近期消息
  3. 03确认工作区和频道后准备发送回复
  4. 04在已加入的私有频道中筛查近期关键词

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/acedatacloud/skills --skill slack

安装后在 Claude Code 中输入/slack确认已加载。

详细介绍

使用已连接的机器人令牌 $SLACK_TOKEN 调用 Slack Web API,读取已加入频道的内容并发送已确认的消息。单独的用户令牌 $SLACK_USER_TOKEN 仅用于搜索公开频道。仅通过 HTTPS 将任一令牌发送至 https://slack.com/api/。检查每个响应的 JSON ok 字段和 HTTP 状态;调用失败时,报告 Slack 返回的错误值。遇到 HTTP 429 时遵循 Retry-After。

消息由 AceDataCloud 机器人发送,而不是通过用户的 Slack 账号发送。该应用无法上传文件或加入频道。只有在应用已加入的频道中,才能查看机器人的频道和对话历史记录。公开搜索涵盖已授权用户所在工作区的公开频道,包括机器人尚未加入的频道;不涵盖私有频道或私信。机器人令牌不能使用 Slack 的旧版 search.messages 方法,也不能在没有 Slack 事件 action_token 的情况下使用实时搜索。绝不要使用用户令牌发布消息。

搜索公开频道消息

用户发起公开搜索时,使用 Slack 的实时搜索 API。如果 $SLACK_USER_TOKEN 不存在,请说明 Slack 连接需要重新授权才能进行公开搜索,并提供链接 https://studio.acedata.cloud/console/connectors;不要默默改为扫描近期历史记录。明确将 channel_types 限定为 public_channel,并将 content_types 限定为 messages。每页最多请求 20 条结果,仅在需要时使用 next_cursor 翻页,并向用户提供消息永久链接作为来源。不要在当前任务之外保存 Slack 搜索结果。

QUERY="deployment issue"
curl -sS -X POST https://slack.com/api/assistant.search.context \
  -H "Authorization: Bearer $SLACK_USER_TOKEN" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d "$(jq -nc --arg q "$QUERY" \
    '{query:$q, channel_types:["public_channel"], content_types:["messages"], limit:20}')" \
  | jq '{ok, error, next_cursor, messages: [.results.messages[]? | {content, author_name, channel_name, message_ts, permalink}]}'

如果 Slack 返回错误,请报告该错误,不要把空结果说成搜索成功。搜索结果受已授权用户对公开频道的访问权限以及 Slack 的搜索排序和保留规则限制。

验证已连接的工作区

curl -sS -H "Authorization: Bearer $SLACK_TOKEN" \
  https://slack.com/api/auth.test

使用返回的团队和机器人用户信息,检查连接是否指向用户预期的工作区。

列出应用可见的频道

curl -sS -G -H "Authorization: Bearer $SLACK_TOKEN" \
  https://slack.com/api/conversations.list \
  --data-urlencode "types=public_channel,private_channel" \
  --data-urlencode "limit=200"

使用 response_metadata.next_cursor 翻页。根据此响应解析频道名称对应的 ID,不要编造 ID。

读取频道历史记录或线程

curl -sS -G -H "Authorization: Bearer $SLACK_TOKEN" \
  https://slack.com/api/conversations.history \
  --data-urlencode "channel=C0123456789" \
  --data-urlencode "limit=15"

curl -sS -G -H "Authorization: Bearer $SLACK_TOKEN" \
  https://slack.com/api/conversations.replies \
  --data-urlencode "channel=C0123456789" \
  --data-urlencode "ts=1777656720.123456"

只有应用是成员时,才读取私有频道或私信。如果 Slack 返回 not_in_channel 或 channel_not_found,请让用户将应用添加到该对话中。不要尝试自动加入。

在一个已加入的私有频道或私信中查找关键词

对于机器人已加入的私有频道或私信,仅获取该对话的近期历史记录并在本地筛选。这是范围受限的近期历史记录扫描,不是 Slack 的公开搜索。说明时间范围,并说明是否仍有更早的未读消息。对于 Slack Marketplace 之外新安装的商业应用,Slack 可能会将 conversations.history 限制为每分钟一次调用且最多 15 条消息;请遵循 Retry-After,不要同时扫描多个频道。

KEYWORD="deploy"
curl -sS -G -H "Authorization: Bearer $SLACK_TOKEN" \
  https://slack.com/api/conversations.history \
  --data-urlencode "channel=C0123456789" \
  --data-urlencode "limit=15" \
  | jq --arg q "$KEYWORD" '{ok, error, has_more, matches: [.messages[]? | select((.text // "") | contains($q)) | {ts, user, text}]}'

如果 Slack 返回错误,请报告错误,不要声称搜索成功。匹配列表为空仅表示已获取的消息中没有匹配项,并不能证明该关键词在频道的完整历史记录中不存在。

解析成员

curl -sS -G -H "Authorization: Bearer $SLACK_TOKEN" \
  https://slack.com/api/users.lookupByEmail \
  --data-urlencode "[email protected]"

仅使用成员详情来识别已检索内容中的人员。不要发送未经请求的私信,也不要为了联系他人而枚举成员。

发送消息或回复线程

每次发送前,先确认准确的工作区、频道或现有对话,以及最终消息文本。调用 request_action_confirmation,设置 kind: "generic",并展示这三项内容。只有用户确认后才能发送。如果确认工具不可用,则返回草稿。如果这是无人值守的运行任务,只有在已保存的任务明确授权了对应的目标位置和内容时才能发送;否则返回草稿。

机器人必须已是目标频道或对话的成员。如果 Slack 返回 not_in_channel 或 channel_not_found,请用户将应用添加到该处。不要调用 conversations.join。如果 chat.postMessage 请求的结果未知,不要重试;应先检查频道历史记录,以避免重复发送。

curl -sS -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_TOKEN" \
  -H "Content-Type: application/json; charset=utf-8" \
  -d "$(jq -nc --arg ch "C0123456789" --arg text "Confirmed message" \
    '{channel:$ch, text:$text}')"

回复现有线程时,请在载荷中包含准确的 thread_ts。检查响应中的 ok、channel 和 ts,并报告已发送消息的链接,或频道和时间戳。

如果 auth.test 返回 not_authed 或 invalid_auth,请用户访问 https://studio.acedata.cloud/console/connectors 重新连接 Slack。

评论

支持 Markdown