訂單一來就自動歸檔?n8n 聯手 WooCommerce 訂單同步,打造你的 24H 全自動電商大腦!
☰ 目錄 table-of-contents.md
用 n8n 串接 WooCommerce 訂單同步:30 分鐘打造全自動訂單流程
結論先講:只要在 WooCommerce 設定一個「訂單已建立」的 Webhook,把通知送到 n8n 的 Webhook 節點,再接上 Slack、Google Sheets 或任何有 API 的服務,新訂單一進來就能自動通知團隊、自動歸檔、自動同步資料,完全不必再手動複製貼上。整個基礎流程大約 30 分鐘就能跑起來,難的不是「能動」,而是把它做到「可靠又安全」。
這篇文章會手把手帶你從零搭好 WooCommerce 到 n8n 的橋樑,並補上多數教學略過的關鍵環節:簽章驗證、失敗重試與 Webhook 的非同步機制。讀完你就能判斷哪些步驟非做不可、哪些可以之後再補。
經營電商的你,是不是常常被訂單追著跑?一筆新訂單進來,就要手動複製客戶資料到 Google Sheets、手動通知出貨部門、手動更新 CRM。訂單一多,複製貼上就變成正職工作,既耗時又容易出錯。今天就用 n8n 與 WooCommerce 訂單同步 把這些瑣事交給自動化機器人。
什麼是 n8n?為什麼適合做 WooCommerce 訂單同步?
n8n 是一個低程式碼(Low-code)的工作流自動化平台,你可以把它想像成一個能自行架設、彈性更高的 Zapier。它用「節點(Node)」串成一條流程:第一個節點負責「接收觸發」,後面的節點負責「執行動作」。
對 WooCommerce 來說,最自然的觸發方式就是 Webhook:當有新訂單成立,WooCommerce 會主動把整筆訂單資料「推」到 n8n。這種「事件發生才推送」的模式,比起你寫程式去「每隔幾分鐘問一次有沒有新訂單」(輪詢,polling)更即時、也更省資源。
導入訂單自動化能解決什麼問題?
在動手之前,先釐清「為什麼值得做」。導入 n8n 與 WooCommerce 訂單同步的好處,遠比想像中多:
- 零失誤的人為操作:機器人不會眼花、不會手抖,只要流程設定正確,每一筆訂單都精準無誤,告別複製貼上時的欄位錯置。
- 7x24 小時全年無休:客戶半夜三點下單也沒問題,流程立刻啟動、通知倉庫、記錄資料,你不必從被窩裡爬起來。
- 釋放寶貴人力:把團隊從繁瑣的行政工作中解放出來,專注在客戶服務、行銷策略、產品開發等更有價值的事。
- 即時的數據同步:訂單成立的瞬間,資料就同步到庫存系統、會計軟體或數據儀表板,隨時掌握最新營運狀況。
實戰:如何把 WooCommerce 訂單自動送到 n8n?
整個流程的核心很單純:WooCommerce 有新訂單時,透過 Webhook 主動發一個包含訂單資料的通知給 n8n;n8n 收到後,再依照你設定的流程執行後續動作。就像快遞員把包裹送到你指定的地址。
步驟一:在 WooCommerce 設定 Webhook(寄件人)
先讓 WooCommerce 知道「新訂單來了要通知誰」。
- 登入 WordPress 後台,前往 WooCommerce > 設定 > 進階 > Webhook。
- 點擊「新增 Webhook」。
- 填寫欄位,重點如下:
- 名稱:取一個好辨識的名字,例如「n8n New Order Sync」。
- 狀態:設定為「啟用」。
- 主題:這是觸發時機,選擇「訂單已建立(Order created)」。你也可以視需求選「訂單狀態已變更」等。
- 傳送 URL:先留空,等一下到 n8n 取得接收網址再回來填。
- 密鑰(Secret):非常重要!它是你們之間的通關密語。點「產生」讓系統自動生成一組複雜字串並複製下來,稍後會用它驗證通知真的來自 WooCommerce,而不是被偽造的。
- 先不要儲存,接著去設定 n8n。
步驟二:在 n8n 建立工作流(收件人)
接著設定一個 n8n 工作流來接收 WooCommerce 的通知。
- 打開 n8n 儀表板,建立一個新的工作流(Workflow)。
- 第一個節點,搜尋並選擇「Webhook」。
- 點進 Webhook 節點,右側會看到「Webhook URLs」。把「TEST」分頁下的 URL 複製起來。
- 回到 WooCommerce 的 Webhook 設定頁,把這串 URL 貼到「傳送 URL」欄位,然後點「儲存 Webhook」。
- 回到 n8n,點「Listen for Test Event」按鈕,這時 n8n 會進入等待狀態。
- 到 WooCommerce 商店前台下一筆測試訂單,完成結帳後,WooCommerce 就會發送一個 Webhook 通知。
- 一切順利的話,n8n 的 Webhook 節點會顯示成功接收到資料,並出現完整的訂單 JSON 結構。恭喜,自動化的橋樑搭起來了!
務必記得的一步:「TEST」URL 只在你按下「Listen for Test Event」時才會接收資料,是設計時用來抓資料結構的。流程設定完成、正式上線前,要把工作流啟用(Active),並把 WooCommerce 的「傳送 URL」改成 Webhook 節點的「PRODUCTION」URL。很多人卡在「測試成功、正式卻收不到」,原因就是漏掉這個切換。
看到那一大包 JSON 資料先別慌,那就是訂單的所有細節:客戶是誰、買了什麼、地址在哪、用什麼付款方式,應有盡有。這就是自動化的原料,接下來的工作就是把它加工成你要的樣子。
步驟三:加工訂單資料並串接其他服務
收到資料後,好戲才正要開始。這裡舉兩個最常見的應用場景。
場景一:新訂單自動通知到 Slack
有新訂單時馬上通知團隊,讓大家振奮一下士氣。
- 在 Webhook 節點後方點「+」號,新增一個「Slack」節點。
- 設定 Slack 憑證(Credentials),授權 n8n 發送訊息。
- 在「Channel」欄位選擇要發送的頻道,例如 #sales。
- 在「Text」欄位組合從 Webhook 收到的資料,打造客製化訊息,例如:
🔥 新訂單來囉! 訂單編號:{{$json["body"]["number"]}} 客戶:{{$json["body"]["billing"]["first_name"]}} {{$json["body"]["billing"]["last_name"]}} 總金額:{{$json["body"]["total"]}} 元 趕快準備出貨吧! - 啟用並儲存工作流。之後只要有新訂單,Slack 就會馬上跳出通知。
場景二:把訂單資料自動寫入 Google Sheets
告別手動複製貼上,讓每筆訂單自動歸檔。
- 在 Webhook 節點後方新增一個「Google Sheets」節點。
- 同樣先設定 Google 憑證,授權 n8n 存取你的 Google Sheets。
- 在「Operation」選擇「Append or Update Row」。
- 選擇你的試算表(Spreadsheet ID)和工作表名稱(Sheet Name)。
- 在「Columns」區塊會看到 Google Sheets 上的欄位名稱,這就是最關鍵的「資料對應」環節。點欄位旁的圖示,從 Webhook 節點的輸出把對應資料拖曳過來,例如:
- 訂單編號 →
{{$json["body"]["id"]}} - 客戶姓名 →
{{$json["body"]["billing"]["first_name"]}} {{$json["body"]["billing"]["last_name"]}} - 訂單金額 →
{{$json["body"]["total"]}} - 訂單日期 →
{{$json["body"]["date_created"]}}
- 訂單編號 →
- 啟用並儲存。從此訂單紀錄表會自動更新,再也不用擔心漏記或記錯。
提醒一個小細節:選「Append or Update Row」而不是單純「Append」,是為了在同一筆訂單被重複送達時(後面會解釋為什麼會重複),用訂單編號當比對鍵去更新同一列,而不是又新增一筆,避免表單裡出現重複訂單。
工程師的龜毛提醒:怎麼讓流程穩定又安全?
讓系統「能動」只是第一步,「穩定又安全」才是終極目標。享受自動化便利的同時,以下幾點千萬別忽略。
如何確認 Webhook 真的來自 WooCommerce?(簽章驗證)
你的 Webhook URL 是公開的,任何人只要知道網址就能傳假資料進來。為了防止這種情況,必須驗證請求真的由 WooCommerce 發出,這就要用到第一步設定的「密鑰(Secret)」。
WooCommerce 會在 HTTP Header 帶上一個 x-wc-webhook-signature 簽章,那是它用你的密鑰對「原始的 Request Body」以 HMAC-SHA256 演算法算出、再做 Base64 編碼的結果。你只要用同樣的密鑰、對同樣的原始 Body 重新算一次,比對兩者是否相符即可。
在 n8n 中,可以在 Webhook 節點後方加一個 Function 節點,用類似下面的 JavaScript 程式碼驗證:
// 引入 Node.js 的 crypto 模組
const crypto = require('crypto');
// 從 Webhook Header 取得 WooCommerce 傳來的簽章
const receivedSignature = $request.headers['x-wc-webhook-signature'];
// 記得在 n8n 的環境變數中設定你的 Webhook Secret
const secret = process.env.WOOCOMMERCE_WEBHOOK_SECRET;
// 取得原始的 Request Body
const requestBody = $request.rawBody;
// 使用 HMAC-SHA256 演算法計算簽章
const calculatedSignature = crypto.createHmac('sha256', secret)
.update(requestBody, 'utf8')
.digest('base64');
// 比對簽章是否相符
if (receivedSignature !== calculatedSignature) {
// 如果不相符,就拋出錯誤,中斷工作流
throw new Error('Webhook signature mismatch!');
}
// 如果相符,就回傳收到的 JSON 資料,讓工作流繼續
return $json;
這裡有一個容易踩的坑:簽章是針對原始(raw)的 Request Body 計算的。如果中間任何環節先把 JSON 解析、再重新序列化(連空白、欄位順序都可能不一樣),重算出來的簽章就會對不上,導致明明是合法請求卻一直被擋下。所以務必拿「未經處理的原始字串」來比對。把這段驗證加進去,你的自動化流程才算固若金湯。
如果下游服務當機或寫入失敗,訂單會不會遺失?(失敗處理)
如果 Google Sheets 剛好在維修、API 寫不進去怎麼辦?訂單資料會不會就此遺失?當然不能讓這種事發生。n8n 內建錯誤處理機制:你可以設定「Error Trigger」節點,當主流程發生錯誤時自動觸發另一條備用流程,例如「寄一封 Email 通知管理員」或「把失敗的資料暫存到別處等待重試」,確保任何意外下訂單資料都不會憑空消失。
為什麼同一筆訂單可能被處理兩次?(重複送達與冪等性)
Webhook 是「事件通知」,而事件通知的本質是「至少送達一次(at-least-once)」:當送出方沒能在時限內收到你的成功回應,它會判定可能失敗而重送同一筆通知。這代表你的流程有機會收到重複的訂單事件,如果沒處理好,就會出現重複通知、重複寫入,甚至重複出貨。
解法是讓流程具備「冪等性(Idempotency)」,也就是「同一筆事件做幾次,結果都一樣」。最實際的做法是拿訂單編號(id)當作唯一比對鍵:寫入 Google Sheets 時用「Append or Update Row」依訂單編號更新而非盲目新增;通知或出貨前,先檢查這筆訂單是否已經處理過。把這個觀念放進設計裡,比事後對帳找重複訂單省事得多。
結論:自動化不是選項,而是基本配備
今天我們從觀念到實作,完整走過如何透過 n8n 與 WooCommerce 訂單同步 打造自動化流程:從最簡單的 Slack 通知,到寫入 Google Sheets,再到簽章驗證、失敗處理與冪等性這些工程師等級的考量。你會發現,自動化的世界充滿無限可能。
這篇只是起點,你還可以串接更多服務,例如:
- 把客戶資料同步到 HubSpot 或其他 CRM 系統。
- 根據客戶購買的商品,自動把他們加入特定的電子郵件行銷名單。
- 自動產生出貨單,並透過 API 傳送給物流公司。
記住,你花在設定自動化流程上的每一分鐘,未來都會為你省下數小時甚至數天的工作時間。別再讓自己被困在重複瑣事中,擁抱自動化,把時間和精力投入到真正能讓事業成長的地方。
如果你在設定過程中遇到問題,或想打造更複雜、企業級的客製化自動化流程,浪花科技團隊擁有豐富的 API 串接與系統整合經驗。我們不只幫你把流程「串起來」,更會從架構、安全性與擴展性的角度,為你打造穩定可靠的自動化引擎。
準備好讓你的電商事業起飛了嗎?立即聯繫我們,讓專業的工程師團隊為你規劃專屬的自動化解決方案!
延伸閱讀
常見問題
WooCommerce 要怎麼把新訂單自動同步到 n8n?
為什麼 n8n 測試時收得到訂單、正式上線卻收不到?
如何確認 Webhook 真的來自 WooCommerce,而不是偽造的請求?
Webhook 與輪詢(polling)相比有什麼優勢?
把訂單寫入 Google Sheets 時為什麼要用 Append or Update Row 而不是單純 Append?
訂閱免費電子報
把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。