微信小程序实现客服默认自动回复功能
程序可通过以下两种方式下发客服消息:1、调用发送客服消息接口;2、使用公众平台网页版客服工具;这里主要讲第1种的做法。
1、小程序管理员的后台配置
登录小程序,在“设置-开发设置-消息推送”启用消息推送功能并完成相关信息配置。
URL(服务器地址):用url访问文件名地址
Token: 自己随便起个名字就行英文数字3-32字符到时后台验证一样就行了;
EncodingAESKey:直接用自动生成即可
配置完成后,微信服务器会访问服务器地址检验是否能访问到。如果访问失败获取返回数据不正确,将提示token校验失败(也就是说上面配置的URL是外网可以访问的微信服务器要先去我们自己配的URL中的方法去检验token是否相同)。
2、小程序前端
小程序前端加一个客服按钮就可以了
<contact-button size="30" session-from="weapp" class="guest-button"></contact-button>3、Token验证和客服消息的接收
后台我主要是由java编写完成。/** * 微信小程序消息验证和配置 * @data:2018/2/06 * @return * @throws Exception */ public String getProcessRequest() throws Exception{ boolean isGet=request.getMethod().toLowerCase().equals("get"); System.out.println("方法是-------"+isGet); if(isGet){//首次验证token isProcessRequest(); }else{// 进入POST聊天处理 System.out.println("进入了聊天界面"); if(checkSignature()){ // 接收消息并返回消息 acceptMessage(); } } /*for (String string : list) { conbineStr+=string; }*/ return null; }/** * 验证消息推送Token */ public void isProcessRequest(){ String signature=request.getParameter("signature"); String timestamp=request.getParameter("timestamp"); String nonce=request.getParameter("nonce"); String echostr=request.getParameter("echostr"); String token="ulin5";//要和我们小程序管理员配置的一样才行 List<String> params = new ArrayList<String>(); params.add(token); params.add(timestamp); params.add(nonce); // 1. 将token、timestamp、nonce三个参数进行字典序排序 Collections.sort(params, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); // 2. 将三个参数字符串拼接成一个字符串进行sha1加密 String temp = SHA1.encode(params.get(0) + params.get(1) + params.get(2)); if (temp.equals(signature)) { try { //通过算法计算后相等响应echostr给微信服务器 response.getWriter().write(echostr); System.out.println("成功返回 echostr:" + echostr); } catch (IOException e) { e.printStackTrace(); } } System.out.println("失败 认证"); }/** * 聊天处理方法 * @param request * @param response * @throws Exception */ public void acceptMessage() throws Exception{ com.alibaba.fastjson.JSONObject json = null; String openid=request.getParameter("FromUserName");//这是通过通过get方式去url 拼接的键值对,post方式取不到值。 request.setCharacterEncoding("UTF-8"); //返回页面防止出现中文乱码 BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));//post方式传递读取字符流 String jsonStr = null; StringBuilder result = new StringBuilder(); try { while ((jsonStr = reader.readLine()) != null) { result.append(jsonStr); } } catch (IOException e) { e.printStackTrace(); } reader.close();// 关闭输入流 json = com.alibaba.fastjson.JSONObject.parseObject(result.toString()); // 取一个json转换为对象 String jsonStrs="{"touser":"oNrqO4jET7YbGXdFcGWO-m-94heE","msgtype":"text","text":{ "content":"Hello World"}}"; // jsonStrs=new String(jsonStrs.getBytes(),"UTF-8"); String token=AccessTokenUtil.getWxAccessToken(); String url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+token; JSONObject jsonInfo = null; url=url.replaceAll(""", "\""); //jsonInfo = CommonUtil.httpsRequest(url, "POST", jsonStrs); PrintWriter out=null; BufferedReader in=null; String result1=""; try { URL url1 = new URL("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+token); HttpURLConnection connection = (HttpURLConnection) url1.openConnection(); connection.setDoOutput(true); connection.connect(); OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(),"UTF-8"); writer.write(jsonStrs); writer.flush(); InputStreamReader reader1 = new InputStreamReader(connection.getInputStream(),"UTF-8"); BufferedReader breader = new BufferedReader(reader1); StringBuffer strb = new StringBuffer(); String str = null; while (null != (str = breader.readLine())) { strb.append(str); } System.out.println(strb.toString()); writer.close(); reader.close(); breader.close(); connection.disconnect(); } catch (Exception e) { System.out.println("发送post请求异常"); e.printStackTrace(); }finally{ if(out!=null)out.close(); if(in!=null)in.close(); } }然后就完成啦^_^
小程序













