Skip to content

本文档由 AI 编写,已经人工审核。

Slack ​

Slack 驱动器支持两种独立的接收模式和两种独立的发送模式,可自由组合配置。

接收模式 ​

模式所需配置说明
Socket Modeapp_tokenNextBridge 主动向 Slack 建立 WebSocket 连接,无需公网 URL。
Events APIsigning_secret + listen_portSlack 将事件 POST 到你的 HTTP 端点,需要公网 URL。

若同时配置了 app_token,将优先使用 Socket Mode,Events API 配置会被忽略。

发送模式 ​

模式配置键说明
Bot(默认)send_method: "bot"通过 chat.postMessage 发送消息,支持文件上传和自定义发送者身份。
Incoming Webhooksend_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 准备工作 ​

  1. 前往 api.slack.com/apps 创建一个新应用(从头创建)。
  2. 在 Socket Mode 下启用 Socket Mode,并生成一个带有 connections:write 权限的应用级令牌(App-level token),该令牌以 xapp- 开头。
  3. 在 OAuth & Permissions 下,为 Bot Token 添加以下权限范围:
    • channels:history、groups:history — 读取消息
    • chat:write — 发送消息
    • chat:write.customize — 逐条消息自定义用户名和头像(可选)
    • files:read — 下载接收到的文件
    • files:write — 上传文件
    • users:read — 解析显示名称
  4. 在 Event Subscriptions 下启用事件,并订阅:
    • message.channels — 公开频道消息
    • message.groups — 私有频道消息
  5. 将应用安装到你的工作区,复制 Bot User OAuth Token(xoxb-...)。
  6. 在每个需要桥接的频道中邀请机器人(/invite @YourBot)。

Events API 准备工作 ​

  1. 在 api.slack.com/apps 创建 Slack 应用。
  2. 在 OAuth & Permissions 下,添加上述相同的 Bot Token 权限范围(如需自定义发送者身份,也请添加 chat:write.customize)。
  3. 在 Event Subscriptions 下启用事件,将请求 URL 设置为你的公网端点(如 https://example.com/slack/events)。
  4. 订阅 message.channels 和 message.groups 机器人事件。
  5. 在 Basic Information 下复制 Signing Secret(用于验证请求合法性)。
  6. 安装应用并复制 Bot Token。

Incoming Webhook 准备工作(仅发送) ​

  1. 在你的 Slack 应用中,进入 Incoming Webhooks 并启用。
  2. 点击 Add New Webhook to Workspace,选择目标频道,复制 Webhook URL。

配置项 ​

在配置文件的 slack.<实例ID> 下添加:

键是否必填默认值说明
bot_tokenBot 发送 / 文件下载时必填—Bot User OAuth Token,以 xoxb- 开头
app_tokenSocket Mode 接收时必填—应用级令牌,以 xapp- 开头
send_method否"bot""bot" 或 "webhook"
incoming_webhook_urlWebhook 发送时必填—Slack Incoming Webhook URL
signing_secretEvents API 接收时必填—Slack 签名密钥,用于验证请求
listen_portEvents 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_idSlack 频道 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 分钟的将被拒绝,以防止重放攻击。