Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二十):使用菜單消息功能

  在《Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十一):高級接口說明》教程中,咱們介紹瞭如何使用「客服接口」,即在服務器後臺,在任意時間向微信發送文本、圖文、圖片等不一樣類型的消息,在這篇教程中你將學會如何向公衆號發送一條帶有選擇按鈕的菜單消息,而且當用戶點擊不一樣選項以後,服務器給出不一樣的迴應。html

 

  首先,咱們來看一下菜單消息長什麼樣子:git

(圖一)github

 

  點擊不一樣的選項,系統會返回不一樣的消息:web

(圖二)小程序

 

   請注意:上圖中的「滿意」和「通常」是點擊消息中的「滿意」和「通常」以後自動發送的,而不是手動輸入文字,若是是手動輸入文字,系統將不會識別:服務器

 

   下面,咱們來動手進行代碼編寫。微信

 

  第一步:發送菜單消息

   發送菜單消息的代碼以下:websocket

1 var menuContentList = new List<SendMenuContent>(){
2     new SendMenuContent("s:101","滿意"),
3     new SendMenuContent("s:102","通常"),
4     new SendMenuContent("s:103","不滿意")
5 };
6 //使用異步接口
7 CustomApi.SendMenuAsync(appId, OpenId, "請對 Senparc.Weixin SDK 給出您的評價", menuContentList, "感謝您的參與!");
8 

 

  以上代碼能夠添加在程序的任意地方,用戶均可收到消息(固然須要符合客服消息的發送限制,如「48小時互動限制」)。網絡

 

  一般,咱們會在菜單事件中添加反饋的按鈕,此時上述代碼能夠加入到 MessageHandler 的 OnTextOrEventRequest() 或 OnEvent_ClickRequest() 等其餘須要出發發送菜單消息的事件中,例如(源碼):app

 1 /// <summary>
 2 /// 點擊事件
 3 /// </summary>
 4 /// <param name="requestMessage">請求消息</param>
 5 /// <returns></returns>
 6 public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
 7 {
 8     IResponseMessageBase reponseMessage = null;
 9     //菜單點擊,須要跟建立菜單時的Key匹配
10 
11     switch (requestMessage.EventKey)
12     {
13         //其餘 case
14         case "SendMenu":
15             {
16                 //注意:
17                 //一、此接口能夠在任意地方調用(包括後臺線程),此處演示爲經過
18                 //二、一下"s:"前綴只是 Senparc.Weixin 的內部約定,可使用 OnTextRequest事件中的 requestHandler.SelectMenuKeyword() 方法自動匹配到後綴(如101)
19 
20                 var menuContentList = new List<SendMenuContent>(){
21                                             new SendMenuContent("s:101","滿意"),
22                                             new SendMenuContent("s:102","通常"),
23                                             new SendMenuContent("s:103","不滿意")
24                                         };
25                 //使用異步接口
26                 CustomApi.SendMenuAsync(appId, OpenId, "請對 Senparc.Weixin SDK 給出您的評價", menuContentList, "感謝您的參與!");
27 
28                 reponseMessage = new ResponseMessageNoResponse();//不返回任何消息
29             }
30             break;
31             //其餘代碼
32     }
33 
34     return reponseMessage;
35 }

 

  執行上述代碼後,便可看到圖一的反饋。

 

  第二步:接收菜單消息並響應

  菜單消息被點擊後(如圖二),使用的是普通文本消息發送,只不過菜單的id(如上述代碼的「s:101」)會被放到一個獨立的屬性中一塊兒發送,Senparc.Weixin SDK 就是靠這些特徵來區分文字類型消息是否屬於菜單消息。所以,咱們在 OnTextOrEventRequest() 或 OnTextRequest()  方法中加入如下判斷(源碼):

 1 /// <summary>
 2 /// 處理文字請求
 3 /// </summary>
 4 /// <param name="requestMessage">請求消息</param>
 5 /// <returns></returns>
 6 public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
 7 {
 8     var defaultResponseMessage = base.CreateResponseMessage<ResponseMessageText>();
 9 
10     var requestHandler =
11         requestMessage.StartHandler()
12         //選擇菜單,關鍵字:101(微信服務器端最終格式:id="s:101",content="滿意")
13         .SelectMenuKeyword("101", () =>
14         {
15             defaultResponseMessage.Content = $"感謝您的評價({requestMessage.Content})!咱們會一如既往爲提升企業和開發者生產力而努力!";
16             return defaultResponseMessage;
17         })
18         //選擇菜單,關鍵字:102(微信服務器端最終格式:id="s:102",content="通常")
19         .SelectMenuKeyword("102", () =>
20         {
21             defaultResponseMessage.Content = $"感謝您的評價({requestMessage.Content})!但願咱們的服務能讓您愈來愈滿意!";
22             return defaultResponseMessage;
23         })
24         //選擇菜單,關鍵字:103(微信服務器端最終格式:id="s:103",content="不滿意")
25         .SelectMenuKeyword("103", () =>
26         {
27             defaultResponseMessage.Content = $"感謝您的評價({requestMessage.Content})!但願咱們的服務能讓您愈來愈滿意!";
28             return defaultResponseMessage;
29         })
30         .SelectMenuKeywords(new[] { "110", "111" }, () =>
31         {
32             defaultResponseMessage.Content = $"這裏只是演示,能夠同時支持多個選擇菜單";
33             return defaultResponseMessage;
34         })
35 
36         //Default不必定要在最後一個
37         .Default(() =>
38         {
39             defaultResponseMessage.Content = "未做處理的消息。";
40 
41             return defaultResponseMessage;
42         });
43 
44     return requestHandler.GetResponseMessage();
45 }

  上述代碼中,requestMessage.StartHandler() 用於建立一個文本處理工具,可用於判斷文字關鍵字等,其中的 .SelectMenuKeyword() 和 SelectMenuKeywords() 方法分別用於匹配一個或多個菜單消息的關鍵字,其格式是"s:101"中的"101",前綴「s:」做爲一個 SDK 內部約定的標識會被忽略。固然,若是你須要判斷完整的菜單消息 id,能夠經過 requestMessage.bizmsgmenuid 直接獲取到"s:101"。

  發佈上述代碼後,便可實現針對不一樣菜單消息 id 的消息返回,能夠擴展到各類場景,快試試吧!

 

  以上功能能夠經過關注【盛派網絡小助手】公衆號,點擊菜單【更多】>【發送菜單】進行測試。

 

 

 

系列教程索引

地址:http://www.cnblogs.com/szw/p/weixin-course-index.html

  1. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(一):微信公衆平臺註冊
  2. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二):成爲開發者
  3. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(三):微信公衆平臺開發驗證
  4. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(四):Hello World
  5. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(五):使用Senparc.Weixin.MP SDK
  6. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(六):瞭解MessageHandler
  7. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(七):解決用戶上下文(Session)問題
  8. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(八):通用接口說明
  9. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(九):自定義菜單接口說明
  10. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十):多客服接口說明
  11. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十一):高級接口說明
  12. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十二):OAuth2.0說明
  13. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十三):地圖相關接口說明
  14. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十四):請求消息去重
  15. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十五):消息加密
  16. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十六):AccessToken自動管理機制
  17. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十七):個性化菜單接口說明
  18. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十八):Web代理功能
  19. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(十九):MessageHandler 的未知類型消息處理
  20. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二十):使用菜單消息功能
  21. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二十一):在小程序中使用 WebSocket (.NET Core)
  22. Senparc.Weixin.MP SDK 微信公衆平臺開發教程(二十二):如何安裝 Nuget(dll) 後使用項目源代碼調試
相關文章
相關標籤/搜索