ROCKI

LEARN · ARTICLE

用流程工具把 LINE 訊息寫進試算表:自架實測與雲端怎麼選

發布 2026-11-09更新 2026-11-09作者 Rock Lee
用流程工具把 LINE 訊息寫進試算表:自架實測與雲端怎麼選 封面示意圖

作者:Rock Lee 實測日期:2026-11-09(Asia/Taipei)

為什麼寫這篇

n8n 是可以拖拉節點做自動化的工具,可以自己架,也有官方雲端版。很多人想用它把 LINE 訊息接到 Google 試算表:客人打「拿鐵 2 杯」,表格多一列,再自動回覆小計。

這篇用我們的示範店家「小潮咖啡」(虛構),把整條 workflow 在本機 n8n 跑一次:怎麼接節點、怎麼擋掉偽造的訊息、跑起來吃多少資源,最後對照官方雲端方案的價格。試算表寫入那一段用的是 Apps Script,寫法在〈Google Apps Script 教學:把 LINE 訂單自動寫進試算表〉。

一條輸送帶把對話泡泡送進表格格子裡,旁邊有一道小閘門(示意圖,AI 生成)
一條輸送帶把對話泡泡送進表格格子裡,旁邊有一道小閘門(示意圖,AI 生成)

實測環境

項目內容
n8n2.8.4,自架在 Linux 工作機(npm 安裝),獨立的測試資料夾
workflow「小潮咖啡:LINE 訂單 → Sheets → 加總 → LINE 通知」,8 個節點
測試方式用腳本模擬 LINE 平台送 webhook(含正確或偽造的簽章)
假服務本機小伺服器:一個模擬 Apps Script(執行真的 Code.gs 邏輯,並像正式環境一樣回 302),一個模擬 LINE Reply API(只記錄,不外送)
測試副本的改動只把 LINE Reply 的網址改成環境變數,指向本機假服務;其他節點和正式版相同

步驟

1. 匯入 workflow,先看整條線

n8n import:workflow --input=workflow.json
n8n publish:workflow --id=<workflow ID>
n8n start
匯入後的 workflow:8 個節點(2026-11-09 本機 n8n 2.8.4 截圖)
匯入後的 workflow:8 個節點(2026-11-09 本機 n8n 2.8.4 截圖)

由左到右:

  1. LINE Webhook:收 POST /webhook/line,打開「raw body」,收到就先回 200。
  2. Verify Signature + Parse:驗簽章、解析「品名 數量」。
  3. Signed & has token?:簽章不對或沒有回覆用的 token,就到此為止。
  4. Valid order?:品名在不在菜單上。
  5. Apps Script Append:呼叫 Apps Script 寫一列。
  6. Compose Text/Error Text:組回覆文字(成功或格式提示)。
  7. LINE Reply:用 Reply API 回給客人。

「收到就先回 200」很重要:LINE 的開發文件建議 webhook 非同步處理、2 秒內回應,後面的寫表、回覆讓 n8n 在背景跑。

2. 自己加上 LINE 簽章驗證

n8n 的 Webhook 節點不會幫你驗 LINE 的 x-line-signature。不驗的話,任何人知道網址就能送假訂單。我們在第二個節點用 Code 寫:

Verify Signature + Parse 節點:用 channel secret 對原始內文做 HMAC-SHA256,再安全比對(本機截圖)
Verify Signature + Parse 節點:用 channel secret 對原始內文做 HMAC-SHA256,再安全比對(本機截圖)

做法是拿 channel secret 對原始的 request body 算 HMAC-SHA256,轉成 base64,再用 crypto.timingSafeEqual 跟 header 裡的簽章比對。一定要用原始內文,n8n 解析過再轉回字串的 JSON,可能跟 LINE 送來的位元組不一樣,簽章就對不上。

這個節點要用 crypto 和環境變數,啟動 n8n 時要設:

export NODE_FUNCTION_ALLOW_BUILTIN=crypto
export N8N_BLOCK_ENV_ACCESS_IN_NODE=false
export LINE_CHANNEL_SECRET=…   LINE_CHANNEL_ACCESS_TOKEN=…
export APPS_SCRIPT_URL=…       APPS_SCRIPT_SECRET=…

3. 設定呼叫 Apps Script 的 HTTP 節點

Apps Script Append 節點:POST JSON、網址與密鑰都從環境變數讀(本機截圖)
Apps Script Append 節點:POST JSON、網址與密鑰都從環境變數讀(本機截圖)
  • 方法 POST,內文 JSON:密鑰、userId、品名、數量、單價。
  • 網址和密鑰都用 $env 讀,不寫死在 workflow 裡。這樣 workflow 檔可以分享,金鑰不會跟著外流。
  • 選項要打開「跟隨轉址」。Apps Script 的 /exec 會先回 302,不跟就拿不到結果。

4. 送幾則測試訊息

我們用腳本模擬 LINE 平台,送 4 則訊息:3 則用正確的 secret 簽章,1 則故意放假簽章。

4 則模擬訊息的回應;replyToken 已遮(2026-11-09 現場執行後重繪)
4 則模擬訊息的回應;replyToken 已遮(2026-11-09 現場執行後重繪)
訊息結果
拿鐵 2 杯寫入一列,回覆「新訂單:拿鐵 ×2 = NT$240/今日累計 NT$240」
肉桂捲 3 個寫入一列,回覆小計 NT$255、累計 NT$495
珍奶 1 杯不在菜單,不寫入,回覆格式與菜單提示
拿鐵 1 杯(假簽章)不寫入、不回覆

4 則的 webhook 回應都是 200,耗時 19~109 毫秒(第一則最慢)。偽造的那則也回 200,但什麼事都沒做,這是刻意的:不讓對方從回應看出驗簽有沒有過。

5. 在執行紀錄裡確認每一步

n8n 會保存每次執行經過哪些節點。成功的那次,綠色勾勾一路走到 LINE Reply:

正常訂單:一路執行到 LINE Reply(本機 n8n 執行紀錄)
正常訂單:一路執行到 LINE Reply(本機 n8n 執行紀錄)

偽造簽章的那次,停在「Signed & has token?」,後面的寫表、回覆都沒有執行:

偽造簽章:在第三個節點就停下(本機 n8n 執行紀錄)
偽造簽章:在第三個節點就停下(本機 n8n 執行紀錄)

6. 算一下自架要多少資源,雲端要多少錢

自架這台啟動約 2 分 53 秒、處理 4 次執行後量測:

本機 n8n 的記憶體、資料夾大小與授權條款節錄(2026-11-09 現場量測)
本機 n8n 的記憶體、資料夾大小與授權條款節錄(2026-11-09 現場量測)
  • 主程序記憶體(RSS)441 MB
  • n8n 資料夾 58 MB(含資料庫與 4 次執行紀錄)
  • n8n 套件安裝後 2.0 GB 磁碟空間

官方雲端方案(2026-11-09 官網,我們的瀏覽器顯示美元,按年繳的月費):

n8n 官網方案(2026-11-09 擷取)
n8n 官網方案(2026-11-09 擷取)
方案月費(年繳)每月 workflow 執行次數
StarterUS$202.5k
ProUS$5010k
BusinessUS$80040k,標示只限自架

n8n 是用「整條 workflow 跑一次」計一次,不管裡面有幾個節點。以 LINE 點餐來說,大約就是一則訊息一次。雲端版免費試用的限制是 1,000 次執行、單次 180 秒逾時。另外,我們用 WebFetch 讀同一頁時看到的是歐元(20€/50€/667€),價格會依地區顯示不同幣別,請以你看到的為準。

結果

  • 8 個節點的 workflow 在本機 n8n 2.8.4 跑通:正常訂單寫入並回覆,菜單外的品項回提示,偽造簽章被擋下。
  • 自架的硬成本是一台能常駐的機器:這次量到約 441 MB 記憶體、2 GB 套件空間,外加一個 LINE 打得到的公開 https 網址。主機月費這篇沒有量。
  • 雲端版最低 US$20/月(年繳),每月 2.5k 次執行。每天幾十單的小店,以「一則訊息一次」估,量級在這個範圍內,但實際要看你的訊息數。

踩坑紀錄

  1. 本機沒有公開網址,LINE 打不進來。 LINE 的 webhook 只能指向公開的 https 網址。我們的工作機連不到 Cloudflare 的通道服務,quick tunnel 起不來,所以這次只能用腳本模擬 LINE。正式使用要有固定的公開網址。
  2. Webhook 節點不會驗 LINE 簽章。 見步驟 2,一定要自己加。
  3. Code 節點預設不能用 crypto 和環境變數。 沒設 NODE_FUNCTION_ALLOW_BUILTIN 和 N8N_BLOCK_ENV_ACCESS_IN_NODE,驗簽節點會直接報錯。
  4. 用 CLI 匯入後要 publish,再啟動 n8n。 我們是先 import:workflow、publish:workflow,最後才 n8n start。workflow 要是已發布狀態,正式的 webhook 網址才會收資料。
  5. 授權不是「隨便商用」。 自架版用的是 Sustainable Use License,條款寫的是只能用於「自己內部業務」或非商業、個人用途;要把 n8n 當服務提供給別人,條款有限制。替客戶架設前,請自己讀過全文或問官方。

常見問題

Q1:一定要用 Apps Script 嗎?n8n 不是有 Google Sheets 節點? 有。我們最早的版本就是用 Sheets 節點,設定說明寫的是要建一個 Service Account 憑證、填入試算表 ID。後來改用 Apps Script,是因為寫入邏輯(密鑰、加鎖、批次)想放在試算表那一側。兩種都可以,這篇沒有比較兩者的速度。

Q2:自架比雲端便宜嗎? 不一定。自架省掉 n8n 月費,但要自己出主機、公開網址、備份和更新的時間。這篇只量了資源用量,沒有量主機月費,所以不下結論。

Q3:雲端版的執行次數用完會怎樣? 我們沒有實際超量過,這篇不寫沒驗證的說法,請以官網方案頁為準。另外 Starter 方案頁上還標了單次執行最長 5 分鐘、執行紀錄保留 7 天。

Q4:偽造簽章為什麼也回 200? Webhook 設成「收到就回 200」,驗簽在後面的節點。回 200 讓 LINE 不會重送,偽造者也看不出驗簽結果;真正的保護是後面不寫入、不回覆。

看實作成果

對應示範:小潮咖啡 LINE 點餐(虛構或自製,非客戶案件)。

複製這段給你的 AI agent

目標:在本機用 n8n 測一條「LINE webhook → 驗簽 → 寫入 → 回覆」的 workflow,只用模擬資料,不連真的 LINE、不寫真的試算表。

前提與禁止事項:
- 用一個新的 N8N_USER_FOLDER(例如 /tmp/n8n-test),不要動既有的 n8n 資料。
- LINE secret、token、Apps Script 網址一律用假值;把 LINE Reply 與 Apps Script 的網址指向本機假服務。
- 不要開公開通道、不要部署、不要付費、不要對真實的 LINE 或 Google 服務送任何請求。

步驟:
1. 匯入 workflow.json 的副本,只把對外網址改成環境變數;publish 後啟動 n8n。
2. 寫一個本機假服務:/exec 收 POST 後回 302,再用 GET 回 JSON;/reply 只把收到的內文記到 log。
3. 寫一個送信腳本:用假 secret 對原始 body 做 HMAC-SHA256(base64)放進 x-line-signature;送 3 則正確簽章(2 則菜單內、1 則菜單外)和 1 則偽造簽章。
4. 回報:每則的 HTTP 狀態與耗時、假服務收到的寫入與回覆、n8n 執行紀錄停在哪個節點。
5. 量 n8n 主程序記憶體(RSS)與資料夾大小。

驗收:偽造簽章那則沒有任何寫入或回覆;菜單外那則只回提示不寫入;其餘兩則寫入且累計金額正確。