微信多客服 - 消息转发多客服

来源:互联网 发布:高维数据降维方法研究 编辑:程序博客网 时间:2024/04/28 21:37

         做了几个月的微信开发,前不久微信推出多客服功能.因为公司的公众号是微信认证,因而有接口权限.正好将此功能集成到项目中,本文只适合有微信开发基础.

查看微信开发文档

如果公众号处于开发模式,需要在接收到用户发送的消息时,返回一个MsgType为transfer_customer_service的消息,微信服务器在收到这条消息时,会把这次发送的消息转到多客服系统。用户被客服接入以后,客服关闭会话以前,处于会话过程中,用户发送的消息均会被直接转发至客服系统。

上文中提到的消息数据具体举例为:

<xml><ToUserName><![CDATA[touser]]></ToUserName><FromUserName><![CDATA[fromuser]]></FromUserName><CreateTime>1399197672</CreateTime><MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>
参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间的时间戳 (整型)MsgTypetransfer_customer_service,表明这是一条多客服消息

文档说得已经很清楚了,直接上代码

/** * 微信多客服操作 *  * @author xuyw * @email xyw10000@163.com * @date 2014-06-12 */


1 构造xml发起客服请求,触发客服可以使用自定义菜单或者关键字

/**     * 生成消息转发到多客服     * @param touser     * @param fromuser     * @return     */public static String CreateRelayCustomMsg(String touser, String fromuser) {StringBuilder relayCustomMsg = new StringBuilder();relayCustomMsg.append("<xml>");relayCustomMsg.append("<ToUserName><![CDATA["+touser+"]]></ToUserName>");relayCustomMsg.append("<FromUserName><![CDATA["+fromuser+"]]></FromUserName>");relayCustomMsg.append("<CreateTime>"+new Date().getTime()+"</CreateTime>");relayCustomMsg.append("<MsgType><![CDATA[transfer_customer_service]]></MsgType>");relayCustomMsg.append("</xml>");return relayCustomMsg.toString();}
2 为了代码的简单演示将微信上任意操作都执行客服操作,ps实际开发则需要多重判断

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=utf-8");Map<String, String> requestMap = MessageUtil.parseXml(request);// 发送方帐号(open_id)String fromUserName = requestMap.get("FromUserName");// 公众帐号String toUserName = requestMap.get("ToUserName");                        String    message = CustomMsgUtil.CreateRelayCustomMsg(fromUserName,toUserName);PrintWriter out = response.getWriter();out.print(message);out.close();}

public static Map<String, String> parseXml(HttpServletRequest request) throws Exception {// 将解析结果存储在HashMap中Map<String, String> map = new HashMap<String, String>();// 从request中取得输入流InputStream inputStream = request.getInputStream();// 读取输入流SAXReader reader = new SAXReader();Document document = reader.read(inputStream);// 得到xml根元素Element root = document.getRootElement();// 得到根元素的所有子节点List<Element> elementList = root.elements();// 遍历所有子节点for (Element e : elementList)map.put(e.getName(), e.getText());// 释放资源inputStream.close();inputStream = null;return map;}

ok 代码编写完了 来看看运行效果吧

先登录多客服系统

打开微信 点击在线咨询

多客服就收到一条请求,点击接入




微信收到回复


4 1