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

4.7 KiB
Raw Blame History

快速修复: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

// 医生端(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. 小程序端操作:

    • 输入患者ID2
    • 点击"登录"
    • 看到"当前登录: patient_2"
  2. Web 端操作:

    • 打开患者详情页
    • 点击"视频通话"按钮
    • 系统自动使用 patient_2 发起呼叫
  3. 小程序端应该:

    • 自动弹出来电界面
    • 显示来电提示
    • 可以接听或拒绝

场景 2:小程序端(患者)呼叫 Web 端(医生)

  1. Web 端操作:

    • 医生登录系统(自动登录为 doctor_1
    • 保持页面打开
  2. 小程序端操作:

    • 已登录为 patient_2
    • 输入医生ID1doctor_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 完全一致
  • 小程序在前台运行(未切换到后台)
  • 双方网络连接正常
  • 双方已授予摄像头和麦克风权限

测试命令

在小程序端控制台测试

// 1. 检查登录状态
console.log('当前登录:', currentUserId.value)

// 2. 手动发起呼叫测试
TUICallKitAPI.calls({
  userIDList: ['doctor_1'],  // 替换为实际的医生ID
  type: 2
}).then(() => {
  console.log('呼叫成功')
}).catch(err => {
  console.error('呼叫失败:', err)
})

在 Web 端控制台测试

// 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. 具体错误代码和提示信息