[BUG] WhatsApp 觸發器 — 啟動時出現「錯誤的請求 - 請檢查您的參數」,永遠不進入監聽模式
環境
n8n 版本:2.23.3
安裝方式:npx n8n(Node.js,Windows)
作業系統:Windows 11
隧道:ngrok(ngrok-free.app)
WhatsApp 節點:WhatsApp 觸發器(官方 n8n 節點,版本 1 最新版)
認證類型:WhatsApp OAuth
問題描述
當我點擊 WhatsApp 觸發器節點上的「測試此觸發器」時,工作流程立即拋出錯誤「錯誤的請求 - 請檢查您的參數」,完全沒有進入監聽模式(「等待觸發事件…」)。節點從未註冊 webhook。
終端日誌
Bad request - please check your parameters
Bad request - please check your parameters
Database connection timed out
Database connection recovered
Bad request - please check your parameters
Received request for unknown webhook: The requested webhook "26ac6c82-dd08-40c3-a624-5805b663b1ab/webhook" is not registered.
404 The requested webhook "26ac6c82-dd08-40c3-a624-5805b663b1ab/webhook" is not registered.
Bad request - please check your parameters
我已經嘗試過
驗證認證:WhatsApp OAuth 連線測試返回「連線測試成功」
在 Meta 開發者主控台中設定 webhook URL + 驗證令牌
在 Meta 中點擊「驗證」前嘗試點擊「測試此觸發器」
用 npx n8n start 重新啟動 n8n
確認 ngrok 在線並轉發到 localhost:5678
確認 n8n 也在相同連接埠 5678 上暴露自己的 ngrok 隧道(可能有衝突?)
懷疑原因
我注意到 n8n 暴露了自己的 ngrok 隧道,而我同時在相同的連接埠 5678 上執行了一個單獨的 ngrok 實例。這種衝突會導致「錯誤的請求」和資料庫逾時問題嗎?
問題
「錯誤的請求」是由 n8n 嘗試向 Meta 註冊 webhook 但失敗而觸發的嗎?如果是這樣,n8n 此時究竟向 Meta 發送了什麼,以及什麼可能導致 Meta 拒絕它?
任何幫助都感謝,謝謝!也歡迎用法語回答
完全關閉你的手動 ngrok 終端。讓 n8n 通過使用 tunnel 標記啟動 n8n 來處理它:
npx n8n start --tunnel
如果這樣做能解決問題的話最好,如果有任何錯誤,我也很樂意幫助你
嗨 @Samuel_Kponzot
你看到的「Bad request」錯誤實際上是 n8n 和 Meta 之間握手失敗。當你測試觸發器時,n8n 會告訴 Meta:「請將我的訊息傳送到這個網址。」Meta 隨即試圖呼叫該網址以驗證它是真實的。如果 Meta 沒有立即收到完全正確的回應,它就會拒絕連線,n8n 就會向你顯示那個通用的「Bad request」訊息。
你的日誌顯示 Meta 實際上已經連上你的電腦,但 n8n 將該呼叫拒絕為「未知的 webhook」。這是因為 n8n 對自己的身份感到困惑。它還沒有完成 webhook 的註冊,所以當 Meta 呼叫來驗證時,n8n 沒有識別出該請求並掛斷了 Meta,導致註冊失敗。
根本原因是你有兩條不同的「隧道」(n8n 內建的和你手動的 ngrok)在爭奪同一個埠。就像同一棟房子有兩扇不同的前門;系統不知道要使用哪一扇。這種衝突不僅破壞了 WhatsApp 連線,還導致了「資料庫逾時」錯誤,因為你的網路連線變得不穩定。
要修復此問題,你需要簡化你的設定。關閉 n8n 的內建隧道,僅使用你的手動 ngrok 連結。最重要的是,你必須透過設定 WEBHOOK_URL 環境變數來明確告訴 n8n 該 ngrok 位址是什麼。這可以確保 n8n 給 Meta 正確的位址,並在驗證呼叫到達時識別它。
PowerShell: $env:WEBHOOK_URL="https://your-ngrok-subdomain.ngrok-free.app/"
CMD: set WEBHOOK_URL=https://your-ngrok-subdomain.ngrok-free.app/
歡迎 @Samuel_Kponzot
根據你的描述和分享的日誌,問題不在 WhatsApp Trigger 節點本身,而在於圍繞它設置的 webhook 和隧道方式。
最可能的根本原因是雙隧道設置:你在端口 5678 上運行自己的 ngrok,而 n8n 也在同一端口上啟動自己的隧道,因此 Meta 沒有單一的、穩定的 HTTPS URL 來通信,webhook 註冊立即失敗,並顯示「Bad request - please check your parameters」。當你點擊「Test this trigger」時,n8n 調用 Meta API,使用它知道的 webhook URL 來訂閱你的應用以接收 WhatsApp 事件,但如果該 URL 與在 Meta Developer Portal 中配置的 URL 不匹配(或指向「另一個」隧道),Meta 會拒絕該請求,n8n 顯示通用的 Bad request 錯誤。
我建議以下具體步驟:
停止你的單獨 ngrok 進程,讓 n8n 自己管理隧道,或相反(只使用自己的 ngrok URL 並禁用 n8n 隧道)—— 但絕不能同時運行兩者。
在 Meta Developer Portal 中,確保 webhook 在「WhatsApp Business Account」產品下配置,並且回調 URL 完全是 n8n(或你的單一 ngrok 實例)公開的 HTTPS URL。
使用 phone_number_id/subscribed_apps 上的 Graph API Explorer 確認你的應用實際上已訂閱你的電話號碼;如果響應為空,你需要向該端點 POST 請求以在觸發器進入「listening mode」之前訂閱它。
一旦你有了單一隧道、選擇了正確的產品並且應用已正確訂閱,WhatsApp Trigger 應該在你測試它時從「Bad request」變為「Waiting for trigger event」。
SE-automations:
npx n8n start --tunnel
非常感謝您的幫助,是的,儘管如此我還是收到了相同的錯誤訊息
哦,真的很抱歉它沒有運作,在輸入命令後,
從您的畫布上完全刪除 WhatsApp Trigger 節點,保存工作流程。
刷新您的標籤頁,然後將全新的 WhatsApp Trigger 節點重新添加到畫布上。
打開 WhatsApp Trigger 節點。
確保您的認證通過連接測試。
不要在 Meta 中點擊驗證。
首先點擊 n8n 內的測試步驟或監聽測試事件。UI 現在應該乾淨地進入等待狀態,因為沒有網絡/端口衝突。
當 n8n 正在運轉並積極監聽時,從真實電話號碼向您的 WhatsApp Business 號碼觸發測試訊息,或手動將 n8n 提供的 URL/Token 貼入 Meta 的儀表板中以完成驗證握手。
檢查這是否有效
SE-automations:
npx n8n start --tunnel
所以如果我理解正確的話,我刪除第一個節點,然後建立一個新的,然後重新測試?
如果是這樣的話,我剛剛做了,但很遺憾還是沒有成功
我為此深感抱歉 T-T,但 @nguyenthieutoan 和 @kjooleng 提供的解決方案應該可以解決問題,在此之前我會再找尋更多的解決方案。
@Samuel_Kponzot 有一件事要雙重檢查:當你執行 npx n8n start --tunnel 時,n8n 每次都會產生一個全新的隧道 URL。你需要回到 Meta 開發者入口網站,並用這個新 URL 更新那裡的回調 URL - 它不會再符合你舊的 ngrok 位址了。當 n8n 啟動隧道時,在終端機輸出中找尋隧道 URL(類似 https://xxxx.hooks.n8n.cloud/),將它貼到 Meta 中的 WhatsApp webhook 回調欄位,然後點擊驗證並儲存。如果 Meta 中的 URL 仍然指向你舊的 ngrok 位址,Meta 會持續拒絕握手,無論 n8n 在做什麼。
歡迎來到 n8n 社群 @Samuel_Kponzot
請務必保持您的實例更新至穩定版本 2.23.4,檢查一下 Meta 中的回呼 URL 是否與 WhatsApp Trigger 顯示的完全相同、驗證令牌在 n8n 和 Meta 中是否相同,以及 Meta 應用程式是否已正確設定 WhatsApp/Webhooks 產品和相應的權限。
根據文件,這是參數錯誤
我有一個可能有效的修復方案:
ngrok http 5678
複製 ngrok 產生的安全 URL(必須以 https:// 開頭)
使用 WEBHOOK_URL 變數啟動 n8n,
CMD:
set WEBHOOK_URL=https://1234-abcd.ngrok-free.app/
npx n8n start
Powershell:
$env:WEBHOOK_URL="https://1234-abcd.ngrok-free.app/"
npx n8n start
打開您本地的 n8n 面板(http://localhost:5678 )。
打開您的工作流程並查看您的 WhatsApp Trigger 節點。
由於您設定了環境變數,n8n 現在會動態產生一個 Webhook URL,希望會以您的 ngrok 位址開頭,而不是 localhost。
從節點中複製這個新的 https:// webhook URL 和驗證令牌。
前往您的 Meta App 儀表板,然後進入 WhatsApp,再進入設定。
貼上新的 ngrok-based webhook URL 和驗證令牌。
點擊保存並驗證,Meta 會發送測試 ping,ngrok 會轉發它,n8n 會識別自己的 URL,驗證就有望成功。
希望這對您有幫助
@Samuel_Kponzot 澄清一下:n8n tunnel (–tunnel) 在自架本地安裝上可能不穩定,而且如你所指出的,並未正式支持用於生產環境。ngrok 的做法是朝著正確的方向前進,但還有其他需要檢查的地方。Meta 要求在對 webhook 驗證 URL 的 GET 請求回應中包含特定的確認挑戰值。如果 Meta 的驗證 ping 嘗試接觸你的 ngrok URL 時,n8n 尚未完全啟動,或者 WEBHOOK_URL 環境變數在 n8n 啟動前未設置,Meta 的驗證 ping 將返回不良請求。
另外,Meta 的 webhook URL 在某些配置中可能要求末尾沒有斜線。如果你持續收到不良請求,請嘗試 https://your-ngrok-url.ngrok-free.app/webhook/ … 這兩種方式,以及有無末尾斜線的情況。
「tunnel stays on localhost」這部分是關鍵線索。內建的 --tunnel 有時候不會可靠地生成 hooks.n8n.cloud URL,即使生成了,Meta 也需要可公開訪問的 HTTPS 回調,所以更簡潔的做法是自己運行 ngrok 並明確告訴 n8n,上面的回應已經說明了這一點。
人們容易遺漏的地方:啟動 ngrok 還不夠,你必須在啟動 n8n 之前將 WEBHOOK_URL 設置為 ngrok 的 https URL,否則 n8n 會持續在 localhost 上構建回調 URL,Meta 會以「Bad Request」拒絕它們。所以流程是:運行 ngrok http 5678,複製 https URL,將 WEBHOOK_URL 設置為該 URL,然後啟動 n8n,接著打開 WhatsApp Trigger,它顯示的回調現在應該就是 ngrok URL,這個就是要貼到 Meta portal 的。
免費 ngrok 有個問題:每次重啟 URL 都會改變,所以每次重啟都必須更新 WEBHOOK_URL 並在 Meta 中重新貼上回調,這就是為什麼除了測試以外這樣做很麻煩。如果是客戶依賴的東西,將 n8n 移到有真實域名和 HTTPS 的主機上可以完全避免 tunnel 的麻煩。你是在進行測試,還是需要持續運行?這決定了 ngrok 是否足夠,或者你需要一個真正的主機。
非常感謝你的回應和花費的時間!我會試試看,然後告訴你