客服消息
当用户和公众号产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST一个JSON数据包来发送消息给普通用户。此接口主要用于客服等有人工消息处理环节的功能,方便开发者为用户提供更加优质的服务。
目前允许的动作列表如下(公众平台会根据运营情况更新该列表,不同动作触发后,允许的客服接口下发消息条数不同,下发条数达到上限后,会遇到错误返回码,具体请见返回码说明页):
- 用户发送信息
- 点击自定义菜单(仅有点击推事件、扫码推事件、扫码推事件且弹出“消息接收中”提示框这3种菜单类型是会触发客服接口的)
- 关注公众号
- 扫描二维码
- 支付成功
- 用户维权
为了帮助公众号使用不同的客服身份服务不同的用户群体,客服接口进行了升级,开发者可以管理客服账号,并设置客服账号的头像和昵称。该能力针对所有拥有客服接口权限的公众号开放。另外,请开发者注意,本接口中所有使用到media_id的地方,现在都可以使用素材管理中的永久素材media_id了。
开发步骤
说明
本文笔者主要介绍客服图文消息发送,其它消息类型笔者可以参阅微信公众平台开发文档
微信客服图文数据模型
- SenderContent.java
package com.bigbigbu.wx.tools.bean;
import java.util.List;
/**
* <p>Title: SenderContent</p>
* <p>Description: 消息内容</p>
* <p>Company: 卜凡起的博客</p>
* @author FANQIBU修改
* @date 2018年1月4日
*/
public class SenderContent {
/**
* @Fields mpnews : TODO 通过media_id发送图文消息
*/
private Media mpnews;
/**
* @Fields news : TODO 修改 增加 通过Article发送图文消息
*/
private News news;
public Media getMpnews() {
return mpnews;
}
public void setMpnews(Media mpnews) {
this.mpnews = mpnews;
}
public News getNews() {
return news;
}
public void setNews(News news) {
this.news = news;
}
/**
* 媒体包括图文语音视频图片
* @author antgan
*
*/
public static class Media{
private String media_id;
public Media() {
// TODO Auto-generated constructor stub
}
public Media(String media_id) {
this.media_id = media_id;
}
public String getMedia_id() {
return media_id;
}
public void setMedia_id(String media_id) {
this.media_id = media_id;
}
}
public static class News{
private List<Article> articles;
public News() {
// TODO Auto-generated constructor stub
}
public News(List<Article> articles) {
this.articles = articles;
}
public List<Article> getArticles() {
return articles;
}
public void setArticles(List<Article> articles) {
this.articles = articles;
}
}
public static class Article{
private String description;
private String title;
private String url;
private String picurl;
public Article() {
// TODO Auto-generated constructor stub
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
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;
}
}
}
- WxOpenidKfSender.java
package com.bigbigbu.wx.tools.bean;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
/**
* <p>Title: WxOpenidKfSender</p>
* <p>Description: 客服消息模型</p>
* <p>Company: 卜凡起的博客</p>
* @author FANQIBU
* @date 2018年1月4日
*/
public class WxOpenidKfSender extends SenderContent {
private String touser;
private String msgtype;
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 String toJson() throws JsonGenerationException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(this);
}
}
接口地址
public static final String URL_GET_OPENID_KF_SEND =”https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN”;
接口调用
WxOpenidKfSender sender=new WxOpenidKfSender();
sender.setMsgtype("news");
Article article=new Article();
article.setDescription("哈哈!哈哈!这是二期犯二青年的头像!");
article.setTitle("二期犯二青年的头像");
article.setUrl("http://www.baidu.com");
article.setPicurl("http://avatar.csdn.net/1/6/6/1_bufanqi_info.jpg");
List<Article> articles=new ArrayList<>();
articles.add(article);
News news=new News(articles);
sender.setNews(news);
sender.setTouser("ozkl61qYK3ZLaqOTCKBb5depMoZ8");
wxService.post(URL_GET_OPENID_KF_SEND, kfsender.toJson())