/wxapi-go

基于go的gin框架搭建的微信公众号后端,调用chatgpt

Primary LanguageGo

wxapi-go

本仓库实现了最简单的公众号服务创建,以及调用chatgpt回复。API均取自官方文档,由于需求增加,使用wxSDK辅助开发,只用编写业务逻辑

介绍

这是一个使用go语言搭建的微信公众号后端,使用gin框架。根路由,get进行验证,post进行回复消息. 主要实现了一个微信公众号后端的基本功能。

完成了微信公众号的后端验证,并调用自建的chatgpt接口,可以实现公众号对用户消息基于chatgpt的回复。

主要任务为问答,均采用http通讯,实现如下:

    微信服务器 (WeChat)
        |
    Get | Post                    
        v   
    本地后端 (Local Backend)       HTTP
        |
        | Post
        v   
    ChatGPT后端 (ChatGPT Backend)

由于基于http通讯,服务端无法主动向用户端发信息,但是调用微信官方的接口可以实现这一点。首先需要在公众号后台获取开发者id和密码,使用get方法获取access_token。该token会定时刷新,所以要定时重新获取。

但是需要注意的是,个人微信公众号的接口权限很少,如果想主动发消息给用户一般是使用客服接口,但是个人订阅号没有客服消息的接口权限。

本仓库已经实现了对微信接口的认证操作内容(获取Access_token),并使用post给微信后端,使公众号可以主动发起通讯。


但是微信公众号始终不是以聊天为目的,官方的诸多限制使得调用公众号作为调用chatgpt的媒介不是一个好的选择:

  • 微信公众号如果在用户发消息后5秒内没有发送消息,微信将会重新发起,这对于chatgpt的响应时长+网络延迟来说,5秒是不够的,特别是对文本长度有要求。

解决方法: 在后端收到用户消息后必须回复success或者空字符串,才不会超时重传。避免超时无响应,可以在每次收到消息后回复自定义语句或者直接success,然后通过客服消息接口,主动将chatgpt的响应发送给用户。


注意

微信公众号的后台设置中填写url会自动进行服务器端验证。希望实现的业务逻辑可以通过自建路由实现,如添加/v1/menu路由,使用get方式调用时,执行相关handle,实现添加菜单。

注意专注公众号后台的接口权限,个人公众号只有极少量权限,甚至无法自定义菜单,不如直接在后台操作。