還記得我們昨天設定的 Webhook URL 是測試模式嗎?
今天要學習使用正式模式了,你在接下來這幾篇可以先用測試模式沒關係,如果執行結果錯誤,用測試模式才能知道哪裡出了問題。
但之後要改用正式模式,因為用測試模式的話,你每次都要手動執行工作流,而且每執行一次,之前的訊息資料就會被清空重新紀錄,所以要用正式模式才會自動回覆、儲存並記得你之前的訊息,先來看看怎麼更改模式吧!
我們直接進到 Line Developer 的網頁,進入到和昨天一樣的 Messaging API settings,把 Webhook URL 裡面的 " -test
" 刪除,這就是正式模式的 URL 啦~
(如果你有重啟 ngrok 記得要先更新成新的公開網址)
再來要先去 n8n 把工作流程切換成 Active(啟用)狀態。
這時,Webhook
節點會自動在背景持續監聽,你再去按 Webhook URL 的驗證。
這樣一來,你的 LINE Bot 就可以持續監聽、自動回覆,而不需要你手動去執行了。
前置作業完成後,我們開始今天的任務~
在「訂閱主題」這個功能上會花比較多時間,也需要看很多程式碼,讓我們一起加油吧!
Webhook
節點後新增一個 Code
節點輸入以下程式碼:
const staticData = $getWorkflowStaticData('global');
// 初始化(只做一次)
if (!staticData.subscriptions) {
staticData.subscriptions = {};
}
return $input.all();
新增一個靜態資料庫並確保它已經被初始化,儲存使用者的訂閱主題。
If
節點(取消訂閱)設定如下圖所示:
我們要先判斷訊息中是否包含「取消訂閱」,再來判斷訊息中是否含有「訂閱」,因為「取消訂閱」中包含「訂閱」,如果先判斷「訂閱」,那不管使用者是輸入「訂閱」或是「取消訂閱」,都會判斷成「訂閱」。有點繞口,希望你的腦袋沒有打結。
If
節點(取消訂閱)false 分支新增 If
節點(訂閱)設定如下圖所示:
如果訊息中沒有包含「取消訂閱」這四個字就是歸在「訂閱」的訊息。
If
節點(訂閱) false 分支新增 HTTP Request
節點假如判斷訊息到了這個節點,就代表使用者輸入的訊息不包含「取消訂閱」也不屬於「訂閱」,
所以我們要用一個節點來告訴使用者:「看不懂這個訊息」。
Post
https://api.line.me/v2/bot/message/reply
( LINE Messaging API 的回覆訊息端點 )None
Content-Type
application/json
Authorization
Bearer 你的 Channel access token
JSON
Using JSON
輸入以下程式碼:
{
"replyToken": "{{ $json.body.events[0].replyToken }}",
"messages": [
{
"type": "text",
"text": "我不明白您的指令,請輸入「訂閱XX」或「取消訂閱」。"
}
]
}
今天先做到這邊,目前的工作流會長得像這樣:
明天我們會新增三個節點,因為其中兩個節點的內容比較豐富,所以我放到下一篇文章去做,目前應該還可以跟上吧!成功做到這邊的你很棒喔~
明天(Day 14)要來新增這個功能中最多程式碼的兩個節點,雖然程式碼滿長的,但是用邏輯思考一下應該不難看懂,我也會對程式碼做解釋,不用擔心!