Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 424|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-6-1 09:18:32 | 显示全部楼层 |阅读模式

    转自: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);
    }

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

    1.jpg

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

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

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

    2.png

    所以我们的代码实现为:

    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);
    }

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

    1.jpg

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

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

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

    2.png

    所以我们的代码实现为:

    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 。

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-10 04:54 , Processed in 0.098452 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表