在前 16 天的挑戰中,我們成功完成了一座具備高度互動性與商業美學的 Tableau 旗艦戰情室。
然而,在真實的企業運營場景中,一個殘酷的現實往往隨之浮現:
「資料每天都在變動,難道我每天早上都要手動下載 CSV、再重新匯入儀表板嗎?」
「每週一主管要看營運週報,我得手動截圖、整理數字、再發 Email 送出?」
如果數據視覺化是戰情室的「大腦與雙眼」,那麼工作流程自動化(Workflow Automation) 就是不知疲倦的「神經與雙手」。
從今天開始,我們將跨入全新的技術篇章:引入目前在開源社群與企業自動化領域中最火紅的 No-Code / Low-Code 神器——n8n!
一、什麼是 n8n?為什麼選擇它?
n8n(發音類似 n-eight-n) 是一款強大、可靈活自架(Self-hosted)的節點式工作流自動化平台。如果熟悉商業工具,它就像是開源且功能更強大、定價更友善的「Zapier」或「Make(Integromat)」。
n8n 的三大核心優勢:
完全可視化的畫布操作:所有業務邏輯全部透過「拖曳節點(Nodes)」與「連線」完成,流程長什麼樣,畫面上就長什麼樣。
極致的資料自由度與隱私:支援開源自架,企業資料不需要經過昂貴的第三方雲端中繼站,完全符合資料合規要求。
原生支援 AI 與自訂 API:內建了海量預設整合(Google Sheets、Slack、Discord、Notion),更直接支援最新世代的 AI Agent 節點與自訂 Webhook,彈性極高。
二、核心觀念快速拆解:觸發器與動作節點
在 n8n 的世界裡,一條自動化流程(Workflow)基本上由兩種積木組成:
┌─────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────┐
│ 觸發節點 (Trigger) │ ───> │ 處理節點 (Operation) │ ───> │ 輸出節點 (Action) │
│ 「事情在什麼時候發生?」 │ │ 「要對資料做什麼運算?」 │ │ 「最後要把結果送到哪?」 │
│ (例: 每天早上 8 點) │ │ (例: 抓取昨日營業額) │ │ (例: 傳送通知到通訊軟體)│
└─────────────────────────┘ └─────────────────────────┘ └─────────────────────────┘
觸發器節點(Trigger Nodes):
負責「喚醒」整條流程。例如:固定時間排程(Schedule Trigger)、收到新郵件時(Email Trigger)、或是收到外部 API 呼叫(Webhook Trigger)。
動作節點(Action / Regular Nodes):
負責執行具體任務。例如:讀取 Google 試算表、打 API 抓天氣或股價、進行資料格式轉換,或是將訊息傳送到 LINE / Slack / Discord。
三、實戰演練:三步驟打造第一條排程自動化流程
我們以最基礎的入門情境為例:「設定一個定時鬧鐘,每當觸發時自動抓取最新數據並印出確認日誌。」
操作步驟:
建立新畫布(New Workflow):
登入 n8n 介面(可使用 n8n Cloud 試用版或本機 Docker 版本)。
點擊右上角的 「+ Add workflow」,畫布正中央會出現一個標記為 Add first step... 的加號。
加入定時排程觸發器(Schedule Trigger):
點擊中央的加號,在搜尋框輸入 Schedule。
選取 「Schedule Trigger」 節點。
在右側設定視窗中:
Trigger Interval:可選擇每分(Minutes)、每小時(Hours)或每天(Days)。
設定為 Days,並將時間指定為早上 09:00。
點擊右上角關閉面板,畫布上便出現了第一個排程啟動積木!
串接資料生成節點(Edit Fields / Set):
點擊 Schedule 節點右側的小加號 +,搜尋並選取 「Edit Fields (Set)」 節點。
這個節點用來模擬生成一筆結構化業務資料:
點擊 Add Value ➔ 選擇 String。
Name 輸入:report_title,Value 輸入:【自動通報】今日數據更新排程已啟動。
再次點擊 Add Value ➔ 選擇 Number。
Name 輸入:status_code,Value 輸入:200。
點擊右上角的 「Test step」 測試運行!
你會看見視窗右側立刻吐出了乾淨的 JSON 格式資料,代表節點成功接收並輸出了結構化數據!
四、理解 n8n 的生命之血:JSON 數據結構
在後續的自動化串接中,各個節點之間傳遞的訊息全都是標準的 JSON(JavaScript Object Notation)物件。
例如剛才節點輸出的內容:
[
{
"report_title": "【自動通報】今日數據更新排程已啟動",
"status_code": 200
}
]