OpenClaw QQ /临时列表 异常复盘(仅显示12条 / 重复回复 / 偶发不回复)
一、问题现象
在群 883766069 里,出现了三个关联症状:
/临时列表只显示 12 条,实际历史会话明显更多。- 同一条
/临时列表命令,机器人会重复发 2~3 次。 - 某些时段“发了命令但完全不回”。
二、关键排查结论
1) 数据未丢失
检查 ~/.openclaw/workspace/qq-temp-sessions.json:
history["default:group:883766069"]实际是 33 条。- 说明“只显示12条”不是数据丢失,而是读取/运行态问题。
2) “不回复”有明确根因:网关进程曾被 SIGTERM 停掉
日志中有多次:
signal SIGTERM received- 随后
Gateway unreachable (ECONNREFUSED)
该状态下端口 18789 无监听,QQ命令自然无法被处理,所以会出现“发了不回”。
3) 重复回复曾真实存在
通过 OneBot 历史可复现看到:
- 同一时间戳出现 3 条相同的
/临时列表回复。 - 说明当时不是用户端视觉问题,而是服务端确实执行了重复发送。
三、修复与加固
修复点 A:/临时列表 改为优先从磁盘状态回填
在 ~/.openclaw/extensions/qq/src/channel.ts 中新增:
reloadTempSessionStateFromDisk()- 在
/临时列表分支先执行磁盘回填,再渲染输出。
目的:避免进程内旧缓存导致“列表显示落后于真实状态”。
修复点 B:保持无上限展示
/临时列表 渲染逻辑保持全量输出,不再限制 12 条。
修复点 C:网关改为 LaunchAgent 常驻
执行:
openclaw gateway installopenclaw gateway start
结果:
- Gateway service 进入
loaded · running - 避免前台调试会话退出时把网关连带停掉。
四、验证结果
当前健康状态:
- Gateway:
reachable - Gateway service:
loaded · running - QQ: 已连接 OneBot 并登录
- 端口:
18789监听正常,21736 -> 3001长连已建立 - 日志可见:
[QQ] /临时列表 thread=default:group:883766069 slots=33
说明当前 /临时列表 读到的是 33 条,会话数据完整。
五、经验与后续建议
- 区分“数据层”和“运行层”问题:先查 JSON 状态文件,再查网关在线状态。
- 优先用常驻服务模式:避免手工前台启动被终端生命周期影响。
- 保留关键诊断日志:
/临时列表的mem/disk对比日志非常有用。- 若再次出现重复回复,可继续根据同一命令时间戳比对 OneBot 历史。
如果后续还出现“重复回复”,下一步建议在命令入口再加一层 (group_id,user_id,raw_message,time_bucket) 的短 TTL 保护,并输出 drop 日志,便于一次性确认是上游重复投递还是本地重复消费。