Slack通知与通信技能Skill slack-notifications

这个技能用于通过 Slack API 实现消息发送、通道管理、用户交互、文件上传和反应添加等功能,适用于团队通信、事件通知和工作流警报。关键词:Slack、通知、消息、通道、团队通信、API、DevOps。

DevOps 0 次安装 0 次浏览 更新于 3/10/2026

名称: slack-notifications 描述: Slack 消息、通道和通知 - 发送消息、管理通道、与用户交互、上传文件以及添加反应。用于团队通信、事件通知和工作流警报。 版本: 1.0.0 模型: sonnet 调用方式: both 用户可调用: true 工具: [Bash, Read, WebFetch] 最佳实践:

  • 永远不要在日志中暴露机器人令牌
  • 使用最小权限范围
  • 在发布前验证通道权限 错误处理: graceful 流式传输: 支持 已验证: false 最后验证时间: 2026-02-19T05:29:09.098Z

模式: 认知/提示驱动 — 没有独立的实用脚本;通过代理上下文使用。

Slack 通知技能

概述

这个技能提供 Slack API 操作,具有渐进式披露以优化上下文使用。

上下文节省: 约 90% 减少

  • MCP 模式: 约 15,000 个令牌始终加载(30+ 工具)
  • 技能模式: 约 500 个令牌元数据 + 按需加载

要求

  • SLACK_BOT_TOKEN 环境变量(必需)
  • SLACK_SIGNING_SECRET 环境变量(可选,用于事件验证)
  • SLACK_APP_TOKEN 环境变量(可选,用于套接字模式)

设置 Slack 机器人令牌

  1. https://api.slack.com/apps 创建一个 Slack 应用
  2. 导航到 “OAuth & Permissions”
  3. 添加必需的机器人令牌范围:
    • chat:write - 发送消息
    • channels:read - 列出通道
    • channels:history - 读取通道历史
    • users:read - 列出用户
    • files:write - 上传文件
    • reactions:write - 添加反应
  4. 将应用安装到工作区
  5. 将 “Bot User OAuth Token” 复制到 SLACK_BOT_TOKEN 环境变量

工具

这个技能提供 14 个工具,分为 5 个类别:

类别 工具 需要确认
消息 post-message, post-thread, update-message, delete-message 是(全部)
通道 list-channels, get-channel, channel-history
用户 list-users, get-user, user-presence
文件 upload-file, list-files 是(仅上传)
反应 add-reaction, get-reactions

快速参考

# 向通道发送消息
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"channel": "C1234567890", "text": "Hello from Claude!"}'

# 列出通道
curl -X GET "https://slack.com/api/conversations.list" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

# 上传文件
curl -X POST https://slack.com/api/files.upload \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -F "channels=C1234567890" \
  -F "file=@report.pdf" \
  -F "title=Weekly Report"

工具详情

消息工具(需要确认)

post-message

向 Slack 通道发送消息。

参数:

  • channel(必需):通道 ID 或名称(例如,“C1234567890” 或 “#general”)
  • text(必需):消息文本(支持 Slack markdown)
  • thread_ts(可选):父消息时间戳用于线程化
  • blocks(可选):富消息块(JSON 数组)

示例:

curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "text": "Deployment successful!",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Deployment Status*
:white_check_mark: Production deployed successfully"
        }
      }
    ]
  }'

post-thread

在线程中回复消息。

参数:

  • channel(必需):通道 ID
  • thread_ts(必需):父消息时间戳
  • text(必需):回复文本

示例:

curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "thread_ts": "1234567890.123456",
    "text": "Thread reply here"
  }'

update-message

更新现有消息。

参数:

  • channel(必需):通道 ID
  • ts(必需):消息时间戳
  • text(必需):新消息文本

示例:

curl -X POST https://slack.com/api/chat.update \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "ts": "1234567890.123456",
    "text": "Updated message"
  }'

delete-message

删除消息。

参数:

  • channel(必需):通道 ID
  • ts(必需):消息时间戳

示例:

curl -X POST https://slack.com/api/chat.delete \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "ts": "1234567890.123456"
  }'

通道工具

list-channels

列出工作区中的所有通道。

参数:

  • types(可选):逗号分隔的通道类型(默认:“public_channel”)
    • 选项:“public_channel”, “private_channel”, “mpim”, “im”
  • limit(可选):返回的最大通道数(默认:100)

示例:

curl -X GET "https://slack.com/api/conversations.list?types=public_channel,private_channel" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

get-channel

获取通道信息。

参数:

  • channel(必需):通道 ID

示例:

curl -X GET "https://slack.com/api/conversations.info?channel=C1234567890" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

channel-history

获取通道消息历史。

参数:

  • channel(必需):通道 ID
  • limit(可选):返回的最大消息数(默认:100)
  • oldest(可选):时间范围的开始(Unix 时间戳)
  • latest(可选):时间范围的结束(Unix 时间戳)

示例:

curl -X GET "https://slack.com/api/conversations.history?channel=C1234567890&limit=50" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

安全注意: 通道历史可能包含敏感信息。谨慎使用。

用户工具

list-users

列出工作区中的所有用户。

参数:

  • limit(可选):返回的最大用户数(默认:100)

示例:

curl -X GET "https://slack.com/api/users.list" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

get-user

获取用户配置文件信息。

参数:

  • user(必需):用户 ID

示例:

curl -X GET "https://slack.com/api/users.info?user=U1234567890" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

user-presence

获取用户在线状态。

参数:

  • user(必需):用户 ID

示例:

curl -X GET "https://slack.com/api/users.getPresence?user=U1234567890" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

文件工具

upload-file(需要确认)

将文件上传到 Slack 通道。

参数:

  • channels(必需):逗号分隔的通道 ID
  • file(必需):要上传的文件路径
  • title(可选):文件标题
  • initial_comment(可选):消息文本

示例:

curl -X POST https://slack.com/api/files.upload \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -F "channels=C1234567890" \
  -F "file=@C:\reports\weekly.pdf" \
  -F "title=Weekly Report" \
  -F "initial_comment=Here is this week's report"

list-files

列出通道中的文件。

参数:

  • channel(可选):通道 ID 用于过滤
  • user(可选):用户 ID 用于过滤
  • count(可选):返回的最大文件数(默认:100)

示例:

curl -X GET "https://slack.com/api/files.list?channel=C1234567890" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

反应工具

add-reaction

向消息添加表情反应。

参数:

  • channel(必需):通道 ID
  • timestamp(必需):消息时间戳
  • name(必需):表情名称(不带冒号,例如 “thumbsup”)

示例:

curl -X POST https://slack.com/api/reactions.add \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "C1234567890",
    "timestamp": "1234567890.123456",
    "name": "thumbsup"
  }'

get-reactions

获取消息上的反应。

参数:

  • channel(必需):通道 ID
  • timestamp(必需):消息时间戳

示例:

curl -X GET "https://slack.com/api/reactions.get?channel=C1234567890&timestamp=1234567890.123456" \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN"

代理集成

主要代理

  • devops: 基础设施警报、部署通知、监控
  • incident-responder: 事件警报、状态更新、升级

次要代理

  • pm: 冲刺通知、里程碑更新、团队公告
  • developer: 构建通知、PR 警报、测试结果
  • qa: 测试失败警报、质量报告
  • security-architect: 安全警报、漏洞通知

常见用例

部署通知

# 通知通道部署成功
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "#deployments",
    "text": ":rocket: Production deployment completed",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Production Deployment*
:white_check_mark: v1.2.3 deployed successfully
*Duration:* 5m 23s"
        }
      }
    ]
  }'

事件警报

# 提醒 on-call 团队事件
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "#incidents",
    "text": "<!channel> :rotating_light: High severity incident detected",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Incident INC-1234*
:rotating_light: *Severity:* P1
*Service:* API Gateway
*Status:* 503 errors increasing"
        }
      }
    ]
  }'

测试结果

# 发布测试结果
curl -X POST https://slack.com/api/chat.postMessage \
  -H "Authorization: Bearer $SLACK_BOT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "#qa",
    "text": "Test suite completed",
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "*Test Results*
:white_check_mark: 245 passed
:x: 3 failed
:warning: 2 skipped"
        }
      }
    ]
  }'

安全考虑

令牌安全

  • 永远不要在日志或错误消息中暴露机器人令牌
  • 将令牌存储在环境变量中,而不是代码中
  • 使用最小权限范围的机器人令牌
  • 定期轮换令牌

消息安全

  • 所有消息操作都需要确认
  • 通道历史可能包含敏感信息(PII、凭证等)
  • 在发布前验证通道权限
  • 使用私有通道进行敏感通信

数据隐私

  • 遵守工作区数据保留政策
  • 避免在消息中发布 PII 或凭证
  • 使用 Slack 的数据导出功能以符合合规要求
  • 尊重用户隐私和在线状态

错误处理

常见错误

错误 原因 解决方案
not_authed 缺少或无效的令牌 检查 SLACK_BOT_TOKEN 是否正确设置
channel_not_found 无效的通道 ID 使用 list-channels 验证通道 ID
missing_scope 机器人缺少必需的权限 在 Slack 应用设置中添加范围
rate_limited 请求过多 实现指数退避
message_not_found 无效的时间戳 检查消息时间戳是否正确

重试策略

对于速率限制错误,实现指数退避:

  1. 等待 1 秒,重试
  2. 等待 2 秒,重试
  3. 等待 4 秒,重试
  4. 等待 8 秒,重试
  5. 在 5 次尝试后放弃

速率限制

Slack API 速率限制:

  • 第 1 层: 每秒 1 个请求
  • 第 2 层: 每分钟 20 个请求
  • 第 3 层: 每分钟 50 个请求
  • 第 4 层: 每分钟 100 个请求

按层分类的方法:

  • chat.postMessage: 第 3 层(50/分钟)
  • conversations.list: 第 2 层(20/分钟)
  • users.list: 第 2 层(20/分钟)
  • files.upload: 第 4 层(100/分钟)

相关

记忆协议(强制)

开始前: 阅读 .claude/context/memory/learnings.md

完成后:

  • 新模式 -> .claude/context/memory/learnings.md
  • 发现问题 -> .claude/context/memory/issues.md
  • 决策 -> .claude/context/memory/decisions.md

假设中断:如果不在记忆中,就没有发生过。