一个极简的 消息已读回执追踪服务:注册消息后得到一个 URL,将该 URL 作为 1×1 透明像素嵌入消息,对方打开时自动记录已读。提供 Web 管理面板查看统计和每条消息的读取详情。
🎯 适用场景
- 为微信模块 WeKit / WuYu / WAuxiliary / HChat 提供已读回执后端
- 邮件营销已读率分析
- 消息回执追踪
- 网页埋点统计
| 🔌 一行注册 | 👁 透明无感 | 📊 管理后台 |
|---|---|---|
POST /register 传入消息内容,返回追踪链接 |
1×1 透明 GIF,用户完全感知不到 | Web 界面查看统计、消息列表、搜索、导出 CSV |
| 🌍 IP 定位 | ⚡ 请求限流 | 🔐 API 认证 |
|---|---|---|
| 自动获取读取者国家/省份/城市/运营商 | IP 级频率限制,防止滥用 | 管理接口支持 API Key 保护 |
| 🔒 智能去重 | 📦 双语言后端 | 🐳 多端部署 |
|---|---|---|
| 同一消息 + 同一 IP 只计一次已读 | Python (Flask) + C++ (原生 HTTP) | Docker / Linux / Termux / Java 插件 |
- 下载 最新版 WeKit 修改版 APK(standard / legacy 两种入口)
- 在 LSPosed 中启用模块并作用于微信
- 重启微信,在 WeKit 设置中启用已读追踪
- 发送消息时自动生成追踪链接
📌 本仓库提供的是 WeKit 修改版,基于上游最新 dev 分支,已修复「已读追踪注册失败」和「Java 插件混淆规则」问题,开箱即用。
- 下载 Java 服务端插件 + 客户端插件
- 在微信模块中加载服务端插件,启动隧道获取公网地址
- 加载客户端插件,配置服务器地址
- 发送
#消息内容即可追踪已读
git clone https://github.com/gaigebeckmanChristinaJames/read-receipt-tracker.git
cd read-receipt-tracker
pip install flask
python run.py访问 http://localhost:5000 打开管理面板。
🔄 CI 自动构建:每次推送主分支即发布最新版本
| 产物 | 说明 | 下载 |
|---|---|---|
| 📱 WeKit APK | 微信 Xposed 模块(已修复 DEX 缓存更新问题,内置已读追踪) | 下载 |
| 📱 已读服务器 APP | 独立 Android 应用,无需 Root/Xposed,内置服务器+隧道 | 下载 |
| 🖥️ Java 服务端插件 | 内置 HTTP + cloudflared 隧道 + Web 控制台 | 下载 |
| 🔌 Java 客户端插件 | #消息 发送追踪,/已读 查询人数 |
下载 |
📖 点击展开详情
基于 WeKit 的微信 Xposed 模块,已修复 DEX 缓存更新问题,内置已读追踪服务端,无需额外部署服务器,开箱即用。
| 项目 | 说明 |
|---|---|
| 上游仓库 | https://github.com/Ujhhgtg/WeKit |
| 特点 | 模块内直接启用已读追踪,消息注册、已读统计、访客信息一体化 |
| 环境要求 | Android 9.0+ / Root + LSPosed(或 Zygisk)/ 微信 8.0.65 - 8.0.76 |
| 源码 | wekit-module/ |
📖 点击展开详情
使用原版 WeKit,配合本项目提供的自建服务器使用。适合已有服务器或想在 Termux/Java 插件中运行服务端的用户。
- 特点:原版 WeKit 不变,服务端独立部署,可选择 Linux / Windows / Termux / Java 插件等多种方式
- 下载:WeKit 原版 Release
📖 点击展开详情
轻量级 Java 插件,无需编译 APK,在支持 Java 脚本的微信模块中加载即可使用。包含服务端和客户端两个配套插件:
| 插件 | 作用 | 下载 |
|---|---|---|
| 已读服务器(服务端) | 内置 HTTP 服务 + cloudflared 公网隧道 + Web 控制台 | read-tracker-java-server.zip |
| 已读追踪(客户端) | #消息 发送追踪卡片,/已读 查询人数,已读统计在浏览器控制台查看 |
read-tracker-java-client.zip |
💡 兼容模块:WeKit、WAuxiliary (WA)、WuYu、HChat 等
📝 使用流程:先装服务端并启动隧道 → 再装客户端并配置服务器地址
源码:plugins/java-read-tracker/ · plugins/read-tracker-client/
📖 点击展开详情
Python 后端(推荐):
git clone https://github.com/gaigebeckmanChristinaJames/read-receipt-tracker.git
cd read-receipt-tracker
pip install flask
python run.pyC++ 后端(高性能):
apt install meson ninja-build libsqlite3-dev libssl-dev
cd cpp
meson setup builddir && meson compile -C builddir
./builddir/rrtracker-server 5000 receipts.db一键部署(systemd 托管):
bash scripts/setup-linux.sh # 后台托管
bash scripts/setup-linux.sh --foreground # 前台运行
bash scripts/setup-linux.sh --tunnel # 自动隧道保活📖 点击展开详情
pip install flask
python run.py打开 http://localhost:5000 即可访问管理面板。
📖 点击展开详情
标准版(含 IP 定位):
pkg update -y && pkg install curl -y
bash <(curl -fL "https://cdn.jsdelivr.net/gh/gaigebeckmanChristinaJames/read-receipt-tracker@main/scripts/ultimate-setup.sh")Lite 版(无 IP 定位):
bash <(curl -fL "https://cdn.jsdelivr.net/gh/gaigebeckmanChristinaJames/read-receipt-tracker@main/scripts/ultimate-setup-lite.sh")需要公网地址时另开会话:
pkg install cloudflared
cloudflared tunnel --protocol http2 --url http://127.0.0.1:5000📖 点击展开详情
独立的 Android APP,无需 Root / Xposed,安装后直接运行已读追踪服务器,内置 cloudflared 公网隧道和 Web 控制台。零第三方依赖,纯 Android 框架 API。
| 项目 | 说明 |
|---|---|
| 特点 | 零依赖、后台服务、通知栏常驻、内置 cloudflared 隧道、Web 控制台 |
| 环境要求 | Android 5.0+ (minSdk 21),无需 Root |
| 源码 | app-server/ |
📖 点击展开详情
无需单独部署服务器,直接在微信模块中加载「已读服务器」Java 插件即可,内置 HTTP 服务和 cloudflared 公网隧道。
- 文件名:
read-tracker-java-server.zip - 支持模块:WeKit / WAuxiliary / WuYu / HChat
📖 点击展开详情
docker compose up -d
# 或
docker build -t read-receipt-tracker .
docker run -d -p 5000:5000 -v $(pwd)/data:/app/data read-receipt-tracker💡 提示:所有部署形态均可用环境变量
ENABLE_GEO=0关闭 IP 定位(Lite 模式)。
| 部署场景 | 需要 Tunnel? | 说明 |
|---|---|---|
| VPS / 云服务器 | ❌ | 自带公网 IP,直接访问 |
| 本地电脑 | ❌ | localhost:5000 即可 |
| 树莓派 / 内网服务器 | ✅ | 需要 Tunnel |
| Termux (Android) | ✅ | 脚本默认自动配置 |
Linux 一键启用 Tunnel:
bash scripts/setup-linux.sh --tunnel
cat .tunnel_url.txt # 查看公网地址📝 注册消息
POST /register
Content-Type: application/json
{ "wxId": "user123", "content": "你好", "createTime": 1700000000000 }响应:返回 pixel_url,嵌入消息即可追踪。
👁 已读追踪像素
GET /pixel?wxId=user123&id=xxx返回 1×1 透明 GIF。
🔢 查询已读数
GET /count?wxId=user123&id=xxx{ "count": 5, "msg_id": "xxx" }📋 批量查询 / 健康检查
GET /batch-status?ids=id1,id2,id3
GET /health| 页面 | 路由 | 说明 |
|---|---|---|
| 仪表盘 | / |
统计 + 消息列表 + 搜索 + CSV 导出 |
| 消息详情 | /message/<id> |
消息内容 + IP/地理位置/UA/时间 |
read-receipt-tracker/
├── python/ # Python 后端 (Flask)
├── cpp/ # C++ 后端 (meson + ninja)
├── app-server/ # 独立 Android APP 版已读服务器
├── scripts/ # 部署脚本 (Termux / Linux)
├── plugins/
│ ├── java-read-tracker/ # Java 服务端插件
│ └── read-tracker-client/ # Java 客户端插件
├── wekit-module/ # WeKit 模块源码 (CI 构建 APK)
├── docs/ # 文档
├── .github/workflows/ # CI 自动构建 & 发布
├── ROADMAP.md # 开发路线图
└── run.py # Python 启动入口
| 变量 | 默认值 | 说明 |
|---|---|---|
DATABASE_PATH |
receipts.db |
数据库路径 |
API_KEY |
(空) | 管理后台认证密钥 |
ENABLE_GEO |
1 |
IP 定位开关 |
RATE_LIMIT_PER_MINUTE |
60 |
请求频率限制 |
PORT |
5000 |
监听端口 |
| 层级 | Python | C++ |
|---|---|---|
| 框架 | Flask 2.3+ | 自建 HTTP 服务 |
| 数据库 | SQLite (WAL) | SQLite3 C API |
| 包管理 | uv | meson + ninja |
| 部署 | Docker / systemd / Termux | 原生二进制 |
Java 插件版怎么查看已读数量?
Java 客户端插件的已读统计需要在浏览器控制台中查看。发送 #消息 后,打开管理面板的浏览器控制台即可看到已读人数。
必须要有公网服务器吗?
不一定。有三种选择:
- WeKit 修改版 APK:内置服务端,完全不需要服务器
- Java 插件版:内置 cloudflared 隧道,自动获取公网地址
- 自建服务器:Linux/Windows/Termux/Docker 均可
IP 定位不准确怎么办?
IP 定位使用三级接口自动备份(ip-api.com → ipwho.is → ipinfo.io),如果都不准确可以用 ENABLE_GEO=0 关闭定位功能。
欢迎提交 Issue 和 Pull Request!
- 📋 开发计划见 ROADMAP.md
- 🐛 发现问题请提 Issue
- 💡 有新想法欢迎 讨论