首页 > 微信 > 详细

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

时间:2014-07-28 15:57:43      阅读:794      评论:0      收藏:0      [点我收藏+]

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

查看微信开发文档

如果公众号处于开发模式,需要在接收到用户发送的消息时,返回一个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 消息创建时间的时间戳 (整型)
MsgType transfer_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 代码编写完了 来看看运行效果吧

先登录多客服系统

bubuko.com,布布扣

打开微信 点击在线咨询

bubuko.com,布布扣

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


bubuko.com,布布扣

bubuko.com,布布扣

微信收到回复

bubuko.com,布布扣

微信多客服 - 消息转发多客服,布布扣,bubuko.com

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

原文:http://blog.csdn.net/xuyw10000/article/details/38227683

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!