在昨天的文章中,我們在 LINE Developers Console 成功建立了 Messaging API 頻道,發行了長期有效的 Channel Access Token,並關閉了官方預設的罐頭回覆干擾。
今天 Day 09,我們要將本地的自動化大腦與 LINE 官方伺服器正式打通!我們將利用 ngrok 提供的高速 HTTPS 隧道,將 LINE 的 Webhook 事件導流至 n8n,並深入解析 LINE 傳入的事件封包(Event Payload),確保每一次使用者在手機發送的訊息都能被精確擷取與安全辨識。
當使用者在 LINE 聊天室發送訊息時,LINE 伺服器會將該事件打包為 JSON 格式,並以 HTTP POST 方式發送到我們指定的 Webhook URL。
為了防止中間人攻擊或偽造的 Webhook 請求,LINE 採用了 HMAC-SHA256 數位簽章機制:
x-line-signature。Channel Secret 經由 HMAC-SHA256 加密計算而成。請打開 PowerShell,確保連接埠 5678 的公網隧道正在運行:
ngrok http 5678
複製畫面中的 Forwarding HTTPS 網址,例如:
[https://xxxx-xx-xx-xx-xx.ngrok-free.app](https://xxxx-xx-xx-xx-xx.ngrok-free.app)
1.前往 LINE Developers Console 並進入昨天建立的 Messaging API Channel。
2.切換到 Messaging API 分頁,找到 Webhook settings 區塊。
3.點擊 Webhook URL 旁的 Edit,組裝並貼上你的 n8n Webhook 完整路徑:
測試模式路徑:
[https://xxxx-xx-xx-xx-xx.ngrok-free.app/webhook-test/line-webhook](https://xxxx-xx-xx-xx-xx.ngrok-free.app/webhook-test/line-webhook)
正式運行模式路徑:
[https://xxxx-xx-xx-xx-xx.ngrok-free.app/webhook/line-webhook](https://xxxx-xx-xx-xx-xx.ngrok-free.app/webhook/line-webhook)
4.點擊 Update 儲存。
5.將底下的 Use webhook 開關切換為 開啟 (Enabled)。
1.打開瀏覽器進入 n8n 介面(http://localhost:5678),打開昨天的 LINE Bot Core Workflow。
2.點擊 Webhook 節點,確認 Path 為 line-webhook。
3.點擊節點下方的 Listen for test event,使 n8n 進入等待封包狀態。
1.回到 LINE Developers Console 的 Webhook settings 區塊。
2.點擊 Verify 按鈕。
3.若畫面顯示綠色 Success,代表 LINE 伺服器已經成功連通你的本地端 n8n!
1.在 LINE Developers 的 Messaging API 分頁最上方,找到 QR code。
2.用手機打開 LINE 掃描該 QR code,將你的美食機器人加入好友。
3.在 n8n 再次點擊 Listen for test event。
4.在手機聊天室中輸入一句話發送,例如
:「哈囉!我想吃好吃的」
當你發送訊息後,n8n 的 Webhook 節點會立刻亮起綠色勾勾,並在 Output 面板捕捉到完整的 JSON 資料結構:
{
"destination": "Uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"events": [
{
"type": "message",
"message": {
"type": "text",
"id": "52839201948201",
"text": "哈囉!我想吃好吃的"
},
"webhookEventId": "01HX...",
"deliveryContext": {
"isRedelivery": false
},
"timestamp": 1728000000000,
"source": {
"type": "user",
"userId": "U4a8f9b1c2d3e4f5..."
},
"replyToken": "abcdef0123456789abcdef0123456789",
"mode": "active"
}
]
}
關鍵欄位解析:
events[0].replyToken:最核心的憑證!每次使用者傳訊息時由 LINE 生成的單次有效回覆權杖,我們必須拿著這個 Token 呼叫 Reply API,才能免費把訊息回覆給該使用者。
events[0].message.text:使用者在手機輸入的純文字內容。
events[0].source.userId:使用者的專屬識別碼,可用於識別不同用戶的歷史喜好。
為了方便後續串接 Dify 大腦與回覆節點,我們在 Webhook 後方新增一個 Code 節點進行欄位扁平化處理:
1.點擊 + 新增 Code 節點,命名為 Extract LINE Event。
2.語言選擇 JavaScript,貼入以下程式碼:
// 取得 LINE 事件陣列的第一筆事件
const event = $input.first().json.body.events[0];
// 確保該事件是文字訊息
if (!event || event.type !== 'message' || event.message.type !== 'text') {
return [];
}
return {
reply_token: event.replyToken,
user_id: event.source.userId,
user_message: event.message.text,
timestamp: event.timestamp
};
點擊 Test step,即可看到輸出乾淨清晰的四個變數:
reply_token
user_id
user_message
timestamp
今日結語與明日預告
今天我們成功打通了 LINE 官方平台至本地工作流的最後一哩路:
透過 ngrok 將外部 Webhook 流量平穩導流至本地 n8n。
完成了 LINE Developers 的 Webhook 連通驗證。
成功透過手機發送訊息,並在 n8n 中精準擷取出使用者的文字與關鍵 replyToken!
明天 Day 10,也是我們 10 天系列挑戰的完結大集結!我們將把所有零件徹底組裝起來:將 LINE 訊息送入 Dify (Gemini 大腦) 提取意圖 ➜ 調用 FastAPI 微服務產出推薦 ➜ 呼叫 LINE Reply API 回傳精美卡片到手機! 敬請期待!