-
Notifications
You must be signed in to change notification settings - Fork 8.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
个人微信公众号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这五个插件,其他的插件还没有测试。百度的接口暂未测试。语音对话没有测试。图片直接以链接形式回复(没有临时素材上传接口的权限)。