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

203 lines
4.7 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 端呼叫小程序端无法接听
## 核心问题
**userId 格式不匹配**是最常见的原因。
## 立即检查
### 1. 打开浏览器控制台(Web 端)
在发起通话前,查看日志:
```
=== 发起一对一通话 ===
后端返回的 patientUserId: patient_2
最终使用的 targetUserId: patient_2
```
### 2. 打开微信开发者工具控制台(小程序端)
在登录后,查看日志:
```
=== 小程序端登录信息 ===
userId: patient_2
```
### 3. 对比两个 userId
**必须完全一致!**
- ✅ 正确:Web 呼叫 `patient_2`,小程序登录为 `patient_2`
- ❌ 错误:Web 呼叫 `patient_2`,小程序登录为 `2`
- ❌ 错误:Web 呼叫 `2`,小程序登录为 `patient_2`
## 快速修复步骤
### 修复 1:确保后端返回正确格式
检查后端接口 `/api/tcm/getCallSignature``/api/tcm/getPatientSignature`
```php
// 医生端(Web
return [
'userId' => 'doctor_' . $doctorId, // 医生自己的ID
'patientUserId' => 'patient_' . $patientId, // 要呼叫的患者ID
'sdkAppId' => $sdkAppId,
'userSig' => $userSig
];
// 患者端(小程序)
return [
'userId' => 'patient_' . $patientId, // 患者自己的ID
'sdkAppId' => $sdkAppId,
'userSig' => $userSig
];
```
### 修复 2:小程序端已更新
小程序端代码已更新,支持自动转换:
- 输入纯数字 `1` → 自动转换为 `doctor_1`
- 输入完整格式 `doctor_1` → 直接使用
### 修复 3:测试流程
**场景 1:Web 端(医生)呼叫小程序端(患者)**
1. 小程序端操作:
- 输入患者ID`2`
- 点击"登录"
- 看到"当前登录: patient_2"
2. Web 端操作:
- 打开患者详情页
- 点击"视频通话"按钮
- 系统自动使用 `patient_2` 发起呼叫
3. 小程序端应该:
- 自动弹出来电界面
- 显示来电提示
- 可以接听或拒绝
**场景 2:小程序端(患者)呼叫 Web 端(医生)**
1. Web 端操作:
- 医生登录系统(自动登录为 `doctor_1`
- 保持页面打开
2. 小程序端操作:
- 已登录为 `patient_2`
- 输入医生ID`1``doctor_1`
- 点击"呼叫"
3. Web 端应该:
- 自动弹出来电界面
- 显示来电提示
- 可以接听或拒绝
## 常见错误及解决
### 错误 1:对方不在线(60011)
**原因:**
- 对方未登录
- userId 格式不匹配
- 对方已退出登录
**解决:**
1. 确认对方已登录
2. 检查 userId 格式是否一致
3. 让对方重新登录
### 错误 2:初始化失败
**原因:**
- SDKAppID 不一致
- userSig 过期或无效
- 网络连接问题
**解决:**
1. 检查双方 SDKAppID 是否相同
2. 重新获取 userSig
3. 检查网络连接
### 错误 3:无法访问摄像头/麦克风
**原因:**
- 小程序权限未授予
- 浏览器权限未授予
- 设备被其他应用占用
**解决:**
1. 小程序:在设置中允许摄像头和麦克风权限
2. 浏览器:点击地址栏的摄像头图标,允许权限
3. 关闭其他占用设备的应用
## 验证清单
在发起通话前,确认:
- [ ] 小程序端显示"当前登录: patient_X"
- [ ] Web 端控制台显示"最终使用的 targetUserId: patient_X"
- [ ] 两个 userId 完全一致
- [ ] 小程序在前台运行(未切换到后台)
- [ ] 双方网络连接正常
- [ ] 双方已授予摄像头和麦克风权限
## 测试命令
### 在小程序端控制台测试
```javascript
// 1. 检查登录状态
console.log('当前登录:', currentUserId.value)
// 2. 手动发起呼叫测试
TUICallKitAPI.calls({
userIDList: ['doctor_1'], // 替换为实际的医生ID
type: 2
}).then(() => {
console.log('呼叫成功')
}).catch(err => {
console.error('呼叫失败:', err)
})
```
### 在 Web 端控制台测试
```javascript
// 1. 检查登录状态
console.log('医生登录信息:', {
userId: '从后端获取',
patientUserId: '要呼叫的患者ID'
})
// 2. 手动发起呼叫测试
TUICallKitServer.call({
userID: 'patient_2', // 替换为实际的患者ID
type: TUICallType.VIDEO_CALL
}).then(() => {
console.log('呼叫成功')
}).catch(err => {
console.error('呼叫失败:', err)
})
```
## 仍然无法解决?
如果按照以上步骤仍然无法解决,请检查:
1. **后端日志**:查看签名生成是否正确
2. **网络抓包**:查看信令是否正常发送
3. **腾讯云控制台**:查看实时通话监控
4. **版本兼容性**:确保 Web 端和小程序端使用兼容的 SDK 版本
## 联系方式
提供以下信息以便快速定位问题:
1. Web 端完整控制台日志(截图)
2. 小程序端完整控制台日志(截图)
3. 后端返回的签名数据(隐藏敏感信息)
4. 具体错误代码和提示信息