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:
2026-03-10 04:09:26 +08:00
parent 7c826af5d1
commit 0880813355
9 changed files with 1809 additions and 3 deletions

View File

@@ -0,0 +1,217 @@
# 消息历史功能 - 更新说明
## 更新日期
2026-03-10
## 版本
v1.0.1 (消息历史功能)
## 更新内容
### 新增文件
1. **electron/messageStore.js** (新增)
- 消息持久化存储核心模块
- 支持消息的增删改查
- 自动管理消息数量(默认最多 10,000 条)
- 支持搜索、过滤、导出功能
2. **MESSAGE_HISTORY.md** (新增)
- 完整的功能使用说明文档
- 包含技术实现细节
- API 参考和配置说明
3. **test-message-history.js** (新增)
- 自动化测试脚本
- 验证所有组件是否正确集成
### 修改文件
1. **electron/main.js**
- 引入 messageStore 模块
-`forwardMessageToOpenClaw()` 中添加消息记录WeCom → OpenClaw
-`forwardMessageToWeCom()` 中添加消息记录OpenClaw → WeCom
- 新增 IPC 处理器:
- `get-messages` - 获取消息列表
- `get-sessions` - 获取会话列表
- `search-messages` - 搜索消息
- `get-message-stats` - 获取统计数据
- `mark-messages-read` - 标记已读
- `export-messages` - 导出消息
- `clear-messages` - 清空消息
2. **electron/preload.js**
- 暴露消息管理 API 给渲染进程:
- `getMessages()`
- `getSessions()`
- `searchMessages()`
- `getMessageStats()`
- `markMessagesRead()`
- `exportMessages()`
- `clearMessages()`
3. **renderer/src/App.js**
- 新增状态管理:
- `showMessageHistory` - 控制消息历史模态框显示
- `messages` - 消息列表
- `sessions` - 会话列表
- `messageStats` - 统计数据
- `searchQuery` - 搜索关键词
- `messageFilter` - 过滤条件
- `messagePage` - 分页信息
- 新增功能函数:
- `loadMessages()` - 加载消息
- `loadSessions()` - 加载会话
- `loadMessageStats()` - 加载统计
- `handleSearchMessages()` - 搜索消息
- UI 更新:
- 头部新增"💬 消息历史"按钮
- 新增消息历史模态框(包含会话列表、消息列表、搜索过滤、分页等)
- 新增统计信息展示面板
- 事件监听:
- 收到新消息时自动刷新消息历史(如果已打开)
## 功能特性
### ✅ 自动保存
- 所有从企业微信收到的消息自动保存
- 所有发送到企业微信的回复自动保存
- 支持文本、图片、文件、语音等消息类型
### ✅ 实时查看
- 点击"💬 消息历史"按钮即可查看
- 左侧显示会话列表
- 右侧显示消息详情
- 新消息自动刷新
### ✅ 搜索过滤
- 全文搜索消息内容
- 按方向过滤(接收/发送)
- 按来源过滤WeCom/OpenClaw
- 按会话筛选
### ✅ 数据统计
- 总消息数
- 接收/发送消息数
- 会话数量
- 今日/昨日消息数
### ✅ 数据管理
- 导出为 JSON 文件
- 清空历史记录
- 分页浏览
## 使用方法
### 启动应用
```bash
cd ~/.openclaw/workspace/wecome-openclaw-client
# 如果还没安装依赖
npm install
cd renderer && npm install && cd ..
# 启动应用
npm start
```
### 查看消息历史
1. 启动客户端应用
2. 点击右上角的 **💬 消息历史** 按钮
3. 查看消息列表和统计信息
4. 使用搜索和过滤功能查找特定消息
5. 可导出 JSON 备份或清空历史
## 数据存储
### 存储位置
- **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": {},
"delivered": true,
"read": false
}
```
## 兼容性
- ✅ 向后兼容:不影响现有功能
- ✅ 无需迁移:新消息自动开始保存
- ✅ 可选功能:不使用不影响其他功能
## 性能影响
- **存储性能**: 异步写入,不阻塞主线程
- **内存占用**: 每次加载最多 50 条消息(分页)
- **磁盘空间**: 纯文本消息约 1KB/条,含附件会更大
- **自动清理**: 超过 10,000 条自动删除最旧消息
## 测试验证
运行测试脚本验证安装:
```bash
node test-message-history.js
```
预期输出:
```
============================================================
消息存储功能测试
============================================================
✓ 测试 1: 检查 messageStore.js
✅ messageStore.js 存在
✓ 测试 2: 检查 main.js 是否引入 messageStore
✅ main.js 已引入 messageStore
...
============================================================
✅ 所有测试通过!
============================================================
```
## 注意事项
1. **首次使用**: 首次打开消息历史时,如果没有消息会显示"暂无消息"
2. **媒体文件**: 附件路径保存在消息记录中,删除媒体文件会导致附件无法查看
3. **隐私安全**: 导出的 JSON 包含所有消息内容,请妥善保管
4. **清空操作**: 清空历史不可恢复,请谨慎操作
## 后续优化计划
- [ ] 支持按时间范围筛选
- [ ] 支持消息详情查看(点击查看完整元数据)
- [ ] 支持媒体文件预览
- [ ] 支持消息标记(星标、标签等)
- [ ] 支持批量操作(批量删除、批量导出)
- [ ] 支持数据库存储SQLite替代 JSON 文件
- [ ] 支持消息同步(多设备)
## 技术支持
如有问题或建议,请联系:
- 邮箱sales@toncent.com.cn
- 项目地址http://192.168.1.191:23000/toncent/wecome-openclaw-client.git
---
**更新完成!** 🎉