iT邦幫忙

2025 iThome 鐵人賽

DAY 8
0

一、Webhook 是什麼?

Webhook 是「可以被其他系統呼叫的 HTTP 端點(URL)」。
當外部系統發送 HTTP POST/GET 到這個 URL,n8n 的 Workflow 就會被觸發開始執行。

用途:把外部事件(表單提交、第三方 callback、前端事件)接進來,然後在 n8n 裡做判斷、寄信、記錄到 Google Sheet、推通知等自動化。

二、建立第一個 Webhook

-進入 n8n → Workflows → New Workflow
-搜尋 Webhook 節點,拖到畫布
-設定參數:
HTTP Method(The HTTP method to listen to): POST

  1. 刪除資料 → DELETE
  2. 讀資料 → GET / HEAD
  3. 新增資料 → POST
  4. 修改資料 → PUT(全部) / PATCH(部分)

Path: form-submit
Path:Webhook 的「門牌號碼」,決定表單要送到哪個網址,例如 /submitForm

Respond(When and how to respond to the webhook): Immediately
四種Respond可以選:

  1. Immediately → 你只要這個節點的結果,不管後面還有沒有節點。
  2. When Last Node Finishes → 流程全部跑完才給你結果。
  3. Using 'Respond to Webhook' Node → 完全由你設計的回應節點掌控。
  4. Streaming → 一邊執行一邊傳資料,像直播一樣。

-點擊 Listen for test event 立即開始監聽
https://ithelp.ithome.com.tw/upload/images/20250921/20169078UwwKvNiyvO.png

三、如何測試(3 種方法)

A. 用 curl(Linux / mac / WSL / Git Bash)
curl -X POST http://localhost:5678/webhook/form-submit \ -H "Content-Type: application/json" \ -d '{"name":"小明","email":"example@gmail.com","score":**}'

B. Windows PowerShell(Invoke-WebRequest)

我使用的是此方法
及格:
Invoke-RestMethod -Uri "http://localhost:5678/webhook-test/form-submit" -Method POST
-Headers @{ "Content-Type" = "application/json" } `
-Body ([System.Text.Encoding]::UTF8.GetBytes('{"name":"小明","email":"saorsa.lovisa@gmail.com","score":65}'))

https://ithelp.ithome.com.tw/upload/images/20250921/20169078qLagMfM2EW.png
不及格:
Invoke-RestMethod -Uri "http://localhost:5678/webhook-test/form-submit" -Method POST
-Headers @{ "Content-Type" = "application/json" } `
-Body ([System.Text.Encoding]::UTF8.GetBytes('{"name":"小明","email":"saorsa.lovisa@gmail.com","score":55}'))

https://ithelp.ithome.com.tw/upload/images/20250921/20169078RmGTNbwCzE.png

C. Postman

  1. 新增 request,Method 選 POST,URL 填 http://localhost:5678/webhook/form-submit
  2. Body 選 raw -> JSON,貼入:
    '{"name":"小明","email":"example@gmail.com","score":55}
  3. Send(在 n8n 執行狀態下發送)。

測試結果如下:
https://ithelp.ithome.com.tw/upload/images/20250921/20169078GnHXNvFwo9.png

四、小專案:小明考試成績回覆(Webhook → IF → Gmail / Log)

Webhook (接收 POST JSON)

Set (可選:把收到的欄位整理成想要的格式)

IF (判斷 score >= 60)
├─ True → Gmail (寄及格信)
└─ False → Gmail (寄未及格信)
https://ithelp.ithome.com.tw/upload/images/20250921/20169078spDCvyxICw.png
(1) Webhook 節點設定
• Node 名稱:Webhook - exam
• HTTP Method:POST
• Path:form-submit(你可以自行命名)

此處同前半段所述之內容。

(2)Set 節點:整理欄位
把 Webhook 輸入整理成需要的欄位
Add Field:
o name -> Expression: {{($json["body"])["name"] }}
o email -> Expression: {{($json["body"])["email"] }}
o score -> Expression: {{($json["body"])["score"] }}

https://ithelp.ithome.com.tw/upload/images/20250921/20169078CsJBVWIDuI.png
(3) IF 節點設定(判斷是否及格)
• 左側 value:Expression {{$json["score"]}}
• Operation: greater than or equal to
• Right value:60
AND
• 左側 value:Expression {{$json["score"]}}
• Operation: less than
• Right value:60

(4A) Gmail 節點(True 分支:及格通知)
• Node:Gmail - send pass
• Credentials:選你已經設定的 Google Gmail OAuth2
• To Email:Expression {{$json["email"]}}
• Subject:{{ "成績通知 - " + $json["name"] }}
• Message:恭喜 {{ $json["name"] }},你已及格!你的成績是 {{$json["score"]}}

(4B) Gmail 節點(False 分支:未及格通知)
• Node:Gmail - send fail
• To Email:Expression {{$json["email"]}}
• Subject:{{ "成績通知 - " + $json["name"] }}
• Message:你的成績是 {{$json["score"]}},尚未通過。建議複習 XXX,或請助教洽詢重修資源。
4A和4B之結果圖:
https://ithelp.ithome.com.tw/upload/images/20250921/20169078ZaNYHIerNP.png


上一篇
Day 7 : n8n 節點(Node)基礎和IF 條件運用
下一篇
Day 9 : 什麼是 Dify?和 ChatGPT 有什麼差別
系列文
從零開始 : 學習運用 n8n 與 Dify 的 AI 自動化實戰9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言