# 医生IM账号自动导入功能 ## 功能说明 在权限管理-管理员页面,新增或编辑管理员时,系统会自动将医生账号导入到腾讯云IM后台。 ## 实现位置 ### 前端页面 - 文件:`admin/src/views/permission/admin/index.vue` - 新增按钮:第45-50行 - 编辑按钮:第133-135行 ### 后端逻辑 - 文件:`server/app/adminapi/logic/auth/AdminLogic.php` - 新增方法:`add()` - 第30行调用IM导入 - 编辑方法:`edit()` - 第70行调用IM导入 - 导入方法:`importDoctorAccountToIm()` - 新增的私有方法 ## 账号格式 - 医生账号ID:`doctor_{admin_id}` - 例如:管理员ID为1,则IM账号为 `doctor_1` - 昵称:使用管理员的名称 ## 使用流程 ### 新增管理员 1. 进入:权限管理 > 管理员 2. 点击"新增"按钮 3. 填写管理员信息(账号、名称、角色等) 4. 点击"确定"保存 5. ✅ 系统自动导入医生IM账号到腾讯云 ### 编辑管理员 1. 进入:权限管理 > 管理员 2. 点击某个管理员的"编辑"按钮 3. 修改管理员信息 4. 点击"确定"保存 5. ✅ 系统自动更新医生IM账号信息 ## 验证方法 ### 1. 查看日志 ```bash # 查看最新日志 tail -f server/runtime/adminapi/log/当前日期.log # 成功日志示例: [info] 开始导入医生IM账号 - admin_id: 1, user_id: doctor_1, name: 管理员 [info] 医生IM账号导入成功 - admin_id: 1, user_id: doctor_1 # 失败日志示例: [error] 导入医生IM账号异常 - admin_id: 1, error: xxx ``` ### 2. 查看腾讯云控制台 1. 登录腾讯云控制台 2. 进入:即时通信IM > 应用列表 3. 选择你的应用(SDKAppID: 1600127710) 4. 进入:账号管理 5. 搜索:`doctor_1`(或其他管理员ID) 6. ✅ 应该能看到该账号 ### 3. 测试视频通话 1. 医生端:使用 `doctor_1` 账号登录TUICallKit 2. 患者端:使用 `patient_X` 账号登录 3. 发起通话测试 4. ✅ 应该能正常通话 ## 当前问题 ### ErrorCode 70003: UserSig非法 **错误信息**: ``` The UserSig in use is illegal. Please regenerate UserSig through official API. ``` **日志示例**: ``` [2026-03-02T10:38:32+08:00][info] HTTP响应: {"ActionStatus":"FAIL","ErrorCode":70003,"ErrorInfo":"The UserSig in use is illegal..."} [2026-03-02T10:38:32+08:00][error] 导入IM账号失败 - userId: patient_3, error: 导入账号失败 - ErrorCode: 70003 ``` **可能原因**: 1. ❌ SDKAppID不正确(使用了TRTC的而非IM的) 2. ❌ SecretKey不正确 3. ❌ IM服务未开通或已过期 4. ❌ 配置文件格式问题 ## 排查步骤 ### 步骤1: 验证配置 运行测试脚本: ```bash cd server php test_usersig.php ``` 该脚本会: - ✅ 显示当前SDKAppID和SecretKey - ✅ 测试UserSig生成 - ✅ 测试UserSig验证 - ✅ 测试IM账号导入 - ✅ 提供详细的错误信息和排查建议 ### 步骤2: 检查腾讯云控制台 1. 登录腾讯云控制台 2. 进入:即时通信IM > 应用列表 3. 确认SDKAppID是否为:`1600127710` 4. 进入应用详情 > 密钥管理 5. 确认SecretKey是否正确 6. 检查应用状态是否为"正常" 7. 检查是否欠费 ### 步骤3: 使用官方工具测试 1. 访问:https://console.cloud.tencent.com/im/tool-usersig 2. 输入SDKAppID:`1600127710` 3. 输入SecretKey:(从控制台复制) 4. 输入UserID:`test_user` 5. 点击"生成UserSig" 6. 如果生成成功,说明配置正确 7. 如果生成失败,说明SDKAppID或SecretKey有误 ### 步骤4: 更新配置 如果发现配置有误,更新 `server/.env` 文件: ```ini [TRTC] SDK_APP_ID = "正确的SDKAppID" SECRET_KEY = "正确的SecretKey" ENABLE = "true" ``` 保存后重启服务。 ## 技术细节 ### 代码修改 #### 1. AdminLogic.php - 添加导入 ```php // 在 add() 方法中添加 self::importDoctorAccountToIm($admin['id'], $params['name']); // 在 edit() 方法中添加 self::importDoctorAccountToIm($params['id'], $params['name']); // 新增方法 private static function importDoctorAccountToIm($adminId, $name) { try { $userId = 'doctor_' . $adminId; Log::info('开始导入医生IM账号 - admin_id: ' . $adminId . ', user_id: ' . $userId . ', name: ' . $name); $imService = new TencentImService(); $result = $imService->importAccount($userId, $name); if ($result) { Log::info('医生IM账号导入成功 - admin_id: ' . $adminId . ', user_id: ' . $userId); } else { Log::warning('医生IM账号导入失败 - admin_id: ' . $adminId . ', user_id: ' . $userId); } } catch (\Exception $e) { Log::error('导入医生IM账号异常 - admin_id: ' . $adminId . ', error: ' . $e->getMessage()); } } ``` #### 2. 添加命名空间 ```php use app\common\service\TencentImService; use think\facade\Log; ``` ### 依赖服务 - `TencentImService.php` - IM账号导入服务 - `TLSSigAPIv2.php` - UserSig生成算法(腾讯云官方) ## 注意事项 1. **不影响现有功能** - 导入失败不会阻止管理员创建 - 只会记录日志,不会抛出异常 2. **重复导入** - 重复导入同一账号不会报错 - IM会自动更新昵称信息 3. **网络要求** - 服务器需要能访问 `console.tim.qq.com` - 需要开放HTTPS (443)端口 4. **性能影响** - 导入操作是同步的 - 通常耗时 < 1秒 - 如果网络慢可能影响保存速度 ## 相关文档 - [IM_ACCOUNT_IMPORT.md](./IM_ACCOUNT_IMPORT.md) - IM账号导入完整文档 - [AUTO_CREATE_PATIENT_ACCOUNT.md](./AUTO_CREATE_PATIENT_ACCOUNT.md) - 患者账号自动创建 - [腾讯云IM REST API](https://cloud.tencent.com/document/product/269/1519) ## 更新日志 ### 2026-03-02 - ✅ 实现医生IM账号自动导入功能 - ✅ 在AdminLogic的add()和edit()方法中添加导入逻辑 - ✅ 创建测试脚本 test_usersig.php - ⏳ 待解决:ErrorCode 70003 UserSig非法问题 --- **下一步**:运行 `php server/test_usersig.php` 测试配置是否正确