Explorar el Código

pull request ready

master
JS00000 hace 1 año
padre
commit
ce8635dd99
Se han modificado 4 ficheros con 38 adiciones y 3 borrados
  1. +1
    -1
      app.py
  2. +1
    -1
      channel/channel_factory.py
  3. +32
    -0
      channel/wechatmp/README.md
  4. +4
    -1
      config.py

+ 1
- 1
app.py Ver fichero

@@ -19,7 +19,7 @@ def run():
# os.environ['WECHATY_PUPPET_SERVICE_ENDPOINT'] = '127.0.0.1:9001'

channel = channel_factory.create_channel(channel_name)
if channel_name in ['wx','wxy']:
if channel_name in ['wx','wxy','wechatmp']:
PluginManager().load_plugins()

# startup channel


+ 1
- 1
channel/channel_factory.py Ver fichero

@@ -17,7 +17,7 @@ def create_channel(channel_type):
elif channel_type == 'terminal':
from channel.terminal.terminal_channel import TerminalChannel
return TerminalChannel()
elif channel_type == 'mp':
elif channel_type == 'wechatmp':
from channel.wechatmp.wechatmp_channel import WechatMPServer
return WechatMPServer()
raise RuntimeError

+ 32
- 0
channel/wechatmp/README.md Ver fichero

@@ -0,0 +1,32 @@
# 个人微信公众号channel

鉴于个人微信号在服务器上通过itchat登录有封号风险,这里新增了个人微信公众号channel,提供无风险的服务。
但是由于个人微信公众号的众多接口限制,目前支持的功能有限,实现简陋,提供了一个最基本的文本对话服务,支持加载插件,优化了命令格式,支持私有api_key。暂未实现图片输入输出、语音输入输出等交互形式。
如有公众号是企业主体且可以通过微信认证,即可获得更多接口,解除大多数限制。欢迎大家提供更多的支持。

## 使用方法

在开始部署前,你需要一个拥有公网IP的服务器,以提供微信服务器和我们自己服务器的连接。或者你需要进行内网穿透,否则微信服务器无法将消息发送给我们的服务器。

此外,需要在我们的服务器上安装额外的依赖web.py和redis,其中redis用来储存用户私有的配置信息。
以ubuntu为例(在ubuntu 22.04上测试):
```
sudo apt-get install redis
sudo systemctl start redis
pip3 install redis
pip3 install web.py
```

然后在[微信公众平台](mp.weixin.qq.com)注册一个自己的公众号,类型选择订阅号,主体为个人即可。

然后根据[接入指南](https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html)的说明,在[微信公众平台](mp.weixin.qq.com)的“设置与开发”-“基本配置”-“服务器配置”中填写服务器地址(URL)和令牌(Token)。这个Token是你自己编的一个特定的令牌。消息加解密方式目前选择的是明文模式。相关的服务器验证代码已经写好,你不需要再添加任何代码。你只需要将本项目根目录的`app.py`中channel_name改成"mp",将上述的Token填写在本项目根目录的`config.json`中,例如`"wechatmp_token": "Your Token",` 然后运行`python3 app.py`启动web服务器,然后在刚才的“服务器配置”中点击`提交`即可验证你的服务器。

随后在[微信公众平台](mp.weixin.qq.com)启用服务器,关闭手动填写规则的自动回复,即可实现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。

+ 4
- 1
config.py Ver fichero

@@ -74,11 +74,14 @@ available_setting = {
# wechaty的配置
"wechaty_puppet_service_token": "", # wechaty的token

# wechatmp的配置
"wechatmp_token": "", # 微信公众平台的Token

# chatgpt指令自定义触发词
"clear_memory_commands": ['#清除记忆'], # 重置会话指令

# channel配置
"channel_type": "wx", # 通道类型,支持wx,wxy和terminal
"channel_type": "wx", # 通道类型,支持:{wx,wxy,terminal,wechatmp}


}


Cargando…
Cancelar
Guardar