企业微信通道会话创建BUG

企业微信会话隔离配置

为企业微信(WeCom)通道配置会话隔离,使每个私聊用户和每个群聊都能获得独立的 AI 会话,同时所有用户共用同一个 main Agent(同一工作空间、同一提示词)。

适用场景: 当用户反馈企业微信消息没有单独创建会话、所有消息混在同一个会话里时使用此技能。


问题症状

  • 企业微信通道发送的消息不会为新用户创建独立会话
  • 所有私聊用户的消息都混入同一个会话
  • 不同群聊的消息也混在一起
  • Web UI 和企业微信的消息互相覆盖

问题根因

默认情况下,所有企业微信私聊共享一个会话(session.dmScope: "main")。每个用户的消息混在一起,无法区分。


诊断步骤

检查当前 session.dmScope 配置

通过 gateway(action=config.get) 获取当前配置,确认 session.dmScope 的值:

"session": {
  "dmScope": "per-channel-peer"
}

session.dmScope 可选值

行为
main(默认) 所有私聊共享一个会话
per-peer 按发送者隔离(跨通道)
per-channel-peer 按"通道+发送者"隔离(推荐
per-account-channel-peer 按"账号+通道+发送者"隔离(多账号时)

解决方案

启用 per-channel-peer 隔离

使用 gateway(action=config.patch) 添加配置:

{
  "session": {
    "dmScope": "per-channel-peer"
  }
}

效果:

  • 企业微信私聊:每个用户有独立会话(共用 main Agent)
  • 企业微信群聊:每个群有独立会话
  • 所有用户共享同一工作空间(~/.openclaw/workspace
  • 所有用户共享同一套提示词(AGENTS.md、SOUL.md 等)

同时确保 dynamicAgents 关闭(避免创建独立 Agent):

{
  "channels": {
    "wecom": {
      "dynamicAgents": {
        "enabled": false
      }
    }
  }
}

配置生效后

配置变更会自动热重载。如果未生效,可通过 gateway(action=restart) 重启。


验证方法

  1. 让两个不同的企业微信用户分别发送消息
  2. 在 OpenClaw 会话列表中查看是否分别为每个用户创建了独立会话
  3. 检查会话 key 格式为 agent:main:wecom:{accountId}:{dm|group}:{peerId}

会话 Key 示例:

agent:main:wecom:default:dm:xxtl
  • agent:main — 同一 main Agent
  • wecom:default:dm:xxtl — 企业微信通道 + 账号 + 私聊 + 用户 ID

❌ 错误方案:dynamicAgents

不要使用 channels.wecom.dynamicAgents.enabled = true

"channels": {
  "wecom": {
    "dynamicAgents": {
      "enabled": true,
      "dmCreateAgent": true
    }
  }
}

错误原因: dynamicAgents 会为每个用户创建独立的 Agent(独立工作空间),导致:

  • 不同用户的 SOUL.md、AGENTS.md、USER.md 互相隔离
  • 用户之间不共享提示词
  • 这不是"会话隔离",而是"完全隔离的多 Agent 架构"

正确做法: 使用 session.dmScope 实现同一 Agent 下的会话隔离,共用水空间和提示词。

两种方案对比

方案 隔离层次 工作空间 适用场景
session.dmScope: per-channel-peer 会话级 共用 ~/.openclaw/workspace 单 Agent 多会话(推荐)
dynamicAgents.enabled: true Agent 级 每个用户独立工作空间 多租户多 Agent 架构

故障排查

启用了但不生效

  1. 确认 session.dmScope 设为 per-channel-peer(不是字符串)
  2. 确认 channels.wecom.dynamicAgents.enabledfalse
  3. 重启 Gateway:gateway(action=restart)

群聊也串会话

确认 channels.wecom.groupPolicy 不是 disabled,群聊默认有独立会话。

同一用户从不同通道发消息

  • 使用 per-channel-peer:不同通道独立会话
  • 使用 per-peer:跨通道合并为同一会话

相关文件

  • 会话管理文档:~/.openclaw/workspace/.claude/docs/concepts/session.md
  • 插件动态路由(错误方案):~/.openclaw/extensions/wecom-openclaw-plugin/dist/src/dynamic-agent.js
posted @ 2026-04-20 15:13  xxtl  阅读(50)  评论(0)    收藏  举报