转自: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. 28-THREE.JS 扇形圆形

    <!DOCTYPE html> <html> <head> <title></title> <script src="htt ...

  2. Elasticsearch: 权威指南(官方教程)

    <Elasticsearch 权威指南>中文版 序言 前言 基础入门 深入搜索 处理人类语言 聚合 地理位置 数据建模 管理.监控和部署

  3. Dojo仪表盘

    Dojo提供了非常好的仪表盘显示,效果如下: <!DOCTYPE html> <html> <head> <title>Dojo仪表盘</titl ...

  4. [置顶] Android ShareSDKQQ 第三方登录so easy?

    昨天群里有个群友看到我之前做的那个qq第三方登录怎么做的,于是乎思考了一下,还是决定写一篇博客记录下,其实都不难的,其实之前我又写到FaceBook的第三方登录不知道看下这Android集成FaceB ...

  5. Precision/Recall、ROC/AUC、AP/MAP等概念区分

    1. Precision和Recall Precision,准确率/查准率.Recall,召回率/查全率.这两个指标分别以两个角度衡量分类系统的准确率. 例如,有一个池塘,里面共有1000条鱼,含10 ...

  6. 处理SQL Server 异常常用步骤

    处理SQL Server 异常常用步骤 SQL Server常见的问题主要是SQL问题造成,常见的主要是CPU过高和阻塞. 一.CPU过高的问题 1.查询系统动态视图查询执行时间长的sql语句 WIT ...

  7. 软件安全攻防--缓冲区溢出和shellcode

    缓冲区溢出漏洞实验报告 实验楼中有seed缓冲区溢出漏洞实验,实验内容与课本中要求的实验基本一致,便利用实验楼提供好的现成实验环境来完成这次的实践内容. 一.实验简介 缓冲区溢出是指程序试图向缓冲区写 ...

  8. ACM学习历程—TopCoder SRM691 Div2

    这是我的第一次打TC,感觉打的一般般吧.不过TC的题目确实挺有意思的. 由于是用客户端打的,所以就不发题目地址了. 300分的题: 这题大意是有一段序列只包含+和数字0~9. 一段序列的操作是,从头扫 ...

  9. 6 字典和集合——《Swift3.0从入门到出家》

    字典和集合 字典 字典是集合类型存放多个键值对,其中键是唯一的,不能重复 字典中存放的键值对是无序的,写入的顺序和读取的顺序可能不同 字典中存放的数据是任意类型 字典可以分为可变字典和不可变字典 创建 ...

  10. erlang配置三方库

    暴力的: 直接下载解压以后放到erlang的lib目录,比如/usr/local/Cellar/erlang/17.3/lib/erlang/lib 和谐的: 在用户名下建立.erlang文件 在里面 ...