6. 消息流转机制

6.1 完整入站消息流

通过

拒绝

用户发送消息

IM 平台 API/WebSocket

扩展通道事件处理器
extensions/channel/src/channel.ts

消息规范化
src/channels/plugins/normalize/channel.ts

安全检查
DM 策略 / 白名单验证
ChannelSecurityAdapter

会话记录
src/channels/session.ts

丢弃消息

消息分发
src/auto-reply/dispatch.ts

缓冲调度器
BufferedDispatcher
防并发/去重

启动打字指示器
src/auto-reply/reply/typing.ts

AI 代理处理
src/agents/

回复队列
ReplyDispatcher

Gateway 广播
EventFrame → 客户端

出站适配器
ChannelOutboundAdapter

发送到 IM 平台

用户收到回复

6.2 完整出站消息流

失败

成功

AI 生成 ReplyPayload

ReplyDispatcher
队列管理

normalizePayload
平台特定标准化

文本分块
超过限制时分割

格式转换
Markdown → 平台格式

调用平台 API
sendMessage

成功?

指数退避重试
最多 3 次

完成

停止打字指示器

6.3 会话路由键(Session Key)

OpenClaw 用结构化的 key 唯一标识一个会话:

sessionKey = "agent:{agentId}:{chatType}:{peerId}@{channelId}"

示例:
  "agent:demo:direct:12345@whatsapp"
  "agent:demo:group:group123@telegram"
  "agent:assistant:thread:T001@slack"

6.4 回复队列管理

通道适配器 TypingController ReplyDispatcher AI 代理 通道适配器 TypingController ReplyDispatcher AI 代理 loop [AI 生成过程] loop [队列处理] onReplyStart() // 开始输入指示 sendToolResult(payload) // 工具调用结果 sendBlockReply(payload) // 中间文本块 sendFinalReply(payload) // 最终回复 markRunComplete() // AI 完成 按顺序发送消息 确认 markDispatchIdle() // 队列空 停止输入指示器

7. 通道插件体系

7.1 插件注册机制

插件加载

插件注册

export whatsappPlugin

export telegramPlugin

export discordPlugin

extensions/whatsapp/index.ts

插件注册表
src/plugins/registry.ts

extensions/telegram/index.ts

extensions/discord/index.ts

Channel Manager
src/channels/

Plugin Runtime
动态加载

7.2 账户生命周期

初始状态

applyAccountConfig()

startAccount()

连接成功

连接失败

断线

重连成功

重连失败

stopAccount()

重试

未配置

已配置

启动中

运行中

错误

连接中

停止

7.3 通道能力声明

type ChannelCapabilities = {
  chatTypes: ("direct" | "group" | "channel" | "thread")[];
  polls?: boolean;         // 投票功能
  reactions?: boolean;     // 表情回应
  edit?: boolean;          // 编辑消息
  threads?: boolean;       // 线程回复
  media?: boolean;         // 媒体发送
  nativeCommands?: boolean; // 原生命令(/start 等)
  voice?: boolean;         // 语音消息
}

// 示例:Telegram 能力
telegramCapabilities = {
  chatTypes: ["direct", "group", "channel", "thread"],
  media: true,
  reactions: true,
  polls: true,
  nativeCommands: true,
  edit: true,
  threads: true  // 超级群组话题
}

7.4 安全策略(DM Policy)

type ChannelSecurityDmPolicy = {
  policy: "allow-all" | "allow-list" | "owner-only";
  allowFrom?: string[];        // 白名单用户 ID
  policyPath: string;          // 配置文件路径
  allowFromPath: string;       // 白名单配置路径
  normalizeEntry?: (raw: string) => string; // ID 归一化函数
}

8. 安全机制

8.1 传输层安全

本地地址 localhost/127.0.0.1

非本地地址

配置了指纹

未配置

否 - 明文 ws://

客户端

URL 安全检查

允许 ws://

是 wss://?

TLS 验证

指纹钉扎?

SHA-256 指纹验证

标准 CA 验证

拒绝连接
CWE-319 CVSS 9.8

8.2 设备认证流程

密钥存储 Gateway Server 新客户端 密钥存储 Gateway Server 新客户端 后续连接 生成 RSA 密钥对 ConnectParams { device: { publicKey, signature, nonce } } 验证签名 HelloOk { auth: { deviceToken } } 持久化 deviceToken ConnectParams { auth: { deviceToken } } 验证 deviceToken HelloOk

8.3 DM 安全策略

所有通道都支持配置谁可以给 AI 发送私信:

策略 含义
allow-all 任何人都可以 DM
allow-list 仅白名单中的用户
owner-only 仅账户所有者

9. 技术栈汇总

9.1 核心技术

层次 技术 用途
传输层 ws v8.19.0 WebSocket 服务器和客户端
HTTP 框架 hono v4.12.7 Gateway HTTP 服务
HTTP 框架 express v5.2.1 备用 HTTP 服务
类型验证 @sinclair/typebox v0.34.48 JSON Schema 类型安全
数据验证 ajv v8.18.0 JSON Schema 验证
CLI commander 命令行接口
环境变量 dotenv 配置管理

9.2 各平台 SDK

平台 SDK 版本
WhatsApp @whiskeysockets/baileys 7.0.0-rc.9
Telegram grammy + @grammyjs/runner 1.41.1
Discord discord-api-types + @discordjs/voice 最新
Slack @slack/bolt + @slack/web-api 4.6.0
飞书 @larksuiteoapi/node-sdk 最新
LINE @line/bot-sdk 最新

9.3 AI 和数据层

功能 技术 版本
MCP 协议 @modelcontextprotocol/sdk 1.27.1
向量数据库 @lancedb/lancedb 0.26.2
SQLite 向量 sqlite-vec 最新
媒体处理 sharp 0.34.5
TTS node-edge-tts 最新
PDF pdfjs-dist 最新
Markdown markdown-it 最新

10. 关键文件索引

用途 文件路径
协议定义
协议帧格式 src/gateway/protocol/schema/frames.ts
通道状态模式 src/gateway/protocol/schema/channels.ts
基础原语 src/gateway/protocol/schema/primitives.ts
Gateway
服务器实现 src/gateway/server.impl.ts
聊天服务 src/gateway/server-chat.ts
通道服务 src/gateway/server-channels.ts
客户端连接 src/gateway/client.ts
通道框架
插件合约 src/channels/plugins/types.plugin.ts
适配器类型 src/channels/plugins/types.adapters.ts
核心类型 src/channels/plugins/types.core.ts
消息处理
消息分发 src/auto-reply/dispatch.ts
回复调度器 src/auto-reply/reply/reply-dispatcher.ts
打字指示器 src/auto-reply/reply/typing.ts
WhatsApp
主通道实现 extensions/whatsapp/src/channel.ts
消息发送 extensions/whatsapp/src/auto-reply/deliver-reply.ts
账户管理 extensions/whatsapp/src/accounts.ts
Telegram
主通道实现 extensions/telegram/src/channel.ts
出站适配器 extensions/telegram/src/outbound-adapter.ts
消息格式化 extensions/telegram/src/format.ts
配置
主配置管理 src/config/config.ts
会话配置 src/config/sessions.ts
内部 SDK src/plugin-sdk-internal/
入口
CLI 入口 src/entry.ts
库入口 src/index.ts
NPM 命令 openclaw.mjs

附录:核心数据流总结

控制面

出站流

AI核心

入站流

发消息

推送/轮询

规范化

路由

生成

格式转换

API 调用

送达

WebSocket + JSON 帧

状态/事件

IM 用户

IM 平台

通道扩展

统一消息格式

AI 处理

ReplyPayload

通道扩展

IM 平台

IM 用户

客户端 App

Gateway Server

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐