昨天了解各種 Line 的 Message Type 後,今天就運用其中的格式來優化驗證碼小幫手的互動介面吧!
之前我們是運用 Rich Menu 來跟使用者做互動,但需要點擊選單還是不夠直覺,讓我們著手優化這部分的互動吧!
現在的驗證碼小幫手流程為:如果未認證的使用者輸入認證碼以外的任何訊息,都提示要先進行身份認證,但其實改成在使用者一開始加入就提示要身份認證會更好。甚至我們可以更進一步利用 LIFF APP 來做身份認證的認證碼取得與認證動作!
Line 提供了多種 Webhook Event,其中一種就是當 User 加好友/解封鎖 時會發出的 Webhook Follow Event,我們可以運用這個 Event 主動回應訊息告知使用者要先進行身份認證。
文件: Follow event
doPost
如下:function doPost(e) {
var requestContent = JSON.parse(e.postData.contents);
var event = requestContent.events[0];
if(event && event.type) {
var replyToken = event.replyToken;
var replyMessage = [];
switch (event.type) {
case 'message':
replyMessage = handleMessageEvent(event);
break;
case 'follow':
replyMessage = handleFollowEvent(event);
break;
default:
// do nothing
}
doReplyMessage(replyMessage, replyToken);
}
return ContentService.createTextOutput('success');
}
handleMessageEvent
& handleFollowEvent
如下:function handleMessageEvent(event) {
var userId = event.source && event.source.userId;
var userMessage = event.message.text;
return (isUserIdVerified(userId))
? userIsVerifiedFlow(userMessage, userId)
: userIsNotVerifiedFlow(userMessage, userId);
}
function handleFollowEvent(event) {
var userId = event.source && event.source.userId;
return (isUserIdVerified(userId))
? getReplyMessage('歡迎回來,請選擇您要執行的動作', generateQuickReply(true))
: getReplyMessage('歡迎,請先進行身份認證', generateQuickReply(false));
}
獲取驗證碼
,點擊後發送文字訊息:獲取驗證碼點此進行身份認證
,點擊後開啟我們之前部署在 Heroku 的 LIFF APPfunction generateQuickReply(userIsVerified) {
var items = [];
if (userIsVerified) {
items = [
{
"type": "action",
"action": {
"type":"message",
"label":"獲取驗證碼",
"text":"獲取驗證碼"
}
}
];
} else {
items = [
{
"type": "action",
"action": {
"type":"uri",
"label":"點此進行身份認證",
"uri":"Your_LIFF_APP_URL"
}
}
];
}
return {"items": items};
}
function getReplyMessage(message, quickReply = {}) {
var replyMessage = {
'type': 'text',
'text': message
};
if (Object.keys(quickReply).length !== 0) {
replyMessage.quickReply = quickReply;
}
return [replyMessage];
}
獲取驗證碼
,點擊後發送文字訊息:獲取驗證碼function userIsVerifiedFlow(userMessage, userId){
return (userMessage === '獲取驗證碼') ? getValidationCodeMessage(userId) : getReplyMessage('無效的輸入', generateQuickReply(true));
}
function userIsNotVerifiedFlow(userMessage, userId){
var bindResult = tagVerificationCode(userMessage, userId);
var replyMessage = bindResult ? '綁定成功!請點擊選單或輸入獲取驗證碼。' : '請先進行身分認證綁定。'
return getReplyMessage(replyMessage, generateQuickReply(bindResult));
}
以上修改完後記得儲存,並且重新部署為新版本。
如果忘記怎麼重新部署的話,可以參考這篇幫 Line Bot 加上身份驗證(3) 的 管理部署 or 重新部署
封鎖再加入驗證碼小幫手,查看是否有正確處理 Follow Event
點擊進行身份認證,查看是否有正確打開 LIFF APP
因為 LIFF APP 還沒實作身份認證的功能,所以先使用舊方法輸入認證碼,測試是否能正常出現獲取驗證碼的 Quick Reply
點擊 Quick Reply 獲取驗證碼
測試無效輸入是否一樣有出現 Quick Reply
測試封鎖再加入,是否有正常判斷使用者已認證
以上~明天會使用 Template Message 完成同意使用的小功能,並繼續完成 LIFF APP 的身份認證功能