前言
众说周知,微信未经过认证的订阅号在接口权限上面有非常大的限制,这里主要做的事是:用户通过关注订阅号发送消息到后台,处理调用chatgpt接口,缓存到redis中。因为chatgpt接口延迟问题,如果微信三次回调均没有收到chatgpt回复,就将数据存到redis通过openid 和msgid绑定用户和会话,用户输入 “继续” 查询返回回答。
代码已经开源,github地址放在文章末尾,需要的自取。
也可以关注本人订阅号体验
原文地址:微信公众号订阅号(未认证)接入Chatgpt实现AI聊天文章来源:https://www.toymoban.com/news/detail-854714.html
一、准备工作
- 申请一个个人订阅号(很简单,不说了)
- 到微信公众号的管理界面,点击 设置与开发 —> 基本配置
开启服务器配置,自定义令牌,选择明文模式。
- 如下所示,填写到配置文件中
#wechatmp
wechatmp:
#这里就是服务器配置中自己填写的 令牌(Token)
token: xxxxxxxxxxxx
#chatgpt
chatgpt:
model: gpt-3.5-turbo-1106
# openAI 的接口
apikey:
- sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#oepnai 接口基础地址 https://openai.xxx.com/ 或者使用自己的代理地址
baseUrl: https://openai.xxxx.com/
# 多轮会话携带的历史会话条数
messageSize: 5
二、验证服务器配置中的服务器URL
当我们填写服务器配置的URL时候,是需要验证URL地址的,验证代码如下:文章来源地址https://www.toymoban.com/news/detail-854714.html
- Controller
@GetMapping("")
public ResponseEntity<Object> checkSignature(WeChatBean weChatBean) {
//验证是否为微信消息
String signatureHashcode = weChatService.checkWeChatSignature(weChatBean);
if (!signatureHashcode.equals(weChatBean.getSignature())) {
return ResponseEntity.ok("非法数据");
}
//微信公众号接口认证
if (StringUtils.isNotBlank(weChatBean.getEchostr())) {
return ResponseEntity.ok(weChatBean.getEchostr());
}
return ResponseEntity.ok(null);
}
- Service
@Override
public String checkWeChatSignature(WeChatBean weChatBean) {
String hashSignature = null;
if (StringUtils.isBlank(weChatBean.getTimestamp()) || StringUtils.isBlank(weChatBean.getNonce())) {
return hashSignature;
}
hashSignature = SignatureUtils.generateEventMessageSignature(wechatMpConfig.getToken(),
weChatBean.getTimestamp(), weChatBean.getNonce());
return hashSignature;
}
三、 接受订阅号用户对话,调用chatgpt接口
1、微信回复的处理
- 过滤掉不是文本的对话信息(暂时只处理文本对话)
到了这里,关于微信公众号订阅号(未认证)接入Chatgpt实现AI聊天(代码已开源)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!