~/blog/n8n-webhook-api-integration-wordpress-guide.md
API 串接與系統整合 · 2026 / 01 / 05

資料孤島終結者!n8n Webhook + API 串接實戰:讓你的 WordPress 與外部系統「秒速」通靈

Eric — 浪花科技創辦人 / AI 架構師
Eric
浪花科技創辦人 · AI 架構師
資料孤島終結者!n8n Webhook + API 串接實戰:讓你的 WordPress 與外部系統「秒速」通靈
目錄 table-of-contents.md

資料孤島從來不是工具太少造成的,恰恰相反——WordPress、CRM、Excel 各管各的,才逼得人在兩個視窗之間手動 Ctrl+C、Ctrl+V。要終結這種搬運地獄,關鍵是 Webhook:讓系統在事件發生的那一秒主動開口說話。這篇用 n8n 實戰示範,把 WordPress 和外部系統接成「秒速」連動的整體。

這不僅是浪費生命,更是對我們這些寫 Code 的人的一種羞辱(笑)。

在 2025 年的今天,自動化已經不是什麼高科技魔法,而是企業生存的基本配備。雖然身為開發者,我們可以手刻 PHP cURL 來串接各種 API,但面對變動極快的業務需求,硬刻程式碼往往意味著高昂的維護成本。這時候,n8n 這個以工作流為核心的自動化工具,搭配 WebhookAPI 的整合,就成了我手中的瑞士刀。

今天這篇文章,我不談虛的理論,直接帶你實戰:如何利用 n8n 的 Webhook 節點接收 WordPress 的資料,並透過 API 轉發到其他系統。我們會深入探討 JSON 結構、HTTP Method 以及除錯技巧。

為什麼選擇 n8n?不只是因為它開源

市面上有 Zapier、Make (Integromat),為什麼我獨推 n8n?除了它可以 Self-host(這對重視資料隱私的企業來說是關鍵)之外,對於工程師來說,n8n 的邏輯更接近「程式開發」。

  • 視覺化的 JavaScript: 你可以在節點中直接寫 JS 處理複雜的資料轉換,這對習慣寫 Code 的我們來說非常親切。
  • 強大的 HTTP Request 節點: 它幾乎就是一個視覺化的 Postman,讓你隨意設定 Header、Auth 和 Body。
  • Webhook 優先: n8n 對 Webhook 的支援非常完整,無論是觸發 (Trigger) 還是回應 (Response) 都非常靈活。

核心觀念:Webhook vs. Polling (輪詢)

在開始實作前,我還是要囉嗦一下觀念。很多新手會問:「Eric,為什麼不用輪詢就好?」

想像你在等快遞。Polling (輪詢) 就像是你每隔 5 分鐘打電話給快遞員問:「到了沒?」。這會消耗雙方的精力(伺服器資源)。

Webhook 則是「快遞到了會按門鈴通知你」。當 WordPress 發生特定事件(例如:新訂單、新註冊、表單送出)時,主動發送一個 HTTP POST 請求給 n8n。這才是即時、高效的資料整合方式。

實戰演練:WordPress 表單資料傳送至 n8n

為了演示,我們設定一個場景:當使用者在 WordPress 填寫聯絡表單後,我們希望將資料傳送到 n8n,經過清洗後,再傳送到外部的 CRM 系統。

第一步:在 n8n 建立 Webhook 節點

打開你的 n8n 編輯器,新增一個 Webhook 節點。

  • Authentication: 為了演示方便先選 None,但在正式環境強烈建議使用 Header Auth。
  • HTTP Method: POST。
  • Path: 設定一個識別用的路徑,例如 contact-form-submit

你會得到兩組 URL:Test URLProduction URL。開發階段請使用 Test URL,並點擊「Listen for Test Event」。

第二步:WordPress 端發送請求 (PHP 實作)

雖然你可以用 WPForms 或 Gravity Forms 的 Webhook Add-on,但身為工程師,我們直接用 Hook 來寫,這樣最靈活,也不用為了這點功能多裝一個外掛。

在你的佈景主題 functions.php 或自製外掛中加入以下程式碼:


// 假設我們監聽 Contact Form 7 的送出事件
add_action( 'wpcf7_mail_sent', 'eric_send_data_to_n8n', 10, 1 );

function eric_send_data_to_n8n( $contact_form ) {
    // 取得表單提交的資料
    $submission = WPCF7_Submission::get_instance();
    
    if ( $submission ) {
        $posted_data = $submission->get_posted_data();
        
        // 準備要傳送給 n8n 的 payload
        $body = array(
            'name'      => isset($posted_data['your-name']) ? $posted_data['your-name'] : '',
            'email'     => isset($posted_data['your-email']) ? $posted_data['your-email'] : '',
            'message'   => isset($posted_data['your-message']) ? $posted_data['your-message'] : '',
            'source'    => 'wordpress_site_a',
            'timestamp' => current_time('mysql')
        );

        // n8n 的 Webhook URL (記得切換 Test/Production)
        $n8n_url = 'https://n8n.your-domain.com/webhook-test/contact-form-submit';

        // 使用 WordPress 內建的 HTTP API 發送請求
        $response = wp_remote_post( $n8n_url, array(
            'method'      => 'POST',
            'data_format' => 'body',
            'timeout'     => 45,
            'headers'     => array(
                'Content-Type' => 'application/json',
                // 'X-API-KEY' => '你的密鑰' // 安全性考量建議加上
            ),
            'body'        => json_encode( $body ),
            'blocking'    => false, // 設定為非阻塞,以免拖慢使用者體驗
        ) );

        // 簡單的錯誤紀錄 (建議依實際需求調整)
        if ( is_wp_error( $response ) ) {
            error_log( 'n8n Webhook Error: ' . $response->get_error_message() );
        }
    }
}

這段程式碼的關鍵在於 json_encode($body) 和 header 設定 Content-Type: application/json,確保 n8n 能正確解析 JSON 格式。

第三步:在 n8n 處理資料並轉發

當你在 WordPress 送出表單後,n8n 的 Webhook 節點應該會顯示綠色的「Data received」。這時候你就會看到詳細的 JSON 結構。

接下來,你可以串接 HTTP Request 節點,將這些資料打到任何你想去的地方,比如 Slack 通知、HubSpot API 或是自家的 ERP。

在 HTTP Request 節點中,你可以使用 Expression(表達式)來動態填入資料,例如:


{
  "text": "收到新訊息!來自:{{ $json.body.name }} ({{ $json.body.email }})"
}

安全性考量:別讓你的 API 裸奔

這是 Eric 最常嘮叨的部分。Webhook URL 其實就是一個公開的 API 端點,如果沒有保護,任何人都可以偽造請求塞垃圾資料給你。

  1. 驗證 Header: 在 WordPress 發送時加入一個自定義 Header (如 X-Auth-Token),並在 n8n 的 Webhook 節點設定 Authentication,檢查這個 Token 是否匹配。
  2. 來源 IP 限制: 如果你的 WordPress 和 n8n 在同一台主機或固定 IP,可以在 Nginx 層級限制只允許特定 IP 存取 Webhook 路徑。
  3. 資料驗證 (Validation): 不要在 n8n 裡無條件信任傳進來的資料。使用 n8n 的 If 節點或 Code 節點檢查 email 格式是否正確,欄位是否缺漏。

除錯與監控:當自動化不動的時候

自動化最怕的就是「默默失敗」。在 WordPress 端,務必檢查 debug.log。在 n8n 端,建議開啟「Save Execution Data」在錯誤發生時,這樣你才能回放 (Retry) 失敗的工作流。

另外,我建議在 n8n 流程的最後加入一個 Error Trigger 節點,當流程中間任何環節出錯時,主動發送通知到你的 Email 或通訊軟體,別等客戶抱怨了才發現系統掛了。

結論:用技術釋放你的時間

透過 n8n Webhook 與 WordPress API 的整合,我們打通了資料的任督二脈。這不僅僅是省下複製貼上的時間,更重要的是,它讓資料的流動變得即時且可追蹤。這才是數位轉型的第一步。

如果你覺得這篇文章太硬,或者你們公司的資料架構複雜到讓你頭痛,沒關係,這就是我們存在的意義。

👉 還是搞不定?聯繫浪花科技,幫你打造自動化帝國

延伸閱讀

// FAQ

常見問題

Webhook 和 Polling(輪詢)有什麼差別?
Polling 是用戶端每隔一段時間主動詢問伺服器「有沒有更新」,會持續消耗雙方資源。Webhook 則是事件發生時由來源端主動發送 HTTP POST 通知接收端,屬於即時且高效的資料整合方式。當 WordPress 發生新訂單、新註冊或表單送出等事件時,主動推送資料給 n8n 即屬於 Webhook 模式。
為什麼用 n8n 串接自動化,而不是 Zapier 或 Make?
n8n 可以自託管(Self-host),敏感資料不必流經第三方伺服器,適合重視資料隱私的企業。它的 HTTP Request 節點幾乎等同視覺化的 Postman,可自由設定 Header、Auth 與 Body,並能在節點中直接寫 JavaScript 處理複雜資料轉換,邏輯更接近程式開發。
WordPress 要把表單資料送到 n8n Webhook,PHP 該注意什麼?
可用 WordPress 內建的 wp_remote_post 發送請求,重點是將 Content-Type 設為 application/json 並用 json_encode 編碼 body,n8n 才能正確解析。實務上可把 blocking 設為 false 採非阻塞發送,避免拖慢使用者體驗,並在 is_wp_error 時寫入錯誤紀錄。
如何保護 n8n 的 Webhook URL 不被任意請求濫用?
Webhook URL 本質是公開的 API 端點,應在發送端加入自訂 Header(如 X-Auth-Token),並於 n8n Webhook 節點設定 Authentication 比對 Token。若來源固定,可在 Nginx 層限制只允許特定 IP 存取該路徑;同時在 n8n 用 If 或 Code 節點驗證傳入資料的格式與欄位,不要無條件信任傳入內容。
~/roamer-tech/newsletter // FREE
// newsletter

訂閱免費電子報

把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。

$
// final.exec()

準備好讓你的網站開始為你工作了嗎?