4.6 KiB
4.6 KiB
消息服务 API 使用文档
基于 backend/scripts/load_chat_data.py 实现的消息服务 API,提供加载会话存档、解密、保存到数据库的整合功能。
新增 API 接口
1. 加载会话存档到数据库
接口: POST /api/messages/load
功能: 完整流程:拉取 → 解密 → 保存
- 从企业微信拉取会话存档
- 自动解密所有加密消息
- 自动保存到数据库(去重处理)
参数:
seq: 起始seq值,首次使用0(默认: 0)limit: 拉取数量限制,最大1000(默认: 100)
使用示例:
# 首次加载,从seq=0开始,拉取100条消息
curl -X POST "http://localhost:8000/api/messages/load?seq=0&limit=100"
# 继续加载,使用上次返回的max_seq
curl -X POST "http://localhost:8000/api/messages/load?seq=12345&limit=500"
响应示例 (成功):
{
"success": true,
"message": "消息加载完成",
"data": {
"total_fetched": 150,
"encrypted_count": 120,
"decrypted_success": 115,
"decrypted_failed": 5,
"saved_count": 145,
"duplicates_skipped": 5,
"failed_to_save": 0,
"max_seq": 12345,
"next_seq": 12346
},
"execution_time": "0:00:02.345678",
"timestamp": "2025-12-10T16:44:22.123456"
}
响应示例 (没有新消息):
{
"success": true,
"message": "没有新的聊天记录",
"data": {
"total_fetched": 0,
"encrypted_count": 0,
"decrypted_success": 0,
"decrypted_failed": 0,
"saved_count": 0,
"duplicates_skipped": 0,
"max_seq": 0,
"next_seq": 0
},
"execution_time": "0:00:00.123456"
}
2. 查询消息列表
接口: GET /api/messages/
功能: 查询已保存的消息列表,支持分页和过滤
参数:
page: 页码(默认: 1)page_size: 每页数量(默认: 20,最大: 100)msgtype: 消息类型过滤(可选)roomid: 群聊ID过滤(可选)from_user: 发送者过滤(可选)
3. 获取消息统计
接口: GET /api/messages/stats
功能: 获取数据库中消息的统计信息
4. 获取单个消息详情
接口: GET /api/messages/{msgid}
功能: 根据消息ID获取单个消息详情
环境变量配置
新增的环境变量(在 .env 文件中):
# 消息服务配置
WEWORK_PROXY= # 代理地址,如: http://proxy.example.com:8080
WEWORK_PROXY_PASSWD= # 代理密码
WEWORK_TIMEOUT=10 # 超时时间(秒)
技术实现
服务架构
-
MessageService: 核心服务类,整合了以下功能:
- 从企业微信拉取会话数据
- RSA 解密加密消息
- 批量保存到 MongoDB 数据库
- 去重处理(基于 msgid)
-
消息处理流程:
拉取数据 → 检查加密 → RSA解密 → 解析JSON → 去重检查 → 批量保存
重用现有代码
- 重用
load_chat_data.py中的解密逻辑 - 重用现有的
Message数据模型 - 重用企业微信 SDK 配置
错误处理
- 完善的异常捕获和日志记录
- 友好的错误响应格式
- 执行时间统计
使用建议
1. 首次使用
# 从seq=0开始加载
curl -X POST "http://localhost:8000/api/messages/load?seq=0&limit=1000"
2. 增量加载
使用上次响应中的 max_seq 或 next_seq 作为下一次的 seq 参数:
# 假设上次返回的 max_seq=12345
curl -X POST "http://localhost:8000/api/messages/load?seq=12345&limit=1000"
3. 监控进度
通过响应中的统计信息监控加载进度:
total_fetched: 总共拉取的消息数saved_count: 成功保存到数据库的消息数duplicates_skipped: 跳过的重复消息数
注意事项
- 私钥文件: 确保
cert/1_rsa.key文件存在,用于 RSA 解密 - 数据库连接: 确保 MongoDB 服务正常运行
- 网络代理: 如果需要代理,在
.env中配置WEWORK_PROXY - 性能考虑: 大量数据加载时建议分批进行(limit=100-500)
与原有脚本对比
| 功能 | 原有脚本 (load_chat_data.py) |
新API (/api/messages/load) |
|---|---|---|
| 执行方式 | 命令行 | HTTP API |
| 参数传递 | 命令行参数 | URL 查询参数 |
| 结果输出 | 控制台 + JSON 文件 | JSON 响应 |
| 集成性 | 独立脚本 | 集成到 FastAPI 应用 |
| 自动化 | 需要脚本调度 | 可直接通过 HTTP 调用 |
扩展性
当前实现为最小可行产品(MVP),可扩展的功能包括:
- 后台异步任务处理
- 更丰富的查询过滤条件
- 消息导出功能
- 实时进度通知
- 错误重试机制