由于之前chatgpt的火热,现在很多微信公众号都接入了chatgpt的接口,来给自家公众号增添一丝乐趣,下面我以自己的经验,用python在微信公众上添加自己的chatGPT,先看下方成果图
三步曲
- 申请自己的公众号
- 部署服务
- 接入chatgpt接口
- 注意事项
申请自己的公众号
这个没什么好说的,自己在微信开发平台申请一个个人号即可
这里附上别的腾讯官方注册公众的步骤 微信公众号个人申请步骤
注册完之后,找到服务器基本配置,如下图:
将这里的服务器地址,填成自己服务器地址,这个地址接口,对应的是微信公众平台的自动回复功能
部署服务
我这里使用的是python的flask,服务很简单,只 实现了一个接口,就是openai的对话服务,也就是将这里的接口填上微信公众平台的服务器地址里面,接口主要代码如下:
def reply_text(to_user, from_user, send_content, reply_content):
"""
以文本类型的方式回复请求
"""
xml_msg = """
<xml>
<ToUserName><![CDATA[{}]]></ToUserName>
<FromUserName><![CDATA[{}]]></FromUserName>
<CreateTime>{}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{}]]></Content>
</xml>
""".format(to_user, from_user, int(time.time() * 1000), reply_content)
return xml_msg
@app.route("/wechat", methods=["GET", "POST"])
def weixin():
if request.method == "GET": # 判断请求方式是GET请求
my_signature = request.args.get('signature') # 获取携带的signature参数
my_timestamp = request.args.get('timestamp') # 获取携带的timestamp参数
my_nonce = request.args.get('nonce') # 获取携带的nonce参数
my_echostr = request.args.get('echostr') # 获取携带的echostr参数
token = '****' # 一定要跟刚刚填写的token一致
li = [token, my_timestamp, my_nonce]
li.sort()
sha1 = hashlib.sha1()
sha1.update("".join(li).encode('utf-8'))
hashcode = sha1.hexdigest()
# 加密后的字符串可与signature对比,标识该请求来源于微信
if my_signature == hashcode:
return my_echostr
else:
return ''
else:
# 解析xml
xml = ET.fromstring(request.data)
toUser = xml.find('ToUserName').text
fromUser = xml.find('FromUserName').text
msgType = xml.find("MsgType").text
createTime = xml.find("CreateTime")
# 判断类型并回复
content = xml.find('Content').text
if msgType == "text":
return reply_text(fromUser, toUser, content, "****")
注意:微信公众平台需要你实现这个接口的get请求和post请求,get请求用来做校验使用,而post请求才是真正的自动回复,在上述demo中,我回复的是****,这个做了隐私处理,你完全可以按照自己的需求来
这里有一些注意事项:
公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token,access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限,开发者需自行存储,详见获取接口调用凭据(access_token)文档。
被动回复消息:在用户给公众号发消息后,微信服务器会将消息发到开发者预先在开发者中心设置的服务器地址(开发者需要进行消息真实性验证),公众号可以在5秒内做出回复,可以回复一个消息,也可以回复命令告诉微信服务器这条消息暂不回复。被动回复消息可以设置加密(在公众平台官网的开发者中心处设置,设置后,按照消息加解密文档来进行处理。其他3种消息的调用因为是API调用而不是对请求的返回,所以不需要加解密)。
这里是我认为比较重要的两个注意点,具体其他的地方请参考详细的开发者文档 微信公众平台开发概述
然后将服务部署在自己的一台公网服务器即可,至此,服务就算部署完成了
接入chatgpt接口
接入chatgpt接口,自己在openai的官网上找一个对话接口就行,将其接入到自动回复的消息体中去即可,这里笔者介绍另外一种免费的方法
打开Edge浏览器,添加WeTab插件,WeTab插件可以免费使用chatgpt的功能,如下图所示
安装了WeTab插件,注册了账号成功使用之后,就进入到关键的抓包环节,这里的接口请求也是比较简单,我们将关键接口的请求复制为curl,并打开这个网址:将curl转为python代码
将curl粘贴到文本框中,如下图所示
就能够直接把请求的代码中拿出来,这一部分就是chatgpt的接口,相信到这,你应该明白了,直接将该部分接入自动回复的那块代码那里就行,但是到这还没完,如果上述的过程中有失败的地方,请参考一下下方的注意事项
注意事项
1、在微信公众平台中添加自己的服务器地址时,如果出现url请求超时,大概率就是你的地址访问不通,如果你使用natapp之类的映射工具, 最好不要使用,大概率会请求超时
2、在部署服务中,据官方介绍最好使用80接口,本人倒是没有使用过其他端口,如果你的端口不是80,可以改为80试一下是否可以使用
3、在拿到chatgpt的接口中,确实是有一些可变参数需要去调整,目前,本人就只发现两个参数,headers里的author认证,还有json里的conversationid,经本人实验,这个headers的认证过期时间应该挺久,我用了三天还仍然可以用,json里的参数可以直接去掉,也能够成功请求接口
4、由于微信自动回复有5秒的限制,并且最多请求3次,超过3次,自动回复会报服务出现故障,请稍后再试的提示,但是因为chatgpt的回复过长,一般都会超过十几二十秒,所以这里推荐有异步的形式去访问,每次收到消息后,将结果先进行存储,稍后根据关键词,再将结果拿出来,如下图: