feat: 添加消息历史持久化和可视化查看功能
- 新增 messageStore.js 消息存储模块,支持自动保存所有收发消息 - 修改 main.js,在消息转发时自动记录到本地存储 - 修改 preload.js,暴露消息管理 IPC API - 修改 App.js,添加消息历史查看界面 - 统计信息面板(总数/接收/发送/会话数) - 会话列表和消息详情 - 搜索、过滤、分页功能 - 导出 JSON 和清空历史 - 新增完整文档(MESSAGE_HISTORY.md 等) - 新增测试脚本 test-message-history.js 版本:v1.0.1
This commit is contained in:
165
MESSAGE_HISTORY.md
Normal file
165
MESSAGE_HISTORY.md
Normal file
@@ -0,0 +1,165 @@
|
||||
# 消息历史功能说明
|
||||
|
||||
## 功能概述
|
||||
|
||||
为企业微信 OpenClaw 客户端添加了完整的消息持久化和查看功能,所有通过客户端转发的消息都会被自动保存,方便后续查看、管理和审计。
|
||||
|
||||
## 主要特性
|
||||
|
||||
### ✅ 消息持久化
|
||||
- 所有收发的消息自动保存到本地
|
||||
- 支持文本、图片、文件、语音等多种消息类型
|
||||
- 消息存储在 `~/.config/wecome-openclaw-client/messages/messages.json`
|
||||
- 默认最多保留 10,000 条消息(可配置)
|
||||
|
||||
### ✅ 消息查看
|
||||
- 实时查看历史消息记录
|
||||
- 按会话分组浏览
|
||||
- 支持搜索消息内容
|
||||
- 支持按方向(接收/发送)和来源(WeCom/OpenClaw)过滤
|
||||
- 分页浏览,每页 50 条
|
||||
|
||||
### ✅ 统计信息
|
||||
- 总消息数统计
|
||||
- 接收/发送消息数量
|
||||
- 会话数量统计
|
||||
- 今日/昨日消息数量
|
||||
|
||||
### ✅ 数据管理
|
||||
- 导出消息为 JSON 文件
|
||||
- 清空消息历史
|
||||
- 按会话查看和管理
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 1. 打开消息历史
|
||||
|
||||
启动客户端后,点击右上角的 **💬 消息历史** 按钮。
|
||||
|
||||
### 2. 查看消息
|
||||
|
||||
- **左侧面板**:显示所有会话列表,点击可筛选特定会话的消息
|
||||
- **右侧面板**:显示消息详情,包括:
|
||||
- 消息来源(WeCom/OpenClaw)
|
||||
- 消息方向(接收/发送)
|
||||
- 发送者信息
|
||||
- 消息内容
|
||||
- 时间戳
|
||||
- 附件信息
|
||||
|
||||
### 3. 搜索消息
|
||||
|
||||
在搜索框中输入关键词,点击 **🔍 搜索** 按钮:
|
||||
- 支持搜索消息内容
|
||||
- 支持搜索发送者名称
|
||||
- 支持搜索会话 ID
|
||||
|
||||
### 4. 过滤消息
|
||||
|
||||
使用下拉菜单过滤消息:
|
||||
- **方向过滤**:只看接收消息或发送消息
|
||||
- **来源过滤**:只看企业微信消息或 OpenClaw 消息
|
||||
|
||||
### 5. 导出数据
|
||||
|
||||
点击 **📥 导出 JSON** 按钮,将所有消息导出为 JSON 文件,便于:
|
||||
- 备份
|
||||
- 数据分析
|
||||
- 审计合规
|
||||
|
||||
### 6. 清空历史
|
||||
|
||||
点击 **🗑️ 清空历史** 按钮可删除所有消息记录(需谨慎操作!)
|
||||
|
||||
## 技术实现
|
||||
|
||||
### 文件结构
|
||||
|
||||
```
|
||||
wecome-openclaw-client/
|
||||
├── electron/
|
||||
│ ├── messageStore.js # 消息存储模块(新增)
|
||||
│ ├── main.js # 主进程(已修改)
|
||||
│ └── preload.js # 预加载脚本(已修改)
|
||||
├── renderer/
|
||||
│ └── src/
|
||||
│ └── App.js # UI 组件(已修改)
|
||||
└── MESSAGE_HISTORY.md # 本文档
|
||||
```
|
||||
|
||||
### 存储位置
|
||||
|
||||
- **Linux**: `~/.config/wecome-openclaw-client/messages/messages.json`
|
||||
- **Windows**: `%APPDATA%\wecome-openclaw-client\messages\messages.json`
|
||||
- **macOS**: `~/Library/Application Support/wecome-openclaw-client/messages/messages.json`
|
||||
|
||||
### 消息数据结构
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "msg_1710057600000_abc123",
|
||||
"timestamp": "2026-03-10T12:00:00.000Z",
|
||||
"direction": "inbound",
|
||||
"source": "wecom",
|
||||
"sessionId": "bot123:chat456",
|
||||
"chatId": "chat456",
|
||||
"senderId": "zhangsan",
|
||||
"senderName": "张三",
|
||||
"messageType": "text",
|
||||
"content": "你好,请问有什么可以帮助你的?",
|
||||
"attachments": [],
|
||||
"metadata": {
|
||||
"wecomMsgId": "msgid_123456",
|
||||
"chatType": "direct"
|
||||
},
|
||||
"delivered": true,
|
||||
"read": false
|
||||
}
|
||||
```
|
||||
|
||||
### IPC API
|
||||
|
||||
客户端提供了以下 IPC API 用于消息管理:
|
||||
|
||||
- `getMessages(options)` - 获取消息列表
|
||||
- `getSessions()` - 获取会话列表
|
||||
- `searchMessages(query, options)` - 搜索消息
|
||||
- `getMessageStats()` - 获取统计数据
|
||||
- `markMessagesRead(messageIds)` - 标记消息为已读
|
||||
- `exportMessages(options)` - 导出消息
|
||||
- `clearMessages(options)` - 清空消息
|
||||
|
||||
## 配置选项
|
||||
|
||||
在 `electron/messageStore.js` 中可以修改以下配置:
|
||||
|
||||
```javascript
|
||||
this.maxMessages = 10000; // 最多保留的消息数量
|
||||
```
|
||||
|
||||
## 性能优化
|
||||
|
||||
- 消息持久化采用异步写入,不阻塞主线程
|
||||
- 使用临时文件 + 重命名确保写入安全
|
||||
- 分页加载避免一次性加载大量数据
|
||||
- 自动清理超出限制的历史消息
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **隐私安全**:消息包含敏感信息,请妥善保管导出的数据
|
||||
2. **存储空间**:大量媒体消息可能占用较多磁盘空间
|
||||
3. **备份建议**:定期导出重要消息进行备份
|
||||
4. **性能考虑**:消息数量过多时建议使用搜索和过滤功能
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v1.0.1 (2026-03-10)
|
||||
- ✨ 新增消息持久化功能
|
||||
- ✨ 新增消息历史查看界面
|
||||
- ✨ 新增搜索和过滤功能
|
||||
- ✨ 新增统计数据展示
|
||||
- ✨ 支持导出和清空消息
|
||||
|
||||
## 技术支持
|
||||
|
||||
如有问题,请联系:sales@toncent.com.cn
|
||||
Reference in New Issue
Block a user