# 企业微信发送消息功能 - 最终部署测试指南 ## 🚨 当前问题现状 ### 问题1:消息显示"发送中..."但没有发送到群聊 **现象**: - 点击"发送消息"按钮 - 弹窗显示"发送中..." - 群聊中没有消息出现 - 控制台日志显示开始注册JSSDK,但回调未触发 ### 问题2:用户身份显示"未知" **现象**: - 实际用户:脑控徐福静 - 系统显示:未知 - 可能导致消息发送失败 --- ## ✅ 已完成的代码修复 ### 1. wxwork-sdk.service.ts ✅ - ✅ 添加15秒超时机制 - ✅ 增强调试日志(corpId、agentId、suiteId、url) - ✅ 添加`project`应用配置到`suiteMap` ### 2. stage-delivery.component.ts ✅ - ✅ 导入`WxworkSDKService` - ✅ 注入`wxworkSDKService`到constructor - ✅ 在`ngOnInit`中初始化SDK ### 3. delivery-message.service.ts ✅ - ✅ 避免重复初始化SDK - ✅ 添加SDK状态检查 --- ## 🚀 立即部署步骤 ### 步骤1:构建项目 ```powershell cd e:\yinsanse\yss-project ng build yss-project --base-href=/dev/yss/ ``` **等待输出**: ``` ✔ Browser application bundle generation complete. ✔ Copying assets complete. ✔ Index html generation complete. Build at: 2025-11-30T05:43:00.000Z ``` ### 步骤2:部署到OBS ```powershell .\deploy.ps1 ``` **等待输出**: ``` Succeed count: 4042 Task id: xxx ``` ### 步骤3:清除CDN缓存 **deploy.ps1会自动执行**,等待输出: ``` { "refresh_task": "xxxxxx" } ``` ### 步骤4:等待5分钟 **重要**:CDN缓存刷新需要3-5分钟生效 --- ## 🧪 测试步骤(必须按顺序) ### 测试1:从群聊侧边栏打开应用 **❌ 错误入口**: - 企微首页 → 工作台 → 应用 - 浏览器直接打开 **✅ 正确入口**: 1. 打开企业微信 2. 进入任意群聊(例如:测试: 十二月组-家装-客厅+厨房) 3. 点击右上角"..." 4. 选择你的应用 **验证**:URL应该包含`/wxwork/cDL6R1hgSi/project/` ### 测试2:检查SDK初始化日志 **打开浏览器控制台(F12)**,应该看到: ``` 🚀 StageDeliveryComponent 初始化... 📋 初始化参数: {cid: "cDL6R1hgSi", projectId: "xxx"} 🔐 初始化企业微信SDK... 🔍 [registerCorpWithSuite] 开始注册JSSDK... 🔍 [registerCorpWithSuite] 平台检测: wxwork 🔍 [registerCorpWithSuite] corpId: wpAs2qCQAAYofoUhMXBDS8L7z1YCXHYw 🔍 [registerCorpWithSuite] agentId: 1000017 🔍 [registerCorpWithSuite] suiteId: dk2559ba758f33d8f5 🔍 [registerCorpWithSuite] url: https://app.fmode.cn/... 🔍 [registerCorpWithSuite] 获取签名... 🔍 [registerCorpWithSuite] Ticket: ... 🔍 [registerCorpWithSuite] 签名生成完成 ✅ [registerCorpWithSuite] AgentConfig注册成功! ← 必须看到这个! ✅ 企业微信SDK初始化成功 ``` **如果15秒后看到**: ``` ⚠️ [registerCorpWithSuite] 注册超时(15秒) ``` **说明**: 1. ❌ 不是从群聊侧边栏打开的 2. ❌ 应用权限配置错误 3. ❌ 企微JSSDK环境问题 **解决**:关闭应用,重新从群聊侧边栏打开! ### 测试3:检查用户身份 **控制台应该显示**: ``` 👤 当前用户: Profile对象 👤 用户ID: xxx 👤 用户姓名: 脑控徐福静 ← 应该显示真实姓名 ``` **如果显示"未知"**: ```typescript // 检查stage-delivery.component.ts的ngOnInit中 if (!this.currentUser && this.cid) { const wxwork = new WxworkAuth({ cid: this.cid, appId: 'project' }); this.currentUser = await wxwork.currentProfile(); console.log('👤 当前用户:', this.currentUser); console.log('👤 用户姓名:', this.currentUser?.get('name')); } ``` ### 测试4:发送消息 1. 进入"交付执行"阶段 2. 选择一个空间和阶段(如:办公区 - 白模) 3. 点击"发送消息"按钮 4. 选择话术或输入自定义消息 5. 点击"发送中..."按钮 **预期控制台日志**: ``` 📤 [发送消息] 开始发送... 🔍 [sendToWxwork] ========== 开始发送流程 ========== 🔍 [sendToWxwork] 企业微信环境检测: true 🔍 [sendToWxwork] 检查SDK初始化状态... ✅ [sendToWxwork] SDK已初始化,跳过重复初始化 📧 准备发送消息到企业微信... 🔍 [sendChatMessage] ========== 开始发送消息 ========== 🔍 [sendChatMessage] 消息类型: text 🔍 [sendChatMessage] 开始注册JSSDK... ✅ [sendChatMessage] URL未变化,使用缓存的注册状态 🔍 [sendChatMessage] JSSDK注册结果: true 🔍 [sendChatMessage] 调用ww.sendChatMessage... ✅ [sendChatMessage] 消息发送成功! ← 必须看到这个! ✅ 文本消息已发送 ✅ 消息发送成功! ``` ### 测试5:验证群聊中显示消息 **群聊中应该看到**: ``` 老师我这里硬装模型做好了,看下是否有问题,如果没有,我去做渲染 ``` ✅ **成功标志**:群聊中显示消息 --- ## 🔧 问题排查指南 ### 场景1:仍然显示"发送中..."但没有消息 **排查步骤**: #### 1.1 确认是否从群聊侧边栏打开 ``` 检查URL:应该包含 /wxwork/cDL6R1hgSi/project/ ✅ 正确:https://app.fmode.cn/dev/yss/#/wxwork/cDL6R1hgSi/project/project-detail/xxx ❌ 错误:https://app.fmode.cn/dev/yss/#/admin/project-detail/xxx ``` #### 1.2 检查是否看到注册成功 ``` 控制台搜索:"AgentConfig注册成功" ✅ 看到 → 继续下一步 ❌ 没看到 → 重新从群聊侧边栏打开 ``` #### 1.3 检查是否看到超时警告 ``` 控制台搜索:"注册超时" ✅ 看到 → 说明回调未触发,检查入口和权限 ❌ 没看到 → 继续下一步 ``` #### 1.4 检查sendChatMessage调用 ``` 控制台搜索:"调用ww.sendChatMessage" ✅ 看到 → 继续下一步 ❌ 没看到 → 说明注册失败,检查上面步骤 ``` #### 1.5 检查消息发送结果 ``` 控制台搜索:"消息发送成功" 或 "消息发送失败" ✅ 成功 → 检查群聊中是否显示 ❌ 失败 → 查看错误详情 ``` ### 场景2:权限错误 **错误信息**: ``` ❌ [sendChatMessage] 消息发送失败! errMsg: "sendChatMessage:fail no permission" ``` **解决方案**: 1. 登录企业微信管理后台 2. 应用管理 → 你的应用(项目管理) 3. 接口权限 → 开启"发送消息到聊天中" 4. 保存并等待5分钟生效 ### 场景3:Not in Session错误 **错误信息**: ``` errMsg: "sendChatMessage:fail not in session" ``` **解决方案**: 1. ❌ 关闭当前应用 2. ✅ 重新从群聊侧边栏打开 3. ✅ 确保URL包含`/wxwork/`路径 ### 场景4:用户身份显示"未知" **检查**: ```typescript // 在stage-delivery.component.ts的ngOnInit中添加 console.log('👤 检查当前用户...'); console.log(' currentUser:', this.currentUser); console.log(' cid:', this.cid); if (!this.currentUser && this.cid) { console.log('👤 开始获取当前用户...'); const wxwork = new WxworkAuth({ cid: this.cid, appId: 'project' }); this.currentUser = await wxwork.currentProfile(); console.log('👤 用户获取完成:', this.currentUser); console.log('👤 用户姓名:', this.currentUser?.get('name')); } ``` **如果仍然为"未知"**: - 检查企业微信用户信息是否同步 - 检查Profile表中是否有该用户记录 - 检查用户的`name`字段是否有值 --- ## 💡 完整代码检查清单 ### 1. wxwork-sdk.service.ts **必须包含**: - ✅ `suiteMap`中有`project`配置 - ✅ `registerCorpWithSuite`有15秒超时 - ✅ 调试日志输出corpId、agentId、suiteId - ✅ `getDefaultApiList`包含`sendChatMessage` ### 2. stage-delivery.component.ts **必须包含**: ```typescript import { WxworkSDKService } from '../../../services/wxwork-sdk.service'; // Line 15 constructor( // ... private wxworkSDKService: WxworkSDKService // Line 289 ) {} async ngOnInit() { this.cid = this.route.parent?.snapshot.paramMap.get('cid') || ''; // 🔥 必须有这段 if (this.cid) { console.log('🔐 初始化企业微信SDK...'); try { await this.wxworkSDKService.initialize(this.cid, 'project'); console.log('✅ 企业微信SDK初始化成功'); } catch (error) { console.error('❌ 企业微信SDK初始化失败:', error); } } // ... 其他初始化 } ``` ### 3. delivery-message.service.ts **必须包含**: ```typescript // 🔥 检查SDK是否已初始化(避免重复初始化) if (!this.wxworkService.cid || this.wxworkService.cid !== cid) { await this.wxworkService.initialize(cid, appId); } else { console.log('✅ SDK已初始化,跳过重复初始化'); } ``` --- ## 📝 最终验证清单 ### 部署前检查 - [ ] 已修改`wxwork-sdk.service.ts`(添加超时和日志) - [ ] 已修改`stage-delivery.component.ts`(注入SDK并初始化) - [ ] 已修改`delivery-message.service.ts`(避免重复初始化) - [ ] 本地代码已保存 ### 部署检查 - [ ] `ng build`成功完成 - [ ] `.\deploy.ps1`成功完成 - [ ] CDN刷新任务已创建 - [ ] 等待5分钟让CDN生效 ### 测试检查 - [ ] 从群聊侧边栏打开应用(不是工作台) - [ ] URL包含`/wxwork/cDL6R1hgSi/project/` - [ ] 控制台显示"AgentConfig注册成功" - [ ] 控制台显示用户姓名"脑控徐福静" - [ ] 点击发送消息 - [ ] 控制台显示"消息发送成功" - [ ] 群聊中显示消息 ✅ --- ## 🎯 核心要点总结 ### 1. 必须从群聊侧边栏打开 **为什么**:`sendChatMessage`只在群聊会话上下文中工作 **路径**: ``` 群聊 → 右上角"..." → 应用 ``` ### 2. 必须看到"AgentConfig注册成功" **为什么**:只有注册成功才能调用`sendChatMessage` **检查**: ``` 控制台搜索:"AgentConfig注册成功" ``` ### 3. 必须等待CDN刷新 **为什么**:新代码需要CDN刷新才能生效 **时间**:3-5分钟 ### 4. 必须在15秒内完成注册 **为什么**:超时机制会在15秒后返回false **检查**: ``` 从"开始注册JSSDK"到"AgentConfig注册成功"应该<15秒 ``` --- ## 🚀 快速部署命令 ```powershell # 1. 切换到项目目录 cd e:\yinsanse\yss-project # 2. 构建并部署(deploy.ps1会执行所有步骤) .\deploy.ps1 # 3. 等待5分钟 # 4. 从群聊侧边栏重新打开应用测试 ``` --- ## 📞 如果还是不工作 ### 检查清单 1. ✅ 代码已部署(检查OBS文件时间戳) 2. ✅ CDN已刷新(等待5分钟) 3. ✅ 从群聊侧边栏打开(URL包含/wxwork/) 4. ✅ 看到"AgentConfig注册成功" 5. ✅ 用户姓名显示正确 6. ✅ 企微后台权限已开启 ### 如果全部✅但仍失败 **提供以下信息**: 1. 完整的控制台日志截图 2. URL地址 3. 错误信息(如果有) 4. 是否从群聊侧边栏打开 --- **文档创建时间**:2025-11-30 13:50 **部署类型**:完整部署 **预计生效时间**:5分钟后 **关键检查点**:AgentConfig注册成功 + 群聊中显示消息