# ai-robot-MCA - Progress > 多渠道适配主框架架构改造进度文档 > 遵循 `docs/session-handoff-protocol.md` 协议 --- ## 📋 Context - module: `ai-robot` - feature: `MCA` (Multi-Channel Adapter) - status: 🔄 进行中 --- ## 🔗 Spec References (SSOT) - agents: `AGENTS.md` - contracting: `spec/contracting.md` - requirements: `spec/ai-robot/requirements.md` - openapi_provider: `spec/ai-robot/openapi.provider.yaml` - openapi_deps: `spec/ai-robot/openapi.deps.yaml` - design: `spec/ai-robot/design.md` - tasks: `spec/ai-robot/tasks.md` --- ## 📊 Overall Progress (Phases) - [x] Phase 1: 基础设施 (100%) ✅ [tasks.md: TASK-001 ~ TASK-005] - [x] Phase 2: 渠道适配层 (100%) ✅ [tasks.md: TASK-010 ~ TASK-013] - [x] Phase 3: 消息路由层 (100%) ✅ [tasks.md: TASK-020 ~ TASK-023] - [ ] Phase 4: AI 服务客户端 (0%) ⏳ [tasks.md: TASK-030 ~ TASK-033] - [ ] Phase 5: 集成测试 (0%) ⏳ [tasks.md: TASK-040 ~ TASK-042] --- ## 🔄 Current Phase ### Goal 完成 AI 服务 DTO 定义、AiServiceClient 实现、熔断与降级、清理旧代码。 ### Sub Tasks - [ ] TASK-030: 定义 AI 服务 DTO ⏳ [AC-MCA-04-REQ, AC-MCA-05] - [ ] TASK-031: 实现 AiServiceClient ⏳ [AC-MCA-04, AC-MCA-05] - [ ] TASK-032: 实现熔断与降级 ⏳ [AC-MCA-06, AC-MCA-07] - [ ] TASK-033: 删除旧 AiService ⏳ ### Next Action (Must be Specific) **Immediate**: 创建 `ChatRequest.java`、`ChatResponse.java` AI 服务 DTO。 **Details**: 1. file: `src/main/java/com/wecom/robot/dto/ai/ChatRequest.java` 2. action: 定义 ChatRequest DTO,包含 sessionId、currentMessage、channelType、history 字段 3. reference: - `spec/ai-robot/design.md` 第 6.1 节(AI 服务调用) - `spec/ai-robot/openapi.deps.yaml`(AI 服务契约) 4. constraints: - 字段与 openapi.deps.yaml 一致 - 包含映射方法 (InboundMessage → ChatRequest) - 代码/注释必须包含 [AC-MCA-04-REQ] 标注 --- ## 🏗️ Technical Context ### Module Structure (Only What Matters) ``` src/main/java/com/wecom/robot/ ├── dto/ │ ├── InboundMessage.java # TASK-001 ✅ │ ├── OutboundMessage.java # TASK-001 ✅ │ ├── SignatureInfo.java # TASK-001 ✅ │ └── ai/ │ ├── ChatRequest.java # TASK-030 │ └── ChatResponse.java # TASK-030 ├── config/ │ ├── AiServiceConfig.java # TASK-002 ✅ │ └── ChannelConfig.java # TASK-002 ✅ ├── adapter/ │ ├── ChannelAdapter.java # TASK-010 ✅ │ ├── ServiceStateCapable.java # TASK-010 ✅ │ ├── TransferCapable.java # TASK-010 ✅ │ ├── MessageSyncCapable.java # TASK-010 ✅ │ ├── WeChatAdapter.java # TASK-011 ✅ │ └── ChannelAdapterFactory.java # TASK-012 ✅ ├── service/ │ ├── MessageRouterService.java # TASK-020 ✅ │ ├── AiServiceClient.java # TASK-031 │ └── impl/ │ ├── MessageRouterServiceImpl.java # TASK-021 ✅ │ └── AiServiceClientImpl.java # TASK-031 ├── util/ │ └── IdempotentHelper.java # TASK-005 ✅ └── entity/ └── Session.java # TASK-003 ✅ ``` ### Key Decisions (Why / Impact) - decision: 统一消息模型 (InboundMessage/OutboundMessage) reason: 实现渠道无关的消息处理,Controller 层负责验签/解析,Router 层处理统一消息 impact: 后续新增渠道只需实现 ChannelAdapter,无需修改核心路由逻辑 - decision: 使用 Resilience4j 实现熔断 reason: 与 Spring Boot 2.7 兼容良好,支持断路器、限流、超时 impact: AI 服务调用具备熔断/降级能力,提升系统稳定性 - decision: 内部字段统一用 `content`,AI 服务契约用 `currentMessage` reason: 保持内部命名一致性,映射在 AiServiceClient 层处理 impact: 避免后续 DTO 命名混乱 - decision: ChannelAdapter 接口分离为核心能力和可选能力 reason: 不同渠道支持的能力不同,接口分离允许按需实现 impact: WeChatAdapter 实现全部接口,其他渠道可按需实现 ### Code Snippets (Reference) ```java // ChannelAdapter 接口定义 (design.md 3.1) public interface ChannelAdapter { String getChannelType(); boolean sendMessage(OutboundMessage message); } // MessageRouterService 接口定义 (design.md 3.2) public interface MessageRouterService { void processInboundMessage(InboundMessage message); void routeBySessionState(Session session, InboundMessage message); void dispatchToAiService(Session session, InboundMessage message); void dispatchToManualCs(Session session, InboundMessage message); void dispatchToPendingPool(Session session, InboundMessage message); } ``` --- ## 🧾 Session History ### Session #3 (2026-02-24) - completed: - TASK-010: 定义 ChannelAdapter 接口 ✅ - TASK-011: 实现 WeChatAdapter ✅ - TASK-012: 创建 ChannelAdapterFactory ✅ - TASK-013: 重构 WecomCallbackController ✅ - TASK-022: 重构 MessageProcessService ✅ - changes: - 新增 src/main/java/com/wecom/robot/adapter/ChannelAdapter.java - 新增 src/main/java/com/wecom/robot/adapter/ServiceStateCapable.java - 新增 src/main/java/com/wecom/robot/adapter/TransferCapable.java - 新增 src/main/java/com/wecom/robot/adapter/MessageSyncCapable.java - 新增 src/main/java/com/wecom/robot/adapter/WeChatAdapter.java - 新增 src/main/java/com/wecom/robot/adapter/ChannelAdapterFactory.java - 更新 src/main/java/com/wecom/robot/controller/WecomCallbackController.java - 更新 src/main/java/com/wecom/robot/service/MessageProcessService.java - commits: 4e9c5ba, 2631c53, 07561fe ### Session #2 (2026-02-24) - completed: - TASK-020: 定义 MessageRouterService 接口 - TASK-021: 实现 MessageRouterServiceImpl - 创建 `src/main/java/com/wecom/robot/service/MessageRouterService.java` - 创建 `src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java` - 实现 5 个核心方法:processInboundMessage, routeBySessionState, dispatchToAiService, dispatchToManualCs, dispatchToPendingPool - 实现幂等性检查(基于 Redis SETNX) - changes: - 新增 src/main/java/com/wecom/robot/service/MessageRouterService.java - 新增 src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java - 更新 docs/progress/ai-robot-mca-progress.md - 更新 spec/ai-robot/tasks.md - commits: b9792c8, 0b6fcf5 ### Session #2 (2026-02-24) - completed: - TASK-020: 定义 MessageRouterService 接口 - TASK-021: 实现 MessageRouterServiceImpl - TASK-022: 重构 MessageProcessService - TASK-023: 更新 SessionManagerService 支持 channelType - 创建 `src/main/java/com/wecom/robot/service/MessageRouterService.java` - 创建 `src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java` - 更新 Session 实体添加 channelType 字段 - 更新 SessionManagerService 支持按渠道类型创建和筛选会话 - 实现 5 个核心方法:processInboundMessage, routeBySessionState, dispatchToAiService, dispatchToManualCs, dispatchToPendingPool - 实现幂等性检查(基于 Redis SETNX) - changes: - 新增 src/main/java/com/wecom/robot/service/MessageRouterService.java - 新增 src/main/java/com/wecom/robot/service/impl/MessageRouterServiceImpl.java - 更新 src/main/java/com/wecom/robot/service/MessageProcessService.java - 更新 src/main/java/com/wecom/robot/entity/Session.java - 更新 src/main/java/com/wecom/robot/service/SessionManagerService.java - 更新 docs/progress/ai-robot-mca-progress.md - 更新 spec/ai-robot/tasks.md - commits: b9792c8, 0b6fcf5, db378af, a8d7474 ### Session #1 (2026-02-24) - completed: - 创建 spec/ai-robot/ 目录结构 - 编写 requirements.md (v0.2.0) - 编写 openapi.deps.yaml (L0) - 编写 openapi.provider.yaml (L0) - 编写 design.md (v0.2.0) - 编写 tasks.md (20 个任务) - 所有规范文件已提交到 Git - changes: - 新增 spec/ai-robot/requirements.md - 新增 spec/ai-robot/openapi.deps.yaml - 新增 spec/ai-robot/openapi.provider.yaml - 新增 spec/ai-robot/design.md - 新增 spec/ai-robot/tasks.md --- ## 🚀 Startup Guide 1. 读取本进度文档,定位当前 Phase 与 Next Action。 2. 打开并阅读 Spec References 指向的模块规范(requirements/openapi/design/tasks)。 3. 直接执行 Next Action(TASK-030: 创建 ChatRequest/ChatResponse DTO)。 4. 每完成一个子任务,更新本进度文档并提交 Git。