~/blog/n8n-line-bot-interactive-workflow-tutorial.md
API 串接與系統整合 · 2025 / 12 / 06 · 4 views
LINE Bot 不再只會單向通知!N8N 視覺化工作流實戰,打造你的 AI 智慧客服大腦
Eric
浪花科技創辦人 · AI 架構師
☰ 目錄 table-of-contents.md
LINE 官方帳號除了發優惠券和推播新文章,上一次真正「回覆」使用者是什麼時候?我最近接手的幾個案子裡,企業的官方帳號幾乎都停留在單向廣播的時代,使用者傳來的訊息十之八九石沉大海,或是被罐頭訊息打發——這哪叫互動,根本是數位版的傳單。
身為一個有點龜毛的工程師,我實在看不下去。今天,我們不聊 WordPress 底層那些硬梆梆的程式碼,來玩點有趣又實用的東西:用 N8n 這個自動化神器,打造一個真正「會思考」、能互動的 LINE 聊天機器人。忘掉那些複製貼上的罐頭回覆吧!這篇 N8n line bot 教學 將帶你從零開始,用視覺化的拖拉點選,建立一個能根據關鍵字回覆、甚至能秀出精美圖文選單的智慧小助理。
你可能會想:「之前不是有篇 n8n x LINE 串接的文章 嗎?」沒錯,那篇是入門,教你如何把通知『推』出去。今天我們要玩的是進階版——讓你的 Bot 學會『聽』和『說』,建立一個雙向溝通的橋樑。準備好了嗎?泡杯咖啡,跟著我一起動手吧!
戰前準備:你的 N8N x LINE Bot 軍火庫
在我們開始打造這個自動化大腦之前,總得先把工具和材料備齊。這就像組裝電腦,你總不能兩手空空就想開工吧?放心,過程不複雜,但請務必確認以下幾點都準備妥當。必備條件,缺一不可
- 一個 N8n 執行個體:無論你是使用 N8n Cloud 還是像我一樣,喜歡自己動手在 VPS 上用 Docker 架設,都可以。自己架設的好處是彈性超高,沒有執行次數的限制,對於我們這種喜歡實驗各種自動化的工程師來說,簡直是天堂。(小小囉嗦一下,自己管主機雖然多了點責任,但那種完全掌控的感覺,真的很棒!)
- 一個 LINE Developer 帳號:這是免費的,去 LINE Developers 官網註冊一下,然後建立一個「Messaging API」類型的 Channel。這就是我們未來 Bot 的身份證。
- Webhook 的基本概念:你不需要是個網路專家,但至少要知道 Webhook 就像一個專屬的門鈴。LINE 那邊有使用者傳訊息(有人按門鈴),LINE 就會通知你家(N8n 的 Webhook URL),然後告訴你是誰、說了什麼。
取得你的 LINE Channel 金鑰
這是整個串接過程中最關鍵也最需要保密的部分。請登入你的 LINE Developers Console,找到你剛剛建立的 Channel。- 點進你的 Channel,切換到「Messaging API」分頁。
- 往下滑,你會找到「Channel access token (long-lived)」。點擊「Issue」按鈕,你會得到一長串的英數字元。這就是 N8n 代表你的 Bot 去發言的「令牌」。
- 再往下,找到「Channel secret」。這是用來驗證收到的訊息是否真的來自 LINE 的「密鑰」。
實戰第一步:打造「你說我回」的關鍵字機器人
萬事俱備,我們就從最經典的「關鍵字回覆」功能開始。目標是當使用者輸入特定字詞(例如:「營業時間」),我們的 Bot 就能自動回覆對應的資訊。步驟一:架設 Webhook 接收站:N8n 的耳朵
首先,在 N8n 開一個新的 Workflow。- 第一個節點,請選擇「Webhook」。這個節點就是我們剛剛提到的「門鈴」。
- 建立後,你會在右邊看到「Test URL」和「Production URL」。在開發階段,我們先用「Test URL」。把它複製下來。
- 回到 LINE Developers Console 的「Messaging API」設定頁面,找到「Webhook settings」,點擊「Edit」,把剛剛複製的 N8n Test URL 貼上去,然後開啟「Use webhook」。
- 重點來了:LINE 的 Webhook 只接受 HTTPS 加密的連線。如果你是自己架設 N8n,請務必確認你的伺服器已經設定好 SSL 憑證(例如用 Let's Encrypt)。安全性是網路世界的基本功,沒得商量。
步驟二:解析 LINE 訊息:拆解 Payload 的藝術
設定好 Webhook 之後,N8n 還不知道 LINE 會送來什麼樣的資料。所以我們要先「監聽」一次。- 在 N8n 的 Webhook 節點,點擊右上角的「Listen for test event」。
- 現在,拿起你的手機,對你的 LINE Bot 發送一則測試訊息,例如「哈囉」。
- 你會看到 N8n 的節點開始轉圈,然後出現一個綠色的勾勾,代表它成功收到了資料!
events[0].type: 事件類型,收到文字訊息時會是message。events[0].replyToken: 極度重要!這是一次性的回覆令牌,我們必須用這個 token 才能回覆「這則」訊息。它的壽命很短,所以要馬上用掉。events[0].message.text: 使用者傳送的文字內容。這就是我們要判斷的關鍵字。
步驟三:邏輯分流:用 Switch Node 當總機
收到訊息後,總不能所有訊息都回覆一樣的內容吧?這時候就需要「Switch」節點來扮演總機的角色,根據不同的關鍵字,把流程導向不同的地方。- 在 Webhook 節點後面,新增一個「Switch」節點。
- 在「Property」欄位,我們要指定判斷的依據。用滑鼠拖拉,或手動輸入
{{$json["body"]["events"][0]["message"]["text"]}}。這串看起來很長的語法,其實就是去抓我們剛剛看到的「使用者輸入文字」。 - 接著,在下方的「Routing Rules」設定規則。例如:
- Output 0: Operation 設為「Equal」,Value 設為「營業時間」。
- Output 1: Operation 設為「Equal」,Value 設為「聯絡我們」。
- 這樣一來,如果使用者輸入「營業時間」,流程就會從 Output 0 繼續;如果輸入「聯絡我們」,就會走 Output 1。其他的訊息則會走預設的 default output。
步驟四:回覆訊息:讓 N8n 開口說話
總機把電話轉接好了,接下來就是各個分機要回話了。我們需要使用「HTTP Request」節點來呼叫 LINE 的 Reply Message API。- 在 Switch 節點的 Output 0 後面,新增一個「HTTP Request」節點。
- Method: 設為
POST。 - URL: 填入 LINE 的回覆 API 端點:
https://api.line.me/v2/bot/message/reply。 - Authentication: 選擇「Header Auth」。
- 在「Headers」區塊,新增一個 Name 為
Authorization,Value 為Bearer YOUR_CHANNEL_ACCESS_TOKEN的欄位。(請把你自己的 Channel Access Token 貼上去。但更好的做法是使用 N8n 的 Credentials 功能,後面會提到!) - Body Content Type: 選擇「JSON」。
- 在「Body」欄位,貼上以下 JSON 內容。這就是我們要回覆的訊息格式:
{
"replyToken": "{{$json.body.events[0].replyToken}}",
"messages": [
{
"type": "text",
"text": "我們的營業時間是週一至週五,早上 9:00 到下午 6:00 喔!"
}
]
}
看到了嗎?replyToken 我們直接從 Webhook 收到的資料動態代入,而 text 欄位就是我們要回覆的內容。同樣的步驟,你可以在 Switch 的 Output 1 後面再接一個 HTTP Request 節點,回覆不同的聯絡資訊。一個簡單的關鍵字機器人就這樣完成了!
進階挑戰:用 Flex Message 打造互動式圖文選單
只會回文字太無聊了,我們來玩點酷的。LINE 提供了強大的「Flex Message」功能,可以讓你用 JSON 定義出像 App 介面一樣的卡片式選單,非常吸睛。 坦白說,Flex Message 的 JSON 結構寫起來有點囉唆,就算是資深工程師也可能寫到眼花。但幸好,LINE 佛心地提供了官方的視覺化編輯器!步驟一:使用 Flex Message 模擬器
請前往 LINE Flex Message Simulator。這是一個網頁工具,你可以在左邊用拖拉點選的方式設計你的卡片,右邊會即時產生對應的 JSON 程式碼。你可以設計包含圖片、按鈕、文字的複雜版面。設計完成後,把右邊的 JSON 完整複製下來。步驟二:在 N8n 中發送 Flex Message
流程跟發送文字訊息很像,只是 Body 的內容要換掉。- 在你的 Switch 節點新增一個規則,例如關鍵字是「主選單」。
- 在這個規則的 Output 後面接上一個 HTTP Request 節點。
- 設定跟之前一樣,重點在 Body。你需要把從模擬器複製來的 JSON,包在一個更大的結構裡:
{
"replyToken": "{{$json.body.events[0].replyToken}}",
"messages": [
{
"type": "flex",
"altText": "這是一則 Flex Message",
"contents": { ...把你從模擬器複製的 JSON 貼在這裡... }
}
]
}
altText 是指在手機推播通知或無法顯示 Flex Message 的地方,會看到的替代文字。contents 裡面,就原封不動地把你設計好的 JSON 貼進去。這樣一來,當使用者輸入「主選單」,就會收到你精心設計的互動圖文卡片了!是不是很有成就感?
工程師的小囉嗦:部署與維護的注意事項
一個功能「能動」只是第一步,要讓它「穩定可靠」,還有一些細節要注意。這也是區分業餘和專業的關鍵。安全性驗證 (Security Validation)
任何人只要知道你的 Webhook URL,都可以對它發送請求。為了確保收到的訊息真的來自 LINE,我們應該要驗證請求標頭 (Header) 中的X-Line-Signature。這是 LINE 用你的 Channel Secret 對訊息內容做 HMAC-SHA256 加密後產生的簽章。
你可以在 N8n 的 Webhook 節點後,加上一個「Code」節點,用 Javascript 來做驗證。這段程式碼稍微進階,但能大幅提升你的 Bot 安全性。
const crypto = require('crypto');
const channelSecret = 'YOUR_CHANNEL_SECRET'; // 最好從 Credentials 讀取
const body = JSON.stringify(items[0].json.body);
const signature = items[0].json.headers['x-line-signature'];
const hash = crypto.createHmac('sha256', channelSecret)
.update(Buffer.from(body, 'utf8'))
.digest('base64');
if (signature === hash) {
return items;
} else {
// 驗證失敗,可以回傳空陣列中斷流程
return [];
}
善用憑證 (Credentials)
我前面一直強調不要把金鑰寫死。N8n 提供了「Credentials」功能來安全地儲存這些敏感資訊。在你的 HTTP Request 節點的 Authentication 選擇「Header Auth」,然後在 Credential for Header Auth 欄位選擇「Create New」。- Credential Name: 給它一個好記的名字,例如「My LINE Bot Auth」。
- Name:
Authorization - Value:
Bearer YOUR_CHANNEL_ACCESS_TOKEN
錯誤處理 (Error Handling)
如果 LINE API 暫時掛了,或是你的 JSON 格式寫錯,HTTP Request 節點會失敗,整個 workflow 就會中止。在節點的「Settings」中,打開「Continue on Fail」選項,這樣即使這個節點出錯,流程也可以繼續。你可以另外設計一條錯誤處理路徑,例如當 API 呼叫失敗時,發送一封 Email 或 Slack 通知給自己,才能在第一時間發現問題。 透過 N8n,我們不只可以打造一個會回話的 LINE Bot,更能將它與成千上百種應用程式串連,例如把使用者問題記錄到 Google Sheets、串接 OpenAI API 讓 Bot 變得更聰明、或是在 WordPress 網站上新增一筆客服紀錄等等,可能性無窮無盡。 希望這篇詳細的教學能幫助你踏出打造智慧 LINE Bot 的第一步。自動化的世界非常廣闊,而 N8n 就是你手中最強大的瑞士刀。延伸閱讀
- n8n、Make、Zapier 怎麼選?2026 自動化平台完整比較
- 告別手動通知地獄!n8n x LINE 終極串接實戰,打造你的 24H 自動化訊息中心
- 自動化還在單向道?n8n Webhook + API 雙向整合術,打造 WordPress『數據迴力鏢』!
- 告別手動發文地獄!n8n x WordPress 終極聯動,打造你的 24H 全自動內容工廠
// FAQ
常見問題
用 n8n 做 LINE Bot 關鍵字回覆需要哪些前置條件?
需要一個 n8n 執行個體(Cloud 或自架)、一個免費的 LINE Developer 帳號並建立「Messaging API」類型的 Channel,以及對 Webhook 的基本理解。同時要取得 Channel access token 與 Channel secret 兩組金鑰,前者用來代表 Bot 發言,後者用來驗證訊息來源。
為什麼 LINE 的 Webhook 一定要用 HTTPS?
因為 LINE 的 Webhook 只接受 HTTPS 加密連線。如果你是自架 n8n,必須先替伺服器設定好 SSL 憑證(例如用 Let's Encrypt),LINE 才能成功把使用者訊息推送到你的 Webhook URL。
解析 LINE Webhook 訊息時,哪些欄位最重要?
最重要的有三個:events[0].type 是事件類型,收到文字訊息時為 message;events[0].replyToken 是一次性回覆令牌,必須用它才能回覆該則訊息,且壽命很短要馬上用掉;events[0].message.text 則是使用者傳送的文字內容,也就是用來判斷關鍵字的依據。
在 n8n 中要用哪個節點呼叫 LINE 回覆訊息 API?
使用 HTTP Request 節點,Method 設為 POST、URL 填入 https://api.line.me/v2/bot/message/reply、Authentication 選 Header Auth 並在 Header 帶入 Authorization 為 Bearer 加上 Channel Access Token。Body 採 JSON 格式,帶入動態取得的 replyToken 與要回覆的訊息內容。更安全的做法是改用 n8n 的 Credentials 功能管理金鑰。
Flex Message 的 JSON 很複雜,有沒有更省力的做法?
LINE 官方提供了 Flex Message Simulator 視覺化編輯器,可以在左邊用拖拉點選方式設計含圖片、按鈕、文字的卡片版面,右邊會即時產生對應的 JSON。設計完成後把 JSON 完整複製,貼進 n8n 的 HTTP Request 節點 Body 即可發送,不必手刻複雜結構。
~/roamer-tech/newsletter
// FREE
// newsletter
訂閱免費電子報
把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。