# OpenClaw WeCom 插件 v2.3.11 变更简报

> [!TIP]
> **稳定性与多账号说明版本**：`v2.3.11` 重点修复 Bot WS 长思考场景下的 `invalid req_id`，同步收敛 onboarding 账号默认值与多账号隔离文档说明。

## 2026-03-11（v2.3.11）
- 【WS 保活升级】🚀 **[重要修复]** Bot WebSocket 从“4 秒后补发占位”升级为“收到用户消息立即下发占位符，并在长思考期间持续保活”，显著降低慢模型或长任务下的 `invalid req_id` 与回复丢失风险。
- 【占位符配置生效】🌊 `bot.streamPlaceholderContent` 现在对 `Bot WS` 与 `Bot Webhook` 两条链路统一生效，配置一次即可保持体验一致。
- 【错误兜底收敛】🛡 修复 `req_id` 已失效时仍尝试二次回错消息的问题，避免出现重复报错与未处理 Promise 拒绝。
- 【账号选择兜底】🧩 onboarding 在“配置里还没有任何账号”时，也会显式提供 `default` 默认账号选项，减少首次接入时的困惑。
- 【多账号文档补强】📘 README 新增说明：如果多个 `accountId` 复用同一个静态 Agent，建议配合 `session.dmScope = "per-account-channel-peer"`，避免不同账号的私聊上下文共用。
- 【日志可读性】🔎 WeCom runtime 的 Bot WS 失败日志改为可读错误文本，排查时不再只看到 `[object Object]`。

## 验证结果
- `pnpm exec vitest run extensions/wecom/src/transport/bot-ws/reply.test.ts extensions/wecom/src/onboarding.test.ts`

## 升级提示
- 已有 `bot.streamPlaceholderContent` 配置无需调整，升级后 `Bot WS` 会自动使用它。
- 如果你在同一个 OpenClaw 实例里挂了多个 WeCom 账号，并让它们指向同一个静态 Agent，建议补上 `session.dmScope = "per-account-channel-peer"` 以隔离私聊上下文。
