前阵子搞了个AI Agent框架叫 Hermes(就是希腊神话里那个跑腿之神),想着把它接上Telegram,以后随时随地使唤。
结果折腾了我大半天。
按照文档装好,配置好 DeepSeek 的 API Key,bot token 从 BotFather 拿到,一切看起来岁月静好。
启动 gateway,日志里看到:
Connected to Telegram
还没来得及高兴,3秒后:
Disconnected from Telegram Received SIGTERM as a planned --replace takeover
然后就无限循环:连上、被杀、连上、被杀……
我:???
查了一下 systemd 服务,发现问题了:
bashsystemctl status hermes-gateway.service # 有一个
systemctl --user status hermes-gateway.service # 还有一个
好家伙,system 级别的和 user 级别的两个服务都在跑,而且启动参数里都带了 --replace(意思是「如果有别的实例在跑就干掉它然后我上位」),于是两个服务互相发 SIGTERM,互相杀,谁也起不来。
再加上我之前手动启动的那个进程还没关,三个进程在那打三国杀。
解决方案: 把 system 级别的服务卸了,只留 user 级别的:
bashsudo hermes gateway uninstall --system systemctl --user restart hermes-gateway
世界清净了。
Gateway 终于稳定连上了,我给 bot 发消息……石沉大海。
看日志:
Unauthorized user: 6666528493 (Tang hao) on telegram No user allowlists configured. All unauthorized users will be denied.
合着我自己设的机器人不让我自己用???
查 .env 文件,TELEGRAM_ALLOWED_USERS 被注释掉了,等于白名单是空的。空的白名单 = 拒绝所有人。
加上我的 Telegram ID 就好了:
envTELEGRAM_ALLOWED_USERS=6666528493
重启,终于能说上话了。
这两个坑其实都是同一个根因:配置不仔细。Hermes 本身不复杂,但 systemd 双实例和授权白名单这两个细节没注意,白白浪费了俩小时。
教训:
.env 里的 ALLOWED_USERS 一定要配置,不然谁都用不了下一篇聊聊怎么给这个 AI 装上「人格」——让它变成一只傲娇猫娘。
本文作者:haotian
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!