目錄

n8n Webhook 教學:接收外部資料並回應

Webhook 讓外部服務在事件發生時「主動通知」n8n。例如:

  • 網站表單有人送出
  • 金流平台通知付款成功
  • GitHub 有新的 Pull Request
  • 自己寫的程式想觸發一個 n8n 流程

n8n 的 Webhook 節點會產生一個網址,任何對這個網址發出的 HTTP 請求都會啟動工作流程。

建立 Webhook

  1. 新增工作流程,第一個節點選擇 Webhook。
  2. 設定:
    • HTTP Method:通常是 POST
    • Path:網址路徑,例如 contact-form
    • Respond:何時回應(見下方說明)

節點上方會顯示兩個網址:

網址格式何時有效
Test URLhttps://你的網域/webhook-test/contact-form按下「Listen for test event」後,接收一次請求
Production URLhttps://你的網域/webhook/contact-form工作流程發布之後
Webhook 節點顯示 Test URL 與 Production URL
Webhook 節點:上方可以切換 Test URL 與 Production URL。這裡的網址顯示 localhost,代表還沒有設定對外網址

最常見的錯誤:用 Test URL 設定到外部服務,結果工作流程發布後收不到資料。正式使用時,請一定要換成 Production URL。

測試

  1. 按 Listen for test event。
  2. 從終端機送出一個請求:
curl -X POST https://你的網域/webhook-test/contact-form \
  -H "Content-Type: application/json" \
  -d '{"name": "王小明", "email": "ming@example.com", "message": "想詢問報價"}'
  1. Webhook 節點的 OUTPUT 會出現收到的資料:
{
  "headers": { "content-type": "application/json", "...": "..." },
  "params": {},
  "query": {},
  "body": {
    "name": "王小明",
    "email": "ming@example.com",
    "message": "想詢問報價"
  }
}

後續節點用 {{ $json.body.name }} 讀取送來的資料,網址參數(?id=123)則在 {{ $json.query.id }}。

回應方式

Respond 選項決定 n8n 什麼時候、回傳什麼給呼叫端:

選項行為
Immediately收到就立即回應,工作流程在背景繼續執行
When Last Node Finishes等整個流程跑完,回傳最後一個節點的資料
Using ‘Respond to Webhook’ Node由流程中的 Respond to Webhook 節點決定回應內容

呼叫端只需要知道「收到了」時(例如金流通知),選 Immediately;要回傳處理結果時(例如做成一個 API),用 Respond to Webhook 節點。

用 n8n 做一個簡單的 API

[Webhook GET /price] ─▶ [Google Sheets 查詢] ─▶ [Respond to Webhook]
Webhook、Edit Fields、Respond to Webhook 組成的流程
Webhook → 整理資料 → Respond to Webhook 回傳 JSON

Respond to Webhook 節點可以設定:

  • Respond With:JSON、文字、二進位檔案、重新導向
  • Response Code:例如 200、404
  • Response Headers:例如 CORS 標頭


{ "product": "{{ $json.name }}", "price": {{ $json.price }} }

路徑參數

Path 可以包含變數:

orders/:orderId

呼叫 /webhook/orders/A123 時,{{ $json.params.orderId }} 就是 A123。

驗證請求

Production URL 是公開的,任何知道網址的人都能呼叫。保護方式:

  1. Authentication 選項:Basic Auth、Header Auth、JWT Auth。例如 Header Auth 設定名稱 X-API-Key,呼叫端必須帶上正確的值。
  2. 驗證簽章:許多服務(Stripe、GitHub、LINE 等)會在 Header 中附上簽章,可以用 Code 節點驗證。
  3. IP 白名單:在 Webhook 的 Options 中設定 IP(s) Whitelist。
  4. 路徑使用不易猜測的隨機字串。

接收檔案

表單上傳檔案時(multipart/form-data),檔案會出現在 binary 資料中,可以直接接到 Google Drive、Extract from File 等節點。

讓外部服務連得到你的 n8n

外部服務必須能透過網路連到 n8n:

  • 正式部署:使用有網域與 HTTPS 的伺服器,並設定正確的 Webhook 網址環境變數,否則 n8n 顯示的網址會是 http://localhost:5678/...。見 自架部署。
  • 本機測試:可以使用 Cloudflare Tunnel、ngrok 等工具,把本機的 5678 連接埠暫時對外公開。

常見問題

404:The requested webhook is not registered

  • 使用 Test URL 時:沒有先按 Listen for test event,或已經接收過一次。
  • 使用 Production URL 時:工作流程沒有發布。
  • HTTP 方法不符(設定 POST 卻用 GET 呼叫)。

收到的 body 是空的

確認呼叫端有送出 Content-Type: application/json 標頭。

外部服務說逾時

選用了 When Last Node Finishes,而流程執行太久。改成 Immediately,或縮短流程。

更新於 2026年10月12日