微信开发之客服消息的使用

之前的消息发送与接收都是用户给微信发一条,之后微信回复给用户,也就是API上面所说的被动回复消息,那么微信是否支持主动给关注用户发消息吗,答案是肯定的,但是却有一些限制。看下微信开发文档上怎么说就明白了:

当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单、订阅事件、扫描二维码事件、支付成功事件、用户维权),微信将会把消息数据推送给开发者,开发者在一段时间内(目前修改为48小时)可以调用客服消息接口,通过POST一个JSON数据包来发送消息给普通用户,在48小时内不限制发送次数。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务


这次就针对客服消息分享下我的心得和体会


1  客服接口-发消息接口使用说明

接口调用请求说明

http请求方式: POST
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

各消息类型所需的JSON数据包如下:

发送文本消息

{"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}
}

发送图片消息

{"touser":"OPENID","msgtype":"image","image":{"media_id":"MEDIA_ID"}
}

发送语音消息

{"touser":"OPENID","msgtype":"voice","voice":{"media_id":"MEDIA_ID"}
}

......,基本上来说常用的消息类型,客服接口都是支持的


2  封装客服消息接口

       public static String makeTextCustomMessage(String openId,String content){content.replace("\"", "\\\"");String jsonMsg="{\"touser\":\"%s\",\"msgtype\":\"text\",\"text\":{\"content\":\"%s\"}}";return String.format(jsonMsg, openId,content);}/*** 组装图片客服消息* * @param openId 消息发送对象* @param mediaId 媒体文件id* @return*/public static String makeImageCustomMessage(String openId, String mediaId) {String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"%s\"}}";return String.format(jsonMsg, openId, mediaId);}/*** 组装语音客服消息* * @param openId 消息发送对象* @param mediaId 媒体文件id* @return*/public static String makeVoiceCustomMessage(String openId, String mediaId) {String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"%s\"}}";return String.format(jsonMsg, openId, mediaId);}/*** 组装视频客服消息* * @param openId 消息发送对象* @param mediaId 媒体文件id* @param thumbMediaId 视频消息缩略图的媒体id* @return*/public static String makeVideoCustomMessage(String openId, String mediaId, String thumbMediaId) {String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"%s\",\"thumb_media_id\":\"%s\"}}";return String.format(jsonMsg, openId, mediaId, thumbMediaId);}/*** 组装音乐客服消息* * @param openId 消息发送对象* @param music 音乐对象* @return*/public static String makeMusicCustomMessage(String openId, Music music) {String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"music\",\"music\":%s}";jsonMsg = String.format(jsonMsg, openId, JSONObject.fromObject(music).toString());// 参数名称替换 @20140125jsonMsg = jsonMsg.replace("musicUrl", "musicurl");jsonMsg = jsonMsg.replace("HQMusicUrl", "hqmusicurl");jsonMsg = jsonMsg.replace("thumbMediaId", "thumb_media_id");return jsonMsg;}/*** 组装图文客服消息* * @param openId 消息发送对象* @param articleList 图文消息列表* @return*/public static String makeNewsCustomMessage(String openId, List<Article> articleList) {String jsonMsg = "{\"touser\":\"%s\",\"msgtype\":\"news\",\"news\":{\"articles\":%s}}";jsonMsg = String.format(jsonMsg, openId, JSONArray.fromObject(articleList).toString().replaceAll("\"", "\\\""));// 将jsonMsg中的picUrl替换为picurljsonMsg = jsonMsg.replace("picUrl", "picurl");return jsonMsg;}public static boolean sendCustomMessage(String token,String jsonMsg){boolean flag=false;//String accessToken=getAccessToken("xxxx","xxxx").getToken();String requestUrl="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN";requestUrl=requestUrl.replace("ACCESS_TOKEN", token);JSONObject jsonResult=CommonUtil.httpsRequest(requestUrl, "POST", jsonMsg);if(jsonResult!=null){int errorCode=jsonResult.getInt("errcode");String errorMessage=jsonResult.getString("errmsg");if(errorCode==0){flag=true;}else{System.out.println("客服消息发送失败:"+errorCode+","+errorMessage);flag=false;}}return flag;}

3 调用客服消息发送接口给指定用户发送客服消息

List<Article> all=new ArrayList<Article>();Article a2=new Article();a2.setDescription("最崇拜的明星Justin Timberlake");a2.setPicUrl("http://img3.douban.com/view/photo/photo/public/p1408738004.jpg");a2.setTitle("贾斯汀·汀布莱克(Justin Timberlake),1981年1月31日出生于美国田纳西州孟菲斯市,美国男歌手、演员、音乐制作人、主持人,前男子演唱组合超级男孩成员。");a2.setUrl("http://baike.haosou.com/doc/3382630-3560934.html?from=1358&sid=3560934&redirect=search");all.add(a2);String articleMsg=makeNewsCustomMessage("xxx", all);boolean res=sendCustomMessage(token,articleMsg);if(res){System.out.println("客服消息发送成功");}else{System.out.println("客服消息发送失败");}

到这里程序就写好了,来看下运行效果:



4  多客服的使用

多客服功能主要用于处理需人工操作、耗时较长的场景,我们都知道如果微信服务器在5秒钟没给用户返回消息则会出现“公众号暂时无法提供服务”。这样用户体验会很差,有这种情况不妨考虑下多客服。

下面是API:http://mp.weixin.qq.com/wiki/5/ae230189c9bd07a6b221f48619aeef35.html

个人建议是可以把多客服看成是一种比较特别的消息类型,这样的话只需修改一下MessageUtil就OK了,加入如下代码:

 /** * 客服消息对象转换成xml *  * @return xml */  public static String customMessageToXml(CustomServiceMessage customServiceMessage) {  xstream.alias("xml", customServiceMessage.getClass());  return xstream.toXML(customServiceMessage);  }  

并且加一种消息类型:

    /** * 多客服消息*/  public static final String TRANSFER_CUSTOMER_SERVICE = "transfer_customer_service";  


5  修改微信消息处理核心工具类

 // 文本消息  if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) { String content=requestMap.get("Content");if(content.startsWith("人工客服")){CustomServiceMessage cus=new CustomServiceMessage();cus.setToUserName(fromUserName);  cus.setFromUserName(toUserName);  cus.setCreateTime(new Date().getTime());  cus.setMsgType(MessageUtil.TRANSFER_CUSTOMER_SERVICE);  TransInfo t=new TransInfo();t.setKfAccount("你的客服账号");cus.setTransInfo(t);	respMessage=MessageUtil.customMessageToXml(cus);}else{respContent = "您发送的是文本消息!"; }}  


顺带贴上CustomServiceMessage和TransInfo的代码:

package com.debug.weixin.message.res;import com.debug.weixin.pojo.TransInfo;public class CustomServiceMessage extends BaseMessage {private TransInfo TransInfo;public TransInfo getTransInfo() {return TransInfo;}public void setTransInfo(TransInfo transInfo) {TransInfo = transInfo;}}	

package com.debug.weixin.pojo;public class TransInfo {private String KfAccount;public String getKfAccount() {return KfAccount;}public void setKfAccount(String kfAccount) {KfAccount = kfAccount;}
}

上面的代码如需测试需使用微信关注“多客服助手”或下载安装“windows多客服”,具体参照如下链接:

http://dkf.qq.com/


这里在贴2个我的运行截图:


下面是windows的客户端,就类似QQ的界面



差不多就这样子了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/46465.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新30万字312道Java经典面试题52道场景题总结(附答案PDF)

最近有很多粉丝问我&#xff0c;有什么方法能够快速提升自己&#xff0c;通过阿里、腾讯、字节跳动、京东等互联网大厂的面试&#xff0c;我觉得短时间提升自己最快的手段就是背面试题&#xff1b;花了3个月的时间将市面上所有的面试题整理总结成了一份30万字的300道Java高频面…

CAD必练图形

这次我们用CAD梦想画图软件绘制一个CAD新手必练图形&#xff0c;它用到的有CAD矩形、直线、圆弧、等分等命令结合起来完成绘制的&#xff0c;可以跟着一起操作一下。 目标图形 操作步骤 1.使用CAD矩形命令&#xff08;快捷键&#xff1a;REC&#xff09;绘制一个长80宽30的矩形…

将CAD图纸中的线型和文字样式合并的方法技巧(一)

在使用浩辰CAD软件绘制CAD图纸的过程中&#xff0c;很多CAD制图初学入门者不太了解如何把CAD图纸中的线型和文字样式合并&#xff0c;虽然图层中提供了图层合并功能&#xff0c;但是线型和文字样式却并没有&#xff0c;其实如果想实现这个功能&#xff0c;可以通过CAD的标准检查…

图片转cad用什么软件?转换有技巧

在工程和建筑行业中&#xff0c;CAD已经成为了必不可少的工具&#xff0c;它可以提高设计效率并减少错误。但是&#xff0c;有时候我们需要将手绘图或者图片转换为CAD文件&#xff0c;因为这些图像可能是原始设计的基础&#xff0c;或者是为了方便修改和编辑而需要转换的。在这…

cad怎样编辑标注文字?分享一个方法

我们经常需要在CAD上进行编辑标注文字&#xff0c;CAD编辑软件可以帮助咱们准确地编辑CAD文件&#xff0c;让我们标注CAD文件中的图形元素。包括多种类型的图形元素&#xff0c;如线条、圆弧、文字等&#xff0c;并且可以自定义标注的文字内容、字体、大小等。此外&#xff0c;…

用手机怎么修改CAD图纸中的文字?

手机中收到其他人发送过来的一张CAD图纸&#xff0c;想要对图纸中的部分文字进行修改&#xff0c;手机CAD看图软件可以调整图纸中的文字吗&#xff1f;具体该如何进行操作呢&#xff1f;接下来的CAD教程就让小编来给大家分享一下手机CAD看图软件——浩辰CAD看图王中修改图纸上文…

如何使用CAD看图软件来修改CAD图纸中的文字?

手机中收到其他人发送过来的一张CAD图纸&#xff0c;想要对图纸中的部分文字进行修改&#xff0c;手机CAD看图软件可以调整图纸中的文字吗&#xff1f;具体该如何进行操作呢&#xff1f;接下来的CAD教程就让小编来给大家分享一下手机CAD看图软件——浩辰CAD看图王中修改图纸上文…

使用Teigha(OpenDesign)操作CAD的dwg文件

说起来&#xff0c;其实我自己也感觉这个要求挺奇怪的&#xff0c;Java操作CAD&#xff0c;好吧&#xff0c;目前比较完善的类库有一个是jdwglib&#xff0c;但是我没找到&#xff0c;而且公司刚好有OpenDesign的账号&#xff0c;因此&#xff0c;需要使用Teigha来进行操作&…

免费的绘图和图表工具Tldraw

什么是 Tldraw &#xff1f; Tldraw 是一款免费的绘图和图表工具&#xff0c;具有手绘风格和智能箭头、捕捉和便签等便捷功能。并可以导出 svg 等图片格式&#xff0c;可以作为组件嵌入到其他应用中。比如号称下一代笔记的 AFFiNE 就用了 Tldraw 来完成白板协同功能。 官方有演…

产品经理面试指南,常见面试题及回答思路

产品经理面试指南&#xff0c;常见面试题及回答思路 一、项目 自我介绍&#xff0c;这个不用说是所有面试都要的 2-3分钟之内介绍完&#xff0c;不要过于冗余或者简短&#xff0c;不要把重点放在个人生活&#xff0c;要突出和工作有关的项目、做事能力、性格等等&#xff0c;当…

产品经理面试,说一下你是怎么做产品规划的?

阅读本文大概需要1分12秒 “你做为产品经理或产品线负责人&#xff0c; 是如何规划未来 3-6 个月的产品发展计划&#xff1f;” 有的说是产品总监规划&#xff0c;自己不参与&#xff1b;&#xff08;那麻烦问问你总监要不要过来&#xff09; 有的说看业务部或公司战略规划&…

如何回答「为什么想做产品经理」【面试核心问题3】

当问出“为什么想做产品经理/为什么转行做产品经理”时&#xff0c;面试官的动机&#xff0c;是想知道&#xff1a;我为什么要录用你做产品经理 今日问题&#xff1a;为什么想做产品经理 面试时很多问题是相通的&#xff1a; 为什么想做产品经理为什么你适合做产品经理你做产品…

常见B端产品经理面试问题及答案(一)

↑↑↑我会一直给你分享B端产品经理面试问题及答案&#xff0c;请点击上方关注&#xff01; 你好&#xff0c;我是B端产品经理面试官Aadi&#xff0c;任职某大厂&#xff0c;11年面试官&#xff0c;10年产品经理&#xff0c; 我是站在面试官角度&#xff0c;只告诉你拿来即用的…

产品经理笔试面试准备

产品经理聊面试&#xff1a;http://m.ximalaya.com/album/18917184 1、解释以下名词&#xff1a; 蝴蝶效应&#xff1a;初始条件十分微小的变化&#xff0c;结果不断放大&#xff0c;对未来状态可能造成巨大的差异。破窗效应&#xff1a;如果一个窗子破了&#xff0c;但不及时…

Alpha-GO打败⼈类的秘籍- 强化学习(Reinforcement Learning)

为了深⼊理解强化学习&#xff08;Reinforcement Learning&#xff0c;简称RL&#xff09;这⼀核⼼概念&#xff0c;我们从⼀个⽇常游戏的例⼦出发。在“贪吃蛇”这个经典游戏中&#xff0c;玩家需要掌控⼀条蛇&#xff0c;引导它吞吃屏幕上出现的各种果实。每次成功捕获果实&a…

关于云计算,我们问了ChatGPT 10个问题

ChatGPT懂云计算吗&#xff1f; 前些天&#xff0c;我们问了ChatGPT&#xff08;非Plus收费版&#xff09;一些问题。 1. 什么是云计算&#xff1f; 2. 云计算行业的护城河是什么&#xff1f; 3. 什么是云原生&#xff1f; 4. 微软Azure与亚马逊AWS的主要区别是什么&#xff1f…

TeeChart Pro ActiveX 2023.3.20 Crack

TeeChart Pro ActiveX 图表组件库提供数百种 2D 和 3D 图形样式、56 种数学和统计函数供您选择&#xff0c;以及无限数量的轴和 14 个工具箱组件。图表控件可以有效地用于创建多任务仪表板。 插件的多功能性 ActiveX 图表控件作为服务器端库中的 Web 图表、脚本化 ASP 图表或桌…

TeeChart 商业版 [2022.4.8] TeeChart.NET 专业版

TeeChart 商业版 多功能原生 .NET 图表和仪表控制 TeeChart NET 标准商业版是一个基于 Nuget 的图表控件&#xff0c;旨在为您的 NET 应用程序提供即时图表和仪表功能。TeeChart 拥有一系列有用的图表类型、统计功能和开发工具&#xff0c;是一个出色的图表库&#xff0c;可满…

博科Brocade 300光纤交换机配置zone教程

博科Brocade 300光纤交换机配置zone教程 光纤交换机作为SAN网络的重要组成部分&#xff0c;在日常应用中非常普遍&#xff0c;本次将以常用的博科交换机介绍基本的配置方法。 博科300实物图&#xff1a; 环境描述&#xff1a; 如上图&#xff0c;四台服务器通过各自的双HBA卡…

博科Brocads SAN交换机常用命令

文章目录 1、查看IP地址命令&#xff1a;2、查看firmware版本&#xff1a;3、查看交换机状态&#xff1a;4、查看交换机license-id&#xff1a;5、配置ZONE&#xff1a;6、查看zone配置文件&#xff1a;7、查看ZONE&#xff1a;8、查看系统日志信息&#xff1a;9、关机&#xf…