Files
zyt/wx/TUICallKit/CALL_DEBUG_GUIDE.md
T
2026-03-04 15:32:30 +08:00

232 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 测试环境(开发/生产)