WhatsApp 傳入訊息未送達 n8n,儘管已驗證 webhook + 確認 WABA 訂閱

我在 n8n Cloud 中設置 WhatsApp Business Cloud 整合(版本可在執行面板中查看),但入站訊息從未觸發工作流程執行,儘管所有檢查都通過了:

描述問題/錯誤/問題

儘管 Webhook 已被 Meta 驗證,且應用程式已確認訂閱了 WABA,但入站 WhatsApp 訊息不會觸發任何工作流程執行。Meta 自己的實時 Webhook 測試面板確認它正在發送訊息事件,但 n8n 從未註冊其執行——執行中僅出現原始驗證 GET 請求。

我最初嘗試了原生的「WhatsApp 觸發器」節點,但其「WhatsApp OAuth 帳戶」認證始終失敗,顯示「不良請求 - 請檢查您的參數」/「驗證用戶端密鑰時出錯」,即使使用正確的用戶端 ID/密鑰(與其他報告的執行緒相符)。作為解決方案,我改用通用 Webhook 節點(GET+POST,透過「允許多個 HTTP 方法」)+ 一個「回應 Webhook」節點,針對驗證握手返回 {{ $json.query[“hub.challenge”] }}。驗證成功,WABA 訂閱(POST /{WABA_ID}/subscribed_apps)返回 success:true,但真實的入站訊息仍然永遠無法到達 n8n。

錯誤訊息是什麼(如有)?

未顯示任何錯誤——工作流程對入站訊息根本不會執行。發送真實 WhatsApp 訊息後,執行中不會出現新條目,儘管 Meta 的測試面板確認事件已被發送。

請分享您的工作流程

{
  "nodes": [
    {
      "parameters": {
        "path": "1490d3bd-a1f9-476b-9e03-c14c2ab22743",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        0,
        0
      ],
      "id": "dd726403-4c27-4940-805f-786f38a2f25e",
      "name": "Webhook",
      "webhookId": "1490d3bd-a1f9-476b-9e03-c14c2ab22743"
    },
    {
      "parameters": {
        "respondWith": "text",
        "responseBody": "={{ $json.query[\"hub.challenge\"] }}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        208,
        0
      ],
      "id": "960c8c0d-364f-4ed8-9283-8f7f455856db",
      "name": "Respond to Webhook"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  ],
  "pinData": {},
  "meta": {
    "instanceId": "0babb2c4b64d06db9ad149b501c44dae5b503104594b5d893908136157b59fd1"
  }
}

分享最後一個節點返回的輸出

您的 n8n 設置相關資訊

  • n8n 版本:
  • 資料庫(預設:SQLite):
  • n8n EXECUTIONS_PROCESS 設定(預設:own, main):
  • 運行 n8n 的方式(Docker、npm、n8n cloud、桌面應用):
  • 作業系統:

@FAOR_Beauty_Skin,在等待回覆的期間,這些資源可能對你有幫助:

建議的資源

自動符合你的問題。

文件:

論壇:

@fahmiiireza@tridi@LogeshwariV - 你們之前在類似的問題上幫過忙,能看一下嗎?

由 n8n 社群機器人自動建議。這是試點計畫 - 請在這裡提供意見回饋

@FAOR_Beauty_Skin 歡迎!
一個驗證 GET 請求著陸後沒有任何後續動作,這是測試 URL 的特徵。n8n 只在畫布監聽時註冊測試 URL,並在 120 秒後將其刪除,所以 Meta 的握手落在該時間窗口內,而之後的每條訊息都會進入 n8n 不再服務的路徑。生產 URL 只在工作流程發佈後才存在。
發佈工作流程,然後將 Meta 回調設置為生產路徑 /webhook/1490d3bd-a1f9-476b-9e03-c14c2ab22743 而不是 /webhook-test/ 形式,並重新驗證。在返回 Meta 之前,從您的一側證明:

curl -X POST https://<your-instance>.app.n8n.cloud/webhook/1490d3bd-a1f9-476b-9e03-c14c2ab22743 -H "Content-Type: application/json" -d '{"ping":true}'

如果該呼叫確實建立了執行但真實訊息仍然無法到達,那麼 URL 是正確的,差距在於應用程式 WhatsApp 配置中 Webhook 欄位下的 messages 欄位訂閱,這與您已針對 WABA 執行的 subscribed_apps 呼叫是分開的。

您的 Webhook 節點只註冊了 GET,所以 Meta 的驗證會成功,但每個實際的 POST 訊息都會收到 404。這就是為什麼在 Meta 那邊傳遞看起來已確認,但您的執行中從來沒有任何內容出現。

這在您發佈的 JSON 中是可見的——Webhook 節點沒有 httpMethod

"parameters": {
  "path": "1490d3bd-a1f9-476b-9e03-c14c2ab22743",
  "responseMode": "responseNode",
  "options": {}
}

n8n 在保存時會去掉保留在默認值的選項參數,而 httpMethod 的默認值是 GET。您提到通過「允許多個 HTTP 方法」切換到了 GET+POST——但該設置不在匯出中,我檢查過如果它被打開的話應該會在。使用它啟用後匯出相同的工作流程會給您:

"parameters": {
  "multipleMethods": true,
  "httpMethod": ["GET", "POST"],
  "path": "wa-multi",
  "responseMode": "responseNode",
  "options": {}
}

所以在您進行該匯出的時刻,該節點是純 GET 的。要麼更改沒有保存,要麼匯出比它更早。值得重新打開節點檢查——如果 UI 確實顯示它已啟用,請重新保存並重新匯出,因為那樣的話該設置沒有持久化,這是一個值得報告的單獨 bug。

我在 2.32.7 上重現了它而不是猜測。兩個工作流程,除了那一個設置外完全相同,都處於活躍狀態:

webhook_entity
reprowh01  wa-default  GET     <- 您的配置:沒有 httpMethod
reprowh02  wa-multi    GET     <- multipleMethods: true
reprowh02  wa-multi    POST

現場測試中:

GET  /webhook/wa-default  ->  200
POST /webhook/wa-default  ->  404   <- Meta 的訊息落在這裡
GET  /webhook/wa-multi    ->  200
POST /webhook/wa-multi    ->  200

修復是啟用「允許多個 HTTP 方法」並選擇 GET 和 POST,或在同一路徑上使用兩個獨立的 webhook——一個 GET 用於 hub.challenge 握手,一個 POST 用於訊息。第二種更乾淨,因為您的「回應」節點返回 $json.query["hub.challenge"],這只在 GET 分支上有意義。按目前的方式,如果 POST 曾經到達,您會用空的正文回應 Meta。

本地 WhatsApp Trigger 失敗並出現「驗證客戶端密鑰時出錯」是一個單獨的問題——那個在憑證中,不是在路由中。等這個問題解除後,值得開立自己的執行緒,這樣兩者就不會纏在一起。

@FAOR_Beauty_Skin

在 n8n 中,編輯器生產環境之間存在巨大差異。

  • 問題: 當您在編輯器中測試時(點擊「執行工作流程」),n8n 會監聽測試 URL。當您在 Meta 中點擊「驗證」時,Meta 很可能使用的是生產 URL
  • 症狀: 如果您尚未切換 n8n 右上角的開關至**「啟用」,n8n 將收到來自 Meta 的 POST 請求,看到在生產模式下沒有工作流程「監聽」它,然後直接丟棄。它不會**出現在您的執行列表中。
  • 修復方法:
    1. 確保您在 Meta 開發者控制台中使用生產 URL(路徑中沒有 /test/)。
    2. 啟用工作流程(右上角的切換必須開啟)。
    3. 檢查**「執行」**標籤(而不是編輯器)以查看 POST 是否到達。

Meta 有兩個不同的地方來配置 Webhooks,它們的行為不同。

  • 問題: 如果您在 Meta 應用程式左側邊欄的一般**「Webhooks」**部分下配置了 Webhook URL,您就是在告訴 Meta:「傳送應用程式的更新給我(例如應用程式設定或使用者權限的變更)。」
  • 修復方法:必須在特定的 WhatsApp 產品部分內配置 Webhook URL:
    1. 前往您的 Meta 應用程式儀表板。
    2. 查看邊欄的**「產品」**下方。
    3. 點擊**「WhatsApp」** $\rightarrow$ 「設定」
    4. 這是您必須輸入 Webhook URL 和驗證權杖的地方。如果您將它們放在一般的「Webhooks」標籤中,您將通過握手驗證,但您永遠不會收到 WhatsApp 訊息。

即使 URL 正確且握手已驗證,Meta 也不會發送資料,除非您明確要求。

  • 問題: 您已驗證了連線,但您還沒有訂閱內容
  • 修復方法:
    1. WhatsApp $\rightarrow$ 設定頁面(您放置 URL 的地方),尋找稱為**「Webhook 欄位」**的部分。
    2. 您必須點擊**「管理」**。
    3. 尋找名為 messages 的列。
    4. 確保它標記為**「已訂閱」**。如果您在 messages 旁邊沒有看到「已訂閱」,即使 webhook 已「驗證」,Meta 也會保持沉默。

雖然您提到啟用了「允許多個 HTTP 方法」,但請再次檢查該 Webhook 節點的具體配置。

  • 問題: 如果節點明確設定為只有 GET,它將忽略來自 Meta 的 POST
  • 修復方法:
    • 打開您的 Webhook 節點。
    • HTTP 方法下,確保它顯示 GET, POST(或您已選擇兩者)。
    • 注意: 某些版本的節點需要您從下拉菜單中選擇方法。如果您只看到一個,確保您沒有意外過濾掉 POST 請求。

這樣有幫助嗎?