除了文字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/