让多个 Telegram 机器人在同一个群里进行可控接力讨论(duo/trio),并通过群内中文指令动态开关。
这是一个工程化编排方案,不是 Telegram 原生 bot-to-bot 通信能力。
Telegram Bot API 一般不会把机器人消息再投递给其他机器人,所以“多个 AI 在群里互相看见彼此发言并继续讨论”在平台层面不成立。
本项目的核心创新是:
- 把 OpenClaw 的群会话 JSONL 当事件流总线。
- 用本地编排器 tail 新消息。
- 依次调用多个网关 agent,并把上一位输出注入下一位提示词。
- 每步
deliver: true,让对应机器人把回复直接发回同一群。
效果上是“多模型互相可见并协作”,实现上是“本地流水线 + 上下文桥接”。
- 双人模式(duo):DeepSeek -> GLM
- 三人模式(trio):DeepSeek -> GLM -> Jarvis(OpenClaw)
- 群内控制指令:开启/关闭/状态/开场/轮数
- 防打架机制:inFlight、cooldown、rateLimit
- 防重复回复:给 DeepSeek/GLM 打
sessions.patch,设groupActivation: mention
- 用户在群里发消息。
- OpenClaw ingest 消息并写入 group session JSONL。
- 编排器 tail 到新行,识别:
- 控制指令:立即执行模式管理。
- 普通消息:如果交流模式已开启,则触发接力。
- 接力时每一步都会拼接上下文:
- 用户当前输入
- 上一位模型输出(bridge memory)
- 每步 agent 调用都
deliver: true,机器人把回复回传到群里。
- 开启双人:
开启交流模式或/xchat on - 开启三人:
开启三方交流模式或/xchat trio - 开场双人:
开场互聊或/xchat kickoff - 开场三人:
开场三方互聊或/xchat kickoff3 - 查看状态:
交流模式状态或/xchat status - 设置轮数:
交流轮数 1|2|3 - 关闭模式:
关闭交流模式或/xchat off
已做兼容增强:
- 允许指令前带
@bot。 - 允许句尾中文标点(如
交流模式状态。)。 交流轮数支持交流轮数: 2/交流轮数:2。
src/orchestrator.mjs: 主编排器docs/ARCHITECTURE.md: 架构说明launchd/com.openclaw.xchat.orchestrator.plist.example: launchd 示例scripts/install-launchd.sh: 一键安装 launchdscripts/health-check.sh: 本地健康检查docs/WATCH_OPTION_A_QUICKSTART.md: 手表方案A(iPhone 节点)实操
- macOS + launchd
- Node.js 18+
- 本地网关:
- OpenClaw(主)
- DeepSeek/GLM(子网关)
GatewayClient 加载策略:
- 先尝试
openclaw/dist/gateway/client.js - 不可用时回退
clawdbot/dist/gateway/client.js
- 安装依赖
npm install- 前台运行
npm run start- 安装为 launchd 常驻
./scripts/install-launchd.sh- 本地健康检查
npm run health:local默认读取:
- OpenClaw:
~/.openclaw/openclaw.json(不存在则回退clawdbot.json) - DeepSeek:
~/.clawd-deepseek/openclaw.json(不存在则回退clawdbot.json) - GLM:
~/.clawd-glm/openclaw.json(不存在则回退clawdbot.json)
可用环境变量覆盖:
OPENCLAW_DIRDEEPSEEK_DIRGLM_DIROPENCLAW_CONFIG_PATHDEEPSEEK_CONFIG_PATHGLM_CONFIG_PATHOPENCLAW_SESSION_STORE_PATHOPENCLAW_AGENT_ID(默认main)XCHAT_STATE_PATHXCHAT_GATEWAY_CLIENT_PATH(自定义 GatewayClient 模块路径,优先级最高)
- 状态文件:
~/.openclaw/xchat/state.json - 标准日志:
~/.openclaw/xchat/orchestrator.log - 错误日志:
~/.openclaw/xchat/orchestrator.err.log
state.json 每个 chat 的核心字段:
enabledmode(duo|trio)roundscooldownMslastTriggerAtbridge.lastDeepseek / bridge.lastGlm / bridge.lastOpenclaw
这次稳定化重点是“恢复可用 + 减少重复故障”。
- 群里持续报:
交流模式出错: gateway not connected - orchestrator 日志反复:
openclaw gateway not ready after 10s - OpenClaw 状态显示配置非法:
agents.list.*.bindings非法键
~/.openclaw/openclaw.json 中 agents.list 写入了当前版本 schema 不支持的 bindings,导致主网关无法正常启动,编排器自然无法连接。
- 备份配置。
- 删除
agents.list[*].bindings。 - 重启
ai.openclaw.gateway与com.openclaw.xchat.orchestrator。 - 验证主网关恢复监听 18989,编排器重新连上三路 gateway。
waitReady()输出最后一次错误详情,缩短定位时间。- GatewayClient 增加
onConnectError日志回调,便于判断是拒连、鉴权还是握手问题。 - 指令解析增强(@mention + 标点容错)。
- session 文件发现逻辑支持
sessionId -> *.jsonl回退拼装,降低 sessions store 字段不全导致的“找不到群会话”。 - bridge 记录前剥离
@username,避免把机器人 mention 链式污染到下一轮 prompt。
- 症状:
gateway not ready after 10s
- 检查:
openclaw gateway status - 常见原因:主网关没起、端口错、配置非法
- 症状:
gateway not connected
- 检查:
launchctl list | rg openclaw - 检查:
tail -60 ~/.openclaw/xchat/orchestrator.log
- 症状:
skip: inFlight
- 原因:同一 chat 上一轮尚未结束
- 处理:等上一轮完成再触发
- 症状:
skip: cooldown
- 原因:命中冷却窗口(默认 8 秒)
- 症状:
skip: rateLimit
- 原因:同 chat 每分钟超过 6 次触发
- 不提交任何真实 token(Telegram/gateway/provider)
- 不提交本机私有配置(
~/.openclaw/openclaw.json等) - 仓库仅包含:编排器代码、模板、文档、脚本
- 不是 Telegram 平台原生 bot-to-bot 通道
- 高并发群聊场景会触发限流与跳过策略
- “互相可见”依赖 prompt 注入,不是系统级消息订阅
- 增加健康检查脚本(配置合法性 + 端口连通 + launchd 状态)
- 增加回归测试(指令匹配、session 发现、限流行为)
- 把“稳定化 checklist”抽成单独 runbook 并在 CI 中跑基础静态校验
已提供可执行版文档:
docs/WATCH_OPTION_A_QUICKSTART.md
建议按该文档跑最短链路:
openclaw nodes pending --jsonopenclaw nodes approve <request-id>openclaw nodes push --node <node-id-or-name> --title "Pair OK" --body "Watch route check"