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

228 lines
5.9 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.
# 医生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` 测试配置是否正确