微信公众平台技术文档:客服消息
一、接口说明
当用户和公众号产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。
目前允许的动作列表如下(公众平台会根据运营情况更新该列表,不同动作触发后,允许的客服接口下发消息条数不同,下发条数达到上限后,会遇到错误返回码,具体请见返回码说明页):
1、用户发送信息
2、点击自定义菜单(仅有点击推事件、扫码推事件、扫码推事件且弹出“消息接收中”提示框这3种菜单类型是会触发客服接口的)
3、关注公众号
4、扫描二维码
5、支付成功
6、用户维权
二、客服接口-发消息
1 接口调用请求说明
http请求方式: POST
(2)发送图片消息 (3)发送语音消息 (4)发送视频消息 (5)发送音乐消息 (6)发送图文消息(点击跳转到外链) 图文消息条数限制在8条以内,注意,如果图文数超过8,则将会无响应。 (7)发送图文消息(点击跳转到图文消息页面) 图文消息条数限制在8条以内,注意,如果图文数超过8,则将会无响应。 (8)发送卡券 特别注意客服消息接口投放卡券仅支持非自定义Code码和导入code模式的卡券的卡券,详情请见:是否自定义code码。 请注意,如果需要以某个客服帐号来发消息(在微信6.0.2及以上版本中显示自定义头像),则需在JSON数据包的后半部分加入customservice参数,例如发送文本消息则改为: 3 请求参数说明
4 java接口开发 (1)Message客服接口消息封装对象 (2)TextContent文本消息内容封装对象 (3)MediaContent媒体ID封装对象 (4)MusicContent音乐消息封装对象 (5)Articles图文集合封装对象 (6)Article图文消息封装对象 (7)客服消息请求接口 注:接口发送http请求基于Spring RestTemplate。 参考文章地址: 1.Spring RestTemplate详解 (8)WeixinResponse客服消息接口返回对象 5 接口实例开发 6 客服接口图文推送上传图片 在发送图文消息时,我们需要添加图片的地址,介绍一个好方法。 (1)进入微信公众平台接口调试工具 https://mp.weixin.qq.com/debug (2)选择类型和列表 接口类型:基础支持 接口列表:上传logo接口/media/uploadimg 添加access_token,选择类型是image,最后选择文件 注:添加视频、音乐是一样的 (3)最后就会生成图片的url (4)在浏览器访问url即可看见生成的图片 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。https://api.weixin.qq.com/cgi-bin/message/custom/send"htmlcode">
{
"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"
}
}
{
"touser":"OPENID",
"msgtype":"video",
"video":
{
"media_id":"MEDIA_ID",
"thumb_media_id":"MEDIA_ID",
"title":"TITLE",
"description":"DESCRIPTION"
}
}
{
"touser":"OPENID",
"msgtype":"music",
"music":
{
"title":"MUSIC_TITLE",
"description":"MUSIC_DESCRIPTION",
"musicurl":"MUSIC_URL",
"hqmusicurl":"HQ_MUSIC_URL",
"thumb_media_id":"THUMB_MEDIA_ID"
}
}
{
"touser":"OPENID",
"msgtype":"news",
"news":{
"articles": [
{
"title":"Happy Day",
"description":"Is Really A Happy Day",
"url":"URL",
"picurl":"PIC_URL"
},
{
"title":"Happy Day",
"description":"Is Really A Happy Day",
"url":"URL",
"picurl":"PIC_URL"
}
]
}
}
{
"touser":"OPENID",
"msgtype":"mpnews",
"mpnews":
{
"media_id":"MEDIA_ID"
}
}
{
"touser":"OPENID",
"msgtype":"wxcard",
"wxcard":{
"card_id":"123dsdajkasd231jhksad"
},
}
{
"touser":"OPENID",
"msgtype":"text",
"text":
{
"content":"Hello World"
},
"customservice":
{
"kf_account": "test1@kftest"
}
}
参数
是否必须
说明
access_token
是
调用接口凭证
touser
是
普通用户openid
msgtype
是
消息类型,文本为text,图片为image,语音为voice,视频消息为video,音乐消息为music,图文消息(点击跳转到外链)为news,图文消息(点击跳转到图文消息页面)为mpnews,卡券为wxcard
content
是
文本消息内容
media_id
是
发送的图片/语音/视频/图文消息(点击跳转到图文消息页)的媒体ID
thumb_media_id
是
缩略图的媒体ID
title
否
图文消息/视频消息/音乐消息的标题
description
否
图文消息/视频消息/音乐消息的描述
musicurl
是
音乐链接
hqmusicurl
是
高品质音乐链接,wifi环境优先使用该链接播放音乐
url
否
图文消息被点击后跳转的链接
picurl
否
图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80
public class Message {
private String touser;
private String msgtype;
private TextContent text;
private MediaContent image;
private MediaContent voice;
private MediaContent video;
private MusicContent music;
private Articles news;
public String getTouser() {
return touser;
}
public void setTouser(String touser) {
this.touser = touser;
}
public String getMsgtype() {
return msgtype;
}
public void setMsgtype(String msgtype) {
this.msgtype = msgtype;
}
public TextContent getText() {
return text;
}
public void setText(TextContent text) {
this.text = text;
}
public MediaContent getImage() {
return image;
}
public void setImage(MediaContent image) {
this.image = image;
}
public MediaContent getVoice() {
return voice;
}
public void setVoice(MediaContent voice) {
this.voice = voice;
}
public MediaContent getVideo() {
return video;
}
public void setVideo(MediaContent video) {
this.video = video;
}
public MusicContent getMusic() {
return music;
}
public void setMusic(MusicContent music) {
this.music = music;
}
public Articles getNews() {
return news;
}
public void setNews(Articles news) {
this.news = news;
}
@Override
public String toString() {
return "Message [touser=" + touser + ", msgtype=" + msgtype + ", text="
+ text + ", image=" + image + ", voice=" + voice + ", video="
+ video + ", music=" + music + ", news=" + news + "]";
}
}
public class TextContent {
private String content;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
public class MediaContent {
private String media_id;
public String getMedia_id() {
return media_id;
}
public void setMedia_id(String media_id) {
this.media_id = media_id;
}
}
public class MusicContent {
private String title;
private String description;
private String musicurl;
private String hqmusicurl;
private String thumb_media_id;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getMusicurl() {
return musicurl;
}
public void setMusicurl(String musicurl) {
this.musicurl = musicurl;
}
public String getHqmusicurl() {
return hqmusicurl;
}
public void setHqmusicurl(String hqmusicurl) {
this.hqmusicurl = hqmusicurl;
}
public String getThumb_media_id() {
return thumb_media_id;
}
public void setThumb_media_id(String thumb_media_id) {
this.thumb_media_id = thumb_media_id;
}
}
public class Articles {
private Article[] articles;
public Article[] getArticles() {
return articles;
}
public void setArticles(Article[] articles) {
this.articles = articles;
}
}
public class Article {
private String title;
private String description;
private String url;
private String picurl;
private String thumb_media_id;
private String author;
private String content_source_url;
private String content;
private String digest;
private Integer show_cover_pic;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getPicurl() {
return picurl;
}
public void setPicurl(String picurl) {
this.picurl = picurl;
}
public String getThumb_media_id() {
return thumb_media_id;
}
public void setThumb_media_id(String thumb_media_id) {
this.thumb_media_id = thumb_media_id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getContent_source_url() {
return content_source_url;
}
public void setContent_source_url(String content_source_url) {
this.content_source_url = content_source_url;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getDigest() {
return digest;
}
public void setDigest(String digest) {
this.digest = digest;
}
public Integer getShow_cover_pic() {
return show_cover_pic;
}
public void setShow_cover_pic(Integer show_cover_pic) {
this.show_cover_pic = show_cover_pic;
}
}
public class CrmSendMessageService{
private RestTemplate restTemplate ;
private String serviceHost = "https://api.weixin.qq.com";
public CrmSendMessageServiceImpl() {
restTemplate = RestTemplateFactory.makeRestTemplate();
}
@Override
public WeixinResponse sendMessage(String accessToken, Message message) {
WeixinResponse weixinResponse = null;
String url = new StringBuffer(serviceHost).append("/cgi-bin/message/custom/send")
.append(accessToken).toString();
weixinResponse = restTemplate.postForObject(url, message, WeixinResponse.class);
return weixinResponse;
}
}
public class WeixinResponse {
private String msgid;
private String code;
private int errcode;
private String errmsg;
public String getMsgid() {
return msgid;
}
public void setMsgid(String msgid) {
this.msgid = msgid;
}
public int getErrcode() {
return errcode;
}
public void setErrcode(int errcode) {
this.errcode = errcode;
}
public String getErrmsg() {
return errmsg;
}
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
/**
* 发送客服消息
* @param openId 要发给的用户
* @param accessToken 微信公众号token
* @param weixinAppId 微信公众号APPID
*/
private void sendCustomMessage(String openId,String accessToken,String weixinAppId){
try {
RestTemplate rest = new RestTemplate();
String postUrl = "https://api.weixin.qq.com/cgi-bin/message/custom/send" + accessToken;
//推送图文消息
Message message = new Message();
message.setTouser(openId);//普通用户openid
message.setMsgtype("news");//图文消息(点击跳转到外链)为news
Articles news = new Articles();
Article article = new Article();
article.setDescription("客服消息图文描述");//图文消息/视频消息/音乐消息的描述
article.setPicurl("http://mmbiz.qpic.cn/mmbiz_jpg/CDW6Ticice130g6RcXCkNNDWic4dEaAHQDia2OG5atHBqSvsPuCfuqoyeeLWENia4ciaKt3KHWQ9t2LRPDpUo5AkOyyA/0");//图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80
article.setTitle("客服消息图文标题");//图文消息/视频消息/音乐消息的标题
//图文推送链接
String url="https://www.baidu.com";
article.setUrl(url);//图文消息被点击后跳转的链接
Article[] articles = {article};
news.setArticles(articles);
message.setNews(news);
int i=1;
while(i<=3){//循环发送3次
WeixinResponse response = rest.postForObject(postUrl, message, WeixinResponse.class, new HashMap<String,String>());
LOG.info("发送客服消息返回信息:"+response.toString());
if(response.getErrcode()==0){//发送成功-退出循环发送
i=4;
break;
}else{
i++;//发送失败-继续循环发送
}
}
} catch (Exception e) {
LOG.error("发送客服消息失败,openId="+openId,e);
}
}
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]