為了讓 Bot 聽懂我們說的話,並根據使用者的輸入做出相對應的回應,需要先建立一個雙向溝通的管道,而 Webhook 就是建立雙向溝通的橋樑,這也意味著我們要用到 ngrok 來解決 localhost 無法被外部存取的問題。在開始操作之前,先來介紹一下 Webhook 到底是什麼吧~
Webhook 其實就像訂閱通知,用 n8n 工作流來說明的話,相當於只要有事件發生,它就會自動叫 n8n 出來處理。
這就像你訂閱 YouTube 頻道,一有新影片就會跳通知一樣,Webhook 的概念也是:當外部服務發生某件事,就自動把訊息丟到你設定好的網址。
在 LINE Bot 的場景裡:
Webhook
節點就是這個 URL 的「接收站」,它負責監聽這個網址的訊息。Webhook
節點一接到訊息,就會啟動後面的工作流。這兩個東西是相輔相成的,你必須先在 n8n 中建立一個 Webhook 節點,才能產生那個可以被 LINE 傳送訊息的 Webhook URL。
Webhook 節點有兩種 URL:
(我們先用測試模式確定可行)
認識 Webhook 之後就來使用 ngrok 讓 n8n 能被 LINE 伺服器找到吧~
ngrok
的執行檔。./ngrok authtoken <你的Auth Token>
./ngrok http 5678
http
:表示你要公開的是一個 HTTP 服務。5678
:這是 n8n 服務預設運行的連接埠(Port)。http
,一個是 https
。Session Status online
Account 你的帳號名稱 (Plan: Free)
Version 3.26.0
Region Japan (jp)
Latency 56ms
Web Interface http://127.0.0.1:4040
Forwarding https://a1b2c3d4e5f6.ngrok.io -> http://localhost:5678
Connections ttl opn rt1 rt5 p50 p90
1 0 0.01 0.00 0.00 0.00
https://
開頭的網址,接下來貼到 LINE Bot 後台的 Webhook URL,先不要按更新!!Webhook
節點開啟一個新的工作流,新增 Webhook
節點,把 Method 改為 Post
。
Path
。Path
接在 ngrok 生成的網址後面,/webhook-test
。Webhook
節點,再回去LINE Bot 後台驗證一次網址,Execute Workflow
後,Webhook
節點就會進入「監聽」狀態,等待接收來自 Test URL
(你剛剛在 LINE Bot 後台貼的網址)的呼叫。每次重新開啟 ngrok 的時候,它的網址都會更改!
所以你重開電腦後就要先去命令列工具重啟 ngrok,並到 Line Developers 平台的 Messaging API settings 中更新並驗證 Webhook URL,以下是實際操作方法:
記得要先移動到你 ngrok 應用程式所在的資料夾~
這時就會跳出 ngrok 的狀態,裡面的網址會有更動,一樣複製 https://
開頭的網址,拿去 Line Developers 平台的 Messaging API settings,跟第一次設定時的步驟一樣更新並驗證。
明天(Day 13)我們要開始寫程式,讓使用者可以和 LINE Bot 說想要訂閱什麼主題,也讓 LINE Bot能聽懂使用者的需求。