新增功能

This commit is contained in:
Your Name
2026-03-04 15:32:30 +08:00
parent a07e844c47
commit ab77f5488d
2266 changed files with 177942 additions and 3444 deletions
+315
View File
@@ -0,0 +1,315 @@
# 视频通话问题排查清单
## 问题:Web 端呼叫小程序端无法接听
### 第一步:确认基础环境 ✓
#### Web 端(医生端)
- [ ] 使用 HTTPS 协议访问(或 localhost
- [ ] 浏览器支持 WebRTCChrome/Edge/Safari
- [ ] 已授予摄像头和麦克风权限
- [ ] 网络连接正常
#### 小程序端(患者端)
- [ ] 已授予摄像头和麦克风权限
- [ ] 网络连接正常
- [ ] 小程序在前台运行(未切到后台)
- [ ] 微信版本支持音视频通话
### 第二步:确认登录状态 ✓
#### Web 端检查
打开浏览器控制台,查找日志:
```
TUICallKit init 方法调用完成
初始化完成,显示通话界面
```
如果看到这些日志,说明 Web 端登录成功。
#### 小程序端检查
1. 输入患者ID(如:2
2. 点击"登录"
3. 看到提示"登录成功"
4. 界面显示"当前登录: patient_2"
如果看到这些,说明小程序端登录成功。
### 第三步:确认 userId 格式 ✓✓✓(最重要)
#### Web 端日志
在浏览器控制台查找:
```
=== 发起一对一通话 ===
后端返回的 patientUserId: patient_2
前端传入的 userId:
最终使用的 targetUserId: patient_2
```
记录 `targetUserId` 的值:__________________
#### 小程序端日志
在微信开发者工具控制台查找:
```
=== 小程序端登录信息 ===
userId: patient_2
```
记录 `userId` 的值:__________________
#### 对比结果
- [ ] Web 端的 `targetUserId` 和小程序端的 `userId` 完全一致
- [ ] 格式都是 `prefix_number`(如:patient_2
- [ ] 没有多余的空格或特殊字符
**如果不一致,这就是问题所在!**
### 第四步:确认 SDKAppID 一致 ✓
#### Web 端日志
```
签名获取成功: {
doctorUserId: doctor_1,
patientUserId: patient_2,
sdkAppId: 1400xxxxxx
}
```
记录 `sdkAppId`__________________
#### 小程序端日志
```
=== 小程序端登录信息 ===
sdkAppId: 1400xxxxxx
```
记录 `sdkAppId`__________________
#### 对比结果
- [ ] 两个 SDKAppID 完全一致
**如果不一致,双方无法通话!**
### 第五步:测试呼叫流程 ✓
#### 从 Web 端呼叫小程序端
1. **准备工作**
- [ ] 小程序端已登录(显示"当前登录: patient_2"
- [ ] 小程序在前台运行
- [ ] Web 端已打开患者详情页
2. **发起呼叫**
- [ ] Web 端点击"视频通话"按钮
- [ ] Web 端显示"等待对方接听..."
- [ ] 浏览器控制台显示"通话已发起,目标用户: patient_2"
3. **小程序端应该**
- [ ] 自动弹出来电界面
- [ ] 显示来电提示音
- [ ] 显示"接听"和"拒绝"按钮
- [ ] 控制台显示收到来电信息
4. **如果小程序端没反应**
- 检查控制台是否有错误日志
- 确认 userId 格式是否一致
- 确认小程序是否在前台
- 尝试重新登录小程序
#### 从小程序端呼叫 Web 端
1. **准备工作**
- [ ] Web 端已登录(医生已登录系统)
- [ ] Web 端页面保持打开
- [ ] 小程序端已登录
2. **发起呼叫**
- [ ] 小程序端输入医生ID`1``doctor_1`
- [ ] 点击"呼叫"按钮
- [ ] 小程序显示"正在呼叫..."
- [ ] 控制台显示"准备呼叫用户: doctor_1"
3. **Web 端应该**
- [ ] 自动弹出来电窗口
- [ ] 显示来电提示
- [ ] 显示"接听"和"拒绝"按钮
- [ ] 控制台显示收到来电信息
4. **如果 Web 端没反应**
- 检查控制台是否有错误日志
- 确认 userId 格式是否一致
- 确认 Web 端是否已登录
- 尝试刷新页面重新登录
### 第六步:常见错误代码 ✓
| 错误代码 | 错误信息 | 原因 | 解决方案 |
|---------|---------|------|---------|
| 60006 | 不支持 WebRTC | 非 HTTPS 环境 | 使用 HTTPS 或 localhost |
| 60007 | 设备不支持 | 浏览器不支持 | 更换浏览器 |
| 60008 | 对方拒绝 | 用户点击拒绝 | 正常情况 |
| 60009 | 对方未接听 | 超时未接听 | 正常情况 |
| 60010 | 对方忙线 | 对方正在通话中 | 稍后再试 |
| 60011 | 对方不在线 | userId 不匹配或未登录 | 检查 userId 格式 |
| 60012 | 网络连接失败 | 网络问题 | 检查网络 |
| 60013 | 权限未授予 | 摄像头/麦克风权限 | 授予权限 |
### 第七步:后端接口检查 ✓
#### 医生端接口(Web
请求:`POST /api/tcm/getCallSignature`
```json
{
"diagnosis_id": 1,
"patient_id": 2
}
```
期望响应:
```json
{
"code": 1,
"data": {
"userId": "doctor_1", // 医生自己的ID
"patientUserId": "patient_2", // 要呼叫的患者ID
"sdkAppId": "1400xxxxxx",
"userSig": "eJw1..."
}
}
```
检查点:
- [ ] `userId` 格式正确(doctor_X
- [ ] `patientUserId` 格式正确(patient_X
- [ ] `sdkAppId` 正确
- [ ] `userSig` 不为空
#### 患者端接口(小程序)
请求:`GET /api/tcm/getPatientSignature?patient_id=2`
期望响应:
```json
{
"code": 1,
"data": {
"userId": "patient_2", // 患者自己的ID
"sdkAppId": "1400xxxxxx",
"userSig": "eJw1..."
}
}
```
检查点:
- [ ] `userId` 格式正确(patient_X
- [ ] `sdkAppId` 与医生端一致
- [ ] `userSig` 不为空
### 第八步:网络抓包分析(高级)✓
如果以上都正常但仍无法通话,可以抓包分析:
#### 工具
- Chrome DevToolsNetwork 标签)
- 微信开发者工具(Network 标签)
- Wireshark(专业工具)
#### 检查点
1. **信令服务器连接**
- [ ] WebSocket 连接成功
- [ ] 收到服务器响应
2. **呼叫信令**
- [ ] 发送 INVITE 信令
- [ ] 收到 RINGING 响应
- [ ] 收到 ACCEPT 或 REJECT
3. **媒体流**
- [ ] ICE 候选交换成功
- [ ] DTLS 握手成功
- [ ] RTP 数据包传输
### 问题解决方案汇总
#### 问题 1userId 格式不一致
**症状:** 错误代码 60011(对方不在线)
**解决:**
1. 检查后端接口返回的 userId 格式
2. 确保都使用 `prefix_number` 格式
3. 修改后端代码统一格式
#### 问题 2SDKAppID 不一致
**症状:** 初始化失败或无法通话
**解决:**
1. 检查后端配置文件
2. 确保 Web 端和小程序端使用同一个腾讯云应用
3. 重新生成 userSig
#### 问题 3:小程序未在线
**症状:** 小程序端无反应
**解决:**
1. 确认小程序已登录
2. 确认小程序在前台运行
3. 尝试重新登录
#### 问题 4:权限未授予
**症状:** 无法访问摄像头/麦克风
**解决:**
1. 小程序:设置 → 权限管理 → 允许摄像头和麦克风
2. Web:浏览器地址栏 → 权限设置 → 允许摄像头和麦克风
3. 重新加载页面
#### 问题 5:网络问题
**症状:** 连接失败或断开
**解决:**
1. 检查网络连接
2. 尝试切换网络(WiFi/4G
3. 检查防火墙设置
4. 确认服务器可访问
### 成功标志
当一切正常时,你应该看到:
#### Web 端控制台
```
WebRTC 环境检测: { isHttps: true, hasGetUserMedia: true, hasRTCPeerConnection: true }
签名获取成功: { doctorUserId: "doctor_1", patientUserId: "patient_2", sdkAppId: "1400xxxxxx" }
TUICallKit init 方法调用完成
初始化完成,显示通话界面
=== 发起一对一通话 ===
最终使用的 targetUserId: patient_2
通话已发起,目标用户: patient_2
>>> 正在呼叫
>>> 通话已接通
```
#### 小程序端控制台
```
获取签名成功: { userId: "patient_2", sdkAppId: "1400xxxxxx", ... }
=== 小程序端登录信息 ===
userId: patient_2
TUICallKit 初始化成功, userId: patient_2
[收到来电] from: doctor_1
[通话接通]
```
### 需要帮助?
如果按照清单检查后仍然无法解决,请提供:
1. ✅ Web 端完整控制台日志(截图)
2. ✅ 小程序端完整控制台日志(截图)
3. ✅ 后端接口响应数据(隐藏 userSig)
4. ✅ 具体错误代码和提示信息
5. ✅ 测试环境信息(开发/生产,域名等)
6. ✅ 本清单的检查结果
---
**最后更新:** 2024-03-04
**版本:** 1.0