名称: 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 机器人令牌
- 在 https://api.slack.com/apps 创建一个 Slack 应用
- 导航到 “OAuth & Permissions”
- 添加必需的机器人令牌范围:
chat:write- 发送消息channels:read- 列出通道channels:history- 读取通道历史users:read- 列出用户files:write- 上传文件reactions:write- 添加反应
- 将应用安装到工作区
- 将 “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(必需):通道 IDthread_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(必需):通道 IDts(必需):消息时间戳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(必需):通道 IDts(必需):消息时间戳
示例:
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(必需):通道 IDlimit(可选):返回的最大消息数(默认: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(必需):逗号分隔的通道 IDfile(必需):要上传的文件路径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(必需):通道 IDtimestamp(必需):消息时间戳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(必需):通道 IDtimestamp(必需):消息时间戳
示例:
curl -X GET "https://slack.com/api/reactions.get?channel=C1234567890×tamp=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 秒,重试
- 等待 2 秒,重试
- 等待 4 秒,重试
- 等待 8 秒,重试
- 在 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/分钟)
相关
- Slack API 文档: https://api.slack.com/docs
- Block Kit 构建器: https://app.slack.com/block-kit-builder
- Slack 应用管理: https://api.slack.com/apps
记忆协议(强制)
开始前:
阅读 .claude/context/memory/learnings.md
完成后:
- 新模式 ->
.claude/context/memory/learnings.md - 发现问题 ->
.claude/context/memory/issues.md - 决策 ->
.claude/context/memory/decisions.md
假设中断:如果不在记忆中,就没有发生过。