n8n 實戰教學:打造 LINE 官方帳號 AI 智能客服系統
[Image blocked: LINE 官方帳號自動回覆]
前言:為什麼你需要 LINE 自動回覆系統?
在台灣,LINE 是最普及的通訊軟體,超過 2,100 萬用戶每天都在使用。對於企業和品牌來說,LINE 官方帳號已經成為與客戶溝通的重要管道。然而,隨著粉絲數量增加,人工回覆訊息變得越來越困難——客戶期待即時回應,但你不可能 24 小時都在線上。
這就是為什麼你需要一套智能自動回覆系統。透過 n8n 這個強大的自動化工具,我們可以打造一個結合 AI 的 LINE 客服機器人,不僅能自動回覆常見問題,還能根據客戶訊息內容提供個人化的回應。
本篇教學將帶你從零開始,建立一套完整的 LINE 官方帳號 AI 智能客服系統。即使你沒有程式背景,只要跟著步驟操作,也能在 30 分鐘內完成設定。
🎬 影片教學
如果你更喜歡透過影片學習,可以觀看以下教學影片:
💡 提示:影片中會有更詳細的操作示範,建議搭配文字教學一起學習效果更佳。
系統架構總覽
在開始之前,讓我們先了解整個系統的運作流程:
客戶發送訊息 → LINE Webhook 觸發 → n8n 接收訊息
↓
判斷訊息類型
↓
┌───────────────────┼───────────────────┐
↓ ↓ ↓
關鍵字匹配 AI 智能回覆 轉接真人
↓ ↓ ↓
預設回覆 GPT 生成回覆 通知客服
↓ ↓ ↓
└───────────────────┼───────────────────┘
↓
LINE API 發送回覆
↓
記錄到 Google Sheets
客戶發送訊息 → LINE Webhook 觸發 → n8n 接收訊息
↓
判斷訊息類型
↓
┌───────────────────┼───────────────────┐
↓ ↓ ↓
關鍵字匹配 AI 智能回覆 轉接真人
↓ ↓ ↓
預設回覆 GPT 生成回覆 通知客服
↓ ↓ ↓
└───────────────────┼───────────────────┘
↓
LINE API 發送回覆
↓
記錄到 Google Sheets
這個系統具備以下特點:
| 功能 | 說明 |
|---|---|
| 關鍵字自動回覆 | 針對常見問題(營業時間、地址、價格等)提供即時回覆 |
| AI 智能對話 | 使用 GPT 理解客戶意圖,生成自然的回覆內容 |
| 真人轉接機制 | 當 AI 無法處理時,自動通知真人客服接手 |
| 對話記錄 | 所有對話自動記錄到 Google Sheets,方便追蹤和分析 |
第一階段:LINE 官方帳號設定
步驟 1:建立 LINE 官方帳號
如果你還沒有 LINE 官方帳號,請先到 LINE Official Account Manager 建立一個。建立過程很簡單,只需要填寫基本資料即可。
步驟 2:啟用 Messaging API
- 登入 LINE Official Account Manager
- 點選右上角的「設定」
- 選擇「Messaging API」
- 點選「啟用 Messaging API」
- 選擇或建立一個 LINE Developers Provider
啟用後,你會看到以下重要資訊:
- Channel ID:你的頻道 ID
- Channel Secret:頻道密鑰(請妥善保管)
- Channel Access Token:存取權杖(點選「發行」按鈕取得)
⚠️ 重要提醒:Channel Secret 和 Access Token 是敏感資訊,請勿外洩或提交到公開的程式碼庫中。
步驟 3:設定 Webhook
在 Messaging API 設定頁面中,你會看到 Webhook URL 的設定欄位。這個 URL 稍後會由 n8n 提供,我們先繼續下一步。
同時,請確保以下設定:
- 使用 Webhook:開啟
- 自動回應訊息:關閉(我們要用 n8n 處理)
- 加入好友的歡迎訊息:可依需求開啟或關閉
第二階段:n8n 工作流程建立
步驟 1:建立 LINE Webhook 觸發節點
首先,我們需要建立一個 Webhook 節點來接收 LINE 傳來的訊息。
- 在 n8n 中建立新的工作流程
- 新增「Webhook」節點
- 設定如下:
{
"httpMethod": "POST",
"path": "line-webhook",
"responseMode": "onReceived",
"responseData": "allEntries"
}
{
"httpMethod": "POST",
"path": "line-webhook",
"responseMode": "onReceived",
"responseData": "allEntries"
}
- 啟用工作流程後,複製 Webhook URL
- 回到 LINE Messaging API 設定頁面,貼上這個 URL
- 點選「驗證」確認連線成功
步驟 2:解析 LINE 訊息
LINE 傳來的訊息格式如下:
{
"events": [
{
"type": "message",
"replyToken": "xxx",
"source": {
"userId": "U1234567890abcdef",
"type": "user"
},
"message": {
"type": "text",
"id": "12345678901234",
"text": "請問營業時間是幾點?"
}
}
]
}
{
"events": [
{
"type": "message",
"replyToken": "xxx",
"source": {
"userId": "U1234567890abcdef",
"type": "user"
},
"message": {
"type": "text",
"id": "12345678901234",
"text": "請問營業時間是幾點?"
}
}
]
}
新增一個「Code」節點來解析訊息:
// 解析 LINE Webhook 訊息
const events = $input.first().json.body.events;
if (!events || events.length === 0) {
return [{ json: { skip: true } }];
}
const event = events[0];
// 只處理文字訊息
if (event.type !== 'message' || event.message.type !== 'text') {
return [{ json: { skip: true } }];
}
return [{
json: {
replyToken: event.replyToken,
userId: event.source.userId,
userMessage: event.message.text,
messageId: event.message.id,
timestamp: new Date().toISOString()
}
}];
// 解析 LINE Webhook 訊息
const events = $input.first().json.body.events;
if (!events || events.length === 0) {
return [{ json: { skip: true } }];
}
const event = events[0];
// 只處理文字訊息
if (event.type !== 'message' || event.message.type !== 'text') {
return [{ json: { skip: true } }];
}
return [{
json: {
replyToken: event.replyToken,
userId: event.source.userId,
userMessage: event.message.text,
messageId: event.message.id,
timestamp: new Date().toISOString()
}
}];
步驟 3:關鍵字判斷與路由
接下來,我們要根據訊息內容決定如何回覆。新增一個「Switch」節點:
{
"rules": [
{
"value": "營業時間|幾點開|幾點關|開門|打烊",
"output": "營業時間"
},
{
"value": "地址|在哪|怎麼去|位置|交通",
"output": "地址資訊"
},
{
"value": "價格|多少錢|費用|收費",
"output": "價格查詢"
},
{
"value": "真人|客服|轉接",
"output": "轉接真人"
}
],
"fallbackOutput": "AI 回覆"
}
{
"rules": [
{
"value": "營業時間|幾點開|幾點關|開門|打烊",
"output": "營業時間"
},
{
"value": "地址|在哪|怎麼去|位置|交通",
"output": "地址資訊"
},
{
"value": "價格|多少錢|費用|收費",
"output": "價格查詢"
},
{
"value": "真人|客服|轉接",
"output": "轉接真人"
}
],
"fallbackOutput": "AI 回覆"
}
步驟 4:設定預設回覆內容
針對每個關鍵字分支,新增「Set」節點設定回覆內容:
營業時間回覆:
{
"replyMessage": "🕐 我們的營業時間如下:\n\n週一至週五:09:00 - 18:00\n週六:10:00 - 17:00\n週日:公休\n\n如有特殊需求,歡迎提前預約!"
}
{
"replyMessage": "🕐 我們的營業時間如下:\n\n週一至週五:09:00 - 18:00\n週六:10:00 - 17:00\n週日:公休\n\n如有特殊需求,歡迎提前預約!"
}
地址資訊回覆:
{
"replyMessage": "📍 我們的地址是:\n\n台北市中山區南京東路三段 123 號 5 樓\n\n🚇 交通方式:\n捷運南京復興站 2 號出口,步行約 3 分鐘\n\n需要我傳送 Google Maps 位置給你嗎?"
}
{
"replyMessage": "📍 我們的地址是:\n\n台北市中山區南京東路三段 123 號 5 樓\n\n🚇 交通方式:\n捷運南京復興站 2 號出口,步行約 3 分鐘\n\n需要我傳送 Google Maps 位置給你嗎?"
}
價格查詢回覆:
{
"replyMessage": "💰 我們的服務價格如下:\n\n基礎方案:NT$ 999/月\n進階方案:NT$ 1,999/月\n企業方案:NT$ 4,999/月\n\n詳細方案內容請參考:https://example.com/pricing\n\n有任何問題歡迎詢問!"
}
{
"replyMessage": "💰 我們的服務價格如下:\n\n基礎方案:NT$ 999/月\n進階方案:NT$ 1,999/月\n企業方案:NT$ 4,999/月\n\n詳細方案內容請參考:https://example.com/pricing\n\n有任何問題歡迎詢問!"
}
步驟 5:AI 智能回覆設定
對於無法用關鍵字匹配的訊息,我們使用 AI 來生成回覆。新增「OpenAI」節點:
{
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "你是一個專業的客服助理,代表「AutoAgent 自動化工具平台」回覆客戶訊息。請用繁體中文、友善且專業的語氣回覆。回覆請簡潔有力,不超過 200 字。如果問題超出你的知識範圍,請建議客戶聯繫真人客服。\n\n公司資訊:\n- 主要服務:提供各種免費線上工具和自動化解決方案\n- 營業時間:週一至週五 09:00-18:00\n- 聯繫方式:[email protected]"
},
{
"role": "user",
"content": "{{ $json.userMessage }}"
}
],
"temperature": 0.7,
"maxTokens": 500
}
{
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "你是一個專業的客服助理,代表「AutoAgent 自動化工具平台」回覆客戶訊息。請用繁體中文、友善且專業的語氣回覆。回覆請簡潔有力,不超過 200 字。如果問題超出你的知識範圍,請建議客戶聯繫真人客服。\n\n公司資訊:\n- 主要服務:提供各種免費線上工具和自動化解決方案\n- 營業時間:週一至週五 09:00-18:00\n- 聯繫方式:[email protected]"
},
{
"role": "user",
"content": "{{ $json.userMessage }}"
}
],
"temperature": 0.7,
"maxTokens": 500
}
步驟 6:轉接真人客服
當客戶要求轉接真人時,我們需要:
- 回覆客戶已收到請求
- 通知真人客服
回覆客戶:
{
"replyMessage": "👋 好的,我已經通知真人客服了!\n\n客服人員會在 10 分鐘內回覆您,請稍候。\n\n如果是緊急事項,也可以直接撥打客服專線:02-1234-5678"
}
{
"replyMessage": "👋 好的,我已經通知真人客服了!\n\n客服人員會在 10 分鐘內回覆您,請稍候。\n\n如果是緊急事項,也可以直接撥打客服專線:02-1234-5678"
}
通知客服(使用 LINE Notify 或 Email):
{
"message": "🔔 有客戶要求轉接真人客服\n\n客戶 ID:{{ $json.userId }}\n訊息內容:{{ $json.userMessage }}\n時間:{{ $json.timestamp }}"
}
{
"message": "🔔 有客戶要求轉接真人客服\n\n客戶 ID:{{ $json.userId }}\n訊息內容:{{ $json.userMessage }}\n時間:{{ $json.timestamp }}"
}
步驟 7:發送 LINE 回覆
最後,我們需要透過 LINE API 發送回覆。新增「HTTP Request」節點:
{
"method": "POST",
"url": "https://api.line.me/v2/bot/message/reply",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{ $credentials.lineAccessToken }}"
},
"body": {
"replyToken": "{{ $json.replyToken }}",
"messages": [
{
"type": "text",
"text": "{{ $json.replyMessage }}"
}
]
}
}
{
"method": "POST",
"url": "https://api.line.me/v2/bot/message/reply",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{ $credentials.lineAccessToken }}"
},
"body": {
"replyToken": "{{ $json.replyToken }}",
"messages": [
{
"type": "text",
"text": "{{ $json.replyMessage }}"
}
]
}
}
步驟 8:記錄對話到 Google Sheets
為了追蹤和分析對話,我們將所有對話記錄到 Google Sheets。新增「Google Sheets」節點:
{
"operation": "append",
"sheetId": "your-sheet-id",
"range": "對話記錄!A:F",
"values": [
"{{ $json.timestamp }}",
"{{ $json.userId }}",
"{{ $json.userMessage }}",
"{{ $json.replyMessage }}",
"{{ $json.replyType }}",
"{{ $json.processingTime }}"
]
}
{
"operation": "append",
"sheetId": "your-sheet-id",
"range": "對話記錄!A:F",
"values": [
"{{ $json.timestamp }}",
"{{ $json.userId }}",
"{{ $json.userMessage }}",
"{{ $json.replyMessage }}",
"{{ $json.replyType }}",
"{{ $json.processingTime }}"
]
}
第三階段:進階功能擴展
功能 1:Rich Menu 圖文選單
LINE 官方帳號支援圖文選單,可以讓客戶更方便地找到常用功能。你可以在 LINE Official Account Manager 中設計圖文選單,並設定點擊後發送特定文字,讓 n8n 自動處理。
功能 2:Flex Message 精美訊息
除了純文字回覆,LINE 還支援 Flex Message,可以發送包含圖片、按鈕、輪播的精美訊息:
{
"type": "flex",
"altText": "產品資訊",
"contents": {
"type": "bubble",
"hero": {
"type": "image",
"url": "https://example.com/product.jpg",
"size": "full",
"aspectRatio": "20:13"
},
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "text",
"text": "熱銷商品",
"weight": "bold",
"size": "xl"
},
{
"type": "text",
"text": "NT$ 999",
"size": "lg",
"color": "#ff5551"
}
]
},
"footer": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "button",
"action": {
"type": "uri",
"label": "立即購買",
"uri": "https://example.com/buy"
},
"style": "primary"
}
]
}
}
}
{
"type": "flex",
"altText": "產品資訊",
"contents": {
"type": "bubble",
"hero": {
"type": "image",
"url": "https://example.com/product.jpg",
"size": "full",
"aspectRatio": "20:13"
},
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "text",
"text": "熱銷商品",
"weight": "bold",
"size": "xl"
},
{
"type": "text",
"text": "NT$ 999",
"size": "lg",
"color": "#ff5551"
}
]
},
"footer": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "button",
"action": {
"type": "uri",
"label": "立即購買",
"uri": "https://example.com/buy"
},
"style": "primary"
}
]
}
}
}
功能 3:對話上下文記憶
為了讓 AI 回覆更自然,我們可以記住對話上下文。使用 Redis 或資料庫儲存最近的對話記錄:
// 取得最近 5 則對話
const recentMessages = await getRecentMessages(userId, 5);
// 組合成 AI 對話歷史
const conversationHistory = recentMessages.map(msg => ({
role: msg.isBot ? 'assistant' : 'user',
content: msg.content
}));
// 加入當前訊息
conversationHistory.push({
role: 'user',
content: currentMessage
});
// 取得最近 5 則對話
const recentMessages = await getRecentMessages(userId, 5);
// 組合成 AI 對話歷史
const conversationHistory = recentMessages.map(msg => ({
role: msg.isBot ? 'assistant' : 'user',
content: msg.content
}));
// 加入當前訊息
conversationHistory.push({
role: 'user',
content: currentMessage
});
常見問題 FAQ
Q1:Webhook 驗證失敗怎麼辦?
確認以下幾點:
- n8n 工作流程已啟用
- Webhook URL 正確(包含 https://)
- 防火牆沒有阻擋 LINE 的請求
Q2:回覆訊息失敗?
檢查:
- Channel Access Token 是否正確
- replyToken 是否在 30 秒內使用(過期會失效)
- 訊息格式是否正確
Q3:如何處理圖片或貼圖訊息?
目前我們只處理文字訊息,你可以擴展程式碼來處理其他類型:
if (event.message.type === 'image') {
// 處理圖片
} else if (event.message.type === 'sticker') {
// 處理貼圖
}
if (event.message.type === 'image') {
// 處理圖片
} else if (event.message.type === 'sticker') {
// 處理貼圖
}
總結
透過這篇教學,你已經學會如何使用 n8n 打造一套完整的 LINE 官方帳號 AI 智能客服系統。這個系統可以:
- 24/7 自動回覆:即使在非營業時間,也能即時回應客戶
- 智能理解意圖:透過 AI 理解客戶問題,提供個人化回覆
- 無縫轉接真人:當 AI 無法處理時,自動通知真人客服
- 完整對話記錄:所有對話都有記錄,方便追蹤和分析
這只是起點,你可以根據自己的需求繼續擴展功能,例如:
- 整合 CRM 系統,自動建立客戶資料
- 連接電商平台,提供訂單查詢功能
- 加入多語言支援,服務海外客戶
如果你在設定過程中遇到任何問題,歡迎到我們的 n8n 資源頁面 [blocked] 下載完整的工作流程模板,或是參考其他教學文章。
相關資源:
- n8n 官方文件
- LINE Messaging API 文件
- 下載完整 n8n 模板 [blocked]



