Blossom Lab / LINE AI Agent 手把手實作
01 / 22
From classroom JSON → your own working LINE agent

從老師的 n8n JSON,改成自己的 LINE AI 客服。

這不是整理過後看起來很順的理論教學,而是把 2026/09/18 從早上匯入老師範例,到手機真的收到 AI 回覆的實際流程,一步一步重跑。

LINE→n8n Webhook→Google Sheet 知識→OpenCode Go / DeepSeek→LINE Reply→Sheet Log
今天的完成標準

不是「節點看起來有接好」。而是:手機 LINE 真的收到依自己的資料產生的回答,而且 Google Sheet 真的新增一筆紀錄。

AI

這份手冊有第二條主線:看不懂,就截圖問 AI。

你不需要一次看懂 n8n 每個欄位。遇到畫面不同、紅色 node、錯誤訊息時,截現在這一個畫面 → 問 AI 只找第一個 blocker → 一次修一項 → 繼續。 API Key、Token、Channel Secret 記得不要截進去。

PHASE 01拆老師範例
PHASE 02換自己的資料
PHASE 03換自己的 AI
PHASE 04接 LINE
PHASE 05真機除錯
PHASE 06端到端驗收
01

先把老師的範例拆乾淨。

第一個原則:不要把「老師 demo 已經能跑」誤認成「這份 JSON 已經是自己的」。先看哪些東西能沿用,哪些必須換掉。

01

匯入老師提供的 n8n workflow JSON

先保留原始流程,不急著重建。

現在要做什麼

把老師提供的「雙 LINE 共用知識庫+AI 客服」JSON 匯入 n8n,先看完整資料流。

你會看到
LINE Webhook → 共用知識庫 → Append Sheet + AI → 整理 LINE 回覆 → LINE Reply
n8n workflow overview
實際匯入後的工作流。先看資料流,不要一開始就逐顆 node 亂改。
成功判斷你看得到完整 workflow,並能辨認 LINE、知識庫、AI、LINE Reply、Google Sheet 幾個角色。

看不懂整張 workflow?截圖問 AI

截整張 canvas,但不要截到任何展開的 Token / Key。

我剛匯入一份 n8n workflow。請先只幫我讀這張整體流程圖:每一顆 node 是做什麼、資料從哪裡進、哪裡出。不要叫我修改任何設定。
02

先檢查:哪些設定其實還是老師的

不要只看節點名稱,要看實際 URL、Sheet、Prompt、Credential。

實際檢查到的東西
  • 老師兩個 LINE Webhook / Channel。
  • 老師 Google Sheet ID、gid、Credential reference。
  • 橙星智慧零售的固定 prompt / knowledge。
  • Gemini Credential reference。
  • 測試留下的 pinned LINE event。
  • 原始 LINE Reply 節點甚至有直接寫在 Authorization 裡的 Bearer token。
安全重點匯出的 workflow JSON 不一定只是「流程圖」。分享前要先檢查是否包含 API Key、Token、Credential reference、測試事件或個資。

不知道 JSON 裡藏了什麼?

這是一份 n8n workflow JSON。請只幫我做安全盤點:找出 Token、Key、Credential reference、Sheet ID、Webhook URL、固定公司名稱、pinData。不要回顯任何完整 secret,只告訴我位置與是否要移除。
03

做一份自己的安全版 workflow

保留流程邏輯,先把老師環境拔掉。

老師版

雙 LINE+零售資料+Gemini

老師 Sheet / Credential / Token / 橙星 knowledge / pinned event

→
我們版

先只留外部 LINE AI 客服

所有外部資源改 placeholder;秘密資料清空;公司 knowledge 改成 Blossom。

為什麼先縮成一條

今天目標是先跑通一個 E2E。店長內部 Bot、Dashboard、進階 fallback 都先不加,避免同時多一倍 Token、Webhook 與排錯路徑。

下載目前安全版模板

Checkpoint 01 · 老師環境已拆開

知道哪顆 node 做什麼沒有沿用老師秘密資料外部客服路徑保留下來接下來只換自己的資源
02

換成自己的 LINE 與資料。

這一段不碰模型能力,先讓「自己的入口」與「自己的資料」準備好。

04

建立自己的 LINE Official Account / Messaging API

老師的 LINE 不能沿用,Token 也不能混用。

需要確認
  • 自己的 LINE Official Account 已建立。
  • Messaging API Channel 已啟用。
  • 有自己的 Basic ID / Channel ID。
  • Channel Access Token 已發行。
不要貼給 AI / 同學Channel Secret、Channel Access Token、登入密碼。後面只把 Token 貼進 n8n Credential。

LINE Developers 頁面看不懂?

我正在把 LINE Official Account 接到 n8n。這是 Messaging API 設定畫面。請只告訴我:Basic ID、Webhook URL、Use webhook、Token 是否已發行分別在哪裡看。不要叫我貼 Token 或 Channel Secret。
05

建立一份自己的 Google Sheet:紀錄+知識庫

同一份 Spreadsheet 先做兩個 tab 就夠。

Tab A · 客服紀錄
時間|來源|使用者|分類|內容|狀態
客服紀錄欄位
客服紀錄第一列只要先對齊 workflow 的六個欄位。
Tab B · 知識庫
類別|關鍵字|內容
詢價    外燴 詢價        請提供活動日期、地點、人數、預算與特殊飲食需求
素食    素食 蔬食        可以先註明素食人數與需求,正式菜色需人工確認
報價    報價 價格        AI 可以先整理需求,但正式報價需由真人確認
服務    外燴 服務        Blossom 提供外燴相關服務,實際可承接內容需依案件確認
人工    付款 退款 客訴   付款、退款、重大客訴與特殊承諾請轉人工處理
Google Sheet knowledge
一筆知識一列。不要把五筆資料塞在同一個儲存格裡用換行硬分。
06

建立 Google Sheets OAuth2 Credential

Append Row 要能真的寫進自己的 Sheet。

n8n → Credentials → Google Sheets OAuth2 → Sign in with Google → 授權
成功判斷Credential 顯示 Connected,Google Sheets node 可以選到自己的 Spreadsheet。

找不到 Credential 名稱?截你目前下拉選單

我在 n8n 要建立 Google Sheets OAuth2 Credential,但我的介面可能跟教學版本不同。請看這張截圖,只告訴我下一個應該點哪個 credential type;不要一次給後面所有步驟。
07

把 Append Row 換成自己的「客服紀錄」

這一步我們真的先撞到 Not a valid Sheet ID。

操作
  1. 打開 Append row in sheet。
  2. Credential 選自己的 Google Sheets Credential。
  3. Document / Sheet 選自己的 Spreadsheet。
  4. Worksheet 選「客服紀錄」。
  5. 對齊六個欄位。
Not a valid Sheet ID
我們遇到的第一個真實錯誤:不是 OAuth 壞掉,而是模板裡還是 placeholder Sheet ID。
如果看到 Not a valid Sheet ID先檢查 Document ID 是否仍是 REPLACE_BLOSSOM_LOG_SHEET_ID。不要先重做 Credential。
成功判斷Append Row node 的紅色警告消失。
08

把「共用知識庫」改成自己的 Sheet ID / gid

這版不是 Vector RAG;Code node 直接抓 Google Sheet CSV。

修改 Code node
const SHEET_ID = '你的 Spreadsheet ID';
const GID = '知識庫分頁的 gid';
從網址找值
https://docs.google.com/spreadsheets/d/SHEET_ID/edit?gid=GID
這版知識庫怎麼運作收到 LINE 文字 → 抓 Sheet CSV → 用文字包含去篩相關 row → 組成 knowledge → 丟給模型。它是最小 demo,不是完整 RAG。
09

確認知識庫 CSV 真的讀得到

demo 階段先讓「知道連結的使用者可檢視」。

CSV URL 形式
https://docs.google.com/spreadsheets/d/SHEET_ID/export?format=csv&gid=GID
CSV opened as garbled text in Excel
我們用 Excel 直接打開時中文變亂碼,但這是 Excel 編碼判斷問題,不等於 n8n HTTP 讀不到 UTF-8 CSV。
成功判斷URL 能取得 CSV。Excel 顯示方式不是這一步的 E2E 驗收。

Checkpoint 02 · 自己的資料已接上

Google Sheets Credential ConnectedAppend Row 沒紅色警告知識庫有獨立 gidCSV export 可取得資料
03

把老師的 Gemini 換成自己的 OpenCode Go。

這是今天最值得複用的差異:workflow logic 保留,AI provider 換掉。

10

AI node:Gemini → OpenCode Go / DeepSeek V4 Flash

不用重寫整條 workflow,只換 HTTP Request。

老師版

Gemini

Google Gemini Credential

Gemini generateContent

→
我們版

OpenCode Go + DeepSeek

Bearer Auth

/v1/chat/completions

HTTP Request
POST https://opencode.ai/zen/go/v1/chat/completions

model: deepseek-v4-flash
Body 核心
{
  "model": "deepseek-v4-flash",
  "messages": [
    {"role":"system","content":"你是 Blossom 外燴 AI 客服..."},
    {"role":"user","content":"知識庫:... 使用者訊息:..."}
  ],
  "temperature": 0.2
}
11

建立 OpenCode Go 的 Bearer Auth Credential

API key 只放 Credential,不寫進 workflow JSON。

AI HTTP Request → Authentication → Generic Credential Type → Bearer Auth
n8n Bearer Auth credential
Bearer Token 欄位只貼 API key 本身;不要再手動加「Bearer 」。
Bearer Token 欄位貼原始 OpenCode Go API key。不要寫成 Bearer sk-...,n8n 會自己組 Authorization header。
成功判斷AI node 的 Credential 已選,紅色 warning 消失。
12

LINE Reply 也建立自己的 Bearer Credential

這顆放的是 LINE Channel Access Token,不是 OpenCode Go key。

LINE 回覆使用者 → Bearer Auth → 貼自己的 LINE Channel Access Token
固定 API
POST https://api.line.me/v2/bot/message/reply
別混 TokenOpenCode Go Bearer 與 LINE Bearer 是兩個不同 Credential。Token 不要寫死在 JSON,也不要傳給同學。

Checkpoint 03 · 自己的 AI / LINE Credential 已就位

OpenCode Go Bearer 已選model = deepseek-v4-flashLINE Reply Bearer 已選重要 node 沒有紅色警告
04

把自己的 LINE 接到 Production Webhook。

到這裡才把外部入口真正指向 n8n。

13

把 n8n Production URL 貼到 LINE Developers

正式手機測試使用 Production URL,不是 Test URL。

https://你的-n8n網域/webhook/line-ai-customer-service
LINE Developers
  1. Messaging API → Webhook URL。
  2. 貼 Production URL。
  3. Update。
  4. Verify。
  5. Use webhook → Enabled。
成功判斷Verify = Success,而且 Use webhook 已開。
14

Official Account 回應設定:Webhook 開、Auto-reply 關

不然 LINE 內建自動回覆可能跟 n8n AI 一起講話。

LINE response settings
最重要看 Webhook 與自動回應。Greeting 歡迎訊息可以保留。
建議狀態
Webhook:ON / Auto-reply:OFF / Greeting:可 ON
15

找不到 Active?這版 n8n 用 Publish

改完 production workflow 後,記得重新 Publish。

n8n publish UI
我們的 n8n 畫面右上角是 Publish,不是老師講義裡的 Active toggle。
今天真的踩過後面新增 header 後如果忘了重新 Publish,Production Webhook 還會繼續跑舊版。
成功判斷右上角 Publish 完成,再從手機發新的 LINE 訊息。
05

第一次真機測試:不要怕失敗,先找第一個 blocker。

這一段最重要的不是「一次成功」,而是怎麼從症狀一路縮小到真正錯誤。

16

從手機 LINE 發第一則全新訊息

不要重跑舊 execution;LINE replyToken 只能用一次。

我想辦 50 人外燴,一人預算 600 元,需要提供什麼資料?
同時觀察
  • LINE 有沒有收到任何回覆。
  • n8n Executions 有沒有出現一筆新的 production execution。
  • 第一顆紅色 node 在哪裡。
17

第一次結果:LINE 有回,但只回「AI 客服忙碌中」

這不是全壞;反而代表前後兩端已經通了。

當時 LINE 收到目前 AI 客服忙碌中,請稍後再試或留言由真人協助。
先解讀症狀

Webhook 已經收到了,整理回答與 LINE Reply 也能把 fallback 送回手機。問題範圍被縮到中間的 AI node。

這時候不要再截 LINE,去截 AI node Output

LINE 已經能收到 fallback,所以 Webhook 和 LINE Reply 很可能通了。這是最新 n8n Execution 裡 AI node 的 Output / Error。請只找真正的 API 錯誤與下一個最小修正,不要改其他已成功的節點。
18

Execution 找到真正錯誤:MissingSessionID

OpenCode Go 400,不是 LINE,也不是 Sheet。

400

MissingSessionID

Request is missing x-opencode-session
and cannot be routed efficiently.
這告訴我們什麼

endpoint、Bearer 與 workflow 已經走到 provider;真正缺的是 OpenCode Go 要求的 session header。

排錯原則看最新 Execution 的第一個紅色 node,一次只修一項。不要同時動 Webhook、Sheet、LINE Reply。
19

在 AI HTTP Request 加 x-opencode-session / User-Agent

加在 node 的 Send Headers,不是 Credential,也不是 Body。

x-opencode-session
={{ 'blossom-line-' + $json.source }}

User-Agent
blossom-line-agent/1.0
位置一定要對AI HTTP Request → Send Headers → Using Fields Below。不要塞進 Bearer Auth Credential、JSON Body 或 Options。
為什麼用 $json.source

前面的 webhook 已經取出 LINE userId。這樣同一位使用者會得到穩定的 session id,比所有人共用固定字串更合理。

20

改完 header 還是一樣錯?重新 Publish

這是今天第二個真實坑。

我們當時的現象明明已經加 header,下一次 LINE 仍然回完全相同的 MissingSessionID。
真正原因

Production workflow 還在跑上一版。修改 node 後沒有重新 Publish。

修改完成 → Publish → 回 LINE 發一則全新的訊息
不要重跑舊 LINE executionreplyToken 有效時間短、成功使用後不能重用。

Checkpoint 05 · 真正 blocker 已修掉

AI node 有 x-opencode-sessionUser-Agent 已加Workflow 已重新 Publish準備發全新 LINE 訊息
06

到這裡才叫真的跑通。

最後不是看 n8n 自己說成功,而是手機與 Sheet 都有證據。

21

LINE 正常收到 DeepSeek 依資料產生的回答

這次不再是 fallback。

LINE AI successful answer
實際成功畫面:AI 抓到「50 人、每人 600」,並追問日期、地點、活動類型、飲食需求與配送 / 現場服務。
這一步證明LINE → n8n → 知識庫 → OpenCode Go / DeepSeek → LINE Reply 已經完整跑通。
22

最後打開 Google Sheet:真的有新增紀錄

端到端的最後一塊證據。

你應該看到一列新資料
時間|ai-customer-service|LINE userId|分類|原始訊息|待處理
LINE success proof

手機真的收到 AI 回答

不是 n8n node 自己顯示 200,而是最終使用者端真的收到訊息。

Google Sheet 真的新增 row

訊息有被留下,才有後續追蹤、Dashboard、案件狀態與真人接手的基礎。

E2E PASSLINE → n8n → 自己的知識 → OpenCode Go / DeepSeek → LINE → Google Sheet。

Final Checkpoint · 第一階段完成

自己的 LINE Webhook自己的 Google Sheet自己的 OpenCode Go APIDeepSeek V4 Flash 正常回覆LINE Reply 成功客服紀錄成功寫入
!

今天實際踩過的坑,集中看一次。

不是幻想 FAQ。下面每個都是這次實作真的出現過的症狀。

Not a valid Sheet ID

先看是不是還留著 placeholder Sheet ID,不要第一時間重做 OAuth。

CSV 中文亂碼

Excel 開啟編碼問題,不等於 n8n HTTP 讀不到 UTF-8 CSV。

AI 客服忙碌中

LINE 前後可能已經通了;去最新 Execution 看 AI node Output。

MissingSessionID

AI HTTP Request 沒有送 x-opencode-session。

加 header 還是同樣錯

檢查有沒有重新 Publish production workflow。

LINE 完全沒反應

依序看 Production Webhook、Publish、Use webhook、Webhook 開關。

兩個回答一起出現

LINE Official Account 的 Auto-reply 很可能還沒關。

重跑舊 execution → 400

LINE replyToken 已經用過。回 LINE 發一則新的訊息再測。

→

這一版完成了什麼,還沒完成什麼。

不要把第一個 E2E demo 講成完整商用 Agent。

已經真的能做

第一版 E2E

LINE 收訊息

讀自己的 Sheet knowledge

呼叫自己的 OpenCode Go / DeepSeek

回 LINE

寫入客服紀錄

→
下一階段再做

不是今天的 blocker

多輪案件狀態

完整 RAG / 向量檢索

正式報價 / 權限 / 人工 handoff

Dashboard

更完整的錯誤分支

AI

真正可以複用的方法

拿現成 demo → 換成自己的資料 / API / LINE → 哪裡看不懂就截圖問 AI → 只解目前第一個 blocker → 再往下一步。你不需要先熟到能看懂 n8n 所有設定,才能把第一個版本跑起來。