稍候片刻,月出文自明。
domain: chat.example.com # 必填。网页域名,通行密钥绑定在它上面,改了以后所有设备都要重新登记
# listen: 127.0.0.1:8765 # 网页服务监听地址
# session_days: 30 # 登录一次管多少天
# sync_seconds: 30 # 后台同步间隔(秒)
# tgdata_timezone: Asia/Shanghai # tgdata.db 里时间的时区,默认取服务器时区[Unit]
Description=EFB chat log web
After=network.target
[Service]
ExecStart=/root/efb-venv/bin/efb-chatlog serve
Restart=on-failure
[Install]
WantedBy=multi-user.targetefb-chatlog devices # 列出设备
efb-chatlog revoke <ID> # 移除一个设备
efb-chatlog revoke all # 全部移除(手机丢了的时候用)
efb-chatlog sync # 手动同步一次
这是 oh-my-efb,在Ehforwardbot中用AI总结聊天 的补充篇,介绍仓库里新加的 chatlog/:把 EFB 转发过的全部消息做成一个网页,可以按会话浏览、全文搜索、按人/类型/日期筛选,登录用通行密钥(指纹或面容)。
EFB 本体(微信从端、Telegram 主端、话题群)的安装和配置见上一篇,本文默认这些已经跑起来了。
隐私提醒
网页里能看到所有经过 EFB 的聊天,包括私聊。服务器上的 archive.db 和 auth.db 都是明文,服务器本身的安全要靠你自己。
1. 它是什么
部分
跑在哪
做什么
网页服务 `efb-chatlog serve`
独立进程
网页、接口、通行密钥登录;后台每 30 秒从 `tgdata.db` 增量同步一次消息
中间件 `specialhua.chatlog`
EFB 进程内
只记下经过的消息的会话名和发言人名,不改消息、不发消息、不向微信拉列表
要点:
1.1 功能一览
2. 准备
条件
说明
EFB 已部署
用的是本仓库的 Telegram 主端,`tgdata.db` 在 `~/.ehforwarderbot/profiles/default/blueset.telegram/`
Python ≥ 3.9
和 EFB 共用一个 venv 即可(EFB 本身要求 3.10+)
SQLite ≥ 3.34
全文索引用 trigram 分词。Ubuntu 22.04、Debian 12 及以后自带的就够
一个域名
例如 `chat.example.com`,解析到服务器
HTTPS 反向代理
通行密钥只能在 HTTPS 下用。下文以 Caddy 为例
检查 SQLite 版本:
3. 安装
依赖:fastapi、uvicorn、webauthn>=2.0、requests、ruamel.yaml,会随 pip 一起装上。装完会多出一个命令 efb-chatlog。
4. 配置
配置和数据都在 ~/.ehforwarderbot/profiles/default/specialhua.chatlog/,首次运行任何 efb-chatlog 命令会自动建这个目录。
bot token 和管理员 ID 直接读 Telegram 主端的 blueset.telegram/config.yaml,不用再填。配置了辅助 bot 的话,它们的 token 也会一并读取,用来取回各自发出的媒体文件。
目录里最终会有:
文件
内容
删掉会怎样
`config.yaml`
配置
服务起不来
`archive.db`
消息副本和全文索引
下次同步从 `tgdata.db` 重新导入
`auth.db`
登记的设备和登录会话
等于注销所有设备
用了其他配置档(不是 default)时,所有命令加 -p 档名,或设置环境变量 EFB_PROFILE。数据根目录可用 EFB_DATA_PATH 改。
5. 导入历史
首次会导入全部历史,屏幕上显示进度,结束时打印新增条数和用时。以后不用手动跑,网页服务会在后台增量同步。
6. 启动网页服务
写入 /etc/systemd/system/efb-chatlog.service:
ExecStart 里的路径按你的 venv 改。
7. 反向代理与 HTTPS
Caddy 会自动申请证书,/etc/caddy/Caddyfile:
注意:
8. 启用中间件
不启用也能用,但新消息的发言人只能显示 ID,建议加上。在 ~/.ehforwarderbot/profiles/default/config.yaml 里加一行:
然后重启 EFB:
9. 登记设备
也可以在服务器上发起:
以后登录点“使用通行密钥登录”即可。
苹果设备的通行密钥经 iCloud 钥匙串同步:Mac 上登记过,同一 Apple ID 的 iPhone 通常能直接登录,设备列表里会标出“已同步”。
10. 使用
10.1 浏览会话
左侧是会话列表,可以按群聊、私聊、公众号、系统筛选,也可以搜会话名。点开一个会话,向上滚动加载更早的消息。
会话分类的依据,按可靠程度依次是:
会话旁另外标着它在 Telegram 里的位置(Bot 私聊、话题、绑定群),这只是投递位置,和群聊/私聊无关。没用话题分流以前,没绑定的群和私聊都发在 Bot 私聊里。
10.2 搜索
写法
效果
`报销`
2 个字逐条匹配,百万条约 0.3 秒
`发票抬头`
3 个字及以上走全文索引,毫秒级
`机票 周五`
空格分隔,要求同时出现
`from:张三 机票`
只看张三发的,匹配昵称、群昵称、备注
`from:我`
只看自己发的
10.3 按日期筛选
消息区顶部选起止日期,只搜这段时间的消息(含结束那天)。
10.4 媒体
11. 与 efb-search-msg-middleware 的区别
efb-search-msg-middleware(catbaron.search_msg)也是为了解决同一个问题:Telegram 不对中文分词,用自带搜索找微信消息几乎找不到。它的做法是在 Telegram 里发命令搜索。
efb-search-msg-middleware
chatlog
在哪搜
Telegram 里发 `\sr 关键词 from:时间 to:时间`
独立网页
历史消息
只有启用后经过它的消息
从 `tgdata.db` 导入启用前的全部历史
运行方式
EFB 中间件,在 EFB 进程内
网页服务独立进程;中间件只补名字,可选
关键词
单个词,不能含空白
多个词同时出现;3 字以上走 trigram 全文索引
按人
回复某条消息再发命令;作者信息可能存成 `None`,不太可靠
`from:名字`,匹配昵称、群昵称、备注
按时间
`from:` / `to:` 时间参数,默认最近 15 天
日期选择器,默认不限
按类型
无
文字、图片、语音、文件、链接等
会话分类
无
群聊、私聊、公众号、系统
结果怎么看
结果列在 Telegram 里,可定位到原消息;条数由 `max_num` 控制
网页列表,可查看上下文、看图、下载文件,也能跳到 Telegram
登录
不需要,借 Telegram 账号
通行密钥,设备需经 bot 登记
部署成本
`pip install` + 改配置 + 重启 EFB
另需域名、HTTPS 反向代理、systemd 服务
维护状态
0.1.0,2020-12-31 发布,作者自述早期开发版
本仓库维护
怎么选:
两者不冲突,可以同时启用。
12. 设备管理与安全
12.1 管理设备
网页右上角“设备”里可以看到所有设备、移除设备、退出登录。移除一个设备后,用它登录的会话立刻失效。
命令行:
12.2 安全设计
13. 日常维护
更新:
只改了网页服务时,重启 efb-chatlog 即可,不影响微信登录。中间件有改动时才需要重启 EFB。
备份:
archive.db 可以从 tgdata.db 重建,一般不用备份;要备份它,先停掉 efb-chatlog。auth.db 里是登记过的设备,不要外传。
常见问题:
现象
处理
启动报“缺少配置文件”
检查 `specialhua.chatlog/config.yaml` 是否存在、`domain` 是否填了
页面提示“当前地址不能使用通行密钥”
用配置的域名、通过 HTTPS 打开
改了 `domain` 后登录不了
通行密钥绑定域名,所有设备需重新登记
新消息发言人显示 8 位 ID
没启用 `specialhua.chatlog` 中间件
消息时间差了几个小时
设置 `tgdata_timezone`
想重建索引
停服务,删 `archive.db`,`efb-chatlog sync`
14. 限制
15. 最后
仓库地址:specialhua/oh-my-efb,部署说明以 chatlog/README.md 为准。