[奶奶看了都会]ChatGPT接入企业微信成为聊天机器人
1.聊天效果
上次给大家讲了ChatGPT接入个人微信的方法,但是个人微信容易被封号。这次就教大家接入企业微信,不会再被封号哦~ 话不多说,直接看机器人的聊天效果。基本能实现ChatGPT的聊天效果了。我们实现的是在企业微信中添加一个机器人,让机器人后台与chatGPT互通,这样和机器人对话就是和ChatGPT对话了。

2.接入步骤
2.1 准备工作
- 一台配置公网IP的服务器,或是有阿里云函数计算的域名
- 服务器配置了Java运行环境
- 有额度的chatGPT账号,并创建了账号的api key,创建过程可以往下看
- 以上配置有了才能进行后面的步骤哦~
- 代码获取方式:号众公
卷福同学内,发关键词ChatGPT企业微信获取
2.1创建企业微信团队
首先下载企业微信,登录注册创建一个企业微信团队。不要选个人团队(亲测无法应用机器人)。具体步骤可自行探索。这里不多说了
2.2添加机器人
PC端登录地址:https://work.weixin.qq.com/wework_admin/frame#apps
先登录上一步创建好的企业微信账号
然后添加自建应用

填写名称、上传logo图片,创建应用

2.3设置企业可信IP
创建好应用后,在应用详情里,开发者接口配置那里,配置企业可信IP(准备工作里让你准备的服务器的公网IP)
这一步的作用是:你给机器人发消息,消息会转给配置的IP,配置可信是为了让你的IP在白名单里。否则微信不会转发消息的。

2.4 设置API接收
上一步配置了IP,还要继续配置API接收,简单说就是微信转发消息到哪个路径里。

这一步比较复杂,我们慢慢往后看。
2.4.1 配置URL
第一次配置需要验证消息,就是你配置的接口,微信第一次验证通过后,才允许发消息。需要配置URL和Token
配置方式:
URL配置: IP:端口/接收消息路径
示例 http://127.0.0.1:8080/receiveMsgFromWechat (要替换IP哦)

2.4.2 验证消息
接着重要的来了,我们必须按照微信要求的格式配置接口,官方文档:接收消息与事件
小卷已经把代码整好了,号众公 卷福同学 内,发关键词ChatGPT企业微信获取
需要替换application.properties文件中的5个参数,具体要换成什么看代码库里的描述
- chatgpt.apiKey
- wechat.sToken
- wechat.sEncodingAESKey
- wechat.sCorpID
- wechat.corpsecret
接口Java示例代码:
@GetMapping("/receiveMsgFromWechat")
public String receiveMsgFromDd(@RequestParam("msg_signature") String msg_signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce,
@RequestParam("echostr") String echostr) throws Exception {
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);
String sEchoStr = null;
try {
sEchoStr = wxcpt.VerifyURL(msg_signature, timestamp,
nonce, echostr);
log.info("verifyurl echostr: " + sEchoStr);
// 验证URL成功,将sEchoStr返回
return sEchoStr;
} catch (Exception e) {
//验证URL失败,错误原因请查看异常
log.error("verifyurl error,e={}", e);
return "";
}
}
把代码下载完后,部到你的服务器上,再点击保存,即可验证通过。验证通过后API接收消息就像下面那样

3.消息接口开发
3.1接收消息接口开发
上一步验证完成后,我们就可以用配置的路径接收消息了。但是微信是用的Post方式发消息,所以需要再设置个Post方式的接口,路径还是一样的,上一步配置的GET接口可以注释掉了。消息入参有改变。
官方文档:使用接收消息
这里小卷也把示例代码写好了,大家直接用
@PostMapping(value = "/receiveMsgFromWechat",
consumes = {"application/xml", "text/xml"},
produces = "application/xml;charset=utf-8")
public String receiveMsgFromDd(@RequestParam("msg_signature") String msg_signature,
@RequestParam("timestamp") String timestamp,
@RequestParam("nonce") String nonce,
@RequestBody WechatXmlDTO body) throws Exception {
WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);
String sEchoStr = null;
try {
String msg = body.getEncrypt();
String xmlcontent = wxcpt.decrypt(msg);
log.info("xml content msg: " + xmlcontent);
String data = StringUtils.substringBetween(xmlcontent, "<Content><![CDATA[", "]]></Content>");
return data;
} catch (Exception e) {
//验证URL失败,错误原因请查看异常
log.error("DecryptMsg msg error,e={}", e);
return "";
}
}
到这一步,我们给机器人发的消息都会转发到自己服务器了,有调试需求的朋友可以自己调试试
3.2调Openai的接口
关键的一步来了,这步是调Openai的GPT3.0接口,使用它的文本补齐功能实现对话。需要的自行查看官方接口文档:OpenAI官方接口文档
我们用Java开发HTTP POST请求就行,然后需要用到你的账号的API key
3.2.1 chatGPT账号API key获取
请求Openai的接口需要账号key,获取方式:
- 登录openai官网:https://platform.openai.com/account/api-keys
- 点击
create New secret key创建一个key,拷贝下来 - 没有chatGPT账号,或者没有key的可以找我,优惠价

3.2.1 请求Openai功能开发
就一个POST请求,注意替换API key,示例代码如下。相关参数解释可以看官方接口文档completion文档
Map<String, String> header = Maps.newHashMap();
String drawUrl = "https://api.openai.com/v1/completions";
String cookie = "";
header.put("Authorization", "Bearer 【替换API KEY】");
Map<String, Object> body = Maps.newHashMap();
body.put("model", "text-davinci-003");
body.put("prompt", text);
body.put("max_tokens", 1024);
body.put("temperature", 1);
MediaType JSON1 = MediaType.parse("application/json;charset=utf-8");
RequestBody requestBody = RequestBody.create(JSON1, JSON.toJSONString(body));
String response = OkHttpUtils.post(drawUrl, cookie, requestBody, header);
3.3 回传消息给企业微信
上一步调了Openai的接口后,就得到了GPT对话的结果,现在要将结果回传到企业微信里,实现对话聊天,企业微信发送应用消息文档:发送应用消息
具体步骤:
- 先获取接口调用的accessToken,有效期2小时
- 再通过accessToken,调应用消息推送接口,可配置具体要接收消息的人,群等等。
- 需要用到企业id,获取方法往下看
- 需要用到自建应用的secret
3.3.1 获取企业ID

3.3.2 获取自建应用的secret

示例代码:
String accessToken = null;
try {
accessToken = getAccessToken();
} catch (Exception e) {
log.error("sendMsg getAccessToken error,e={}", e);
}
String url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + accessToken;
String body = "{\n" +
" \"touser\" : \"" + touser + "\",\n" +
" \"msgtype\" : \"text\",\n" +
" \"agentid\" : 1000003,\n" +
" \"text\" : {\n" +
" \"content\" : \"" + msg + "\"\n" +
" },\n" +
" \"safe\":0,\n" +
" \"enable_id_trans\": 0,\n" +
" \"enable_duplicate_check\": 0,\n" +
" \"duplicate_check_interval\": 1800\n" +
"}";
MediaType JSON1 = MediaType.parse("application/json;charset=utf-8");
RequestBody requestBody = RequestBody.create(JSON1, body);
log.info("send msg:{}", requestBody);
OkHttpUtils.post(url, "", requestBody, Maps.newHashMap());
到此所有开发工作都完成了,可以将服务部署试验功能了!!!
我是卷福同学,全网同名哦~
[奶奶看了都会]ChatGPT接入企业微信成为聊天机器人的更多相关文章
- [奶奶看了都会]ChatGPT保姆级注册教程
大家好,我是小卷 最近几天OpenAI发布的ChatGPT聊天机器人火出天际了,连着上了各个平台的热搜榜.这个聊天机器人最大的特点是模仿人类说话风格同时回答大量问题. 有人说ChatGPT是真正的人工 ...
- Python接入企业微信 - 推送信息到内部群里
前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现. 本 ...
- 用python玩微信(聊天机器人,好友信息统计)
1.用 Python 实现微信好友性别及位置信息统计 这里使用的python3+wxpy库+Anaconda(Spyder)开发.如果你想对wxpy有更深的了解请查看:wxpy: 用 Python 玩 ...
- 企业微信快捷接入Odoo的模块——WeOdoo
WeOdoo Odoo 快速接入企业微信,快捷使用,基于Oauth2.0安全认证协议,免对接开发配置,支持局域网等内网环境的 Odoo 服务 详见: http://oejia.net/blog/201 ...
- Python Django对接企业微信第三方服务回调验证的一些坑
今天公司老总,叫我把公司的企业微信,服务商管理后台中的本地应用进行回调验证. 听起来一脸懵逼,没搞过企业微信对接情况.一头雾水,不知道如何下手. 先讲解一下,企业微信情况. 登录到企业微信后,右上角服 ...
- 企业微信域名IP列表
https://res.mail.qq.com/zh_CN/wework_ip/latest.html?st=C98F886B96A94AD2207D9F0B2970B93DFD5A76DF94CED ...
- PostMan向企业微信机器人传送数据测试
1 在企业微信中创建机器人 获取:webhook 地址 2.在Postman软件中创建Post文件 Post文件请求类型要与机器人所接受的类型一致.Get 或者 Post Url地址为上面webh ...
- SAP成都研究院飞机哥: SAP C4C中国本地化之微信聊天机器人的集成
今天的文章仍然来自Jerry的老同事,SAP成都研究院的张航(Zhang Harry).关于他的背景介绍,请参考张航之前的文章:SAP成都研究院飞机哥:程序猿和飞机的不解之缘.下面是他的正文. 大家好 ...
- ASP.NET实现企业微信接入应用实现身份认证
目录 #需求场景 #参考 #具体步骤 1.获取access_token 2.构造网页授权链接 3.获取访问用户身份 #.Net具体代码 1.Web首页服务端代码 2.帮助类代码 #需求场景 一个.ne ...
- 企业微信集成openai实现ChatGPT机器人
背景: 现在网上查资料,痛点太多了,什么广告,什么重复的,对于程序员的我来说,简直是无语 最近接触到ChatGpt,问了些技术问题,答的比某度好,甚至可以写代码,真的太棒了 因此想写个专门的机器人,给 ...
随机推荐
- vue学习笔记 十、状态管理基础结构
系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...
- uni-app打包到安卓步骤
1.打包到安卓 https://www.bilibili.com/video/BV1BJ411W7pX?p=56 2.打包到IOS https://www.jianshu.com/p/ef6e6e01 ...
- vue中我改变了data中的一个值,但现在视图上没有实时更新,请问我怎么拿到更新后的值?
Vue在数据初始化的时候会对data,computed,watcher中的属性进行依赖收集,如果支持proxy,则直接使用proxy进行拦截,好处是可以深层次的进行拦截,如果不支持proxy,则使用o ...
- C#使用ParseExact方法将字符串转化为日期格式
private void btn_Convert_Click(object sender, EventArgs e) { #region 针对Windows 7系统 string s = string ...
- Android Kotlin 导入 Protobuf
project build.gradle plugins { id "com.google.protobuf" version "0.9.1" apply fa ...
- SNMP 使用总结
转载请注明出处: 1.SNMP简介 SNMP(Simple Network Management Protocol,简单网络管理协议)是一种用于网络设备和系统的管理协议.它允许网络管理员监控和管理网络 ...
- mysql 用户及用户权限管理命令总结-用户添加及添加权限
本文为博主原创,转载请注明出处: linux 使用root 用户登录mysql 1. 添加用户,并设置用户登录密码: 格式: create user user_name@'ip' identifie ...
- 6. 配置项:relabel_config
6.1relabel_config的位置 6.2 relabel_config参数详解 1.replace 2. keep 3.drop 6.labelkeep 7.hashmod 6.3 正则表达式 ...
- MySQL的SQL优化常用30种方法[转]
MySQL的SQL优化常用30种方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或< ...
- 程序&命名-执行环境
开发程序执行环境 系统级别 -- 编译器或解释器 程序级别 -- 命令行参数.配置文件 执行级别 -- 进程.线程.协程运行时上下文(树(命名空间 -- 函数-局部变量.包或模块-全局变量)) 命令行 ...