深度

OpenClaw Gateway 架构深度解析:组件、协议与多 Agent 路由

深入解析 OpenClaw Gateway 架构:单一守护进程统一管理 WhatsApp、Telegram、Discord 等所有消息渠道,WebSocket 通信协议详解,设备配对与本地信任机制,远程访问方案(Tailscale/SSH 隧道),以及 Gateway 运维常用命令。

2026/2/273分钟 阅读ClaudeEagle

OpenClaw 的核心是一个单一的长驻 Gateway 进程,它统一管理所有消息渠道和 AI Agent 会话。理解其架构,有助于你做出更好的部署决策和排查问题。

总体架构概览

  • 单一长驻 Gateway 拥有所有消息接口(WhatsApp via Baileys、Telegram via grammY、Slack、Discord、Signal、iMessage、WebChat)
  • 控制平面客户端(macOS 应用、CLI、Web UI、自动化脚本)通过 WebSocket 连接 Gateway
  • Nodes(macOS/iOS/Android/无头设备)也通过 WebSocket 连接,但声明 role: node
  • 每台主机只有一个 Gateway;它是唯一开启 WhatsApp 会话的地方

核心组件详解

Gateway(守护进程)

  • 维护所有消息提供者的连接
  • 暴露类型化的 WebSocket API(请求、响应、服务器推送事件)
  • 根据 JSON Schema 验证入站消息帧
  • 发出 agentchatpresencehealthheartbeatcron 等事件

客户端(macOS 应用 / CLI / Web 管理界面)

  • 每个客户端一个 WebSocket 连接
  • 发送请求:healthstatussendagentsystem-presence
  • 订阅事件:tickagentpresenceshutdown

Nodes(macOS / iOS / Android / 无头设备)

  • 连接到同一个 WebSocket 服务器,但带 role: node
  • connect 时提供设备身份;配对基于设备(角色 node
  • 暴露命令如 canvas.*camera.*screen.recordlocation.get

WebChat

  • 静态 UI,使用 Gateway WebSocket API 获取聊天历史和发送消息
  • 在远程部署场景中,通过 SSH/Tailscale 隧道连接

WebSocket 通信协议

连接生命周期

  1. 客户端建立 WebSocket 连接
  2. 发送 connect 帧(必须是第一帧)
  3. Gateway 验证设备身份和认证 Token
  4. 握手完成后进入正常通信模式

消息格式

json
// 请求
{ "type": "req", "id": "unique-id", "method": "send", "params": {} }

// 响应
{ "type": "res", "id": "unique-id", "ok": true, "payload": {} }

// 服务器推送事件
{ "type": "event", "event": "agent", "payload": {}, "seq": 1 }

认证与幂等性

  • 如果设置了 OPENCLAW_GATEWAY_TOKENconnect.params.auth.token 必须匹配
  • 副作用方法(sendagent)需要幂等性 Key,服务端维护短期去重缓存
  • Nodes 必须在 connect 时包含 role: "node" 以及 caps/commands/permissions

配对与本地信任

  • 所有 WebSocket 客户端(操作者 + Nodes)在 connect 时提供设备身份
  • 新设备 ID 需要配对审批;Gateway 为后续连接颁发设备 Token
  • 本地连接(回环地址或 Gateway 主机的 Tailnet 地址)可自动审批
  • 所有连接必须对 connect.challenge 随机数签名
  • 签名 Payload v3 还绑定了 platform + deviceFamily;Gateway 在重连时固定已配对的元数据,元数据变化需要重新配对
  • 非本地连接仍需要明确审批

远程访问方案

推荐:Tailscale 或 VPN

最简单、最安全的方式,无需额外配置。

替代:SSH 隧道

bash
ssh -N -L 18789:127.0.0.1:18789 user@remote-host

相同的握手和认证 Token 通过隧道生效。

Gateway 运维快速参考

bash
# 前台启动(调试)
openclaw gateway

# 以服务方式运行(launchd/systemd)
openclaw gateway status
openclaw gateway start
openclaw gateway stop
openclaw gateway restart

重要不变式

  • 每台主机只有一个 Gateway 控制一个 Baileys(WhatsApp)会话
  • 握手是强制的;非 JSON 或非 connect 的第一帧会导致连接直接关闭
  • 事件不会重放;客户端必须在断开后主动刷新状态

Canvas 与 A2UI

Gateway HTTP 服务器还提供 Canvas 宿主:

  • /__openclaw__/canvas/:Agent 可编辑的 HTML/CSS/JS
  • /__openclaw__/a2ui/:A2UI 宿主

与 Gateway 使用同一端口(默认 18789)。


原文:Gateway Architecture - OpenClaw | 来源:OpenClaw 官方文档

相关文章推荐

深度OpenClaw Gateway 架构深度解析:单一网关如何驱动多渠道 AI 助手深度解析 OpenClaw Gateway 的核心架构:Gateway 作为单一真相来源(会话/路由/渠道连接)的设计理念、本地模式 vs 远程模式的部署差异、Node 节点如何作为 Gateway 的外设扩展本地能力、WebSocket 通信层的工作原理、多渠道同步(Telegram/WhatsApp/Discord 同时在线)的实现方式、默认端口 18789 的配置、以及 Gateway Runbook 中的关键运维操作(健康检查/状态查询/日志)。2026/3/21深度OpenClaw 多 Agent 架构实战:用 AI 团队并行完成复杂工作流OpenClaw 多 Agent 架构完整指南:Sub-Agent 工作原理、Sessions API、Agent 间通信、并行任务编排、主从 Agent 设计模式,以及内容生产、代码审查、数据处理三个实战案例的完整配置。2026/3/15深度OpenClaw 多 Gateway 架构完全指南:一台机器运行多个独立 AI 助手实例OpenClaw 多 Gateway(Multi-Gateway)架构完整教程:多实例的隔离优势、同一台机器运行多个 Gateway(不同端口/配置文件/workspace)、systemd 管理多个 Gateway 服务、Nginx 虚拟主机为每个实例分配独立域名、API Key 隔离与成本拆分、单机多实例 vs 多机方案对比,以及 Docker Compose 多容器隔离部署方案。2026/3/26深度OpenClaw Gateway 配置完全参考:从极简配置到多 Agent 全功能部署OpenClaw Gateway 配置完全参考:极简配置到全功能部署,涵盖 4 种编辑方式(CLI/Web UI/向导/直接编辑)、模型配置、频道接入、会话隔离、心跳、定时任务、Webhook、Docker 沙箱和多 Agent 路由的实用配置片段,以及热加载与需要重启的配置区分。2026/3/1深度OpenClaw Hooks 自动化进阶:消息前后的智能拦截、转换与触发机制OpenClaw Hooks(钩子)自动化系统进阶教程:Hooks 的触发时机(before-send/after-receive/on-tool-call)、用 Hooks 拦截消息并修改内容(自动翻译/过滤/格式化)、基于条件的 Hook 触发(渠道过滤/关键词匹配)、Hook 中调用外部 API(Notion 记录/Bark 通知/监控告警)、exec 工具二次确认 Hook,以及 Hooks 与 SOUL.md 和 Standing Orders 的优先级关系详解。2026/3/26深度OpenClaw 插件开发完全指南:从零构建自定义渠道和工具插件OpenClaw 插件(Plugin)开发完整教程:插件类型(渠道插件/工具插件/Provider插件)、插件的目录结构和 package.json 规范、使用 Plugin SDK 开发自定义消息渠道(实现 onMessage/sendMessage 接口)、开发自定义工具(Tool)的函数签名和参数 Schema、本地插件安装与调试(openclaw plugins install ./local-plugin)、发布到 npm 的规范要求(@openclaw/ 命名空间)、插件的权限声明(capabilities)、社区插件列表(Plugin Bundles)获取,以及常见插件开发错误和调试技巧。2026/3/25