目錄
n8n Webhook 教學:接收外部資料並回應
Webhook 讓外部服務在事件發生時「主動通知」n8n。例如:
- 網站表單有人送出
- 金流平台通知付款成功
- GitHub 有新的 Pull Request
- 自己寫的程式想觸發一個 n8n 流程
n8n 的 Webhook 節點會產生一個網址,任何對這個網址發出的 HTTP 請求都會啟動工作流程。
建立 Webhook
- 新增工作流程,第一個節點選擇 Webhook。
- 設定:
- HTTP Method:通常是 POST
- Path:網址路徑,例如
contact-form - Respond:何時回應(見下方說明)
節點上方會顯示兩個網址:
| 網址 | 格式 | 何時有效 |
|---|---|---|
| Test URL | https://你的網域/webhook-test/contact-form | 按下「Listen for test event」後,接收一次請求 |
| Production URL | https://你的網域/webhook/contact-form | 工作流程發布之後 |

最常見的錯誤:用 Test URL 設定到外部服務,結果工作流程發布後收不到資料。正式使用時,請一定要換成 Production URL。
測試
- 按 Listen for test event。
- 從終端機送出一個請求:
curl -X POST https://你的網域/webhook-test/contact-form \
-H "Content-Type: application/json" \
-d '{"name": "王小明", "email": "ming@example.com", "message": "想詢問報價"}'
- 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]

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 是公開的,任何知道網址的人都能呼叫。保護方式:
- Authentication 選項:Basic Auth、Header Auth、JWT Auth。例如 Header Auth 設定名稱
X-API-Key,呼叫端必須帶上正確的值。 - 驗證簽章:許多服務(Stripe、GitHub、LINE 等)會在 Header 中附上簽章,可以用 Code 節點驗證。
- IP 白名單:在 Webhook 的 Options 中設定 IP(s) Whitelist。
- 路徑使用不易猜測的隨機字串。
接收檔案
表單上傳檔案時(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日