微信接入智能机器人回复消息

微信接入智能机器人回复消息

1 寻找智能机器人API

此处我使用的是极速数据

七款不错的聊天机器人API推荐

①登录注册之后,直接搜索机器人
在这里插入图片描述
②申请数据
在这里插入图片描述

③在个人中心,找到自己的appKey
在这里插入图片描述

④编写代码,根据接口地址发起对应的HTTP请求即可

2 编写代码,实现与微信对接

①导入依赖

 <!--dom4j 解析微信发送的XML数据--><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.1</version></dependency><!--xstream构建返回的XML--><dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.14</version></dependency><!--发送HTTP请求--><dependency><groupId>com.squareup.okhttp</groupId><artifactId>okhttp</artifactId><version>2.5.0</version></dependency><!--处理json数据--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency>

②编写基础类(返回给微信的XML实体类)

BaseXML:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseMessage {@XStreamAlias("ToUserName")private String toUserName;@XStreamAlias("FromUserName")private String fromUserName;@XStreamAlias("CreateTime")private String createTime;@XStreamAlias("MsgType")private String msgType;@XStreamAlias("MsgId")private String msgId;//初始化默认数据public BaseMessage(Map<String, String> requestMap){//开始是请求方,返回数据的时候,就成为了发送方this.toUserName = requestMap.get("FromUserName");this.fromUserName = requestMap.get("ToUserName");//微信中的时间默认是10位数,java的currentTimeMillis是13位,因此要除以1000this.createTime = System.currentTimeMillis() / 1000 + "";this.msgId = requestMap.get("MsgId");}}

TextMessage:

此处只实现了TextMessage(返回文本消息),其他消息,参考该模式实现
【详细文档,参考官网:https://mp.weixin.qq.com/】

@Data
@AllArgsConstructor
@NoArgsConstructor
@XStreamAlias("xml")
public class TextMessage extends BaseMessage{//文本内容@XStreamAlias("Content")private String content;public TextMessage(Map<String, String> requestMap, String content){super(requestMap);//设置消息类型为文本super.setMsgType("text");//设置文本消息this.content = content;}
}

③编写service,解析微信的XML数据,同时给微信返回XML数据

WxService:

@Service
public class WxService {/*** 解析通过dom4j解析XML数据* @param is* @return map*/public Map<String, String> parseRequest(InputStream is){Map<String, String> map = new HashMap<>();SAXReader reader = new SAXReader();try{//读取输入流,获取文档对象Document document = reader.read(is);//根据文档对象获取根节点Element root = document.getRootElement();//获取根节点的所有子节点List<Element> elements = root.elements();for(Element e : elements){map.put(e.getName(), e.getStringValue());}return map;}catch (Exception e){e.printStackTrace();}return null;}/*** 返回的消息* @param requestMap* @return*/public String getResponse(Map<String, String> requestMap){String msgType = requestMap.get("MsgType");//要返回的消息BaseMessage rtnMsg = null;switch (msgType){//根据消息类型,处理不同消息case "text":rtnMsg = dealTextMessage(requestMap);case "image"://TODObreak;case "voice":break;case "video":break;case "shortvideo":break;case "location":break;case "link":break;default:break;}return beanToXML(rtnMsg);}/*** 将消息对象处理为XML数据包* @param msg* @return*/public String beanToXML(BaseMessage msg){if(msg == null){return "";}        //公众号返回信息XStream stream = new XStream();//设置需要处理XStreamAlias("xml")注解的类stream.processAnnotations(TextMessage.class);stream.processAnnotations(PicMessage.class);String xml = stream.toXML(msg);return xml;}/*** 处理文本消息* @param requestMap* @return*/public BaseMessage dealTextMessage(Map<String, String> requestMap){String returnMsg = "收到消息!!!";TextMessage tm = new TextMessage(requestMap, returnMsg);return tm;}/*** 智能问答机器人根据内容回复文本* @param requestMap* @return 返回XML格式的数据包*/public String getResponseByAI(Map<String, String> requestMap) throws IOException {String content = requestMap.get("Content");//拼接请求URL[appkey填写自己账号的]String baseUrl = "https://api.jisuapi.com/iqa/query?appkey=8033aa4b1f27e290&question=" + content;Request request = new Request.Builder().url(new URL(baseUrl)).get().build();OkHttpClient client = new OkHttpClient();Call call = client.newCall(request);Response response = call.execute();System.out.println("this is response===================");//注意okHttp的response.body().string()只能使用一次,如果重复使用会报java.lang.IllegalStateException: closed//如果想要得到多次string()结果,只有重新构建response对象String responseStr = response.body().string();JSONObject responseObj = JSONObject.parseObject(responseStr);System.out.println(responseObj);//获取结果Object result = responseObj.get("result");String resultStr = JSON.toJSONString(result);//获取数据对象JSONObject resultObj = JSONObject.parseObject(resultStr);//获取回复的内容String respContent = (String) resultObj.get("content");String type = (String) resultObj.get("type");//构建返回结果String returnMsg = "";if("聊天".equals(type) || "重复".equals(type)){returnMsg = respContent;}TextMessage textMessage = new TextMessage(requestMap, returnMsg);String xml = beanToXML(textMessage);return xml;}
}

④编写controller,提供给微信请求地址

@RestController
public class WxController {@Autowiredprivate WxService wxService;@PostMapping("/wx")public void receiveMsg(HttpServletRequest request, HttpServletResponse response){try {//设置编码,防止乱码request.setCharacterEncoding("utf8");response.setCharacterEncoding("utf8");//获取请求信息ServletInputStream is = request.getInputStream();//处理消息和事件推送Map<String, String> requestMap = wxService.parseRequest(is);System.out.println(requestMap);//准备回复的数据包
//            String respXML = wxService.getResponse(requestMap);//测试机器人String respXML = wxService.getResponseByAI(requestMap);System.out.println(respXML);PrintWriter out = response.getWriter();out.print(respXML);out.flush();out.close();} catch (IOException e) {e.printStackTrace();}}
}

提供给微信的请求地址,需要注册自己的开发账号,详情见:
微信接口配置失败、接收微信发送的消息、与微信交互

3 测试功能

在自己的接口测试账号上发送消息,查看结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/45054.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

目标检测算法——YOLOv5/YOLOv7改进之结合无参注意力SimAM(涨点神器)

&#x1f496;&#x1f496;>>>加勒比海带&#xff0c;QQ2479200884<<<&#x1f496;&#x1f496; &#x1f340;&#x1f340;>>>【YOLO魔法搭配&论文投稿咨询】<<<&#x1f340; ✨✨>>>学习交流 | 温澜潮生 | 合作共赢…

chatgpt赋能Python-python_miio

Python-miio&#xff1a;探索小米智能设备的开发 Python-miio是一个开源的Python库&#xff0c;用于控制小米智能设备。小米智能设备包括智能扫地机器人、智能插座、智能空气净化器和智能灯泡等。Python-miio库支持局域网和互联网控制&#xff0c;是一个非常实用的工具&#x…

Python外星人入侵游戏——添加飞船和外星人图片

Python外星人入侵游戏是自己在《Python编程从入门到实践》在本书里学到的。本篇主要介绍该游戏中所需要的两个图片。分别为飞船和外星人图片。 1、首先去到 http://www.ituring.com.cn/book/1861 网站&#xff0c;就会看到有关Python编程从入门到实践这本书。 2、在右边有个随…

Stable Diffusion模型测试

文章目录 前言一、dqnapi 是什么&#xff1f;二、使用步骤1.本地2.在线测试 总结 前言 AI图像生成异常火爆&#xff0c;听说鹅厂都开始用AI图像生成做前期设定了&#xff0c;小厂更是直接用AI替代了原画师的岗位。这一张张丰富细腻、风格各异、以假乱真的AI生成图像&#xff0…

chatgpt赋能python:Python用于电力行业的应用与未来趋势

Python用于电力行业的应用与未来趋势 Python作为一种易学易用的编程语言&#xff0c;在不同行业中有着广泛的应用。本文将介绍Python在电力行业中的应用&#xff0c;重点讨论其在用电量分析和预测方面的优势&#xff0c;并探讨未来Python在电力行业中的应用趋势。 Python在用…

ChatGPT在能源行业的预测场景:智能能源管理和异常检测的未来趋势

第一章&#xff1a;引言 能源是现代社会发展的关键驱动力之一&#xff0c;然而&#xff0c;传统的能源管理方法存在许多挑战&#xff0c;如能源浪费、供需不平衡以及能源异常等。为了应对这些挑战&#xff0c;智能能源管理系统逐渐崭露头角。在本文中&#xff0c;我们将探讨Ch…

如何申请成为openai chatgpt的alpha内测人员

今天登录账号时意外发现侧边栏有个take survey链接写着wed love to hear from you. shape the future of chatgpt. 点进去首页显示这个 ChatGPT User Survey 感谢您参与我们关于ChatGPT的用户研究调查&#xff01;我们感谢您的时间和反馈&#xff0c;这将帮助我们提高产品质量…

达摩院开源人脸检测榜首模型MogFace

01 开源 论文链接 https://openaccess.thecvf.com/content/CVPR2022/papers/Liu_MogFace_Towards_a_Deeper_Appreciation_on_Face_Detection_CVPR_2022_paper.pdf 模型&代码 https://modelscope.cn/models/damo/cv_resnet101_face-detection_cvpr22papermogface/summary 简…

聊聊并发——生产者消费者模式

(转自&#xff1a;http://www.infoq.com/cn/articles/producers-and-consumers-mode?utm_sourceinfoq&utm_campaignuser_page&utm_mediumlink) 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的…

阿里内贸团队敏捷实践(二)自组织管理

实现团队的自组织管理&#xff0c;非常有助于团队形成合力&#xff0c;极大地提升团队整体的工作效率。本文结合原阿里ITU内贸团队的敏捷实践经历&#xff0c;阐释了何为自组织管理、为什么进行自组织管理、如何进行自组织管理等内容&#xff0c;同时给出了团队实施自组织管理的…

阿里内贸团队敏捷实践(三)结对编程

本文主要从提升项目质量、促进知识传递及减少项目风险等角度出发&#xff0c;讲述作者所在团队在结对编程实践中的一些经历&#xff0c;以及如何避免或减少其所带来的负面影响。 你了解结对编程吗&#xff1f;你尝试过结对编程实践吗&#xff1f;也许你还未曾尝试甚至还不曾了解…

聊聊生产者消费者模式

在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 为什么要使用生产者和消费者模式 在线程世界里&#xff0c;生产者就是生产数据的线程&#xff0c;消费者就是消费数据的线程。在…

聊聊并发 生产者消费者模式

http://ifeve.com/producers-and-consumers-mode/ 本文首发于InfoQ 作者&#xff1a;方腾飞 校对&#xff1a;张龙 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 为什么要使…

阿里内贸团队敏捷实践-敏捷回顾

回顾review是敏捷开发中的一个必不可少的实践也是把整个敏捷开发过程连接成一个闭环的关键节点本文将阐述我们是如何做敏捷回顾的。 敏捷回顾最高指导原则 无论我们发现了什么考虑到当时的已知情况、个人的技术水平和能力、可用的资源以及手上的状况我们理解并坚信每个人对自己…

java 生产者消费者模式_聊聊并发(十)生产者消费者模式

本文首发于InfoQ 作者&#xff1a;方腾飞 校对&#xff1a;张龙 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 为什么要使用生产者和消费者模式 在线程世界里&#xff0c;生产…

基于Trtc的内贸站视频聊天服务【二】

基于Trtc的内贸站视频聊天服务【二】 上一节课和大家聊了一下web端视频聊天的技术演变和发展&#xff0c;需要满足web端视频聊天的基本条件。以及介绍了一下腾讯云提供的Trtc服务&#xff0c;大概说了下腾讯云的sdk。本节课就以实际开发内贸站视频聊天的项目&#xff08;Swan&…

谷歌外贸sem与百度内贸sem的不同

1&#xff0c;国内的话&#xff0c;不用在乎是否使用在家用&#xff0c;起订量问题一般不用特别注意&#xff0c;如果家用零售的话&#xff0c;大家会很自觉地想到淘宝&#xff0c;拼多多。但是进出口的话&#xff0c;必须是商用&#xff0c;批发&#xff0c;大批量货物类型&am…

外贸软件进出口内贸综合型管理解决方案

外贸公司综合型业务模式&#xff0c;指的是公司涉及自营、代理进出口业务、内贸业务、转口业务等等多业务模式&#xff0c;涉及的产品种类多&#xff0c;像这样的综合型外贸公司就需要通过信息化管理实现业财一体化&#xff0c;完善资金流向&#xff0c;简化工作流程&#xff0…

使用Azure OpenAI服务创建聊天机器人

创建聊天机器人步骤&#xff1a; 1、开通 Azure OpenAI 服务 在 Azure 国际版注册账号。注册后创建OpenAI 服务。申请提交后需要等待审核&#xff0c;审核通过后就可以对接接口了。 2、创建 Azure OpenAI 服务 当你的申请通过后&#xff0c;就可以到 Azure 上创建 OpenAI 服…

C#探索之路(9):深入理解C#代码编译的过程以及原理

C#探索之路(9)&#xff1a;深入理解C#代码编译的过程以及原理 文章目录 C#探索之路(9)&#xff1a;深入理解C#代码编译的过程以及原理一、前言&#xff1a;概念解析1、编译器&#xff1a;2、JIT是什么&#xff1f;3、AOT是什么&#xff1f;4、如何理解这个“基于运行时”的概念…