Slack
本文档由 AI 编写,已经人工审核。
Slack#
Slack 驱动器支持两种独立的接收模式和两种独立的发送模式,可自由组合配置。
接收模式#
| Socket Mode | app_token | NextBridge 主动向 Slack 建立 WebSocket 连接,无需公网 URL。 |
| Events API | signing_secret + listen_port | Slack 将事件 POST 到你的 HTTP 端点,需要公网 URL。 |
若同时配置了 app_token,将优先使用 Socket Mode,Events API 配置会被忽略。
发送模式#
| Bot(默认) | send_method: "bot" | 通过 chat.postMessage 发送消息,支持文件上传和自定义发送者身份。 |
| Incoming Webhook | send_method: "webhook" | POST 到固定的 Incoming Webhook URL,仅支持文字,channel_id 无效。 |
自定义发送者身份(用户名与头像)#
规则 msg 配置中的 webhook_title 和 webhook_avatar 键用于控制消息在 Slack 中显示的发送者名称和头像。实际行为取决于发送模式和可用配置:
| send_method: "bot" | 以 username 和 icon_url 参数调用 chat.postMessage,需要 chat:write.customize 权限范围。 |
| send_method: "webhook" + 已配置 bot_token | 只要消息携带 webhook_title 或 webhook_avatar,自动回退到 chat.postMessage(含自定义身份),同样需要 chat:write.customize。 |
| send_method: "webhook" + 未配置 bot_token | 身份字段被忽略——Slack Incoming Webhook 不支持逐条消息的用户名或图标覆盖。 |
如需启用自定义发送者身份,请在 Slack 应用设置的 OAuth 权限范围中添加 chat:write.customize。
Socket Mode 准备工作#
前往 api.slack.com/apps 创建一个新应用(从头创建)。
在 Socket Mode 下启用 Socket Mode,并生成一个带有 connections:write 权限的应用级令牌(App-level token),该令牌以 xapp- 开头。
在 OAuth & Permissions 下,为 Bot Token 添加以下权限范围:
channels:history、groups:history — 读取消息
chat:write — 发送消息
chat:write.customize — 逐条消息自定义用户名和头像(可选)
files:read — 下载接收到的文件
files:write — 上传文件
users:read — 解析显示名称
在 Event Subscriptions 下启用事件,并订阅:
message.channels — 公开频道消息
message.groups — 私有频道消息
将应用安装到你的工作区,复制 Bot User OAuth Token(xoxb-...)。
在每个需要桥接的频道中邀请机器人(/invite @YourBot)。
Events API 准备工作#
在 api.slack.com/apps 创建 Slack 应用。
在 OAuth & Permissions 下,添加上述相同的 Bot Token 权限范围(如需自定义发送者身份,也请添加 chat:write.customize)。
在 Event Subscriptions 下启用事件,将请求 URL 设置为你的公网端点(如 https://example.com/slack/events)。
订阅 message.channels 和 message.groups 机器人事件。
在 Basic Information 下复制 Signing Secret(用于验证请求合法性)。
安装应用并复制 Bot Token。
Incoming Webhook 准备工作(仅发送)#
在你的 Slack 应用中,进入 Incoming Webhooks 并启用。
点击 Add New Webhook to Workspace,选择目标频道,复制 Webhook URL。
配置项#
在配置文件的 slack.<实例ID> 下添加:
| bot_token | Bot 发送 / 文件下载时必填 | — | Bot User OAuth Token,以 xoxb- 开头 |
| app_token | Socket Mode 接收时必填 | — | 应用级令牌,以 xapp- 开头 |
| send_method | 否 | "bot" | "bot" 或 "webhook" |
| incoming_webhook_url | Webhook 发送时必填 | — | Slack Incoming Webhook URL |
| signing_secret | Events API 接收时必填 | — | Slack 签名密钥,用于验证请求 |
| listen_port | Events API 接收时必填 | — | HTTP 监听端口 |
| listen_path | 否 | "/slack/events" | Events API 端点的 HTTP 路径 |
| max_file_size | 否 | 52428800(50 MB) | 发送附件时单个文件的最大字节数 |
| proxy | 否 | — | 所有 Slack API 请求的代理 URL(例如:http://proxy.example.com:8080 或 socks5://proxy.example.com:1080)。设置为 null 可显式禁用此实例的代理(忽略全局代理设置)。 |
Socket Mode 接收 + Bot 发送(无需公网 URL)#
{
"slack": {
"sl_main": {
"bot_token": "xoxb-...",
"app_token": "xapp-..."
}
}
}
Events API 接收 + Incoming Webhook 发送#
{
"slack": {
"sl_main": {
"signing_secret": "abc123...",
"listen_port": 8090,
"send_method": "webhook",
"incoming_webhook_url": "https://hooks.slack.com/services/T.../B.../..."
}
}
}
Events API 接收 + Bot 发送#
{
"slack": {
"sl_main": {
"bot_token": "xoxb-...",
"signing_secret": "abc123...",
"listen_port": 8090
}
}
}
仅 Incoming Webhook 发送(无接收)#
{
"slack": {
"sl_main": {
"send_method": "webhook",
"incoming_webhook_url": "https://hooks.slack.com/services/T.../B.../..."
}
}
}
规则频道键#
| channel_id | Slack 频道 ID,例如 C1234567890 |
获取频道 ID 的最简方式:在 Slack 中打开该频道,点击顶部频道名称,弹窗底部会显示 ID。
注意: channel_id 仅用于接收侧路由和 Bot 发送。当 send_method 为 "webhook" 时,目标频道由 Webhook URL 决定,channel_id 会被忽略。
{
"sl_main": {
"channel_id": "C1234567890"
}
}
注意事项#
Bot 消息和系统消息(加入、编辑等)会被自动忽略,防止消息回显。
无论使用哪种接收模式,下载文件均需要 bot_token。
当 send_method 为 "webhook" 时,若消息包含附件或自定义身份(webhook_title/webhook_avatar)且已配置 bot_token,会自动回退到 chat.postMessage;若未配置 bot_token,附件将以文字标签形式发送,身份字段会被忽略。
用户显示名称通过 Users API(需要 bot_token)解析,并在进程生命周期内缓存。
Events API 请求超过 5 分钟的将被拒绝,以防止重放攻击。