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