Files
chat_app/backend/API_USAGE.md
2025-12-11 03:53:47 +08:00

4.6 KiB
Raw Blame History

消息服务 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               # 超时时间(秒)

技术实现

服务架构

  1. MessageService: 核心服务类,整合了以下功能:

    • 从企业微信拉取会话数据
    • RSA 解密加密消息
    • 批量保存到 MongoDB 数据库
    • 去重处理(基于 msgid)
  2. 消息处理流程:

    拉取数据 → 检查加密 → 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: 跳过的重复消息数

注意事项

  1. 私钥文件: 确保 cert/1_rsa.key 文件存在,用于 RSA 解密
  2. 数据库连接: 确保 MongoDB 服务正常运行
  3. 网络代理: 如果需要代理,在 .env 中配置 WEWORK_PROXY
  4. 性能考虑: 大量数据加载时建议分批进行(limit=100-500)

与原有脚本对比

功能 原有脚本 (load_chat_data.py) 新API (/api/messages/load)
执行方式 命令行 HTTP API
参数传递 命令行参数 URL 查询参数
结果输出 控制台 + JSON 文件 JSON 响应
集成性 独立脚本 集成到 FastAPI 应用
自动化 需要脚本调度 可直接通过 HTTP 调用

扩展性

当前实现为最小可行产品(MVP),可扩展的功能包括:

  1. 后台异步任务处理
  2. 更丰富的查询过滤条件
  3. 消息导出功能
  4. 实时进度通知
  5. 错误重试机制