1. 程式人生 > >微信公眾平臺 客服介面-發訊息

微信公眾平臺 客服介面-發訊息

微信公眾平臺技術文件:客服訊息

一、介面說明

當用戶和公眾號產生特定動作的互動時(具體動作列表請見下方說明),微信將會把訊息資料推送給開發者,開發者可以在一段時間內(目前修改為48小時)呼叫客服介面,通過POST一個JSON資料包來發送訊息給普通使用者。此介面主要用於客服等有人工訊息處理環節的功能,方便開發者為使用者提供更加優質的服務。

目前允許的動作列表如下(公眾平臺會根據運營情況更新該列表,不同動作觸發後,允許的客服介面下發訊息條數不同,下發條數達到上限後,會遇到錯誤返回碼,具體請見返回碼說明頁):

1、使用者傳送資訊
2、點選自定義選單(僅有點選推事件、掃碼推事件、掃碼推事件且彈出“訊息接收中”提示框這3種菜單型別是會觸發客服介面的)
3、關注公眾號
4、掃描二維碼
5、支付成功
6、使用者維權

二、客服介面-發訊息

1 介面呼叫請求說明

http請求方式: POST

https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN

2 傳送客服訊息

各訊息型別所需的JSON資料包如下:

(1)傳送文字訊息

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

(2)傳送圖片訊息

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

(3)傳送語音訊息

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

(4)傳送視訊訊息

{
    "touser":"OPENID",
    "msgtype":"video",
    "video":
    {
      "media_id":"MEDIA_ID"
, "thumb_media_id":"MEDIA_ID", "title":"TITLE", "description":"DESCRIPTION" }
}

(5)傳送音樂訊息

{
    "touser":"OPENID",
    "msgtype":"music",
    "music":
    {
      "title":"MUSIC_TITLE",
      "description":"MUSIC_DESCRIPTION",
      "musicurl":"MUSIC_URL",
      "hqmusicurl":"HQ_MUSIC_URL",
      "thumb_media_id":"THUMB_MEDIA_ID" 
    }
}

(6)傳送圖文訊息(點選跳轉到外鏈) 圖文訊息條數限制在8條以內,注意,如果圖文數超過8,則將會無響應。

{
    "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"
         }
         ]
    }
}

(7)傳送圖文訊息(點選跳轉到圖文訊息頁面) 圖文訊息條數限制在8條以內,注意,如果圖文數超過8,則將會無響應。

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

(8)傳送卡券

{
  "touser":"OPENID", 
  "msgtype":"wxcard",
  "wxcard":{              
           "card_id":"123dsdajkasd231jhksad"        
            },
}

特別注意客服訊息介面投放卡券僅支援非自定義Code碼和匯入code模式的卡券的卡券,詳情請見:是否自定義code碼

請注意,如果需要以某個客服帳號來發訊息(在微信6.0.2及以上版本中顯示自定義頭像),則需在JSON資料包的後半部分加入customservice引數,例如傳送文字訊息則改為:

{
    "touser":"OPENID",
    "msgtype":"text",
    "text":
    {
         "content":"Hello World"
    },
    "customservice":
    {
         "kf_account": "[email protected]"
    }
}

3 請求引數說明

引數 是否必須 說明
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

4 java介面開發

(1)Message客服介面訊息封裝物件

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 + "]";
    }
}

(2)TextContent文字訊息內容封裝物件

public class TextContent {

    private String content;

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

(3)MediaContent媒體ID封裝物件

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

(4)MusicContent音樂訊息封裝物件

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

(5)Articles圖文集合封裝物件

public class Articles {

    private Article[] articles;

    public Article[] getArticles() {
        return articles;
    }
    public void setArticles(Article[] articles) {
        this.articles = articles;
    }
}

(6)Article圖文訊息封裝物件

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

(7)客服訊息請求介面

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?access_token=")
                .append(accessToken).toString();
        weixinResponse =  restTemplate.postForObject(url, message, WeixinResponse.class);
        return weixinResponse;
    }

}

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

5 介面例項開發

/**
 * 傳送客服訊息
 * @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?access_token=" + 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);
        }
    }

6 客服介面圖文推送上傳圖片

在傳送圖文訊息時,我們需要新增圖片的地址,介紹一個好方法。
(1)進入微信公眾平臺介面除錯工具
https://mp.weixin.qq.com/debug
(2)選擇型別和列表
介面型別:基礎支援
介面列表:上傳logo介面/media/uploadimg
這裡寫圖片描述
新增access_token,選擇型別是image,最後選擇檔案
注:新增視訊、音樂是一樣的
(3)最後就會生成圖片的url
這裡寫圖片描述
(4)在瀏覽器訪問url即可看見生成的圖片

相關推薦

公眾平臺 介面-訊息

微信公眾平臺技術文件:客服訊息 一、介面說明 當用戶和公眾號產生特定動作的互動時(具體動作列表請見下方說明),微信將會把訊息資料推送給開發者,開發者可以在一段時間內(目前修改為48小時)呼叫客服介面,通過POST一個JSON資料包來發送訊息給普通使用者。

公眾介面給指定使用者openid傳送訊息

微信開發文件: 客服介面-發訊息 介面呼叫請求說明 http請求方式: POST https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 各訊息型別所需的

基於公眾平臺的第三方介面接入Java接訊息

玩過微信公眾號的都清楚,微信公眾號的專案欄是可以在裡面生成的,今天就來說一下使用Java接入微信平臺提供的第三方介面。  開啟微信公眾平臺,開啟開發者模式,裡面有一個介入指南,下面有三款:1.填寫伺服器配置。2.驗證伺服器地址的有效性。3依據介面文件實現業務邏輯。  1.填

公眾消息提醒

end cati https rac pcl ant int Nid tst 微信客服消息提醒: public static void Test(String openid) throws Exception{ String token = ge

公眾平臺申請測試介面URL和TOKEN的配置,怎麼在本地讓能通過80埠訪問

                最近開始微信公眾平臺的搗鼓,但相信和很多新手一樣,遇到的第一件事就是如何配置url,主要是微信的8

哪個公眾系統好用,都有什麼功能?

現在越來越多的企業都投入微信營銷的大軍中,而創立微信公眾號成為大家的首選,但是想要輕鬆玩轉公眾號也不是那麼容易的,除了我們常遇到的吸粉難、粉絲轉化率低等問題,還跟微信服務號的客服功能比較薄弱有關,那麼要怎麼改善這種情況呢? 在這裡給大家推薦一款第三方客服系統-魚

什麼是公眾系統,魚塘好用嗎?

什麼是微信公眾號客服系統,魚塘微客服好用嗎 魚塘微客服系統是一款可以幫助企業更好的運營及維護客戶(粉絲)的企業智慧微營銷SAAS雲 服務系統。它的主要特色有:多客服溝通、粉絲CRM功能、使用者來源統計以及資料分析、客服管理等多種功能為一體的自媒體營銷系統。 魚塘

小程式、公眾轉私人訊號,實現24小時線上

    現在不少企業都有自己的微信公眾號、服務號、小程式,其中也添加了客服功用。     但據所知,官方提供的僅是網頁版的客服系統,我們的客服人民必須開啟網頁進行“守候”。     我們為什麼不能將

asp傳送公眾訊息原始碼

asp寫的,微信公眾號傳送客服訊息原始碼,支援文字傳送,圖文傳送,帶連結的文字傳送等,比模板訊息更靈活,適合很多應用場景,費話不說,上原始碼: <% Call Wx.C_A(“wx_token”)'呼叫函式,如果當前的token有效則不動,否則重新獲取並寫

PHP公眾平臺開發高階篇--模板訊息介面

* 2.不建議用瀏覽器直接請求,會導致推送多次訊息,可設定為事件推送 */ header("Content-type: text/html; charset=utf-8"); $postArr = file_get_contents('php://input'); $postObj = simplexm

公眾平臺高階群發介面

出自微信公眾平臺開發者文件 在公眾平臺網站上,為訂閱號提供了每天一條的群發許可權,為服務號提供每月(自然月)4條的群發許可權。而對於某些具備開發能力的公眾號運營者,可以通過高階群發介面,實現更靈活的群發能力。 請注意: 1、該介面暫時僅提供給已微信認證的服務號 2、高階群發介面的每日呼叫限制為10次,請

公眾平臺開發-分享介面的實現

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http

公眾平臺測試賬號”介面接入指南

本文主要講解微信公眾號Struts2框架進行伺服器驗證介面對接。 使用工具:MyEclipse 準備工作: 1.開啟MyEclipse,新建一個Web專案,比如“WXLocalTest”; 2.搭建Strust2框架環境,搭建方式這裡略過,不會的自己學習

PHP實現公眾平臺開發---提升篇(模板訊息介面)

模版訊息 介面 模板訊息僅用於公眾號向用戶傳送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。不支援廣告等營銷類訊息以及其它所有可能對使用者造成騷擾的訊息。 規則 所有服務號都可以在功能->新增功能外掛處看到申請模板訊息功

公眾系統訊息能即時提醒嗎?

微信公眾號的客服系統,當有使用者在後臺留言的時候,網頁版客服系統只能通過提示聲音來判斷,不會彈出訊息提醒。所以只能採用戴耳機安音響這種方式了嘛?當然不是,你需要的是一款可以訊息即時提醒的微信公眾號客服系統--米多客客服。1. 及時溝通的能力通過米多客客服軟體,打破了微信公眾平

公眾平臺服務號傳送模板訊息並跳轉小程式

當你在使用公眾號的模板訊息API傳送訊息並且想可以通過這個訊息跳轉到小程式上,那麼你可要注意了!很有可能踩了官方文件的引數名錯誤的坑!!! 在官方文件“傳送模板訊息”章節中無論是POST資料說明還是引數說明中都明確的說明 pagepath :所需跳轉到小程式的具體頁面路

公眾平臺開發】傳送模板訊息

post資料示例如下: { "touser":"OPENID", "template_id":"TEMPLATEID", "data":{

公眾平臺開發--文字及圖文訊息回覆的實現

public class MessageUtil {/*** 返回訊息型別:文字*/public static final String RESP_MESSAGE_TYPE_TEXT = "text";/*** 返回訊息型別:音樂*/public static final String RESP_MESSAG

Java公眾平臺開發之傳送模板訊息

模板訊息僅用於公眾號向用戶傳送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。不支援廣告等營銷類訊息以及其它所有可能對使用者造成騷擾的訊息。對於一般的服務號而言,模板ID行業之類會事先配置好,所以用程式碼控制的只有傳送了。準備工作:已通過

公眾平臺開發(十) 訊息回覆總結

一、簡介 微信公眾平臺提供了三種訊息回覆的格式,即文本回復、音樂回覆和圖文回覆,在這一篇文章中,我們將對這三種訊息回覆的格式做一下簡單講解,然後封裝成函式,以供讀者使用。 二、思路分析 對於每一個POST請求,開發者在響應包中返回特定xml結構,對該訊息進行響應(現