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

作者:Rock Lee 實測日期:2026-11-09(Asia/Taipei)
為什麼寫這篇
n8n 是可以拖拉節點做自動化的工具,可以自己架,也有官方雲端版。很多人想用它把 LINE 訊息接到 Google 試算表:客人打「拿鐵 2 杯」,表格多一列,再自動回覆小計。
這篇用我們的示範店家「小潮咖啡」(虛構),把整條 workflow 在本機 n8n 跑一次:怎麼接節點、怎麼擋掉偽造的訊息、跑起來吃多少資源,最後對照官方雲端方案的價格。試算表寫入那一段用的是 Apps Script,寫法在〈Google Apps Script 教學:把 LINE 訂單自動寫進試算表〉。

實測環境
| 項目 | 內容 |
|---|---|
| n8n | 2.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

由左到右:
- LINE Webhook:收 POST
/webhook/line,打開「raw body」,收到就先回 200。 - Verify Signature + Parse:驗簽章、解析「品名 數量」。
- Signed & has token?:簽章不對或沒有回覆用的 token,就到此為止。
- Valid order?:品名在不在菜單上。
- Apps Script Append:呼叫 Apps Script 寫一列。
- Compose Text/Error Text:組回覆文字(成功或格式提示)。
- LINE Reply:用 Reply API 回給客人。
「收到就先回 200」很重要:LINE 的開發文件建議 webhook 非同步處理、2 秒內回應,後面的寫表、回覆讓 n8n 在背景跑。
2. 自己加上 LINE 簽章驗證
n8n 的 Webhook 節點不會幫你驗 LINE 的 x-line-signature。不驗的話,任何人知道網址就能送假訂單。我們在第二個節點用 Code 寫:

做法是拿 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 節點

- 方法 POST,內文 JSON:密鑰、userId、品名、數量、單價。
- 網址和密鑰都用
$env讀,不寫死在 workflow 裡。這樣 workflow 檔可以分享,金鑰不會跟著外流。 - 選項要打開「跟隨轉址」。Apps Script 的
/exec會先回 302,不跟就拿不到結果。
4. 送幾則測試訊息
我們用腳本模擬 LINE 平台,送 4 則訊息:3 則用正確的 secret 簽章,1 則故意放假簽章。

| 訊息 | 結果 |
|---|---|
| 拿鐵 2 杯 | 寫入一列,回覆「新訂單:拿鐵 ×2 = NT$240/今日累計 NT$240」 |
| 肉桂捲 3 個 | 寫入一列,回覆小計 NT$255、累計 NT$495 |
| 珍奶 1 杯 | 不在菜單,不寫入,回覆格式與菜單提示 |
| 拿鐵 1 杯(假簽章) | 不寫入、不回覆 |
4 則的 webhook 回應都是 200,耗時 19~109 毫秒(第一則最慢)。偽造的那則也回 200,但什麼事都沒做,這是刻意的:不讓對方從回應看出驗簽有沒有過。
5. 在執行紀錄裡確認每一步
n8n 會保存每次執行經過哪些節點。成功的那次,綠色勾勾一路走到 LINE Reply:

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

6. 算一下自架要多少資源,雲端要多少錢
自架這台啟動約 2 分 53 秒、處理 4 次執行後量測:

- 主程序記憶體(RSS)441 MB
- n8n 資料夾 58 MB(含資料庫與 4 次執行紀錄)
- n8n 套件安裝後 2.0 GB 磁碟空間
官方雲端方案(2026-11-09 官網,我們的瀏覽器顯示美元,按年繳的月費):

| 方案 | 月費(年繳) | 每月 workflow 執行次數 |
|---|---|---|
| Starter | US$20 | 2.5k |
| Pro | US$50 | 10k |
| Business | US$800 | 40k,標示只限自架 |
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 次執行。每天幾十單的小店,以「一則訊息一次」估,量級在這個範圍內,但實際要看你的訊息數。
踩坑紀錄
- 本機沒有公開網址,LINE 打不進來。 LINE 的 webhook 只能指向公開的 https 網址。我們的工作機連不到 Cloudflare 的通道服務,quick tunnel 起不來,所以這次只能用腳本模擬 LINE。正式使用要有固定的公開網址。
- Webhook 節點不會驗 LINE 簽章。 見步驟 2,一定要自己加。
- Code 節點預設不能用 crypto 和環境變數。 沒設
NODE_FUNCTION_ALLOW_BUILTIN和N8N_BLOCK_ENV_ACCESS_IN_NODE,驗簽節點會直接報錯。 - 用 CLI 匯入後要 publish,再啟動 n8n。 我們是先
import:workflow、publish:workflow,最後才n8n start。workflow 要是已發布狀態,正式的 webhook 網址才會收資料。 - 授權不是「隨便商用」。 自架版用的是 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)與資料夾大小。 驗收:偽造簽章那則沒有任何寫入或回覆;菜單外那則只回提示不寫入;其餘兩則寫入且累計金額正確。