# 企业微信消息发送修复 - AppID配置问题 ## 🔥 问题描述 **症状**:点击"发送消息"后,消息没有出现在企业微信群聊中 **日志表现**: ``` ✅ [sendToWxwork] SDK初始化完成 📧 准备发送消息到企业微信... CID: cDL6R1hgSi AppID: project ← 🔥 关键:这里是project而不是crm 文本内容: 老师我这里硬装模型做好了... 🔍 [sendChatMessage] ========== 开始发送消息 ========== 🔍 [sendChatMessage] 消息类型: text (之后没有成功或失败的日志) ``` --- ## 🔍 根本原因 ### 1. URL路径解析 **当前URL**: ``` https://app.fmode.cn/wxwork/cDL6R1hgSi/project/project-detail/iKvYck89zE ↑ ↑ ↑ CID AppID 路由路径 ``` **代码解析逻辑** (`delivery-message.service.ts` line 206-207): ```typescript const cid = urlParts[wxworkIndex + 1]; // cDL6R1hgSi const appId = urlParts[wxworkIndex + 2]; // project ← 🔥 问题在这 ``` ### 2. suiteMap配置缺失 **原始配置** (`wxwork-sdk.service.ts` line 32-36): ```typescript private suiteMap: any = { 'crm': { suiteId: 'dk2559ba758f33d8f5' } // ❌ 缺少'project'的配置 }; ``` ### 3. JSSDK注册失败 **注册流程** (`wxwork-sdk.service.ts` line 83): ```typescript const suiteId = this.suiteMap[this.appId]?.suiteId; // 当appId='project'时,suiteId = undefined ``` **结果**: - `ww.register()` 被调用时 `suiteId: undefined` - JSSDK注册失败,但没有明确的错误提示 - `sendChatMessage` 调用被忽略或失败,没有回调 --- ## ✅ 解决方案 ### 修复代码 **文件**:`src/modules/project/services/wxwork-sdk.service.ts` **修改内容**:添加"project"的suiteId配置 ```typescript // 应用套件映射 private suiteMap: any = { 'crm': { suiteId: 'dk2559ba758f33d8f5' }, 'project': { // 🔥 添加project应用的配置(使用相同的suiteId) suiteId: 'dk2559ba758f33d8f5' } }; ``` **原因**: - 企业微信套件是公司级别的,同一个公司的不同应用使用相同的suiteId - `project`和`crm`都是映三色公司的应用,共享同一个套件配置 --- ## 🎯 修复后的预期日志 ``` ✅ [sendToWxwork] SDK初始化完成 📧 准备发送消息到企业微信... CID: cDL6R1hgSi AppID: project 文本内容: 老师我这里硬装模型做好了... 🔍 [sendChatMessage] ========== 开始发送消息 ========== 🔍 [sendChatMessage] 消息类型: text 🔍 [sendChatMessage] 开始注册JSSDK... 🔍 [registerCorpWithSuite] 套件ID: dk2559ba758f33d8f5 ← ✅ 有值了 🔍 [registerCorpWithSuite] 调用ww.register... ✅ [registerCorpWithSuite] AgentConfig注册成功! 🔍 [sendChatMessage] JSSDK注册结果: true 🔍 [sendChatMessage] 调用ww.sendChatMessage... ✅ [sendChatMessage] 消息发送成功! ← ✅ 成功! ✅ 文本消息已发送 ✅ 所有消息已发送到企业微信 ``` --- ## 📋 测试步骤 ### 1. 部署修复 ```bash # 构建项目 ng build yss-project --base-href=/dev/yss/ # 部署 .\deploy.ps1 ``` ### 2. 清除缓存 - 刷新企业微信页面(Ctrl+R) - 或完全关闭企业微信客户端重新打开 ### 3. 发送测试消息 1. 打开项目详情页 2. 进入交付执行阶段 3. 点击空间的"刷新"按钮 4. 在弹窗中输入消息或选择预设话术 5. 点击"发送"按钮 ### 4. 查看日志 打开浏览器控制台(F12),查看: - ✅ `套件ID: dk2559ba758f33d8f5` - ✅ `AgentConfig注册成功` - ✅ `消息发送成功` ### 5. 验证结果 在企业微信群聊中应该看到: - 文本消息(如果有) - 图文卡片(如果有图片) --- ## 🔍 为什么之前需求阶段可能没遇到这个问题? ### 可能的原因: 1. **URL路径不同**: - 需求阶段可能从 `/wxwork/cDL6R1hgSi/crm/...` 访问 - 交付阶段从 `/wxwork/cDL6R1hgSi/project/...` 访问 2. **使用不同的SDK方法**: - 需求阶段可能没有直接使用 `WxworkSDKService` - 或者使用了不同的初始化方式 --- ## 🛡️ 防止类似问题 ### 建议1:添加AppID验证 **文件**:`wxwork-sdk.service.ts` ```typescript async initialize(cid: string, appId: string): Promise { this.cid = cid; this.appId = appId; // 🔥 验证appId是否在suiteMap中 if (!this.suiteMap[appId]) { console.error(`❌ 未知的AppID: ${appId}`); console.error(`❌ 可用的AppID:`, Object.keys(this.suiteMap)); throw new Error(`未配置的AppID: ${appId}`); } this.wecorp = new WxworkCorp(cid); await this.registerCorpWithSuite(); } ``` ### 建议2:添加fallback机制 **文件**:`delivery-message.service.ts` ```typescript // 从URL获取cid和appId const cid = urlParts[wxworkIndex + 1]; let appId = urlParts[wxworkIndex + 2] || 'crm'; // 🔥 如果appId不在suiteMap中,fallback到'crm' const validAppIds = ['crm', 'project']; if (!validAppIds.includes(appId)) { console.warn(`⚠️ 未知AppID: ${appId}, 使用默认值: crm`); appId = 'crm'; } ``` --- ## 📚 相关文件 | 文件 | 作用 | 修改内容 | |------|------|---------| | `wxwork-sdk.service.ts` | 企业微信SDK封装 | 添加"project"的suiteId配置 | | `delivery-message.service.ts` | 交付消息服务 | 从URL解析appId(未修改) | | `stage-delivery.component.ts` | 交付执行组件 | 调用消息发送服务(未修改) | --- ## ✅ 总结 **问题**:URL中的AppID是"project",但`suiteMap`只配置了"crm" **修复**:在`suiteMap`中添加"project"配置,使用相同的suiteId **结果**:消息可以正常发送到企业微信群聊 --- **修复时间**:2025-11-29 **修复人员**:开发团队 **文档版本**:v1.0