JAVA微信公众号开发第4篇将用户消息转发到多客服

    • 说明
    • 微信公众平台多客服功能如何使用
    • 将用户消息转发至客服开发步骤
      • 描述
      • 消息转发到多客服
        • 当用户输入关键词人工客服时进行消息转发
        • 生成转发报文
        • 将报文返回至微信公众平台


说明

本文主要针对博主JAVA微信公众号客服图文消息一文做补充

微信公众平台多客服功能如何使用

  • 获得多客服使用权限
    认证的微信服务号可以在 “公众平台-功能-添加功能插件” 看到 “多客服” 申请入口,申请开通即可。
    这里写图片描述]
  • 客服功能使用
    这里写图片描述
  • 微信公众平台客服PC版
    登陆地址请“点我”
    扫码登录
    操作界面

将用户消息转发至客服开发步骤

描述

如果公众号处于开发模式,普通微信用户向公众号发消息时,微信服务器会先将消息POST到开发者填写的url上,如果希望将消息转发到多客服系统,则需要开发者在响应包中返回MsgType为transfer_customer_service的消息,微信服务器收到响应后会把当次发送的消息转发至多客服系统。

消息被转发到多客服以后,会被自动分配给一个在线的客服帐号,您也可以在返回transfer_customer_service消息时,在XML中附上TransInfo信息指定分配给某个客服帐号。

用户被客服接入以后,客服关闭会话以前,处于会话过程中时,用户发送的消息均会被直接转发至客服系统。当会话超过2小时客服没有关闭时,微信服务器会自动停止转发至多客服,而将消息恢复发送至开发者填写的url上。用户在等待队列中时,用户发送的消息仍然会被推送至开发者填写的url上。

消息转发到多客服

当用户输入关键词【人工客服】时进行消息转发
/*** 

Title: getText

*

Description: 文本消息

* @param wxMessage* @param context* @param iService* @return*/
private WxXmlOutMessage getText(WxXmlMessage wxMessage, Map context, IService iService){if("人工客服".equals(wxMessage.getContent())){//转至return WxXmlOutMessage.TEXT().content(wxMessage.getContent()).toUser(wxMessage.getFromUserName()).fromUser(wxMessage.getToUserName()).buildKf();}return WxXmlOutMessage.TEXT().content("您好!如有问题,请输入【人工客服】寻求帮助。").toUser(wxMessage.getFromUserName()).fromUser(wxMessage.getToUserName()).build();}
生成转发报文
  • 返回消息模型WxXmlOutMessage.java
@XStreamAlias("ToUserName")@XStreamConverter(value = XStreamCDataConverter.class)protected String toUserName;@XStreamAlias("FromUserName")@XStreamConverter(value = XStreamCDataConverter.class)protected String fromUserName;@XStreamAlias("CreateTime")protected Long createTime;@XStreamAlias("MsgType")@XStreamConverter(value = XStreamCDataConverter.class)protected String msgType;public String getToUserName() {return toUserName;}public void setToUserName(String toUserName) {this.toUserName = toUserName;}public String getFromUserName() {return fromUserName;}public void setFromUserName(String fromUserName) {this.fromUserName = fromUserName;}public Long getCreateTime() {return createTime;}public void setCreateTime(Long createTime) {this.createTime = createTime;}public String getMsgType() {return msgType;}public void setMsgType(String msgType) {this.msgType = msgType;}public String toXml() {return XStreamTransformer.toXml((Class) this.getClass(), this);}
/*** 获得文本消息builder* * @return*/public static TextBuilder TEXT() {return new TextBuilder();}
  • 获得文本消息Builder
  • CDATA 转换器XStreamCDataConverter.java
package com.bigbigbu.wx.tools.util.xml;import com.thoughtworks.xstream.converters.basic.StringConverter;/*** CDATA 转换器* @author FANQIBU**/
public class XStreamCDataConverter extends StringConverter {@Overridepublic String toString(Object obj) {return " + super.toString(obj) + "]]>";}}

– 获得文本消息TextBuilder.java

package com.bigbigbu.wx.tools.bean.outxmlbuilder;import com.bigbigbu.wx.tools.bean.WxXmlMessage.WxKf;
import com.bigbigbu.wx.tools.bean.WxXmlOutTextMessage;/** 
* @ClassName: TextBuilder 
* @Description: TODO 文本消息builder
* @author FANQIBU修改于 2017年12月12日 下午4:16:14  (ps:增加构建客服消息)
* @date 2017年12月12日 下午4:16:14 
*  
*/
public final class TextBuilder extends BaseBuilder<TextBuilder, WxXmlOutTextMessage> {private String content;private WxKf wxKf=null;public TextBuilder content(String content) {this.content = content;return this;}public TextBuilder kfAccount(String kfAccount) {this.wxKf = new WxKf();this.wxKf.setKfAccount(kfAccount);return this;}public WxXmlOutTextMessage build() {WxXmlOutTextMessage m = new WxXmlOutTextMessage();setCommon(m);m.setContent(this.content);return m;}public WxXmlOutTextMessage buildKf() {WxXmlOutTextMessage m = new WxXmlOutTextMessage();setCommon(m);m.setContent(this.content);m.setMsgType("transfer_customer_service");if(wxKf != null){m.setWxKf(wxKf);}return m;}
}

–BaseBuilder.java

package com.bigbigbu.wx.tools.bean.outxmlbuilder;import com.bigbigbu.wx.tools.bean.WxXmlOutMessage;public abstract class BaseBuilder {protected String toUserName;protected String fromUserName;public BuilderType toUser(String touser) {this.toUserName = touser;return (BuilderType) this;}public BuilderType fromUser(String fromusername) {this.fromUserName = fromusername;return (BuilderType) this;}public abstract ValueType build();public void setCommon(WxXmlOutMessage m) {m.setToUserName(this.toUserName);m.setFromUserName(this.fromUserName);m.setCreateTime(System.currentTimeMillis() / 1000l);}}
将报文返回至微信公众平台
 // 把消息传递给路由器进行处理WxXmlOutMessage xmlOutMsg = router.route(wx);if (xmlOutMsg != null)out.print(xmlOutMsg.toXml());// 因为是明文,所以不用加密,直接返回给用户。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部