Skip to content

微信渠道改造实施记录 ​

2026-04-30 第一轮修改 ​

本轮命名调整 ​

  • 按要求统一使用 channel 命名,不再使用 binding 作为核心对象命名。
  • 当前落地的核心模型名称:
    • AiWechatAgentChannelEntity
    • AiWechatCredentialEntity
    • AiWechatSessionRouteEntity

本轮已完成修改 ​

1. 新增数据库迁移脚本 ​

文件:muotai-ai/muotai-ai-biz/src/main/resources/db.migration/V0.0.24__create_wechat_channel_tables.sql

新增三张表:

  • ai_wechat_credential:微信渠道凭证表
  • ai_wechat_agent_channel:用户-智能体微信渠道表
  • ai_wechat_session_route:微信渠道会话路由表

设计要点:

  • 所有表都包含 del_flag、tenant_id,与现有 AI 模块表风格保持一致。
  • ai_wechat_agent_channel 使用 (tenant_id, agent_id, user_id, del_flag) 唯一约束,保证同一用户对同一 agent 只有一条有效 channel。
  • ai_wechat_session_route 使用 (tenant_id, channel_id, route_key, del_flag) 唯一路由约束。

2. 新增实体层 ​

目录:muotai-ai/muotai-ai-biz/src/main/java/com/pig4cloud/pigx/ai/domain/entity/

新增:

  • AiWechatCredentialEntity.java
  • AiWechatAgentChannelEntity.java
  • AiWechatSessionRouteEntity.java

设计要点:

  • 使用 @TenantTable
  • 使用 @TableLogic
  • 使用 Model<T> 风格,跟现有 AiToolBizTypeEntity / AiChatHistoryEntity 一致
  • 字段名与迁移脚本保持一致,便于后续 MyBatis-Plus 直接映射

3. 新增 Mapper 层 ​

目录:muotai-ai/muotai-ai-biz/src/main/java/com/pig4cloud/pigx/ai/mapper/

新增:

  • AiWechatCredentialMapper.java
  • AiWechatAgentChannelMapper.java
  • AiWechatSessionRouteMapper.java

4. 新增 Service 接口层 ​

目录:muotai-ai/muotai-ai-biz/src/main/java/com/pig4cloud/pigx/ai/service/

新增:

  • AiWechatCredentialService.java
  • AiWechatAgentChannelService.java
  • AiWechatSessionRouteService.java

5. 新增 Service 实现层 ​

目录:muotai-ai/muotai-ai-biz/src/main/java/com/pig4cloud/pigx/ai/service/impl/

新增:

  • AiWechatCredentialServiceImpl.java
  • AiWechatAgentChannelServiceImpl.java
  • AiWechatSessionRouteServiceImpl.java

当前实现为最小基础实现,统一继承 ServiceImpl,为后续渠道开通、路由查找、runtime 管理提供数据访问基础。

6. 前置安全修复(已完成第一部分) ​

修改文件:

  • muotai-ai/muotai-ai-biz/src/main/java/com/pig4cloud/pigx/ai/service/impl/AgentChatServiceImpl.java
  • muotai-ai/muotai-ai-biz/src/main/java/com/pig4cloud/pigx/ai/service/impl/AiChatHistoryServiceImpl.java
  • muotai-ai/muotai-ai-biz/src/main/java/com/pig4cloud/pigx/ai/controller/AiChatbotAgentController.java

本轮修复内容:

  • 恢复 AgentChatServiceImpl.validateExistingSession(...) 中的 userId 所有权校验,避免仅凭 agentId 继续访问他人 session。
  • 恢复 AiChatHistoryServiceImpl.getHistoryBySessionIdAndUserId(...) 的 user_id 过滤条件,避免历史查询按 sessionId 直接命中他人数据。
  • 收紧 AiChatbotAgentController.getSessionDetail(...):
    • 必须登录后才能查看
    • session 不存在时直接拒绝
    • 当前用户必须与 session.userId 一致
    • 消息读取改为使用受限接口 getMessagesBySessionId(...)

当前效果:

  • 已把最明显的两类越权入口先收口,后续多用户 channel 接入时不会继续沿用“只校验 agent、不校验用户”的旧行为。

当前阶段结论 ​

本轮已经完成了 channel 命名下的第一层基础设施:

  • 数据表
  • 实体
  • Mapper
  • Service
  • 第一部分安全修复

下一步将进入:

  1. WechatChannelService 业务层
  2. WechatBotRuntimeManager / WechatChannelRuntime 运行时层
  3. AiWechatChannelController 接口层
  4. 微信 runtime 的租户上下文恢复