WeFlow 聊天记录导出与年度报告本地工具完整指南
WeFlow 聊天记录导出与年度报告本地工具完整指南
【免费下载链接】WeFlowWeFlow - 一个本地的微信聊天记录导出和年度报告应用项目地址: https://gitcode.com/gh_mirrors/wefl/WeFlow
想把攒了好几年的微信聊天记录整理成一份带统计的年度报告,或者让脚本自动盯着某个群、有新消息就抓走?这两件事听起来都不难,难在数据躺在本机加密的数据库里,普通的「导出聊天记录」思路走不通。WeFlow 聊天记录导出与分析工具就是干这件事的。
WeFlow 是一个完全在本地运行的微信聊天记录导出与报告桌面应用:读取本机聊天数据库完成解密、解析与统计,可生成年度报告并导出 JSON、HTML、Markdown 等多种格式,所有数据不离开你的设备。
WeFlow 聊天记录导出功能全景
| 能力域 | 能做什么 | 实现入口 |
|---|---|---|
| 实时聊天 | 本地实时浏览记录,解密图片、视频、实况;支持修改本地消息 | chatService.ts,聊天读写主逻辑 |
| 消息防撤回 | 通过 SQLite 触发器阻止他人消息被撤回 | WCDB 组件wcdb_install_message_anti_revoke_trigger |
| 桌面通知 | 新消息弹窗提醒,支持全部/白名单/黑名单过滤 | notificationWindow.ts,弹窗窗口实现 |
| 私聊 / 群聊分析 | 消息数量、类型比例、时段分布、群发言排行与成员画像 | groupAnalyticsService.ts,群统计聚合 |
| 年度报告 / 双人报告 | 按年或跨年的年度报告;指定好友的双人专属报告 | annualReportService.ts,报告数据编排 |
| 多格式导出 | JSON、HTML、Markdown、TXT、Excel、CSV、PGSQL、ChatLab 专属格式等 | electron/services/export/,格式化器与导出管线 |
| 朋友圈 | 解密图片、视频、实况,导出内容,拦截删除与隐藏 | snsService.ts,朋友圈读取与防删 |
| 联系人 | 导出好友、群聊、公众号信息,找回部分曾经的好友 | contactExportService.ts,联系人导出 |
| HTTP API | 把本地消息能力映射为接口,供外部脚本与二次开发调用 | docs/HTTP-API.md,完整接口文档 |
把一年的聊天变成年度报告
年度报告按年聚合消息数、活跃时段、高频内容等维度,也支持跨多年的长期历史报告;双人报告则选定一位好友,基于双方往来生成专属分析。数据编排集中在 annualReportService.ts 与独立的annualReportWorker,重计算放进了 Worker,主线程不会被卡住。使用注意:报告精度取决于本地数据库的完整性,换过设备或清理过缓存的年份数据可能缺失。
图片、视频与实况的本地解密
聊天里的图片、视频、实况(Live Photo)在本地是加密存储的,WeFlow 通过用户自配的 Node 原生解密插件还原,接口定义在 nativeImageDecrypt.ts 的decryptDatNative里;视频解码另有一套 WASM 实现,资源放在 electron/assets/wasm/ 并随安装包一起分发。注意:解密能力来自第三方可插拔组件,不配置对应插件时媒体无法还原。
修改消息与防撤回
写操作(改消息、插消息、删消息)与防撤回触发器都交给 WCDB 动态库执行,对应的导出函数见 docs/third-party-components.md 中的wcdb_update_message、wcdb_install_message_anti_revoke_trigger等。这两类操作会真正改动本地数据库,属于不可逆的写行为,建议在折腾前先备份数据。
上手路径:从成品包到源码构建
三个平台的支持范围与 package.json 中build字段一致:Windows 打 NSIS 安装器(附带 installer.nsh 自定义脚本),macOS 仅 Apple Silicon,Linux 提供 AppImage 与 tar.gz。
| 平台 | 架构 | 安装格式 |
|---|---|---|
| Windows | Win10+ x64 | .exe |
| macOS | Apple Silicon(arm64) | .dmg |
| Linux | x64(amd64) | .AppImage/.tar.gz |
第一档:成品包。到项目 Releases 页面下载对应平台的安装包直接安装,只想查看和导出自己的记录,这一步就够了。
第二档:ArchLinux 包管理器。
yay -S weflow第三档:源码构建。
git clone https://gitcode.com/gh_mirrors/wefl/WeFlow cd WeFlow npm install npm run dev技术栈一句话概括:Electron 43 + React 19 + TypeScript,Vite 构建,zustand 管状态,Tailwind CSS 管样式。几个前置细节:
npm install后的postinstall会自动跑patch-package与electron-builder install-app-deps,修复与重编译原生依赖;- scripts/prepare-electron-runtime.cjs 在 install 与
dev前都会执行,负责 WASM 解码资源、ffmpeg 等运行时准备; npm run build串联「双端 typecheck → 清理旧产物 →vite build→electron-builder打包」,渲染层与主进程用两份 tsconfig 分别检查。
把聊天记录变成 HTTP 接口
当你想让自己的自动化脚本读消息、把 WeFlow 接成 ChatLab 的远程数据源、或让新消息实时流向别的系统时,反复在 GUI 里手动操作就不现实了。WeFlow 在主进程里内置了一个只监听本机的 HTTP 服务,和界面共用同一套数据读取能力。
关键参数(源码见 httpService.ts,实现里能确认这些行为):
- 启用方式:设置 → API 服务 → 启动服务;开关与端口会自动保存,重启后自动恢复;
- 默认只监听
http://127.0.0.1:5031,不对外网开放; - 除
/health外所有/api/v1/*都要 Token,支持 Header(Authorization: Bearer)、Query(?access_token=)、POST Body 三种传法;Token 未配置时所有请求直接拒绝; - 校验用
timingSafeEqual做常量时间比较,跨域只放行 localhost/127.0.0.1 来源。
接口清单(参数细节直接查 docs/HTTP-API.md):
| 接口 | 方法 | 说明 |
|---|---|---|
/health、/api/v1/health | GET / POST | 健康检查 |
/api/v1/messages | GET / POST | 按会话取消息,支持时间范围、关键词、媒体导出 |
/api/v1/sessions | GET / POST | 会话列表,format=chatlab即 ChatLab Pull 协议 |
/api/v1/sessions/:id/messages | GET | 会话消息增量拉取 |
/api/v1/contacts | GET / POST | 联系人列表 |
/api/v1/group-members | GET / POST | 群成员列表,可附带发言数 |
/api/v1/sns/* | GET / POST / DELETE | 朋友圈时间线、媒体代理、导出、防删开关、删单条 |
/api/v1/media/* | GET | 访问已导出的媒体文件 |
/api/v1/push/messages | GET | SSE 主动推送(需另开「主动推送」开关) |
可直接复制的最小示例:
curl -H "Authorization: Bearer YOUR_TOKEN" \ "http://127.0.0.1:5031/api/v1/messages?talker=wxid_xxx&limit=20"curl -N "http://127.0.0.1:5031/api/v1/push/messages?access_token=YOUR_TOKEN"推送走 SSE,事件名只有message.new与message.revoke两种,载荷带sessionId、rawid、content、timestamp等字段,接收端建议按event + rawid去重。另外两个容易踩的坑:start/end支持YYYYMMDD,纯日期的end会自动补到当天 23:59:59;媒体链接只有在请求里带media=1真正导出后才可访问。
开发者视角:主进程、渲染层与 Worker 管线
代码按 Electron 的经典分层组织,浏览前先看这棵树:
electron/ # 主进程 main.ts # 入口:窗口、IPC 注册、HTTP 服务生命周期 services/ # 核心服务:WCDB 读取、HTTP API、报告、导出管线 exportWorker.ts 等 # 各业务的 Worker(导出、报告、解密、转写) src/ # 渲染层(React) pages/ # 聊天、导出、分析、报告等功能页面 stores/ # zustand 状态 services/ # ipc.ts、exportBridge.ts 等桥接层 docs/ # HTTP API 与第三方组件协议文档 scripts/ # 构建辅助:运行时准备、产物清理跨进程通信走标准 IPC:渲染层经 src/services/ipc.ts 调 electron/preload.ts 暴露的桥,主进程在 main.ts 的registerIpcHandlers()里统一注册config:get、insight:*等 handler。配置持久化由 electron/services/config.ts 的单例 ConfigService 基于electron-store完成,敏感字段(解密密钥、API Token、AI Key)走两级保护:普通模式用 ElectronsafeStorage加密后带safe:前缀落盘,开应用锁后换成密码经 PBKDF2 派生密钥的 AES-256-GCM(lock:前缀)。
重活都在 Worker 里跑:导出经exportBridge拉起exportWorker,内部由ExportOrchestrator编排解析、格式化、媒体拷贝;年度报告、图片解密、语音转写各有独立 Worker,进度通过事件回传渲染层。两条「想改行为先看哪」的路径提示:改通知黑白名单行为,看config.ts的notificationFilterMode与 notificationWindow.ts;新增一种导出格式,往 electron/services/export/formatters/ 里加一个 Formatter 并挂进index.ts的注册表即可。
可插拔第三方组件:接入自己的解密实现
WeFlow 不再内置任何读取/解密本地数据的原生组件,数据库读取、媒体解密、批量导出引擎都要你在「设置 → 数据库 → 第三方组件路径」里自己指路,应用只按约定协议交互、不校验来源。
| 配置键 | 组件形态 | 用途 |
|---|---|---|
wcdbLibPath | 动态库(.dll/.dylib/.so) | 读取本地 SQLCipher 数据库,提供会话/消息/联系人/朋友圈查询与写操作 |
imageNativeAddonPath | Node 原生插件(.node) | 媒体解密,实现decryptDatNative(可选encryptDatNative) |
welivePath | 可执行文件 | 会话批量原始导出,stdin 进 JSON 请求、stdout 按 NDJSON 回事件 |
keyProviderPath等 | 自定义组件 | 设置页可配置的其他辅助组件路径 |
加载机制在 electron/services/wcdbCore.ts 的initialize()里:先koffi.load(wcdbLibPath),再逐个尝试绑定导出符号——只有wcdb_open_account是必选,缺哪个符号就跳过对应功能返回null,不拖垮其余能力;路径留空或文件不存在时直接报「未配置」错误,没有降级方案。约百个导出函数的完整签名清单不在此展开,以 docs/third-party-components.md 为准。
使用提醒:数据敏感与授权边界
WeFlow 是本地数据处理工具,所有读写都发生在你自己设备的数据上。聊天记录与联系人属于个人敏感数据,涉及处理非本人或未授权的数据前,请确认已获得合法授权并遵守所在地区的法律法规。消息修改、朋友圈删除等写操作会直接改动本地数据库且不可逆,动手前先想清楚。
写在最后
回到开头那个场景:一份带统计的年度报告,或一条自动抓群消息的管线,在 WeFlow 里都只是「连接数据库 → 点一下」或「调一个本机接口」的距离。它适合想长期管理自己聊天数据、以及愿意基于 HTTP API 搭分析流水线的开发者;不适合期待开箱云同步、或拿不到第三方解密组件而连不上本地库的用户。下一步建议按顺序读 README.md 熟悉全貌,对着 docs/HTTP-API.md 把接口跑通,再按 docs/third-party-components.md 的协议补上自己的组件实现。
【免费下载链接】WeFlowWeFlow - 一个本地的微信聊天记录导出和年度报告应用项目地址: https://gitcode.com/gh_mirrors/wefl/WeFlow
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考