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


说明

本文主要针对博主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());// 因为是明文,所以不用加密,直接返回给用户。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值