Repository navigation
个人微信公众号channel - #686
个人微信公众号channel#686
Conversation
|
Hi,感谢PR,很好的扩展途径。我目前大致浏览了,还没有实际运行。 我先介绍下当时设计命令时的思路:"#"开头代表控制指令,是负责控制聊天系统的一类指令,而"$"代表插件指令,是负责用户和系统间交互的一类指令。所以我并不建议将它们两者合并。 我推荐的一种思路是,可以增加一个插件指令的设置项,用于规定指令的符号,"/&!^"这些都可以作为插件指令的开头,但不建议使用“#”。 目前不建议使用 因为插件名字是插件作者取的,还是不建议修改插件的name,而且name跟插件文件夹名不同可能会有未知问题(考虑可以在注册函数中增加一个新参数
|
谢谢这些有用的建议,我会修改一下 |
|
1.既然是公众号,能不能把所有的公众号补全? |
|
企业号可以合并进来么,这个能跑通企业号应用,已实测,但基于的老版本的fork,谢谢。 |
稍后我一并处理一下 |
大恩不言谢,兄弟后面还有个猛的,上安卓类RPA企微小bot就可以出圈到微信里了~这个可以晚点再看,方便可以微信交流leeczleecz |
|
这个更新可以啊,目前公众号比较稳!微信实在遭不住,什么时间可以合并或者可以先测试一下嘛~~微信:Bear_Ab |
|
bot-on-anything |
咱这项目最纠结的就是功能都在这边,any那边支持的前端多😭😭😭 |
确实,而且大部分前端在git上都有更专一的项目在进行,尤其web,不知道作者的规划是什么样的,希望能加强公众号这一块儿 |
|
再次感谢,刚合并的时候好像操作错了一些东西,merge没有识别到,还好是合进去了 |
|
刚简单测试了一下真香😊 |
|
我要死了,用railway一键部署搞两天了,就是验证不了微信公众号的token。 url用的这个 |
好像railway就是部署不了公众号,你看这个issue #764 |
消息发快了确实会出现这种情况,原因是目前使用的web.py存在最大并发限制 Max Concurrent Requests to 10。计划过段时间调整一下依赖的web服务器或者框架。 |
|
赞,期待中。。 |
|
可以加一个查询key余额的命令吗 |
|
公众号的服务器是不是也要能科学上网啊 我AWS 被墙了 都ping不通 |
对 |

个人微信公众号channel
鉴于个人微信号在服务器上通过itchat登录有封号风险,这里新增了个人微信公众号channel,提供无风险的服务。
但是由于个人微信公众号的众多接口限制,目前支持的功能有限,实现简陋,提供了一个最基本的文本对话服务,支持加载插件,优化了命令格式,支持私有api_key。暂未实现图片输入输出、语音输入输出等交互形式。
如有公众号是企业主体且可以通过微信认证,即可获得更多接口,解除大多数限制。欢迎大家提供更多的支持。
使用方法
在开始部署前,你需要一个拥有公网IP的服务器,以提供微信服务器和我们自己服务器的连接。或者你需要进行内网穿透,否则微信服务器无法将消息发送给我们的服务器。
此外,需要在我们的服务器上安装额外的依赖web.py。
以ubuntu为例(在ubuntu 22.04上测试):
然后在微信公众平台注册一个自己的公众号,类型选择订阅号,主体为个人即可。
然后根据接入指南的说明,在微信公众平台的“设置与开发”-“基本配置”-“服务器配置”中填写服务器地址(URL)和令牌(Token)。这个Token是你自己编的一个特定的令牌。消息加解密方式目前选择的是明文模式。相关的服务器验证代码已经写好,你不需要再添加任何代码。你只需要将本项目根目录的
config.json中加入配置"channel_type": "wechatmp",将上述的Token也填写在config.json中,例如"wechatmp_token": "Your Token",然后运行python3 app.py启动web服务器,然后在刚才的“服务器配置”中点击提交即可验证你的服务器。随后在微信公众平台启用服务器,关闭手动填写规则的自动回复,即可实现ChatGPT的自动回复。
个人微信公众号的限制
由于目前测试的公众号不是企业主体,所以没有客服接口,因此公众号无法主动发出消息,只能被动回复。而微信官方对被动回复有5秒的时间限制,最多重试2次,因此最多只有15秒的自动回复时间窗口。因此如果问题比较复杂或者我们的服务器比较忙,ChatGPT的回答就没办法及时回复给用户。为了解决这个问题,这里做了回答缓存,它需要你在回复超时后,再次主动发送任意文字(例如1)来尝试拿到回答缓存。为了优化使用体验,目前设置了两分钟(120秒)的timeout,用户在至多两分钟后即可得到查询到回复或者错误原因。
另外,由于微信官方的限制,自动回复有长度限制。因此这里将ChatGPT的回答拆分,分成每段600字回复(限制大约在700字)。
私有api_key
公共api有访问频率限制(免费账号每分钟最多20次ChatGPT的API调用),这在服务多人的时候会遇到问题。因此这里多加了一个设置私有api_key的功能,私有的api_key将储存在redis中。另外后续计划利用redis储存更多的用户个人配置。目前通过godcmd插件的命令来设置私有api_key。
命令优化
之前plugin中#和$符号混用,且$这个符号在微信中和中文会有较大间隔,体验实在不好。这里我将所有命令更改成了以#开头。添加了一个叫finish的plugin来最后处理所有#结尾的命令,防止未知命令变成ChatGPT的query。
测试范围
目前在
RoboStyle这个公众号上进行了测试,感兴趣的可以关注并体验。开启了godcmd, Banwords, role, dungeon, finish这五个插件,其他的插件还没有测试。百度的接口暂未测试。语音对话没有测试。图片直接以链接形式回复(没有临时素材上传接口的权限)。