本文档由 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)
json
{
"slack": {
"sl_main": {
"bot_token": "xoxb-...",
"app_token": "xapp-..."
}
}
}Events API 接收 + Incoming Webhook 发送
json
{
"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 发送
json
{
"slack": {
"sl_main": {
"bot_token": "xoxb-...",
"signing_secret": "abc123...",
"listen_port": 8090
}
}
}仅 Incoming Webhook 发送(无接收)
json
{
"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会被忽略。
json
{
"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 分钟的将被拒绝,以防止重放攻击。