n8n LINE Bot 與 Line Webhook 教學¶
這章專門教你把 LINE Messaging API 接進 n8n,並用你剛安裝的
n8n-nodes-linewebhookcommunity node 做出第一個 LINE Bot。
這章適合什麼時候學¶
- 你已經會 n8n 的基本操作
- 你想把 LINE 當成 workflow 的輸入口或通知出口
- 你想做最小可用的 LINE 回聲機器人
- 你想理解 LINE webhook、replyToken、userId 各自代表什麼
先看整體地圖¶
LINE Bot 在 n8n 裡,通常不是「一個 node 解決全部」,而是三層結構:
- 接收事件:
Line Webhook - 組裝訊息:
Line Message - 送出或查詢:
Line Messaging API
你可以把它想成:
LINE 使用者傳訊息 -> LINE 平台 -> n8n Webhook -> 你的邏輯 -> 回覆 LINE 使用者
所以 LINE Bot 的重點不只是「會回話」,而是你要知道資料在哪一層被接收、整理、判斷、送出。
想一想¶
很多人第一次學 LINE Bot,會把焦點全放在「怎麼回一則訊息」。這當然重要,但那只是最後一步。真正更關鍵的是,你要先分清楚 LINE 在整個流程裡扮演什麼角色。它可能是聊天入口、通知出口、表單替代介面、群組事件來源,甚至只是某個流程的最後一哩。當你先想清楚 LINE 在流程中的位置,你就不會只把它當成一個聊天工具,而會開始把它看成 workflow 的一個節點。
初學時你也很容易把 replyToken、userId、groupId 混在一起。其實它們的用途完全不同。replyToken 是這次事件回覆用的短期憑證,userId 是辨識使用者的對象 ID,groupId 是群組的對象 ID。搞懂這些欄位,比死記某個節點畫面更有價值。因為一旦你知道每個欄位在流程裡代表什麼,就算換成 HTTP Request 自己打 API,你也不會迷路。
1. 這個 community node 到底提供什麼¶
你安裝的套件 n8n-nodes-linewebhook 主要提供三個節點:
1. Line Webhook¶
用途: - 接收 LINE 傳進來的事件 - 驗證 LINE signature - 依事件類型把資料分流到不同輸出
支援的輸出類型:
- text
- audio
- sticker
- image
- video
- location
- postback
- join
- leave
- memberJoined
- memberLeft
2. Line Message¶
用途: - 把你要送出去的內容組成 LINE message object
可組的訊息類型:
- Text
- Image
- Audio
- Video
- Location
- Sticker
- Flex
3. Line Messaging API¶
用途: - 回覆訊息 - 主動推播 - 取回多媒體內容 - 查使用者或群組資料
支援的操作:
- Send Message
- Multicast Message
- Get Message Content
- Get User Profile
- Get Group Chat Summary
- Get Group Chat Member User IDs
- Get Group Chat Member Profile
2. 先準備 LINE 端的必要資訊¶
你至少要準備兩種 credential:
A. Webhook 用 credential¶
用途:
- 驗證 x-line-signature
你要準備:
- Channel Secret
B. Messaging API 用 credential¶
用途: - 發送回覆或主動推播
你要準備:
- Channel Access Token
在 LINE Developers Console 的實務流程通常是:
- 建立一個
Messaging API channel - 拿到
Channel secret - 建立或複製
Channel access token - 在 LINE 後台把 webhook URL 指到你的 n8n webhook
2. 5 從零到測通的完整設定流程¶
如果你要真的把這套跑起來,建議照下面四段做,不要跳步。
步驟 1. 在 n8n 內建立 LINE credentials¶
你需要建立兩組 credential。
A. lineWebhookAuthApi¶
用途: - 驗證 LINE 傳來的 webhook signature
你要填:
- Channel Secret
取得位置:
- LINE Developers Console
- 進入你的 Messaging API channel
- 找 Channel secret
B. lineMessagingAuthApi¶
用途: - 回覆訊息 - 主動推播 - 查使用者與群組資料
你要填:
- Channel Access Token
取得位置:
- LINE Developers Console
- 進入 Messaging API 頁面
- 建立或複製 Channel access token
n8n 內實際操作¶
- 打開 workflow
- 點
Line Webhook - 在 credential 下拉選單建立
lineWebhookAuthApi - 填入
Channel Secret - 再點
Line Messaging API - 建立
lineMessagingAuthApi - 填入
Channel Access Token
如果這一步沒做完,workflow 匯入成功也不能真的收發 LINE 訊息。
步驟 2. 把本機 n8n 對外公開¶
如果你的 n8n 是本機:
http://localhost:5678
LINE 平台是連不到的,所以你一定要先有公開網址。
方法 A. 用 cloudflared¶
如果你機器上已裝 cloudflared,可以先跑:
cloudflared tunnel --url http://localhost:5678
你會拿到一個像這樣的網址:
https://xxxx.trycloudflare.com
方法 B. 用 ngrok¶
ngrok http 5678
你會拿到一個像這樣的網址:
https://xxxx.ngrok-free.app
你的 LINE webhook URL 會長成¶
如果 Line Webhook 的 Path 是:
line-echo-demo
那最終 webhook URL 通常是:
https://你的公開網址/webhook/line-echo-demo
注意:
- 不是 localhost
- 不是 n8n 編輯頁 URL
- 是 workflow webhook 路徑
步驟 3. 在 LINE Developers Console 設定 webhook¶
你要做的事¶
- 打開 LINE Developers Console
- 進入你的
Messaging API channel - 找到
Webhook URL - 貼上:
https://你的公開網址/webhook/line-echo-demo
- 按
Verify - 成功後把
Use webhook打開
如果 Verify 失敗,先檢查這四件事¶
- n8n workflow 是否已啟用
Line Webhook的 path 是否真的叫line-echo-demo- 公開網址是否還活著
lineWebhookAuthApi裡的Channel Secret是否正確
一個實務提醒¶
如果你用的是臨時 tunnel 網址,例如 ngrok 免費版或 trycloudflare,每次重開可能都會變網址。網址一變,LINE 後台也要一起更新。
步驟 4. 實際測通 LINE Echo Bot¶
測試順序¶
- 在 n8n 啟用 workflow
- 確認
Line Webhook與Line Messaging APIcredentials 都已填好 - 確認 LINE Developers Console 的 webhook verify 成功
- 用自己的 LINE 帳號把 Bot 加為好友
- 傳一則文字訊息,例如:
你好
- 回到 n8n 看 execution
- 應該看到:
Line Webhook有收到text事件Normalize Text Event有抓到replyToken與receivedTextBuild Echo Message有產生messageReply to LINE成功送出
成功時你會看到什麼¶
LINE 會回你:
你剛剛說:你好
如果沒有回訊息,依這個順序查¶
Line Webhook有沒有收到 executionreplyToken是不是空的Line Messaging APIcredential 有沒有填錯 token- 你是不是把
ReplyToken寫成$json.replyToken
正確寫法在這個範例裡是:
{{$node["Normalize Text Event"].json.replyToken}}
因為 Build Echo Message 節點輸出只有 message,不會自動保留前一節點所有欄位。
3. 本機做 LINE Bot 時最容易卡住的地方¶
如果你的 n8n 跑在:
http://localhost:5678
那 LINE 平台是打不到你的。因為 LINE 的伺服器無法直接呼叫你電腦上的 localhost。
所以本機學習時你需要:
ngrokcloudflared tunnel- 或把 n8n 部署到公開網域
也就是說,LINE 後台中的 webhook URL 不會是:
http://localhost:5678/webhook/...
而會是:
https://你的公開網址/webhook/...
這是 LINE Bot 新手最常見的第一個誤會。不是 n8n 壞掉,而是 webhook 入口根本還沒對外公開。
4. Line Webhook 節點怎麼看¶
這個節點最重要的參數很少:
PathlineWebhookAuthApicredential
它的特點不是欄位多,而是輸出很多。它會依事件類型分到不同 output。
以文字訊息為例,text output 送出的資料結構核心通常會長這樣:
{
"destination": "xxxxxxxx",
"event": {
"type": "message",
"replyToken": "...",
"source": {
"type": "user",
"userId": "Uxxxxxxxx"
},
"message": {
"id": "1234567890",
"type": "text",
"text": "hello"
}
}
}
你最常會用到:
{{$json.event.replyToken}}{{$json.event.message.text}}{{$json.event.source.userId}}{{$json.event.source.type}}{{$json.event.message.id}}
5. 第一個 LINE 回聲機器人怎麼做¶
最小可用流程:
Line Webhook -> Set -> Line Message -> Line Messaging API -> Respond to Webhook
這個流程在做的事很單純:
- 接文字訊息
- 把
replyToken和收到的文字整理出來 - 組成一則回覆訊息
- 用
replyToken回覆 - 回傳 HTTP 200 給 LINE
節點清單¶
Line WebhookNormalize Text Event用SetBuild Echo Message用Line MessageReply to LINE用Line Messaging APIRespond to Webhook
Normalize Text Event 建議欄位¶
replyToken = {{$json.event.replyToken}}receivedText = {{$json.event.message.text}}userId = {{$json.event.source.userId || ''}}sourceType = {{$json.event.source.type || ''}}messageId = {{$json.event.message.id || ''}}receivedAt = {{$json.event.timestamp || $now}}
Build Echo Message¶
選 Message Type = Text
文字內容可以先用:
你剛剛說:{{$node["Normalize Text Event"].json.receivedText}}
Reply to LINE¶
操作選:
Operation = Send Message
核心欄位:
ReplyToken = {{$node["Normalize Text Event"].json.replyToken}}Message = {{$json.message}}
這樣就會把上一個 Line Message 節點產生的 message payload 送出去。
6. replyToken、targetRecipient 到底差在哪¶
這是初學者很容易混掉的地方。
replyToken¶
用途: - 回覆這一次 webhook 事件
特性: - 短期有效 - 只能用在回覆當前事件 - 最常見於「使用者先傳訊息給你」
targetRecipient¶
用途: - 主動推播給某個 user、group、room
特性: - 不依賴當前 webhook - 適合排程通知、主動提醒、系統訊息
簡化記法:
- 有 webhook 當下事件,要回那次訊息:用
replyToken - 沒有 webhook 當下事件,但你知道對象 ID:用
targetRecipient
7. Line Message 節點怎麼用¶
這個節點不是送訊息,而是先組訊息。
Text¶
最適合新手起步。
必要欄位:
- Text
Image¶
必要欄位:
- URL
- Preview Url
Video¶
必要欄位:
- URL
- Preview Url
Location¶
必要欄位:
- Title
- Address
- Latitude
- Longitude
Sticker¶
必要欄位:
- Package ID
- Sticker ID
Flex¶
必要欄位:
- Alt Text
- Flex Content
Flex 很強,但不適合當第一個示範。建議你先把文字回覆做通,再回頭學 Flex。
8. Line Messaging API 節點的常見用法¶
1. 回覆訊息¶
情境: - 使用者傳訊息給 Bot,你要立刻回
設定:
- Operation = Send Message
- ReplyToken 填 webhook 事件中的 token
2. 主動推播¶
情境: - 每天固定時間推播提醒 - 某筆資料異常時通知某位使用者或群組
設定:
- Operation = Send Message
- Target Recipient 填 userId / groupId / roomId
3. 取回圖片、音訊、影片內容¶
情境: - 使用者傳圖片給你 - 你想把檔案存到 S3、Google Drive、Qdrant 前處理流程
設定:
- Operation = Get Message Content
- Message ID = {{$json.event.message.id}}
4. 查使用者資料¶
情境:
- 你只拿到 userId
- 你想抓 display name 或其他基本資料
設定:
- Operation = Get User Profile
- User ID = {{$json.event.source.userId}}
9. 一份實務上好用的欄位 mapping¶
Webhook 事件進來後,建議先整理成這些欄位¶
| 標準欄位 | 來源 expression | 用途 |
|---|---|---|
eventType |
{{$json.event.type}} |
判斷 message、join、postback |
replyToken |
{{$json.event.replyToken}} |
回覆訊息 |
sourceType |
{{$json.event.source.type}} |
判斷 user / group / room |
userId |
{{$json.event.source.userId || ''}} |
取得使用者對象 ID |
groupId |
{{$json.event.source.groupId || ''}} |
群組推播與查詢 |
roomId |
{{$json.event.source.roomId || ''}} |
room 場景使用 |
messageType |
{{$json.event.message.type || ''}} |
text/image/audio 等 |
messageId |
{{$json.event.message.id || ''}} |
取回多媒體內容 |
receivedText |
{{$json.event.message.text || ''}} |
文字訊息主內容 |
timestamp |
{{$json.event.timestamp || $now}} |
記錄事件時間 |
這一步很重要。因為你一旦先把 LINE 原始 payload 正規化,後面的 IF、Switch、AI、Google Sheets、資料庫節點都會變乾淨很多。
10. 建議先做的 4 個 LINE 題目¶
題目 1. 回聲機器人¶
目的: - 練 webhook、replyToken、message object
題目 2. 關鍵字自動回覆¶
目的:
- 練 IF / Switch
題目 3. LINE 傳圖後存到雲端¶
目的:
- 練 Get Message Content
- 練 binary data 流程
題目 4. LINE 作為通知出口¶
目的:
- 練 Schedule Trigger 或資料異常告警
- 練 targetRecipient
11. 這個 community node 的實務注意事項¶
1. 它是 community node,不是 n8n 官方內建¶
代表: - 升級後要重新確認相容性 - 有 bug 時不一定跟官方節奏同步修
2. 本機測試一定要處理公開網址¶
LINE 打不到 localhost,這不是節點設定問題。
3. Line Message 節點會只輸出 message¶
所以如果你後面還需要 replyToken,通常要:
- 用 expression 從前一個節點抓
- 或先用 Set 把需要的欄位整理好
4. audio 訊息建構目前要保守看待¶
從你安裝的這個套件版本程式碼來看,audio message 在內部組 payload 時看起來有實作疑慮。實務上如果你要做音訊訊息發送,我建議:
- 先改用
HTTP Request打官方 LINE Messaging API - 或先以
text、image、sticker、flex為主
這不是說整個套件不能用,而是表示你要先用最穩的部分做學習與 MVP。
12. 建議的學習順序¶
- 先做文字回聲機器人
- 再做關鍵字分流
- 再學
Get User Profile - 再做圖片接收與儲存
- 最後再做 Flex message 或主動推播
13. 一份最小上線檢查表¶
在你說「我的 LINE Bot 為什麼不能用」之前,先看這張表。
n8n 端¶
- workflow 已啟用
Line Webhookpath 已設定lineWebhookAuthApi已填Channel SecretlineMessagingAuthApi已填Channel Access Token
網路端¶
- 你有一個公開網址
- 公開網址目前可連
- webhook URL 指向正確 path
LINE 端¶
- Bot 已建立
- Webhook URL 已貼入
Verify成功Use webhook已打開- 你已把 Bot 加為好友
配套範例¶
這章搭配這兩份檔案一起看:
下一步建議¶
學完這章後,最適合接著做的是:
因為 LINE Bot 做到後面,本質上就會回到 webhook、API、資料正規化與工具選擇。