跳转至

传输

哪种 Slack 传输方式适合您的部署形态,以及 Socket Mode 在运行时如何表现。

选择传输方式

Socket Mode 和 HTTP Request URLs 在消息、斜杠命令、App Home 和交互功能方面功能对等。请根据部署形态而非功能来做出选择。

关注点 Socket Mode(默认) HTTP Request URLs
公共网关 URL 不需要 需要(DNS、TLS、反向代理或隧道)
出站网络 必须能访问到 wss-primary.slack.com 的出站 WSS 无需出站 WS;仅需入站 HTTPS
所需令牌 机器人身份:bot token + 具有 connections:write 权限的 App-Level Token;用户身份:user token + App-Level Token 机器人身份:bot token + Signing Secret;用户身份:user token + Signing Secret
开发笔记本电脑 / 防火墙后 无需配置即可工作 需要公共隧道(ngrok、Cloudflare Tunnel、Tailscale Funnel)或预发布 Gateway
水平扩展 每台主机上的每个应用对应一个 Socket Mode 会话;多个 Gateway 需要独立的 Slack 应用 无状态 POST 处理器;多个 Gateway 副本可在负载均衡器后共享一个应用
单 Gateway 上的多账户 支持;每个账户建立自己的 WS 支持;每个账户需要唯一的 webhookPath(默认 /slack/events),以避免注册冲突
斜杠命令传输 通过 WS 连接投递;忽略 slash_commands[].url Slack 向 slash_commands[].url 发送 POST;该字段是命令分发所必需的
请求签名 不使用(认证依靠 App-Level Token) Slack 对每个请求签名;OpenClaw 使用 signingSecret 进行验证
连接断开时的恢复 已启用 Slack SDK 自动重连;OpenClaw 还会以有界退避方式重启失败的 Socket Mode 会话。应用固定的 15 秒客户端 pong 超时。 没有需要断开的持久连接;重试由 Slack 按请求进行

Note

选择 Socket Mode:适用于单 Gateway 主机、开发笔记本电脑,以及能够出站访问 *.slack.com 但无法接受入站 HTTPS 的本地部署网络。

选择 HTTP Request URLs:当您在负载均衡器后运行多个 Gateway 副本、出站 WSS 被阻止但允许入站 HTTPS,或您已经在反向代理处终止 Slack webhook 时。

Warning

Slack 可以为同一个应用维护多个 Socket Mode 连接,并可能将每个负载投递到任意连接。因此,共享同一个 Slack 应用的多个独立 OpenClaw gateway 需要等效的路由和授权配置。否则,请为每个 gateway 使用独立的 Slack 应用、使用单一中继入口,或在负载均衡器后使用 HTTP Request URLs。参见 Using Socket Mode。

中继模式

中继模式将 Slack 入口与 OpenClaw gateway 分离。一个可信路由器持有唯一的 Slack Socket Mode 连接,选择目标 gateway,并通过经过认证的 WebSocket 转发类型化事件。gateway 仍然使用自己的 bot token 进行出站 Slack Web API 调用。

{
  channels: {
    slack: {
      mode: "relay",
      botToken: { source: "env", provider: "default", id: "SLACK_BOT_TOKEN" },
      relay: {
        url: "wss://router.example.com/gateway/ws",
        authToken: { source: "env", provider: "default", id: "SLACK_RELAY_AUTH_TOKEN" },
        gatewayId: "team-gateway",
      },
    },
  },
}

中继 URL 必须使用 wss://,除非目标是 localhost。请将 bearer token 和路由器路由表视为 Slack 授权边界的一部分:被路由的事件会作为授权激活进入常规 Slack 消息处理器。路由器在 WebSocket hello 帧中提供的 slack_identity 可以设置默认的出站用户名和图标;调用方提供的显式身份仍然优先。中继连接使用与 Socket Mode 相同的有界退避时序进行重连,并在断开时清除路由器提供的身份。

中继 WebSocket 连接遵循 Gateway 主机的代理环境(HTTPS_PROXY、HTTP_PROXY、ALL_PROXY、小写变体以及 NO_PROXY)。配置代理时,wss:// 中继使用 HTTP CONNECT 隧道。匹配的 NO_PROXY 条目或 localhost 的 ws:// URL 将直接连接。代理错误会被报告,而不会静默回退到直接中继连接。

Socket Mode 传输调优

OpenClaw 为 Socket Mode 将 Slack SDK 客户端 pong 超时设置为 15 秒。这是一个固定的内部默认值,操作员无法配置。

说明:

  • channels.slack.socketMode 对象(包括 clientPingTimeout、serverPingTimeout 和 pingPongLoggingEnabled)已退役,运行时不再读取。openclaw doctor 以一般通知而非逐键路径的方式标记已退役的布局调优旋钮。openclaw doctor --fix 会在其出现的任何位置移除这三个字段,包括频道根级别和 accounts.<accountId> 下,并在 socketMode 对象为空后将其删除。你在其中添加的任何其他键都会被保留,因此请手动删除。
  • 应用消息和事件仍然是应用状态,而非传输活性信号。
  • Socket Mode 重启退避从大约 2 秒开始,上限约为 30 秒。可恢复的启动、启动等待和断开连接失败会重试,直到频道停止。永久性的账户和凭据错误(如无效认证、已撤销的令牌或缺失的作用域)会快速失败,而不是无限重试。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw