最近用java做了一个实现在微信小程序内根据用户发送的消息内容回复用不通的消息功能,相当于一个自动回复的客服消息,效果图如下:

当用户在小程序输入框中输入内容或其他操作时,后台根据用户输入的内容动态给用户回复,微信的参考文档为:

微信小程序客服消息回复开发
customerServiceMessage.send 档
微信的垃圾文档我就懒得喷了啊,按它这个文档做简直是一团乱麻

整个流程是这样的我们可以在微信小程序的开发者后台设置消息的回调地址,当用户进入小程序的客服页面,或在客服页面的输入框中输入内容时,微信小程序就会根据我们配置的消息回调地址把这条消息或这个事件回调给我们的服务器,我们可以进行相关处理,并给用户回复消息如上图显示的那些我输入 22 ,给我回复一个链接地址或其他东西,可以在回调中配置;

然后遇到的几个问题说一下:

1、回调地址解析:在微信后台配置回调地址时它会先发一个get请求测试地址是否可用,然后用户在发消息的时候会发post请求把用户消息发过来:如下

@Override
public void autoResponse(HttpServletRequest req, HttpServletResponse resp) throws Exception {switch (req.getMethod().toUpperCase()){case GET:doGet(req, resp);break;case POST:doPost(req, resp);break;default:throw new IllegalStateException("Unexpected value: " + req.getMethod());}
}

//回复get请求,说明地址可用

private void doGet(HttpServletRequest req, HttpServletResponse resp) throws Exception {// 将请求、响应的编码均设置为UTF-8(防止中文乱码)req.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");String signature = req.getParameter("signature");String timestamp = req.getParameter("timestamp");String nonce = req.getParameter("nonce");String echostr = req.getParameter("echostr");String sortString = SignUtil.sort(config.getRespToken(), timestamp, nonce);String mySignature = SignUtil.sha1(sortString);if (mySignature != null && mySignature != "" && mySignature.equals(signature)) {resp.getWriter().write(echostr);} else {log.error("签名校验失败.");}
}

//回复post请求

private void doPost(HttpServletRequest req, HttpServletResponse resp)throws Exception {try{resp.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");String line = null;StringBuffer xmlStr = new StringBuffer();BufferedReader reader = req.getReader();while ((line = reader.readLine()) != null) {log.info(line);xmlStr.append(line);}Map<String,String> map = XmlUtil.xmlToMap(xmlStr.toString());CustomerMsgReq customerMsgReq = WXAutoRespReqUtil.buildResponseMessage(map, config.getAppletsAppId(), config.getRespHref(), config.getRespText());log.info("send custom message param :{}", customerMsgReq);if(customerMsgReq == null){return;}String accessToken = getCacheAccessToken();JSONObject sendResult = wxAppletsRemoting.messageCustomSend(accessToken, customerMsgReq);log.info("send custom message result :{}", sendResult);if(sendResult.containsKey(("errcode")) && sendResult.getString("errcode").equals("0.0")){return;}log.error("access token may expire", sendResult);accessToken = getRealAccessToken();sendResult = wxAppletsRemoting.messageCustomSend(accessToken, customerMsgReq);log.info("resend custom message result :{}", sendResult);}finally {resp.getWriter().println("success");}

这里有一个问题,根据文档描述应该可以直接在回调接口中回复用户消息,如下这样操作,但是实际开发中,我测试这样回复用户没有收到消息,也不报错,不知道是我理解有问题还是哪里配置有问题,欢迎各位小伙伴指正

private void doPost(HttpServletRequest req, HttpServletResponse resp)throws Exception {try{resp.setCharacterEncoding("UTF-8");resp.setCharacterEncoding("UTF-8");String line = null;StringBuffer xmlStr = new StringBuffer();BufferedReader reader = req.getReader();while ((line = reader.readLine()) != null) {log.info(line);xmlStr.append(line);}Map<String,String> map = XmlUtil.xmlToMap(xmlStr.toString());//链接内容String msgText ="<a href=\""+href+"\">"+text+"</a>";ZZ//发送方帐号String fromUserName = map.get("FromUserName");// 开发者微信号String toUserName = map.get("ToUserName");String respXml = String.format( "<xml>" +"<ToUserName><![CDATA[%s]]></ToUserName>" +"<FromUserName><![CDATA[%s]]></FromUserName>" +"<CreateTime>%s</CreateTime>" +"<MsgType><![CDATA[text]]></MsgType>" +"<Content><![CDATA[%s]]></Content>" +"</xml>", fromUserName, toUserName, getMessageCreateTime(), msgText);resp.setContentType("application/xml; charset=utf-8");resp.getWriter().println(respXml);}finally {}

因为不能直接回复,需要调微信

POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

这个接口给用户回复,参考微信文档

customerServiceMessage.send 档

因此又牵扯到获取微信小程序appid,secret 然后根据appid,secret获取access_token 还有access_token的缓存等一大堆问题,我就不细说了,涉及到的代码已提交到码云

最近又有小伙伴请教微信小程序自动回复的问题,在交流的时候,发现了一个新的东西,微信云回复,逻辑就是在微信小程序的后台上传一个云服务的回复接口js,后面要自动回复用户消息的时候就直接调 云服务的回复接口,这样可以省去提供自动回复服务端的实现,可以不用自己再维护后台服务了

微信小程序自动回复用户消息相关推荐

  1. android微信小程序自动填表_微信小程序自动回复用户消息

    最近用java做了一个实现在微信小程序内根据用户发送的消息内容回复用不通的消息功能,相当于一个自动回复的客服消息,效果图如下: ​​ ​ 当用户在小程序输入框中输入内容或其他操作时,后台根据用户输入的 ...

  2. python微信语音转发_python实现微信小程序自动回复

    本文是使用Python的itchat模块进行微信私聊消息以及群消息的自动回复功能,必须在自己的微信中添加微信号xiaoice-ms(微软的微信机器人)才能实现,直接复制代码运行之后扫一扫二维码即可,经 ...

  3. 微信小程序python人工智能回复_python实现微信小程序自动回复

    本文是使用Python的itchat模块进行微信私聊消息以及群消息的自动回复功能,必须在自己的微信中添加微信号xiaoice-ms(微软的微信机器人)才能实现,直接复制代码运行之后扫一扫二维码即可,经 ...

  4. 微信小程序客服实现自动回复图文消息链接,点击去关注公众号

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 用户打开客服消息,发送任意消息自动回复图文链接,达到关注公众号的目的. 先看效果: 打开芝麻小客服的后台,选择 ...

  5. 关于微信小程序云开发---实现客服自动回复图片例子

    关于微信小程序云开发-实现客服自动回复例子 微信自带的云开发功能使前端工程师可以独立的开发出一款小程序,微信自带的云开发. 首先和开发其他平台的项目一样先看官方文档. 微信小程序开放文档 一. 什么是 ...

  6. 微信小程序七(模板条件列表渲染完成模拟公众号自动回复)

    最近突发奇想,如果微信小程序不在微信公众号里了该如何使用 自动回复呢? 先看下效果 话不多说 直接上代码 1.页面代码: <swiper indicator-dots="{{indic ...

  7. 最全的java对接微信小程序客服功能实现(包含自动回复文本消息、图片消息,进入人工客服)

    java对接微信小程序客服功能实现(包含自动回复文本消息.图片消息,进入人工客服) 第一步:请求校验(确认请求来自微信服务器) 代码如下: @ApiOperation(value = " 微 ...

  8. 关注微信公众号后自动回复微信小程序卡片(认证服务号及海外公众号适用)

    微信小程序是微信的下一个风口. 很多大小公司.企事业单位.甚至有关机关部门都有属于自己的小程序,甚至不止一个. 本文旨在简单说说如何实现关注公众号后之后立刻自动回复小程序卡片,而且可以指定回复任意的小 ...

  9. 微信小程序原生接入腾讯云im(单聊,列表,聊天界面,自定义消息,自动回复)

    微信小程序原生接入腾讯云im(单聊,列表,聊天界面,自定义消息,自动回复) 发送图片语音消息传送→ 文章目录 1.项目需求 2.参考文档 3.效果图 4.初始化 集成SDK 5.登录 6.会话列表 7 ...

  10. 免费的微信小程序客服消息自定义关键词自动回复管理系统

    源码名称:微信小程序客服消息自定义关键词回复管理系统 框架版本:laravel5.8,和thinkphp类似的框架,会thinkphp就会laravel. 适用范围:二次开发,独立部署,客服自动回复 ...

最新文章

  1. lwip 开发 sntp 与 tcp 不能同时工作的奇怪问题
  2. 利用Keras构建自动编码器
  3. typeError: unhashable type: 'list’问题分析
  4. SAP ERP和C4C Acount和Contact的双向同步
  5. Android Activity无法启动。
  6. 和移动对接短信http协议和cmpp协议那个好_python网络爬虫之HTTP原理,爬虫的基本原理,Cookies和代理介绍...
  7. 快手直播伴侣因计算机丢失,在电脑上安装快手直播伴侣,却说因为计算机丢失MSVCP140.DOLL怎么办???...
  8. HTK---语音识别实现应用的Kit
  9. 惠普暗影精灵3清灰_惠普暗影精灵15评测:速度超快,价格适中|但问题却不少...
  10. MySQL 数据恢复 —— 使用 data 目录
  11. cas4.x 单点登录开发入门
  12. 传奇服务器修改二级密码,找回传奇玩家账号和二级密码,修改密码和密保
  13. 计算机与仪表通讯实例,MODBUS称重仪表与西门子PLC通讯实例
  14. 三维扫描仪在工艺品摆件中的应用
  15. verilog奇偶分频详解
  16. vscode 前端常用插件推荐
  17. 浅谈IOC--说清楚IOC是什么
  18. 读书笔记-MongoDb-简介
  19. 渗透测试-中间件解析漏洞分析
  20. abbplc型号_西门子 abb plc有哪些型号

热门文章

  1. Android判断手机是否在口袋中,距离传感器
  2. Spring 第二篇 注解+ xml 配置 与 纯注解开发 与集成 junit测试
  3. Debian 6(Squeeze)升级至Debian 7(Wheezy)
  4. Unity打包篇:关于MMD模型贴画在安卓手机上无法显示的问题。
  5. 用 python 来操作 docx(使用 docx 库操作 docx 格式文件)
  6. Codeforces 1437 F. Emotional Fishermen —— dp
  7. java 指纹匹配算法_java – 从生物识别指纹考勤设备中检索数据
  8. allegro中Externally Determined Violation错误标记去掉的skill
  9. html写的3d烟花带字幕,Three.js 3D烟花绽放动画
  10. 如何才能达到阿里 P7 水平 ?