232 lines
5.4 KiB
Markdown
232 lines
5.4 KiB
Markdown
# 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. 测试环境(开发/生产)
|