iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
DevOps

Mac 環境 n8n 30 天學習計畫系列 第 16

Day16 — Webhook 入門(外部觸發 Workflow)

  • 分享至 

  • xImage
  •  

一、基本概念

🔹 Webhook 是什麼?

Webhook 本質上就是 「由事件主動觸發的 HTTP 請求」
它是一種 被動等待、主動推送 的機制。

  • 一般 API(Polling):要自己去「問」伺服器(例如每 5 分鐘 GET 一次)。
  • Webhook:當事件發生時,伺服器「主動通知」你,直接把資料送到你指定的 URL。

➡️ 所以可以理解成:Webhook 就是「事件通知用的 URL」


🔹 運作流程

  1. 你在自己的系統/服務(例如 n8n)裡建立一個 URL(通常是 https://yourdomain.com/webhook/...)。
  2. 把這個 URL 提供給「事件來源」的服務(例如 Stripe、GitHub、表單系統)。
  3. 當事件發生時(付款成功、程式提交、表單送出…),那個服務會用 HTTP POST 把資料送到這個 URL。
  4. 你的系統(n8n)就能馬上接收到資料,並啟動對應的工作流程。

🔹 舉個生活化例子

想像一下:

  • 你去餐廳點餐。
  • Polling(輪詢):你每隔 1 分鐘去問服務生「我的餐好了嗎?」
  • Webhook(主動通知):餐點一做好,服務生直接來通知你「你的餐好了!」

Webhook 就像是這個「服務生主動通知」的機制。


🔹 常見應用場景

  1. 表單提交

    • 表單服務(Google Forms、Typeform 等)填完後,會 POST 一筆資料到你的 Webhook。
    • 你就能立刻把資料存進資料庫或觸發後續動作。
  2. 支付系統通知

    • Stripe/PayPal 完成付款 → 發 Webhook → 你的系統馬上更新訂單狀態。
  3. 程式碼事件

    • GitHub push 一次 → 發 Webhook → 自動觸發 CI/CD pipeline 部署。
  4. 物聯網(IoT)

    • 感測器偵測到溫度超標 → 發 Webhook → n8n 收到後發通知到 Slack。

🔹 在 n8n 中的角色

  • n8n 的 Webhook Node 就是用來「開一個 URL,等待別人 POST 資料」。
  • 一旦收到資料,整個 Workflow 就會被觸發,接著你可以用各種 Node 去處理後續邏輯(存 DB、寄信、通知 Line…)。

二、準備(先決條件)

  1. n8n 正在跑:在 Terminal 執行 n8n start
  2. 在瀏覽器開啟 http://localhost:5678 並登入 editor。
  3. 如果要讓外網呼叫(手機或第三方服務),準備好 ngrok(或其他 tunnel)。

三、一步步建立一個最簡單的 webhook workflow

https://ithelp.ithome.com.tw/upload/images/20250929/201691445S7ZAF7uyJ.png

1. 新增 Workflow

  1. Workflows → New,命名 Day16_Webhook_Demo,按 Save。

2. 新增 Webhook node

  1. 畫布點 + → 搜尋 Webhook → 新增。

  2. Webhook node 裡的重點設定:

    • HTTP Method:通常選 POST(也可 GET/PUT)。

    • Path:自訂(例如 form-submit 或留預設的 UUID)。

      • 完整測試 URL 會顯示在 node 頁面或 Test URL
    • Authentication:預設 None(測試用)。生產請改為 API Key / HMAC 驗證等。

    • Respond(或 Response Mode):

      • Respond Immediately(收到就回 200,之後 workflow 繼續執行)
      • Wait for ExecutionRespond when finished(會等 workflow 完成再把結果回傳)
        -(版本差異:名稱可能略有不同,重點是是否等待 workflow 結果再回應)
  3. Save → 然後按 Listen for test event(或類似按鈕)讓 node 進入「正在監聽」狀態。

    • 注意:Listen for test event 只有在 editor 開啟(你看到編輯畫面)時才會接到測試事件;生產要 Activate 並使用 production webhook path。
      https://ithelp.ithome.com.tw/upload/images/20250929/20169144JfVaUZoDV4.png

3. 新增 Function node(處理收到的資料)

  1. 在 Webhook 右邊加 Function(改名 Handle Request)。
  2. 把 Webhook → Function 連線。
  3. 在 Function 中貼入下列範例程式(會把收到的 JSON 攤平,並把 name 加上 ✅):
    https://ithelp.ithome.com.tw/upload/images/20250929/20169144lCpGfcwvW8.png
// 範例:把收到的資料處理並回傳一個簡單物件
return items.map(item => {
  const body = item.json; // webhook 的 body / 欄位都在 item.json
  // 簡單驗證
  if(!body.name){
    return { json: { ok:false, error: 'missing name', raw: body } };
  }
  return { json: { ok:true, message: `${body.name} ✅ 已收到`, raw: body } };
});

4. 測試(用 curl)

  1. 在 Webhook node 頁面複製 Test URL,假設是:

    http://localhost:5678/webhook-test/form-submit
    
  2. 在 Terminal 執行(POST 範例):

curl -X POST "http://localhost:5678/webhook-test/form-submit" \
  -H "Content-Type: application/json" \
  -d '{"name":"Alice","email":"alice@example.com"}'
  1. 若 Webhook 設為 Respond Immediately,curl 會收到 200(或預設回應);若是 Wait for Execution,則會收到 Function 回傳的 JSON。
    https://ithelp.ithome.com.tw/upload/images/20250929/20169144xIPh6SPFu3.png

5. 檢視結果(Execution Log)

  1. 在 n8n editor 左側或上方點 Executions
  2. 找到剛剛的執行紀錄 → 點開 → 逐 node 檢視 Input / Output(Input 是 webhook 傳入的 body & header;Output 是 Function 的回傳)。
  3. 你也可以在 Function 裡 console.log(僅在 terminal 有輸出)或把資料寫到 Google Sheets / Email。
    https://ithelp.ithome.com.tw/upload/images/20250929/2016914435Nav2JAjR.png

上一篇
Day 15:JSON 處理(解析溫度資訊)📑
下一篇
Day17 : Webhook → Sheet(資料 → 自動寫入)
系列文
Mac 環境 n8n 30 天學習計畫22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言