第 22 章

Webhook:讓外部系統打進 n8n

前面 21 章教的都是「n8n 主動去做事」——按時間排程、去打別人 API、去讀 Gmail。這章反過來:讓別人打你。表單填完自動觸發、Line Bot 收到訊息、HA 感應器動了、GitHub 有人 push——全部走 Webhook 節點進 n8n。這也是整本書的最後一章,收尾看到最後。

為什麼 Webhook 是最後一塊拼圖

把前面幾章的觸發方式攤開,你會發現一件事:

  • Manual Trigger(第 10 章)——你按按鈕,workflow 才動。
  • Schedule Trigger——時間到,workflow 自己動。
  • Gmail / Slack / Sheets Trigger(第 11 章)——SaaS 那邊有新事件,n8n 定期去輪詢拿回來。
  • HTTP Request 節點(第 12 章)——n8n 主動去打別人的 API。

共通點:都是 n8n 自己出手。少了一種模式——「外部系統想主動叫醒你的 workflow」。這就是 Webhook 節點在做的事。

會用到 Webhook 的情境比你想的多很多:

  • 公司網站的聯絡表單填完,資料自動進 Google Sheets、發 Slack 通知業務、寫進 CRM。
  • Line 官方帳號收到客人訊息,走 AI Agent(第 21 章)產生回覆,再回傳給 Line。
  • Home Assistant 門磁感應到「有人回家」,觸發 n8n workflow 記日誌到 Notion、順便關公司 VPN。
  • GitHub 有人開 PR,通知 QA、開 Jira ticket、跑一輪內部 lint。
  • Stripe / 綠界金流有新訂單,寫進 ERP、寄發票、加會員紅利。

簡單講:只要對方系統有「webhook」或「回呼 URL」欄位可填,就能打進 n8n。這一章教你怎麼收、怎麼設定、怎麼回覆、怎麼避免亂人來打。

本章目標:會建 Webhook 節點、看懂 Test URL 跟 Production URL 的差別、會設定 auth 擋掉亂人、會用 Respond to Webhook 節點客製回應、跑一次真的能收到外部打進來的資料。

Webhook 是「你的 workflow 的門鈴」

用最白話的比喻:

  • Schedule Trigger 是鬧鐘——時間到就響。
  • HTTP Request 節點是你打電話出去——主動要問人家事情。
  • Webhook 節點是門鈴——別人來了、按一下、你就會知道。

當你在 workflow 裡加一個 Webhook 節點,n8n 會給你一個 URL,長得像:

https://n8n.woowtech.io/webhook/form-abc123

任何人(人、伺服器、Line、HA、curl 指令)打這個 URL,你的 workflow 就會被觸發。打進來的資料(body、query string、header)會全部變成 workflow 第一個 item 的 $json——你後面的節點就可以用 Expression({{ $json.name }} 等等)拿出來用。

換句話說,Webhook 節點把你的 workflow 變成一個簡易 HTTP API。任何知道 URL 的服務都能觸發它。這也是為什麼你在 Zapier / Make 也會看到「Webhooks」這種 trigger——是自動化平台之間彼此通用的橋樑。

提示:Webhook 節點跟 第 12 章的 HTTP Request 節點是對稱的一對。HTTP Request 是「n8n 打出去」;Webhook 是「別人打進來」。方向相反,觀念一樣是 HTTP。

兩種 URL:Test 跟 Production 差在哪

打開 Webhook 節點的設定面板,你會看到兩個 URL——這是新手第一個大坑。

類型什麼時候活著用途存活時間
Test URL 你按下節點裡的 Listen for test event 按鈕之後才活。 開發時測試——按下按鈕、去打一次、看資料進來的樣子。 按下按鈕後開始 listen,收到一次事件就自動關掉;沒事件時官方沒明講超時,實務上約兩分鐘會停,重按可再開一次。
Production URL workflow 被 Active(右上角開關打開)之後永久活。 正式上線——交給外部服務長期使用。 只要 workflow 保持 Active 就一直活;關 Active 就 404。

這兩個 URL 差別很細節但很重要:

  • 兩者的 URL path 不一樣——Test URL 通常是 /webhook-test/xxx,Production 是 /webhook/xxx。你在節點面板複製時務必看清楚選對。
  • Test URL 每次觸發只吃一次事件就自己關掉,適合對著調欄位、看 Schema。
  • Production URL 是不會出現在 Executions 的即時預覽——你要看實際跑起來的紀錄要去 Executions 分頁看。
注意:最常見的錯——把 Test URL 交給外部服務或客戶。他們設定完某天要用時,你早就關掉 Listen mode 了,所以永遠打不進來。正式上線的原則:workflow 必須 Active、給的 URL 必須是 Production URL(/webhook/ 不是 /webhook-test/)。

動手做:收表單資料存進 Google Sheets

最經典也最實用的入門範例:對外露一個 URL,讓網頁表單把使用者填的資料 POST 進來,n8n 自動寫進 Google Sheets。做完你就能拿去接自家官網或 landing page 的聯絡表單。

  1. 開新 workflow,第一個節點選 Webhook

    右上 + Add workflow → 進入空 canvas → 點中間 + → 在節點抽屜搜 Webhook(在 Triggers 分類底下)。加進來。

  2. 設定 HTTP Method 跟 Path

    Webhook 節點打開後:

    • HTTP Method 選 POST——表單送資料進來預設用 POST。
    • Path 隨便取一個好記的英文名字,例:form-contact。這段會加到 URL 末端。

    設完,節點面板下方會顯示兩個 URL:

    Test URL:       https://n8n.woowtech.io/webhook-test/form-contact
    Production URL: https://n8n.woowtech.io/webhook/form-contact
  3. 按 Listen for test event,跟 curl 打一次

    Webhook 節點右上角按 Listen for test event——節點會進入等待狀態(收到第一次事件就自動結束,若一直沒事件實務上約兩分鐘停)。開一個 terminal,用 curl 打 Test URL 送假資料:

    curl -X POST https://n8n.woowtech.io/webhook-test/form-contact \
      -H "Content-Type: application/json" \
      -d '{"name":"王小明","email":"[email protected]","message":"想詢問報價"}'

    回到 n8n canvas,Webhook 節點會亮綠、右邊 output 面板出現剛剛的 JSON。看到資料進來,這一步就成功了。

  4. 接 Google Sheets 節點:Append Row

    Webhook 節點後面接 Google Sheets 節點。Operation 選 Append Row in Sheet。Credentials 選好(第一次用要新增,見 第 13 章)。挑一個試算表跟工作表(欄位建好 name、email、message、received_at)。

    Columns 區塊每個欄位切 Expression 模式,對應到:

    name          →  {{ $json.body.name }}
    email         →  {{ $json.body.email }}
    message       →  {{ $json.body.message }}
    received_at   →  {{ $now.toISO() }}

    注意 Webhook 節點的 body 內容包在 $json.body 底下,query string 在 $json.query,header 在 $json.headers。

  5. Execute step 確認 Sheet 真的多了一列

    對 Google Sheets 節點按 Execute step——會拿剛剛 Webhook 收到的 item 送一次。開 Google Sheets 檢查有沒有多一列剛剛的資料。有的話代表整條鏈接通。

    Webhook → Send Email 三節點 workflow canvas
    圖 22-1Webhook 觸發後串接下游節點的典型三節點結構:外部 POST 打進 Webhook 節點,資料流到下一個節點做事。
  6. Save,然後右上把 Active 打開

    右上 Save 存檔。存完後把右上的 Active 開關撥到開啟——這一步很重要,不開 Production URL 是 404。

  7. 用 Production URL 打一次驗證

    回 terminal 改打 Production URL(把 /webhook-test/ 換成 /webhook/):

    curl -X POST https://n8n.woowtech.io/webhook/form-contact \
      -H "Content-Type: application/json" \
      -d '{"name":"李小華","email":"[email protected]","message":"正式送出"}'

    Sheet 又多一列——這條 URL 就可以直接交給外部前端工程師或客戶用了。要看歷史紀錄去左側 Executions 分頁。

提示:Test URL 適合「開發階段一次一次調」,Production URL 適合「上線後長期收」。兩者是共存的——workflow 上線之後,你要改欄位測試,還是可以按 Listen for test event 用 Test URL 邊調邊看。改完 Save 就自動同步到 Production。

HTTP 方法:什麼時候用哪個

Webhook 節點的 HTTP Method 下拉可以選 GET / POST / PUT / PATCH / DELETE / HEAD。實務上你只會常用前兩種,其他是做 REST 風格 API 才用得到。

Method對方拿它做什麼資料在哪裡經典場景
GET 外部想「查詢」或「觸發但不帶太多資料」。 Query string(URL 後面的 ?key=value),n8n 收在 $json.query。 簡單 ping、健康檢查、瀏覽器貼網址測試。
POST 外部「送新資料」進來。 Body(JSON 或表單),n8n 收在 $json.body。 表單提交、Line webhook、GitHub webhook、金流回調——最常用。
PUT 外部「整筆更新」某個資源。 Body。 把 n8n 當 REST API 給別人用時才用得到。
PATCH 外部「部分更新」某個資源。 Body。 同上,只更新幾個欄位的情境。
DELETE 外部「刪除」某個資源。 URL path 或 query。 同上,REST 風格 API 才需要。

選錯 Method 會 404——外部用 POST 打,你 Webhook 節點設 GET,n8n 會直接回 404(因為它認為「這個 path 沒有 POST 路由」)。查資料進來卡住時,第一件事就是確認雙方 Method 對齊。

觀念:絕大部分情境選 POST。除非你只是要做「瀏覽器貼網址就觸發」的簡易 trigger,那用 GET;或者對方系統的文件明確講「我們用 GET/PUT/DELETE」,才照對方要求選。

Response 模式:n8n 要回什麼給外部

Webhook 節點的 Respond 選項決定「外部打進來後,n8n 要回什麼 HTTP response」。這件事很重要——Line、Slack、Stripe 這種服務都會看你回什麼來判斷 webhook 有沒有成功。回不對的話它們可能會重試(造成重複執行)或直接停用你的 webhook。

Response 模式行為什麼時候用
Immediately n8n 收到 request 立刻回 200 OK 空 body,workflow 在背景繼續跑。 對方只在乎「收到沒」不看內容;workflow 跑很久(如 AI Agent 生成 30 秒)不想讓對方等;Stripe / GitHub 這種要「3 秒內回」的 webhook。
When Last Node Finishes 整個 workflow 跑完,把最後一個節點的 output當作 response 回傳。 對方想要拿到 workflow 處理後的結果(例:Line Bot 收訊息、n8n 處理完直接把回覆傳回 Line)。workflow 要在幾秒內跑完。
Using 'Respond to Webhook' Node 由你在 workflow 中間某個節點指定「這裡回覆」——把 Respond to Webhook 節點插在你想回應的位置。 要客製回應——回什麼 status code、什麼 header、什麼 body、什麼 content type,都自己決定。做 API 給別人用時的正確選擇。
Streaming Response 以串流方式一段一段回,多半配合 AI Agent 這種會產生 chunked 內容的節點。 要做 ChatGPT 風格的即時逐字輸出前端,或串接支援 SSE / streaming 的下游。

Respond to Webhook 節點是搭配第三種模式的關鍵——把它插在 workflow 你想回應的節點後面(不一定要在最後),可以指定:

  • Respond With——選回什麼形態:JSON、Text、Binary File、Redirect、JWT Token、No Data、All Incoming Items、First Incoming Item。
  • Response Code——自己填數字。常見:200(成功)、201(Created)、400(客戶端錯)、500(伺服器錯)。
  • Response Headers——例:Content-Type: application/json、CORS 相關 header。

要注意:Respond to Webhook 節點只處理第一筆 incoming item;就算前面節點吐出很多筆,也只有第一筆會被拿來回覆。同一個 workflow 若跑到第二個 Respond to Webhook 節點會被忽略;若整個 workflow 跑完都沒經過任何 Respond to Webhook 節點,n8n 會自動回一個標準的 200;若中途錯誤未經該節點,會回 500。

提示:不確定選哪個?—— 對方是 SaaS webhook(Stripe / GitHub / Slack event)選 Immediately;對方是 Line / 表單想要看回覆選 When last node finishes;要蓋自己的 REST API 選 Using Respond to Webhook Node。

常見會打 Webhook 進來的服務

幾乎所有現代 SaaS 都有 webhook 功能——他們有事件想通知你時,會 POST 到你指定的 URL。把 URL 填成 n8n Webhook 節點的 Production URL 就串起來了。以下是最常見的幾家:

來源怎麼設定要注意
Google Forms Google Forms 沒有原生 webhook——需要 Apps Script 或 Zapier / Make 當橋樑。或改用 Tally、Typeform 這種有原生 webhook 的表單服務。 如果一定要用 Google Forms,也可以走 Google Sheets Trigger(表單答案會寫進 Sheet)。
Line 官方帳號 Line Developers Console → Messaging API channel → Webhook URL 貼 n8n Production URL。開啟 Use webhook。 Line 要求 3 秒內回 200,選 Response = Immediately;驗簽章要用 Header X-Line-Signature。
Home Assistant HA Automation → Trigger 選 Webhook,指定一個 webhook_id → 在 HA 觸發(例:門磁感應)時它會打你指定的 URL。或反過來,HA 收 webhook:把 URL 設在 webhook trigger。 HA 打出去時可以自己選 Method 跟 body,跟 n8n Webhook 節點設定要對齊。
Typeform / Tally Form 設定裡的 Integrations 或 Webhooks 分頁貼 URL。填答有人送出就打你 n8n。 對方 body 是他們自己的 schema,先用 Test URL 看清楚欄位路徑再對映。
GitHub / GitLab Repo Settings → Webhooks → Add webhook → Payload URL 貼 n8n URL。選 events(push / PR / issue)。 GitHub 會發非常多種 event,用 IF 節點(第 15 章)過濾只處理你關心的。
Slack slash command / event Slack App 設定 → Slash Commands 或 Event Subscriptions → Request URL 貼 n8n URL。 Slack 也要 3 秒內回 200;Event Subscriptions 第一次會發驗證 challenge,要回 challenge 欄位。
Stripe / 綠界 / TapPay 金流後台的 webhook / 通知網址設定。 驗簽章、Idempotency、失敗會重試——一定要選 Immediately 快速回 200,實際處理丟給後面節點慢慢跑。

共通規則:任何服務在 webhook 送出時,都會用它自己的 JSON schema——先用 Test URL 手動觸發一次、把 body 拉出來看清楚欄位路徑,再往下寫節點。閉眼寫 $json.body.foo 常常會 undefined。

加 auth:避免亂人猜到 URL 亂打

Webhook URL 一但曝光就誰都能打。惡意的話可以塞垃圾資料到你 Sheet、觸發成本很高的 AI Agent、發垃圾 Line 訊息。有幾種保護做法,從最簡到最進階:

方式設定位置安全性什麼時候用
不設 auth,只靠 URL 難猜 Webhook 節點 Authentication = None。Path 用 UUID 或長亂數。 低——URL 就是密碼。 只給信賴的內部服務用(HA、內部工具)。絕對不要放 client side JavaScript 或公開文件。
Basic Auth Authentication 選 Basic Auth,設 username / password。 中——打的人要在 header 帶 Authorization: Basic base64(user:pass)。 簡單伺服器對伺服器場景,對方支援 Basic Auth 時。
Header Auth Authentication 選 Header Auth,指定 header 名字與值(例:X-Api-Key: your-secret-value)。 中——沒帶 header 或值不對 n8n 直接回 401。 大部分現代 API 慣例,最推薦的「一般用」選項。
JWT Authentication 選 JWT Auth,設 secret / algorithm。n8n 會驗簽章。 高——搭配過期時間、簽章驗證。 對方是有 JWT 發放能力的正式系統(企業 SSO、行動 App)。
HMAC 簽章驗證 Authentication 選 None,改用 Code 節點(第 7 章)算 HMAC 對比 header。 高——每個 request 都有唯一簽章。 Line、Stripe、GitHub 都用這招;照對方文件實作。
注意:就算你設了 auth,URL 本身也不該外流——把 auth 想成第二道鎖,第一道鎖還是 URL 本身。secret 存進 Credentials、不要 hard-code 在節點欄位裡,才不會截圖或 export workflow 時洩漏。
危險:Webhook 節點沒設 auth 又對外開放時,很容易被掃 URL 的機器人打——常見症狀是 Executions 突然爆量、莫名觸發、AI 或發訊息類節點成本狂升。發現這種情況第一件事:關 Active、把 Path 改成新的長亂數、加上 Header Auth 再重新啟用。

實例:Line Bot 打進 n8n → AI Agent 回覆

整合 Webhook + AI Agent(第 21 章)+ HTTP Request(第 12 章),做出一個「客人在 Line 傳訊息,n8n 用 GPT 產出回覆,再自動回傳給客人」的完整鏈——所有前面章節的內容在這裡收斂成一個實戰。

  1. Line Developers Console 建 Messaging API channel

    到 developers.line.biz 登入 → 建 Provider → 新增 Messaging API channel。填基本資訊送出。

  2. 拿 Channel Secret 跟 Access Token

    Channel 建好後,在 Basic settings 分頁抄下 Channel Secret;在 Messaging API 分頁最下面 Channel Access Token 按 Issue 產一個抄下來。這兩個等下要存進 n8n Credentials。

  3. n8n 新 workflow:Webhook 節點 POST + 生 URL

    n8n 建新 workflow,加 Webhook 節點:Method = POST、Path = line-bot、Response = Immediately(Line 要求 3 秒內回 200)。抄下 Production URL——但這時還不能用,因為 workflow 沒 Active。先按 Listen for test event 用 Test URL 開發。

  4. Line 那邊 Webhook URL 填 n8n URL

    回 Line Console 的 Messaging API 分頁 → Webhook settings → 貼 n8n Test URL → 開啟 Use webhook。按 Verify 應該顯示 Success(Line 會實測打一次)。

  5. 用手機加 Line Bot 為好友、傳訊息

    用手機掃 Line Console 顯示的 QR code 加官方帳號為好友,傳一句「你好」。回 n8n canvas,Webhook 節點會亮綠、output 出現 Line 的 payload。找到訊息內容的路徑,通常是:

    {{ $json.body.events[0].message.text }}      →  使用者輸入的文字
    {{ $json.body.events[0].replyToken }}        →  回覆這則要用的 token
    {{ $json.body.events[0].source.userId }}     →  使用者 ID
  6. 接 AI Agent 節點產生回覆

    接 AI Agent 節點(第 21 章)。Text 欄位用 Expression 帶入使用者訊息:{{ $json.body.events[0].message.text }}。掛好 Chat Model(OpenAI GPT-4o mini 或其他)。可視情況加 Memory 記住對話。

  7. 接 HTTP Request 節點打 Line Reply API

    接 HTTP Request:Method = POST、URL = https://api.line.me/v2/bot/message/reply、Authentication 選 Header Auth,帶 Authorization: Bearer <你的 Channel Access Token>。Body 用 JSON:

    {
      "replyToken": "{{ $('Webhook').item.json.body.events[0].replyToken }}",
      "messages": [
        { "type": "text", "text": "{{ $json.output }}" }
      ]
    }

    $('Webhook') 是回頭抓 Webhook 節點的 replyToken;$json.output 是 AI Agent 剛產生的回覆。

  8. Save + Active,把 Line webhook 換成 Production URL

    Save 存檔、開 Active。回 Line Console 把 Webhook URL 從 Test URL 換成 Production URL(/webhook/line-bot)。手機再傳訊息一次——秒回。

觀念:這整條鏈接是本書把所有東西串起來的示範——Trigger(Webhook)、Expression 抓 payload、Credentials 存 Line token、AI Agent 產內容、HTTP Request 回打 Line API。每一段在對應章節都學過,這裡只是把它們接成一條線。

常見卡關

  1. Test URL 打完沒反應、n8n 沒收到

    兩個原因:(a)沒按 Listen for test event——Test URL 只在 listen mode 存活;(b)Listen session 過期了(收到一次事件會結束、久沒事件實務上也會停)——重按一次就好。另外要看 URL 有沒有選對——複製時務必看清楚是 /webhook-test/ 那條。

  2. Production URL 打了回 404 Not Found

    幾乎一定是 workflow 沒有 Active——右上開關關著時 Production URL 就是 404。解法:Save 完把右上 Active 開啟。如果 Active 開了還 404,檢查 Path 有沒有跟你打的一致(大小寫敏感、多空白會出事)。

  3. Webhook 有收到但 body 是空的

    對方的 request 沒設 Content-Type,或者設成 text/plain 而不是 application/json——n8n 不會自動 parse。要對方在打時加 header Content-Type: application/json;或者 Webhook 節點 Options → Raw Body 打開,用 Code 節點自己 parse。另外注意 n8n Webhook 節點單次 payload 最大 16MB——超過會直接被擋掉,大檔案要走 upload URL 或分段丟。

  4. 回 405 Method Not Allowed

    對方用的 Method 跟 Webhook 節點設定不一致——外部 POST 但你節點設 GET,或反過來。到節點面板改成一致的 Method。有時候是外部服務預設用 GET 但你以為是 POST,用 curl 或 Postman 手動測一次確認。

  5. 對方一直重試同一個 request(同一筆資料處理很多次)

    對方(Stripe / Line / GitHub)沒在時效內收到 200 就會重試。原因通常是你選 Response = When last node finishes 而 workflow 跑超過對方 timeout(Line 是 3 秒、Stripe 是 3 秒、GitHub 是 10 秒)。解法:改成 Response = Immediately,讓 n8n 秒回 200,處理放背景跑。

  6. 打太快被 n8n 拒掉、Executions 排隊

    n8n instance 有 concurrency 限制——短時間打進來太多,會有請求塞車或直接被拒。解法:(a)開 Queue Mode(附錄 B)加 worker;(b)搭配 Split In Batches 或 Wait 節點錯開處理;(c)把「收到就存」跟「後續處理」拆兩個 workflow,前者只做寫入很快回,後者定時來讀。

  7. Auth 開了但對方一直 401

    對方 header 名稱或值打錯——大小寫敏感、多空白、value 前後有 quote 都會 fail。用 curl 手動打模擬對方帶的 header 測一次;或者對方文件的 header 名字跟 n8n Header Auth 節點裡的欄位名要對齊。也可能是選錯 Authentication 類型(Basic vs Header)。

  8. Executions 看不到 Webhook 觸發的紀錄

    Executions 分頁預設只顯示最近的成功執行——上方 filter 有 Include failed 打開才看得到失敗的。另外把 workflow Setting 裡的 Save Execution Progress 打開才能看每個節點的細節。開發階段建議 Save Manual / Save Failed / Save Successful 三個都設 Save。

收尾:22 章走完,接下來換你做

你已經走完這整本《Woow n8n 入住指南》。從第 1 章「什麼是 n8n」到第 22 章「Webhook」,這條學習路徑帶你從「聽過 Zapier」走到「能自己接 Line Bot 給 workflow 一顆會想的腦」。整理一下你現在能做的事:

  • 能自己開新 workflow、拉節點、串 Trigger + Action + Core(第 7~10 章)。
  • 能整合公司最常用的 SaaS——Slack、Gmail、Google Sheets、Drive、任何有 API 的服務(第 11~13 章)。
  • 能寫 Expression 抓上游資料、能用 IF/Switch 做條件、能用 Merge/Split 處理多筆(第 14~16 章)。
  • 能處理錯誤、能整形資料、能抽 sub-workflow 重用、能寫幾行 Code 逃生(第 17~20 章)。
  • 能讓 workflow 有 AI 判斷力、能收外部 webhook(第 21~22 章)。

剩下的就是動手。真心建議:找一個公司內部過去三個月來重複做過的事——每天早上手動整理報表、每週寄提醒信、客人來 Line 一律先手動回制式訊息——開一個 workflow 把它幹掉。第一個 workflow 上線那一刻你會發現:「原來這種事真的可以不用人做。」然後就會停不下來。

過程遇到卡關的時候:

  • 忘記某個節點怎麼設 → 翻對應章節(章節目錄一開始就有列)。
  • 節點紅色框、跑不動 → 翻 附錄 B · 常見錯誤排錯。
  • 設定不知道在哪 → 翻附錄 A · 設定速查。
  • 想深入了解 self-host → 翻附錄 C · 底層架構。

祝你的 workflow 都跑得順、上線都不出事、老闆看到自動化成果都給你加薪。有問題永遠可以回來翻章節,或者到 n8n 官方社群 community.n8n.io 問——多的是同路人。

提示:學會用 n8n 之後最容易犯的一個錯是「所有事都想自動化」——先評估「這個流程一週執行幾次」,一週只執行一次的事情不見得值得花兩小時做 workflow。優先自動化的是「一天做很多次、又不需要判斷力的事」——這種投報率最高。

常見問題

Webhook URL 會不會被爬蟲爬到、被外人猜到亂打?
URL 的 path 部分(例:/webhook/form-abc123)如果是像 form-abc123 這種好猜的字串,機器人掃站確實可能撞到。用 UUID 當 path(例:/webhook/8f3b2c9a-...),機率極低。再加 Header Auth 更安全。真的很怕就把 URL 當作只有一層鎖、實際靠 auth 或 IP 白名單當第二層。
一個 workflow 可以有幾個 Webhook 節點?
可以有很多個,各自不同 Path 就好。實務上常見一個 workflow 開兩個 Webhook 節點:一個給正式業務用、一個給 health check 或 admin 動作用。或者一個 workflow 對外露多個 endpoint(例:/webhook/order-create、/webhook/order-cancel)走不同分支處理。
Webhook 節點的 URL 換了要怎麼辦?外部服務要重設嗎?
是的。Webhook URL 是根據節點的 Path 欄位動態產生的——你改 Path、URL 就換了。外部所有已經設好舊 URL 的服務都要一起改,不然就 404。改的時機建議:(a)發現舊 URL 被亂人打、(b)換到新 workflow、(c)Path 命名不合適要 refactor。改完務必通知所有下游服務。
n8n 的 Webhook 可以觸發另一個 n8n workflow 嗎?
兩種做法:(a)workflow A 用 HTTP Request 節點打 workflow B 的 Webhook URL——像對外服務那樣,隔離乾淨但要走一次 HTTP;(b)workflow A 用 Execute Workflow 節點(Core 節點)直接呼叫 workflow B,資料直接傳,不走 HTTP,速度更快。內部叫用選 Execute Workflow;跨 instance 或跨帳號才用 HTTP Request 打 Webhook。
Webhook 節點會不會有 timeout?我的 workflow 跑 5 分鐘會斷嗎?
Webhook 節點本身不會斷——但對方(呼叫者)幾乎都有 timeout:Line 3 秒、GitHub 10 秒、Stripe 幾秒、瀏覽器一般 30~60 秒。超過對方 timeout,對方會判定失敗(可能重試)。長工作的解法:Response 選 Immediately 秒回 200,實際處理在背景跑;完成後再另外通知或寫回結果。
Test URL 跟 Production URL 資料格式一樣嗎?測 Test 過的直接放 Production 會有問題嗎?
格式完全一樣——只有 URL path 不一樣、觸發時機不一樣。Test 通、Production 就會通。但要注意:Test 開發時你可能沒開 Active 也沒設 Credentials 的 sharing,Production 打進來時剛好卡在後面某個節點 credential 掉線——正式切之前跑一次完整鏈確認。
怎麼 debug Webhook?打進來看不到 log 該怎麼辦?
三招:(a)用 Test URL + Listen mode 看即時 payload——最快最直觀;(b)workflow Settings 把 Save Successful Executions 跟 Save Failed Executions 都設 Save,然後去 Executions 分頁一筆一筆看;(c)第一個節點插一個 Set / Edit Fields 節點只 pass-through,這樣至少能在 Executions 看到收到的原始資料。
Webhook 收到資料可以先存起來慢慢處理嗎,不想連動處理節點?
常見的解耦做法:Webhook 收到後只做一件事——寫進 Google Sheets / Postgres / Redis / 甚至一個 n8n Data Table——馬上 Immediately 回 200。另外做一個 Schedule Trigger workflow 每分鐘讀新進的資料處理。這樣對方永遠是秒回、後面處理慢也不影響,也不會因為節點掛掉造成資料掉。這是接高流量或不穩定第三方 API 的正確架構。