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