Hermes也可「原生」支持微信了。
公网服务器,不用webhook,扫个码就完事。
官方文档:
http://t.cn/AXMO6wrA
这个功能上线当天,Nous Research官方账号专门发了一条中文推,549.1K浏览,是这家美国实验室近期互动最高的几条之一。
一条评论挺戳人,在中国你能把微信搞定,你就起飞了。
值得拎出来说一句的是,一家硅谷实验室在中文推下面用中文跟中国用户互动,本身就不太常见。
至于中文写得为什么这么顺,Nous自己揭了底,他们请Hermes帮忙润色过。
技术底色这边Nous也交代了一句,用的是腾讯官方的iLink Bot API,不是第三方破解协议或非官方客户端。
不过,还是建议先用小号试一下,再决定要不要挂主号。
顺带提一句,国内主流IM Hermes基本都接全了。
钉钉、飞书、企业微信、企业微信自建应用回调,加上这次新加的个人微信,一个不落。
挑哪个挂全看自己的工作流落在哪。
说回到微信,具体配置流程如下。
先装依赖
两个包是硬要求,少一个都起不来。
pip install aiohttp cryptography
想在终端里直接看到二维码的,再加一个。
pip install qrcode
扫码登录
一行命令拉起setup向导。
hermes gateway setup
选Weixin。接下来的事情向导会自己办,拉二维码、在终端里画出来(或者给一个链接)、等手机扫、等手机上点确认,然后把账号凭证写到
~/.hermes/weixin/accounts/下面。
确认成功后,终端会蹦出一句。
微信连接成功,account_id=your-account-id
account_id、token、base_url这三样向导会自动落盘,后面不用手动填。
写一下环境变量
打开~/.hermes/.env,最少把account_id塞进去。
WEIXIN_ACCOUNT_ID=your-account-id
剩下的几项按需打开。想限定只有自己能给Bot发消息,加这两行。
WEIXIN_DM_POLICY=allowlist
WEIXIN_ALLOWED_USERS=user_id_1,user_id_2
群消息默认是也关的。要在某个群里用,需手动开allowlist。
WEIXIN_GROUP_POLICY=allowlist
WEIXIN_GROUP_ALLOWED_USERS=group_id_1
定时任务和通知想发到固定的某个聊天窗口,再加两行。
WEIXIN_HOME_CHANNEL=chat_id
WEIXIN_HOME_CHANNEL_NAME=Home
起服务
到这一步,适配器会把刚才存下来的凭证捡回来,连上iLink,开始长轮询。
手机微信里随便给Bot发一句话,几秒钟之内就能看到回信,连「正在输入」的状态都能在对话框里看到。
hermes gateway
几个已经被踩过的坑
一个翻车现场来自JamesweiymWei。他实测发现,微信回复经常一句话被切成好几段发出去,很多时候一段回复还没说完就先被截断。
问Hermes自己是怎么回事,得到的答复是,微信单条消息上限4000 token,超过就自动chunking,暂时没有更好的处理方案。截至发稿前这个问题还挂在那里。这也是目前接微信最劝退的一点,长回复的体验不太行。
掉线最常见的原因是session过期,错误码-14。解法是,重新跑hermes gateway setup扫个新码。
报Another local Hermes gateway is already using this Weixin token的,说明有另一个gateway实例在用同一个token。一个token只能挂一个poller,把另一个先停掉。
媒体文件收发失败,先确认cryptography装了。微信的CDN走的是AES-128-ECB加密,少了这个库连图片都拉不下来。
