我在 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 歡迎!
一個驗證 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 請求,看到在生產模式下沒有工作流程「監聽」它,然後直接丟棄。它不會**出現在您的執行列表中。
- 修復方法:
- 確保您在 Meta 開發者控制台中使用生產 URL(路徑中沒有
/test/)。
- 啟用工作流程(右上角的切換必須開啟)。
- 檢查**「執行」**標籤(而不是編輯器)以查看 POST 是否到達。
Meta 有兩個不同的地方來配置 Webhooks,它們的行為不同。
- 問題: 如果您在 Meta 應用程式左側邊欄的一般**「Webhooks」**部分下配置了 Webhook URL,您就是在告訴 Meta:「傳送應用程式的更新給我(例如應用程式設定或使用者權限的變更)。」
- 修復方法: 您必須在特定的 WhatsApp 產品部分內配置 Webhook URL:
- 前往您的 Meta 應用程式儀表板。
- 查看邊欄的**「產品」**下方。
- 點擊**「WhatsApp」** $\rightarrow$ 「設定」。
- 這是您必須輸入 Webhook URL 和驗證權杖的地方。如果您將它們放在一般的「Webhooks」標籤中,您將通過握手驗證,但您永遠不會收到 WhatsApp 訊息。
即使 URL 正確且握手已驗證,Meta 也不會發送資料,除非您明確要求。
- 問題: 您已驗證了連線,但您還沒有訂閱內容。
- 修復方法:
- 在 WhatsApp $\rightarrow$ 設定頁面(您放置 URL 的地方),尋找稱為**「Webhook 欄位」**的部分。
- 您必須點擊**「管理」**。
- 尋找名為
messages 的列。
- 確保它標記為**「已訂閱」**。如果您在
messages 旁邊沒有看到「已訂閱」,即使 webhook 已「驗證」,Meta 也會保持沉默。
雖然您提到啟用了「允許多個 HTTP 方法」,但請再次檢查該 Webhook 節點的具體配置。
- 問題: 如果節點明確設定為只有
GET,它將忽略來自 Meta 的 POST。
- 修復方法:
- 打開您的 Webhook 節點。
- 在 HTTP 方法下,確保它顯示
GET, POST(或您已選擇兩者)。
- 注意: 某些版本的節點需要您從下拉菜單中選擇方法。如果您只看到一個,確保您沒有意外過濾掉 POST 請求。
這樣有幫助嗎?