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_titlewebhook_avatar 键用于控制消息在 Slack 中显示的发送者名称和头像。实际行为取决于发送模式和可用配置:

条件行为
send_method: "bot"usernameicon_url 参数调用 chat.postMessage,需要 chat:write.customize 权限范围。
send_method: "webhook" + 已配置 bot_token只要消息携带 webhook_titlewebhook_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:historygroups:history — 读取消息
    • chat:write — 发送消息
    • chat:write.customize — 逐条消息自定义用户名和头像(可选)
    • files:read — 下载接收到的文件
    • files:write — 上传文件
    • users:read — 解析显示名称
  4. Event Subscriptions 下启用事件,并订阅:
    • message.channels — 公开频道消息
    • message.groups — 私有频道消息
  5. 将应用安装到你的工作区,复制 Bot User OAuth Tokenxoxb-...)。
  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.channelsmessage.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_size52428800(50 MB)发送附件时单个文件的最大字节数
proxy所有 Slack API 请求的代理 URL(例如:http://proxy.example.com:8080socks5://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 分钟的将被拒绝,以防止重放攻击。