[LineBot]Template message types

除了文字text的回覆之外,其實LINE有提供多種模板。

今天主要以Template message types來述說,Template message types有以下幾種模板。

  • Buttons
  • Confirm
  • Carousel
  • Image carousel

Template message types

從官方網站上我們可以看到

         Here are the types of templates available.

  • Buttons
  • Confirm
  • Carousel
  • Image carousel

官方都有相對應的樣子,使用者可以依照自己的需求去選擇所需要的模板。


Confirm Type

如同官方所述說的就是一個有Yes NO的確認方格 ,可以直接按取yes 或 NO 讓機器人直接得到相對應的回覆。下圖也是Line官網所提供的,他告訴你這個confirm template 有哪些property ,還有一些敘述及限制。


那如果是利用C# 該如何寫呢??

我們透過LineBotSDK 所做的抽象方法去實作,

data 的部分是當我們按下按鈕時,我們希望他可以替我們直接回傳的值(postbak)

text則是我們confrim Box 所顯示的訊息 

public void confirmBox(string userID, string managerUni_ID, string msgData,string mesg, string ChannelAccessToken)
{
   //建立actions,作為ButtonTemplate的用戶回覆行為
   var actions = new List<isRock.LineBot.TemplateActionBase>();
   string info = userID + "|" + msgData;

   actions.Add(new isRock.LineBot.PostbackActon()
   { label = "YES", data = info + "|Y" });

   actions.Add(new isRock.LineBot.PostbackActon()
   { label = "NO",  data = info + "|N" });

   //actions.Add(new isRock.LineBot.UriActon()
   //{ label = "點這邊開啟網頁", uri = new Uri("http://www.google.com") });
    //actions.Add(new isRock.LineBot.PostbackActon()
   //{ label = "點這邊發生postack", data = "abc=aaa&def=111" });

   //單一Button Template Message
   var ButtonTemplate = new isRock.LineBot.ConfirmTemplate()
   {                
    text = mesg,

    actions = actions //設定回覆動作
   };
   
   isRock.LineBot.Utility.PushTemplateMessage("uniqueID", ButtonTemplate, ChannelAccessToken);

}

如果使用者按了Yes那我們WebAPI 如何接受並且回應呢??

在我們Controller的地方,我們可以特別寫一段 如果我們收到的訊息有posback這個資料,則我們去拆解我們的PostBack 的 data

並根據自己的規則去判斷及執行動作。

 //postBack 因為回覆核准確認 會回傳一個posback
string postBack = "";
if (ReceivedMessage.events[0].postback != null)
{
  postBack = ReceivedMessage.events[0].postback.data; 
  string[] postBackArr = postBack.Split('|');
  string userID = postBackArr[0].ToString();
  string msgID = postBackArr[1].ToString();
  string flowFlag = postBackArr[2].ToString();
                
  //核准
  if(flowFlag == "Y")
  {
    //true 代表 已經核准過了
    if (check.checkHaveApply(userID, msgID))
    {
       Message = "已經核准成功無須再核准";
    }
    else
    {
      //將核准 設為Y
      set.setUserMsgFlowFlag(userID, msgID, flowFlag,"L");

      Message = "核准成功\n";
      Message = Message + "已將核准成功訊息提交給申請者。";

      //push message to 申請者
      push.pushApproveToUser(userID, msgID, flowFlag, ChannelAccessToken, "L");
    }
                      
  }else
  {
     //不核准
     Message = "不給予核准\n";
     Message = Message + "已將不給予核准訊息提交給申請者。";

     //push 不核准訊息 to 申請者                       
      push.pushApproveToUser(userID, msgID, flowFlag, ChannelAccessToken,"L");
   }
   //isRock.LineBot.Utility.PushMessage(uniqueID, postBack, ChannelAccessToken);
   result = Message;
}
//回覆
isRock.LineBot.Utility.ReplyMessage(ReceivedMessage.events[0].replyToken, result, ChannelAccessToken);

其他的幾乎也是比照辦理,就不依依撰寫出來了。

接下來 做完了LINE 就該來用weChat了


參考資料:

1.https://developers.line.me/en/docs/messaging-api/message-types/