转自:http://www.cuiyongzhi.com/post/47.html

我们在微信公众号的后台可以发现微信给我们制定了两种模式,一种是开发者模式(也就是我们一直在做的开发),还有一种模式是编辑模式,然而很蛋疼的是有些功能一旦我们切换到开发者模式下就无法使用了,比较典型的就是关键字回复以及服务器无响应的时候返回的【服务器无法响应】等问题 ,这里我给出的解决方案是:①对关键字给出关键字回复的代码实现;②【服务器5s无响应】解决方案是接入多客服,以方便我们的消息处理!

(一)关键字自动回复

在前面的文章中我们已经完成对消息回复的分类以及实现,这里说的关键字回复只是对消息回复功能的应用化,这里我在【文本类型消息】下实现,其大致思路是:首先获取到消息文本的内容content,然后更具获取content去匹配自己需要设定的关键字,然后根据匹配到的不同结果给出不同的消息回复,简单代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
String openid=map.get("FromUserName"); //用户openid
String mpid=map.get("ToUserName");   //公众号原始ID
 
//普通文本消息
TextMessage txtmsg=new TextMessage();
txtmsg.setToUserName(openid);
txtmsg.setFromUserName(mpid);
txtmsg.setCreateTime(new Date().getTime());
txtmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
 
if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 文本消息
    String content=map.get("Content");
    if("1".equals(content)){
        txtmsg.setContent("你好,你发送的内容是1!");
    }else if("2".equals(content)){
        txtmsg.setContent("你好,你发送的内容是2!");
    }else if("3".equals(content)){
        txtmsg.setContent("你好,你发送的内容是3!");
    }else if("4".equals(content)){
        txtmsg.setContent("<a href=\"http://www.cuiyongzhi.com\">崔用志博客</a>");
    }else{
        txtmsg.setContent("你好,欢迎来到崔用志博客!");
    }
    return MessageUtil.textMessageToXml(txtmsg);
}

基本关键字回复的逻辑就是这样,你可以根据自己的需要设置自己的关键字以及实现流程,最终运行结果如下:

(二)该公众号暂时无法提供服务解决方案——多客服接口使用

在我们使用或者开发过程中可能会遇到【该公众号暂时无法提供服务】的回复,出现这个回复的原因是我们的应用服务在5s内没有给到腾讯服务器任何响应,腾讯服务器给用户的自动响应提示,如何解决以及避免这种情况的出现,我们可以有如下解决方案:

①直接给微信服务器回复【空】,注意这里是直接回复空而不是回复内容为空!

所以我们的代码实现为:

1
2
3
4
5
6
7
8
9
10
11
         //这个是错误代码回复
    if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) { // 链接消息
        txtmsg.setContent("");
        return MessageUtil.textMessageToXml(txtmsg);
    }
     
    //这个是正确代码回复
    if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) { // 位置消息
        System.out.println("==============这是位置消息!");
        return "";
    }

②将消息转接到多客服助手,让客服去做消息的处理!

新建客服消息实体类CustomerMessage.java,简单代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.cuiyongzhi.wechat.message.resp;
 
/**
 * ClassName: CustomerMessage
 * @Description: 客服消息接口
 * @author dapengniao
 * @date 2016年3月14日 下午6:28:08
 */
public class CustomerMessage {
    // 接收方帐号(收到的OpenID)
    private String ToUserName;
    // 开发者微信号
    private String FromUserName;
    // 消息创建时间 (整型)
    private long CreateTime;
    // 消息类型(text/music/news)
    private String MsgType;
 
    public String getToUserName() {
        return ToUserName;
    }
 
    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }
 
    public String getFromUserName() {
        return FromUserName;
    }
 
    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }
 
    public long getCreateTime() {
        return CreateTime;
    }
 
    public void setCreateTime(long createTime) {
        CreateTime = createTime;
    }
 
    public String getMsgType() {
        return MsgType;
    }
 
    public void setMsgType(String msgType) {
        MsgType = msgType;
    }
 
}

然后在我们需要回复的地方加入消息转发代码即可,简单如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
                        String openid=map.get("FromUserName"); //用户openid
                String mpid=map.get("ToUserName");   //公众号原始ID
                        CustomerMessage customer=new CustomerMessage();
            customer.setToUserName(fromUserName);
            customer.setFromUserName(toUserName);
            customer.setCreateTime(new Date().getTime());
            customer.setMsgType("transfer_customer_service");
             
             
            // 文本消息
            if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
                 
                return MessageUtil.customerMessageToXml(customer);
            }

这样就把用户发送的消息转发到多客服助手,这样我们的客服人员就可以对应的答复,方便我们消息的处理!多客服的相关使用和下载可以查看 http://mp.weixin.qq.com/wiki/11/f0e34a15cec66fefb28cf1c0388f68ab.html 。

我们在微信公众号的后台可以发现微信给我们制定了两种模式,一种是开发者模式(也就是我们一直在做的开发),还有一种模式是编辑模式,然而很蛋疼的是有些功能一旦我们切换到开发者模式下就无法使用了,比较典型的就是关键字回复以及服务器无响应的时候返回的【服务器无法响应】等问题 ,这里我给出的解决方案是:①对关键字给出关键字回复的代码实现;②【服务器5s无响应】解决方案是接入多客服,以方便我们的消息处理!

(一)关键字自动回复

在前面的文章中我们已经完成对消息回复的分类以及实现,这里说的关键字回复只是对消息回复功能的应用化,这里我在【文本类型消息】下实现,其大致思路是:首先获取到消息文本的内容content,然后更具获取content去匹配自己需要设定的关键字,然后根据匹配到的不同结果给出不同的消息回复,简单代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
String openid=map.get("FromUserName"); //用户openid
String mpid=map.get("ToUserName");   //公众号原始ID
 
//普通文本消息
TextMessage txtmsg=new TextMessage();
txtmsg.setToUserName(openid);
txtmsg.setFromUserName(mpid);
txtmsg.setCreateTime(new Date().getTime());
txtmsg.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
 
if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { // 文本消息
    String content=map.get("Content");
    if("1".equals(content)){
        txtmsg.setContent("你好,你发送的内容是1!");
    }else if("2".equals(content)){
        txtmsg.setContent("你好,你发送的内容是2!");
    }else if("3".equals(content)){
        txtmsg.setContent("你好,你发送的内容是3!");
    }else if("4".equals(content)){
        txtmsg.setContent("<a href=\"http://www.cuiyongzhi.com\">崔用志博客</a>");
    }else{
        txtmsg.setContent("你好,欢迎来到崔用志博客!");
    }
    return MessageUtil.textMessageToXml(txtmsg);
}

基本关键字回复的逻辑就是这样,你可以根据自己的需要设置自己的关键字以及实现流程,最终运行结果如下:

(二)该公众号暂时无法提供服务解决方案——多客服接口使用

在我们使用或者开发过程中可能会遇到【该公众号暂时无法提供服务】的回复,出现这个回复的原因是我们的应用服务在5s内没有给到腾讯服务器任何响应,腾讯服务器给用户的自动响应提示,如何解决以及避免这种情况的出现,我们可以有如下解决方案:

①直接给微信服务器回复【空】,注意这里是直接回复空而不是回复内容为空!

所以我们的代码实现为:

1
2
3
4
5
6
7
8
9
10
11
         //这个是错误代码回复
    if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) { // 链接消息
        txtmsg.setContent("");
        return MessageUtil.textMessageToXml(txtmsg);
    }
     
    //这个是正确代码回复
    if (map.get("MsgType").equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) { // 位置消息
        System.out.println("==============这是位置消息!");
        return "";
    }

②将消息转接到多客服助手,让客服去做消息的处理!

新建客服消息实体类CustomerMessage.java,简单代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.cuiyongzhi.wechat.message.resp;
 
/**
 * ClassName: CustomerMessage
 * @Description: 客服消息接口
 * @author dapengniao
 * @date 2016年3月14日 下午6:28:08
 */
public class CustomerMessage {
    // 接收方帐号(收到的OpenID)
    private String ToUserName;
    // 开发者微信号
    private String FromUserName;
    // 消息创建时间 (整型)
    private long CreateTime;
    // 消息类型(text/music/news)
    private String MsgType;
 
    public String getToUserName() {
        return ToUserName;
    }
 
    public void setToUserName(String toUserName) {
        ToUserName = toUserName;
    }
 
    public String getFromUserName() {
        return FromUserName;
    }
 
    public void setFromUserName(String fromUserName) {
        FromUserName = fromUserName;
    }
 
    public long getCreateTime() {
        return CreateTime;
    }
 
    public void setCreateTime(long createTime) {
        CreateTime = createTime;
    }
 
    public String getMsgType() {
        return MsgType;
    }
 
    public void setMsgType(String msgType) {
        MsgType = msgType;
    }
 
}

然后在我们需要回复的地方加入消息转发代码即可,简单如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
                        String openid=map.get("FromUserName"); //用户openid
                String mpid=map.get("ToUserName");   //公众号原始ID
                        CustomerMessage customer=new CustomerMessage();
            customer.setToUserName(fromUserName);
            customer.setFromUserName(toUserName);
            customer.setCreateTime(new Date().getTime());
            customer.setMsgType("transfer_customer_service");
             
             
            // 文本消息
            if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
                 
                return MessageUtil.customerMessageToXml(customer);
            }

这样就把用户发送的消息转发到多客服助手,这样我们的客服人员就可以对应的答复,方便我们消息的处理!多客服的相关使用和下载可以查看 http://mp.weixin.qq.com/wiki/11/f0e34a15cec66fefb28cf1c0388f68ab.html 。

Java微信公众平台开发(九)--关键字回复以及客服接口实现(该公众号暂时无法提供服务解决方案)的更多相关文章

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明

    一.基础说明 这里说的“通用接口(CommonAPIs)”是使用微信公众账号一系列高级功能的必备验证功能(应用于开发模式). 我们通过微信后台唯一的凭证,向通用接口发出请求,得到访问令牌(Access ...

  2. Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明

    这里所说的高级接口是指面向通过认证的服务号开通的高级功能. 高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账 ...

  3. Force.com微信开发系列(六)客服接口

    当用户主动发消息给微信公众账号的时候(包括发送信息.点击自定义菜单click事件.订阅事件.扫描二维码事件.支付成功事件.用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前为48小时 ...

  4. 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)

    上一节课,我给大家分享了微信API接入以及事件推送的回复,这是微信开发的第二节课,重点给说一说单图文回复,多图文回复,access_token,微信SDK. 公众号消息回复很多种形式,常见的形式有,文 ...

  5. Java微信公众平台开发(九)--微信自定义菜单的创建实现

    自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发 ...

  6. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  7. Senparc.Weixin.MP SDK 微信公众平台开发教程(十九):MessageHandler 的未知类型消息处理

    这是<微信开发深度解析:微信公众号.小程序高效开发秘籍>出版之后写的第一篇微信相关的文章.从这一篇开始,将介绍第一版出版之后添加或修改的功能,或者对书上内容需要做的补充. MP v14.8 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(六):了解MessageHandler

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK>我们讲述了如何使用Senparc.Weixin.MP SDK ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(五):使用Senparc.Weixin.MP SDK

    Senparc.Weixin.MP SDK已经涵盖了微信6.x的所有公共API. 整个项目的源代码以及已经编译好的程序集可以在这个项目中获取到:https://github.com/JeffreySu ...

随机推荐

  1. 详解 WebAPI 签名机制

    首先,写这篇文章的原因是因为最近某一个项目中的接口被人为调用了,导致了数据库数据被串改.虽然是内部人无意点的,但还是引起了我的担忧,所有整理了下关于WebAPI的相关签名机制. 一.我们在开发接口时, ...

  2. Template pattern模板方法模式

    1>模板模式定义了算法的步骤,把这些步骤的实现延续到子类 2>模板模式为我们提供了一个代码复用的技巧 3>模板抽象类中可以定义具体方法.抽象方法和钩子方法 4>为了防止子类改变 ...

  3. 《修炼Java开发技术 在架构中体验设计模式和算法之美》 - 书摘精要

    (P7) 建议直接加入到软件公司中去,这样会学到很多实际的东西: 程序员最主要的发展方向是资深技术专家,无论是 Java..Net 还是数据库领域,都要首先成为专家,然后才可能继续发展为架构师: 增强 ...

  4. 理解 EventLoop

    链接 链接 node 浏览器 执行顺序有差异 macrotask microtask 一个线程会有 堆 栈 消息队列;  栈函数执行是用的, 堆用了存放定义的对象, 消息队列来处理异步的操作 a() ...

  5. SQL-left(right,inner) join

    left join(左联接) :返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) :返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) ...

  6. Apache Tomcat Server Options 选项说明

    Apache Tomcat Server Options 选项说明 p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px 'Helvetica Neu ...

  7. php之opcodes

    opcode是一种php脚本编译之后的语言. 例如: <?php echo "Hello World"; $a = 1 + 1; echo $a; ?> php执行这段 ...

  8. bzoj 1264 基因匹配

    Written with StackEdit. Description 卡卡昨天晚上做梦梦见他和可可来到了另外一个星球,这个星球上生物的\(DNA\)序列由无数种碱基排列而成(地球上只有\(4\)种) ...

  9. MAC OS X常用命令总结

    附录:UNIX常用命令 ============================================================================ 1.  cd     ...

  10. Swift-自定制带有特殊按钮TabBar

    ---恢复内容开始--- 封装了一个带有中间凸起的自定制Tabbar,包含4个普通按钮和中间的一个凸起按钮- 首先封装了一个UIButton,重新设置了UIButton的图片位置和label位置 使用 ...