# Web 端呼叫小程序端调试指南 ## 问题现象 Web 端呼叫小程序端时,小程序端无法接听通话。 ## 常见原因及解决方案 ### 1. userId 格式不一致(最常见) **问题:** - Web 端使用 `doctor_1` 格式 - 小程序端使用 `patient_2` 格式 - 呼叫时 userId 格式不匹配 **解决方案:** 确保双方使用相同的 userId 格式规则。 **检查步骤:** 1. **查看 Web 端日志**(浏览器控制台): ```javascript // 在 admin/src/components/video-call/index.vue 中查找 console.log('=== 发起一对一通话 ===') console.log('后端返回的 patientUserId:', res.patientUserId) console.log('最终使用的 targetUserId:', targetUserId) ``` 2. **查看小程序端日志**(微信开发者工具控制台): ```javascript // 在 wx/TUICallKit/pages/call.vue 中查找 console.log('=== 小程序端登录信息 ===') console.log('userId:', userId) console.log('准备呼叫用户:', targetUserId) ``` 3. **确保格式一致**: - 如果 Web 端医生登录为 `doctor_1`,小程序端患者登录为 `patient_2` - Web 端呼叫时应使用 `patient_2` - 小程序端呼叫时应使用 `doctor_1` ### 2. SDKAppID 不一致 **问题:** Web 端和小程序端使用了不同的腾讯云应用。 **解决方案:** 确保双方使用相同的 SDKAppID。 **检查步骤:** ```javascript // Web 端 console.log('Web 端 SDKAppID:', res.sdkAppId) // 小程序端 console.log('小程序端 SDKAppID:', sdkAppId) ``` ### 3. 小程序端未在线 **问题:** 小程序端未登录或已退出登录状态。 **解决方案:** 1. 确保小程序端已成功登录 2. 查看小程序端是否显示"当前登录: patient_X" 3. 检查小程序端是否在前台运行 ### 4. 网络权限问题 **问题:** 小程序端网络权限配置不正确。 **解决方案:** 检查 `wx/TUICallKit/manifest.json` 或 `project.config.json`: ```json { "permission": { "scope.camera": { "desc": "需要使用您的摄像头进行视频通话" }, "scope.record": { "desc": "需要使用您的麦克风进行语音通话" } }, "requiredPrivateInfos": [ "getLocation", "chooseLocation", "onLocationChange", "startLocationUpdate" ] } ``` ### 5. 信令服务器连接问题 **问题:** 小程序端未成功连接到腾讯云信令服务器。 **解决方案:** 1. 检查小程序端初始化是否成功 2. 查看是否有网络错误日志 3. 确认 userSig 是否有效(未过期) ## 调试步骤 ### 步骤 1:验证登录状态 **Web 端:** ```javascript // 在浏览器控制台执行 console.log('Web 端登录信息:', { userId: res.userId, sdkAppId: res.sdkAppId }) ``` **小程序端:** ```javascript // 在微信开发者工具控制台查看 console.log('小程序端登录信息:', { userId: currentUserId.value, isLogin: isLogin.value }) ``` ### 步骤 2:验证呼叫参数 **Web 端呼叫时:** ```javascript // 查看控制台输出 console.log('准备发起一对一通话,目标用户:', targetUserId) ``` **小程序端应该收到:** - 来电通知 - TUICallKit 界面自动弹出 ### 步骤 3:检查错误日志 **Web 端可能的错误:** - `60011`: 对方不在线 - `60010`: 对方忙线中 - `60008`: 对方拒绝了通话 **小程序端可能的错误:** - 初始化失败 - 网络连接失败 - 权限未授予 ## 测试方案 ### 方案 1:同一设备测试(推荐) 1. 在电脑上打开 Web 端(医生端) 2. 在手机上打开小程序(患者端) 3. 小程序端先登录(输入患者ID,如:2) 4. Web 端发起呼叫(目标用户应为 `patient_2`) ### 方案 2:双向测试 1. **Web 呼叫小程序:** - 小程序端登录:患者ID = 2(登录为 `patient_2`) - Web 端呼叫:目标用户 = `patient_2` 2. **小程序呼叫 Web:** - Web 端登录:医生ID = 1(登录为 `doctor_1`) - 小程序端呼叫:输入 `doctor_1` 或 `1`(会自动转换为 `doctor_1`) ## 后端接口检查 确保后端返回正确的 userId 格式: ```php // 医生端获取签名 { "userId": "doctor_1", // 医生自己的ID "patientUserId": "patient_2", // 要呼叫的患者ID "sdkAppId": "1400xxxxx", "userSig": "eJw1..." } // 患者端获取签名 { "userId": "patient_2", // 患者自己的ID "sdkAppId": "1400xxxxx", "userSig": "eJw1..." } ``` ## 常用调试命令 ### 查看小程序端 TUICallKit 状态 ```javascript // 在微信开发者工具控制台执行 console.log('TUICallKit 状态:', TUICallKitAPI) ``` ### 手动测试呼叫 ```javascript // 在小程序端控制台执行 TUICallKitAPI.calls({ userIDList: ['doctor_1'], type: 2 }).then(() => { console.log('呼叫成功') }).catch(err => { console.error('呼叫失败:', err) }) ``` ## 问题排查清单 - [ ] Web 端和小程序端使用相同的 SDKAppID - [ ] userId 格式一致(都使用 `prefix_id` 格式) - [ ] 小程序端已成功登录并在线 - [ ] 小程序端在前台运行(未切换到后台) - [ ] 网络连接正常 - [ ] 摄像头和麦克风权限已授予 - [ ] userSig 未过期(有效期通常为 7 天) - [ ] 后端接口返回正确的 userId ## 联系支持 如果以上方法都无法解决问题,请提供以下信息: 1. Web 端控制台完整日志 2. 小程序端控制台完整日志 3. 后端返回的签名数据(隐藏 userSig) 4. 具体的错误提示信息 5. 测试环境(开发/生产)