83 lines
3.3 KiB
Markdown
83 lines
3.3 KiB
Markdown
---
|
||
name: export-chat-history
|
||
description: "将当前微信群聊指定日期或时间范围内的聊天记录导出为 Excel 并发送到当前群聊。当用户要求导出、下载、整理或备份今天、昨天或某段时间的群聊记录、聊天记录、群消息时使用。"
|
||
---
|
||
|
||
# 导出群聊记录
|
||
|
||
运行 `scripts/export_chat_history.py`,查询当前微信群聊的聊天记录,生成 Excel 工作簿并直接发送到当前群聊。
|
||
|
||
## 入参
|
||
|
||
```json
|
||
{
|
||
"type": "object",
|
||
"properties": {
|
||
"date": {
|
||
"type": "string",
|
||
"description": "按自然日导出,格式为 YYYY-MM-DD。"
|
||
},
|
||
"start_time": {
|
||
"type": "string",
|
||
"description": "自定义范围的开始时间(包含),格式为 YYYY-MM-DD HH:mm 或 YYYY-MM-DD HH:mm:ss。"
|
||
},
|
||
"end_time": {
|
||
"type": "string",
|
||
"description": "自定义范围的结束时间(不包含),格式为 YYYY-MM-DD HH:mm 或 YYYY-MM-DD HH:mm:ss。"
|
||
}
|
||
},
|
||
"additionalProperties": false
|
||
}
|
||
```
|
||
|
||
遵守以下时间规则:
|
||
|
||
- 使用 Asia/Shanghai 时区。
|
||
- 用户未指定时间时,不传时间参数,默认导出今天 00:00 至脚本执行时的记录。
|
||
- 用户说“今天”时传当天 `--date`;说“昨天”时传昨天的 `--date`。
|
||
- 自定义范围必须同时传 `--start_time` 和 `--end_time`,结束时间必须晚于开始时间。
|
||
- `--date` 不能与自定义范围同时使用。
|
||
|
||
## 执行
|
||
|
||
导出今天:
|
||
|
||
```bash
|
||
python3 scripts/export_chat_history.py --date 2026-07-29
|
||
```
|
||
|
||
导出自定义范围:
|
||
|
||
```bash
|
||
python3 scripts/export_chat_history.py --start_time '2026-07-28 09:00' --end_time '2026-07-28 18:00'
|
||
```
|
||
|
||
未指定时间时:
|
||
|
||
```bash
|
||
python3 scripts/export_chat_history.py
|
||
```
|
||
|
||
脚本由 `execute_skill_script` 在技能根目录运行。运行时自动读取客户端注入的以下环境变量:
|
||
|
||
- `ROBOT_FROM_WX_ID`:当前群聊 ID。
|
||
- `ROBOT_WX_ID`:机器人自身微信 ID,用于排除机器人消息。
|
||
- `ROBOT_WECHAT_CLIENT_PORT`:机器人客户端端口,用于发送 Excel。
|
||
- `ROBOT_CODE`、`MYSQL_HOST`、`MYSQL_PORT`、`MYSQL_USER`、`MYSQL_PASSWORD`:机器人实例数据库连接。
|
||
|
||
## 查询与导出规则
|
||
|
||
- 仅允许导出当前群聊 `ROBOT_FROM_WX_ID`,不接受外部传入群 ID。
|
||
- 复用客户端群聊总结的查询语义:查询 `messages`,联表 `chat_room_members` 取得群成员备注或昵称,排除机器人自身发送的消息。
|
||
- 导出普通文本消息,以及引用消息、网页分享和文件消息中可读的标题或描述。
|
||
- 按消息时间、消息 ID 升序排列,结束时间不包含在结果中。
|
||
- Excel 包含“导出说明”和“聊天记录”两个工作表;聊天记录列为序号、发送时间、发送人、发送人微信 ID、消息内容。
|
||
- 单次最多导出 50,000 条记录;超过上限时停止并提示缩短时间范围。
|
||
- 生成后直接调用客户端本地文件发送接口;发送成功后删除临时文件。
|
||
|
||
## 结果处理
|
||
|
||
- 仅当脚本返回 JSON 且 `ok` 为 `true` 时,告知用户导出成功;脚本已经发送文件,不要再次调用发送文件技能。
|
||
- 没有符合条件的记录时,说明该时间范围没有可导出的聊天记录,并建议用户调整日期或范围。
|
||
- 查询、生成或发送失败时,按脚本错误说明原因,不要声称文件已发送。
|