上一章是 n8n 主動推一則 Hello from n8n!。這一章反過來:手機傳進官方帳號的東西,要進到 n8n。
工作流用「【教學】LINE OA 接收實驗」。一個官方帳號只能掛一條 Webhook,接收和回覆都走這一條。
開始前準備這幾項:
- 上一章的官方帳號已經加在手機上,自動回應是關的。
- n8n 這條工作流已發布。沒發布的話,LINE 觸發時不會跑。
- 憑證仍是上一章那筆
Line Messaging。
Reply token 只能用一次,而且大約 60 秒內要回完。這一章的回覆都用它,不走 Push。
1. 把 Webhook 貼回 LINE
LINE 的伺服器觸發不到 localhost。n8n 若只開在自己電腦上,Production URL 必須是 LINE 連得到的網址,再貼回去。
2. 事件、類型、指令
進來的每一筆先看它是哪一種事件。只有「訊息」才繼續看訊息類型。只有「文字」才進指令。
① 「LINE 收到事件」是放上畫布之後的名稱。
② 節點面板先選 Line Messaging。
③ 展開 Triggers。On message、On follow 只聽一種事件。這一章要同時收訊息、按鈕、加好友,所以選 On all。
④ 放上畫布後,把名稱改成「LINE 收到事件」。
⑤ 在「LINE 收到事件」上點兩下。中間是參數。左邊寫 Pull in events from Line Messaging。這欄在等官方帳號把事件送進來,不接上一個節點的輸出。右邊是 No trigger output,代表還沒收到測試事件。
⑥ 上方的 Execute step 只聽一次。這一章不靠它收訊息。手機傳進來,走已發布的 Production URL。
中間要對的欄位:
Webhook URLs:展開後選Production URL。上一節貼到 LINE 的就是這一條。Test URL的路徑有webhook-test,只有在這個畫面按監聽時才吃得到。Credential:選上一章那筆Line Messaging account。token 留在憑證裡,不要再貼進節點。Trigger On:留Message、Postback、Follow。這三個對上後面的訊息、按鈕、加好友。沒選到的事件不會進來。
① 「依事件分流」是畫布上的名稱。節點面板搜尋 Switch,選 Switch。這是 n8n 內建節點,點下去就放上畫布。放上之後,把名稱改成「依事件分流」。
② 在它上面點兩下。參數用 Routing Rules,一條規則一個出口。比的是 $json.type。
③ Routing Rule 1:{{ $json.type }},is equal to,值填 message。打開 Rename Output,Output Name 填「訊息」。這支進下一層。
④ Routing Rule 2:同樣比 $json.type,is equal to postback。Output Name 填「按鈕」。交給「拆開按鈕資料」。
⑤ Routing Rule 3:畫面上展開的這條。{{ $json.type }} is equal to follow,Rename Output 是開的,Output Name 是「加好友」。交給「回覆歡迎訊息」。
⑥ 拉到 Options。Fallback Output 選 Extra Output。Rename Fallback Output 填「其他」。三條規則都不符合的事件走這裡,只進「記下未處理事件」,不回覆。上一步的 Trigger On 沒選 unfollow、join,所以這支平常是空的。
① 「依訊息類型分流」是畫布上的名稱。和上一步同一個節點:面板搜尋 Switch,選 Switch。放上畫布後改名。它接在「依事件分流」的「訊息」出口。
② 點兩下。Routing Rules 比的是 {{ $json.message?.type || "" }}。整句文字先不要拿來比。每一條都打開 Rename Output。
③ Routing Rule 1:{{ $json.message?.type || "" }},is equal to text。Rename Output 打開,Output Name 填「文字」。這支進下一層。
④ Routing Rule 2:{{ $json.message?.type || "" }},is equal to image。Rename Output 打開,Output Name 填「圖片」。接到「回覆非文字」。
⑤ Routing Rule 3:{{ $json.message?.type || "" }},is equal to video。Rename Output 打開,Output Name 填「影片」。接到「回覆非文字」。
⑥ Routing Rule 4:{{ $json.message?.type || "" }},is equal to audio。Rename Output 打開,Output Name 填「語音」。接到「回覆非文字」。
⑦ Routing Rule 5:{{ $json.message?.type || "" }},is equal to file。Rename Output 打開,Output Name 填「檔案」。接到「回覆非文字」。
⑧ Routing Rule 6:{{ $json.message?.type || "" }},is equal to location。Rename Output 打開,Output Name 填「位置」。接到「回覆非文字」。畫面上這條是收合的。
⑨ Routing Rule 7:畫面上展開的這條。{{ $json.message?.type || "" }},is equal to sticker。Rename Output 打開,Output Name 填「貼圖」。接到「回覆非文字」。
⑩ Options 的 Fallback Output 選 Extra Output,Rename Fallback Output 填「其他」。
Rule 2 到 Rule 7,加上「其他」,都接到「回覆非文字」。回覆會寫收到哪一種類型,這一章先處理文字。傳一句話,或傳 /help。
① 「依指令分流」是畫布上的名稱。和前兩步同一個節點:面板搜尋 Switch,選 Switch。放上畫布後改名。它接在「依訊息類型分流」的「文字」出口。
② 點兩下。Routing Rules 比的是 {{ $json.message?.text ?? "" }}。每一條都打開 Rename Output。
③ Routing Rule 1:{{ $json.message?.text ?? "" }},is equal to /help。Output Name 填「說明」。接到「回覆指令說明」。
④ Routing Rule 2:{{ $json.message?.text ?? "" }},is equal to /my-uid。Output Name 填「查 UID」。接到「查用戶資料」。
⑤ Routing Rule 3:{{ $json.message?.text ?? "" }},is equal to /postback。Output Name 填「訂單按鈕」。接到「回覆訂單按鈕」。
⑥ Routing Rule 4:{{ $json.message?.text ?? "" }},is equal to /label。Output Name 填「Flex 卡片」。接到「回覆 Flex 卡片」。畫面上這條是收合的。
⑦ Routing Rule 5:畫面上展開的這條。{{ $json.message?.text ?? "" }},運算子是 starts with,值填 /ai。Output Name 填「AI」。先接到「顯示讀取動畫」,再交給實驗助教。
⑧ Options 的 Fallback Output 選 Extra Output,Rename Fallback Output 填「原樣回覆」。其他文字走這裡,原樣回覆,並帶上 quoteToken。
圖片、貼圖不會走到這裡。它們在上一步就停了。
做完的檢查
- LINE 的
Verify是 Success,Use webhook是開的。 - 傳一句普通話,官方帳號原樣回你。
- 傳一張貼圖或圖片,回覆裡看得到類型名稱,而且叫你改傳文字。
- 傳
/help,看得到指令說明。
下一步
/my-uid、Flex 按鈕、Flex 卡片和 /ai 都已經接在第三層。下一章再逐個打開這些文字指令。
完整工作流
這一章的工作流在這裡:【教學】LINE OA 接收實驗。








