Appearance
OpenClaw 子代理完成通知错误路由到 Webchat,Telegram 发起的任务收不到结果
问题
从 Telegram 发起任务后,父代理通过 sessions_spawn 启动子代理,子代理完成时有两种失败表现:
- 子代理结果去了 Webchat,Telegram 里什么都看不到
- 父代理无法继续,直接收到一条莫名的失败或空白消息
这个问题在 OpenClaw 2026.4.15 上可复现(来自 Webchat 发起的任务正常工作,来自 Telegram DM 的任务触发该 bug)。
根本原因:子代理完成的 announce 回调路由使用了错误的频道目标——始终路由到 Webchat/桌面界面,而非原始 Telegram 会话。父代理因为等不到 sync 结果而输出临时失败消息。这是一个已知 bug(#57385/#38300),暂无官方修复。
解决方案(社区 Workaround,已验证有效)
方案:两轮委托模式 + AGENTS.md 配置
在工作区的 AGENTS.md 中添加以下规则:
markdown
### 本地子代理委托(两轮模式)
当需要委托子代理完成任务时,使用两轮模式:
**第一轮(spawn 轮)**:只发起 spawn,输出 `NO_REPLY`
- 不要期待 sync 返回值
- 输出 `NO_REPLY`(OpenClaw 静默令牌,不向用户发送任何内容)
**第二轮(由 announce-callback 触发)**:
- 等待子代理通过 announce 回调返回结果
- 收到 announce 后再向用户汇报
这样可以避免父代理在等待 sync 时发出错误的失败消息。Linux/macOS:通过 systemd 固定 Webchat 连接
为了确保 announce 回调能正确路由,需要保持 Webchat 连接活跃:
创建 ~/.config/systemd/user/openclaw-webchat.service:
ini
[Unit]
Description=OpenClaw Webchat Pin
After=network.target
[Service]
Type=simple
ExecStart=openclaw webchat connect --keep-alive
Restart=always
RestartSec=30
[Install]
WantedBy=default.targetbash
systemctl --user enable openclaw-webchat.service
systemctl --user start openclaw-webchat.service验证方案有效性
在 Telegram 中发送任务,观察:
- 父代理回复
NO_REPLY(Telegram 无任何输出,正常) - 子代理完成后通过 announce 将结果注入父代理
- 父代理将最终结果发回 Telegram
等待官方修复:关注 GitHub #57385 和 #38300。