您的位置:首页 > 移动开发 > 微信开发

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

2018-01-04 17:22 549 查看
说明

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

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

消息转发到多客服
当用户输入关键词人工客服时进行消息转发

生成转发报文

将报文返回至微信公众平台

说明

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

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

获得多客服使用权限

认证的微信服务号可以在 “公众平台-功能-添加功能插件” 看到 “多客服” 申请入口,申请开通即可。


]

客服功能使用



微信公众平台客服PC版

登陆地址请“点我





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

描述

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

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

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

消息转发到多客服

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

/**
* <p>Title: getText</p>
* <p>Description: 文本消息</p>
* @param wxMessage
* @param context
* @param iService
* @return
*/
private WxXmlOutMessage getText(WxXmlMessage wxMessage, Map<String, Object> 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 {

@Override
public String toString(Object obj) {
return "<![CDATA[" + 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<BuilderType, ValueType> {

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());// 因为是明文,所以不用加密,直接返回给用户。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息