WhatsApp 觸發器無法接收任何訊息,參數始終錯誤

我在 WhatsApp 觸發器中遇到問題,它總是說參數不正確,而且根本沒有在我的 WhatsApp 上收到任何內容。

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

它總是說參數不正確。

請分享您的工作流程

這就是工作流程的樣子。雖然很簡單和基本,但即使應用程式 ID 和應用程式密鑰工作正常,WhatsApp 觸發器仍然無法正常工作。而且 WhatsApp 設置中的 1) 立即嘗試 和 2) 生產設置中的所有內容都已完成。


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

我期望輸出由我或收件人電話號碼接收

您的 n8n 設置資訊

  • n8n 版本:最新版本
  • 資料庫(預設:SQLite):不確定
  • n8n EXECUTIONS_PROCESS 設置(預設:own、main):own
  • 執行 n8n 的方式(Docker、npm、n8n 雲端、桌面應用程式):npm
  • 作業系統:Windows 11

嘿 @Myth_Xenodo,在等待回覆的同時,以下是一些可能對你有幫助的資源:

建議的資源

自動符合你的問題。

文件:

論壇:

@edumats、@Leoncsm1、@LogeshwariV — 你們之前曾幫助過類似的問題,能看一下嗎?

由 n8n 的社群機器人自動建議。這是試點計劃——請在此分享回饋。

Hi @Myth_Xenodo

Meta 需要知道您的應用程式中哪個部分應該接收 webhook。

  • 前往您的 Meta 應用程式儀表板。
  • 在左側邊欄中尋找 Webhooks 部分。
  • 關鍵步驟: webhook 通常有一個下拉式選單可「選擇產品」。確保您已從該下拉式選單中選擇 「WhatsApp Business Account」(或類似的 WhatsApp 相關產品)。如果您誤選了「Facebook Login」或「Instagram」,當 n8n 嘗試註冊時,觸發器將因「參數錯誤」而失敗。

如果您在自己的電腦(localhost)或本機伺服器上執行 n8n:

  • WhatsApp 無法「看到」您的電腦。 為了讓觸發器正常運作,Meta 必須能夠向您的 n8n 執行個體傳送 POST 請求。
  • 解決方案: 您必須使用 ngrok、Cloudflare Tunnel 或反向代理等隧道,為您的本機 n8n 執行個體提供公開的 https:// URL。
  • 檢查您的 WEBHOOK_URL: 確保您的 n8n 環境變數 WEBHOOK_URL 設定為您的公開隧道位址(例如,https://your-ngrok-id.ngrok-free.app)。

Meta 需要安全連線來傳送 webhook 事件。

  • 如果您是自行託管,請確保您的 n8n 執行個體正在使用有效的 SSL 憑證(HTTPS)。
  • Meta 將拒絕連線到具有自簽憑證的網站或只能透過 HTTP 存取的網站。

以上是否有任何情況適用於您?

請提供下列資訊:

  1. 您是否已在 Meta 應用程式儀表板內成功設定 Webhook URL?
  2. 錯誤是在您嘗試啟用工作流程時出現,還是在您嘗試測試/執行工作流程時出現?

我試過 webhook,但它就是完全無法運作。我用 ngrok 自行免費託管,但它根本無法正常工作,這讓我很沮喪,webhook 都不起作用,而且 webhook 之間還會互相干擾,這根本沒有意義。

我跟著這個教程,但我的問題總是以錯誤的參數結束。

當我執行工作流程時它就是不運行。它只是快速退出,這是圖像。

Hi @Myth_Xenodo 歡迎!

以下是一些人在使用這個設置時容易遇到的問題。

免費的 ngrok 每次重新啟動時都會給你一個新的隨機 URL。所以存放在 Meta 中的回調 URL 會在你重新啟動任何東西後立即與你的 n8n 不匹配,這可能解釋了為什麼感覺 webhook 相互干擾。在 ngrok 儀表板中認領你的免費靜態域名,然後用它啟動 ngrok。你每個帳戶可以免費獲得一個,它可以在重新啟動後存活。

其次,在 Meta 的 WhatsApp 然後 Configuration 中,僅保存回調 URL 還不夠。你還必須點擊 Webhook fields 旁邊的 Manage,並勾選 messages。如果該框未勾選,所有設置看起來都正確,但什麼都收不到。

第三,值得再次檢查哪個憑證在哪個節點上。WhatsApp Trigger 使用 App ID 和 App Secret,而發送節點使用訪問令牌和電話號碼 ID。它們是 n8n 中兩種不同的憑證類型,很容易最後附加錯誤的憑證。

另外,trigger 只有在工作流被激活時才會接收真實消息,而不是當你點擊 Execute 時。Execute 只是註冊一個臨時測試 webhook 然後退出,這與你的截圖中它立即退出的情況相符。

這完全沒有意義。

我建立了一個 ngrok,它需要一個 node.js 後端指令碼,所以我給它一個 localhost:3000,然後將其轉譯為 https://quic…(類似 ngrok 連結的東西),我將其傳遞給回呼 URL,它與新的 token 金鑰一起運作。但當我執行它時,我遇到了同樣的問題。當我發佈工作流程或執行工作流程時,一切都會崩潰

啊,問題就在這裡。ngrok 根本不需要後端腳本。它只是把你機器上的一個連接埠對外提供一個公開網址。你把它指向在 3000 執行的 Node 腳本,所以 Meta 是在跟那個腳本通話,而不是跟 n8n 通話,n8n 根本看不到任何東西。

改成直接指向 n8n。n8n 執行在 5678,所以:

ngrok http 5678

沒有腳本,3000 上什麼都沒有,就這樣。

然後 n8n 需要知道自己的公開位址,否則它會一直產生 localhost 網址。停止 n8n,然後在同一個終端機(cmd)執行:

set WEBHOOK_URL=https://your-id.ngrok-free.app
n8n start

現在打開 WhatsApp Trigger 節點。它顯示的 webhook 網址應該是以你的 ngrok 位址開頭,而不是 localhost。那個確切的網址就是要放進 Meta 作為回調網址的內容,再加上 n8n 在那裡顯示的驗證碼。

最後一步,啟動工作流程而不是按 Execute。Execute 只會短暫地監聽然後放棄,那就是你看到的當機。

嗨 @Myth_Xenodo 歡迎!
n8n 會自動註冊 Meta webhook 訂閱。WhatsApp Trigger 會使用您的應用程式 ID 和應用程式密鑰呼叫 Graph API,傳送自己的回調 URL,並使用 trigger 節點的內部 ID 作為驗證令牌,這是一個你看不到或無法在任何地方輸入的值。你在 WhatsApp > Configuration 下手動填入的回調 URL 和令牌永遠無法匹配,它留下的訂閱會阻止 n8n 寫入自己的訂閱,所以 Meta 返回「Invalid parameter」。
在 Meta 中,刪除現有的 webhook 訂閱,並將回調 URL 和驗證令牌欄位留空。然後在 n8n 中發佈工作流程,讓它註冊這些訂閱。
一個應用程式一次只能擁有一個 WhatsApp webhook,n8n 的測試和生產 URL 會相互覆蓋,所以測試已發佈的工作流程會無聲地中止其生產流量。

好的,先生,但首先我會告訴您我是怎麼做的。

我建立了應用程式,我必須在生產環境設定中訂閱 webhook。

然後進入圖表 API 探索工具

所以我真的不明白您的意思,在 n8n 中發佈工作流程並讓它們自動註冊????

那是什麼,像是自動填充的魔法嗎?我也發佈了工作流程,但什麼都沒有發生。完全沒有運行。我安裝了最新版本的 n8n,但一切都無法正常運作。文檔或教學中的任何內容都不適用於我的情況,它們要麼已過時,要麼 Facebook 已經更新了。

公平的問題,讓我解釋一下我的意思,而不是只是告訴你點擊東西。

當你用 WhatsApp Trigger 啟動工作流程時,n8n 會使用你認證中的 App ID 和 App Secret 自己呼叫 Meta 的 Graph API,並要求 Meta 將你的應用程式訂閱到該回調 URL。Meta 隨後會使用一個挑戰號碼回呼該 URL,並期望你的 n8n 將其回顯。這個握手過程是為什麼該節點需要 App ID 和 Secret 而不是只需要存取令牌的原因,也是為什麼你收到的錯誤是 Meta 錯誤代碼而不是 n8n 錯誤代碼的原因。

所以這不是魔法,但這意味著 n8n 和你的手動 Graph API Explorer 設定都試圖配置同一件事,這可能會相互衝突。

有兩件事可以告訴我們這實際上卡在哪裡。

首先,直接在瀏覽器中開啟你的 ngrok https URL。你應該會看到 n8n 編輯器載入。如果你看到其他內容,比如 ngrok 錯誤頁面、空白頁面或該 Node 指令碼的輸出,那麼隧道沒有到達 n8n,在解決此問題之前什麼都無法運作。這只需要十秒鐘,可以排除一半的可能性。

其次,當你收到「不良參數」時,點擊錯誤上的「顯示詳情」並貼上完整文本。該訊息包括 Meta 從你的 URL 實際收到的內容。如果它以 <!DOCTYPE html> 開頭,那麼 n8n 以外的東西回應了挑戰,這將準確告訴我們哪裡出了問題。

關於發布後沒有任何反應,那部分是正常的。活躍的 WhatsApp trigger 保持沉默,在真實訊息到達之前不會顯示任何活動。它看起來不會像在做任何事情。

好吧,讓我一步步來,因為我一直在重複運行同樣的錯誤。

所以在我的生產設置中,CallURL 和驗證令牌以及 webhook 訂閱。它們全都是空的,現在都關閉了。

你告訴我,如果我只是添加應用密鑰和應用 ID,然後發布工作流程,它就會工作…但現在不行??你能同時看到這兩個錯誤嗎?

所以我的錯誤在哪裡,我找不到?

你能貼上來自該節點的完整錯誤訊息嗎?

工作流程無法發布

節點「WhatsApp Trigger」中出錯:
請求錯誤 - 請檢查您的參數

Show Details

無效的參數

首先,讓我澄清一下,因為我之前解釋得不好。n8n 為你註冊 webhook 並不會移除隧道。n8n 只能將它認為自己擁有的地址提供給 Meta。如果 n8n 不知道自己的公開地址,它會向 Meta 發送類似 http://localhost:5678/webhook/... 的內容,而 Meta 會拒絕,因為它無法連接到 localhost 地址。Meta 表達這一點的方式就是「無效參數」。

所以隧道仍然是必需的。差別在於你不需要自己將任何內容貼到 Meta 中,n8n 會在發布時為你完成。

以下是能確認這一點的檢查。打開你的 WhatsApp Trigger 節點,查看面板頂部附近顯示的 webhook URL。它以什麼開頭?

  • http://localhost:5678/... 或 127.0.0.1 → 那就是你的問題所在。n8n 向 Meta 提供了一個它無法連接的地址。
  • https://something.ngrok-free.app/... → 那就是其他原因,我們進一步檢查。

如果顯示的是 localhost,修正方法是:

  1. 執行 ngrok http 5678 並複製它提供給你的 https 地址
  2. 停止 n8n
  3. 使用該地址啟動它,在命令行中:set WEBHOOK_URL=https://your-id.ngrok-free.app 然後 n8n start
  4. 重新打開 trigger 節點,URL 現在應該以你的 ngrok 地址開頭
  5. 然後發布

並將 Meta 中的「回調 URL」和「驗證令牌」框保留為空,如同現在一樣。這是正確的。n8n 在發布成功時會自己填入這些。

告訴我那個 webhook URL 說的是什麼,我們從那裡繼續。

按照你所說的,我遵循了指示。

image

但我仍然收到相同的錯誤

Stopping n8n...
PS C:\PythonExploration\Automations> ngrok http 5678                                              
PS C:\PythonExploration\Automations> set WEBHOOK_URL=https://quiver-comprised-stack.ngrok-free.dev/
PS C:\PythonExploration\Automations> n8n start

...
n8n 已準備就緒,位址 ::,埠號 5678
n8n Task Broker 已準備就緒,位址 127.0.0.1,埠號 5679
無法在內部模式下啟動 Python 工作執行器。因為此系統缺少其虛擬環境。在內部模式下啟動 Python 執行器僅用於偵錯,不建議用於生產環境。鼓勵使用者以外部模式部署。請參閱:https://docs.n8n.io/hosting/configuration/task-runners/#setting-up-external-mode

你的 n8n 設定存在棄用相關問題。請採取建議的操作以更新你的配置:
 - N8N_UNVERIFIED_PACKAGES_ENABLED -> 此變數的預設值將在未來版本中變更為 `false`。明確將其設定為 `true` 以繼續安裝未驗證的社群套件。       
 - N8N_RUNNERS_TASK_TIMEOUT -> 此變數的預設值將在未來版本中從 300(5 分鐘)減少到 60(1 分鐘)。明確設定它以保留你目前的工作逾時。        
 - N8N_COMPRESSION_NODE_MAX_DECOMPRESSED_SIZE_BYTES -> 此變數的預設值將在未來版本中從 2 GiB 減少到 256 MiB。明確設定它以保留你目前的限制。       
 - N8N_COMPRESSION_NODE_MAX_ZIP_ENTRIES -> 此變數的預設值將在未來版本中從 5000 減少到 1000。明確設定它以保留你目前的限制。
 - 在容器外執行 n8n 已棄用。未來版本將要求透過官方 Docker 映像執行 n8n。請參閱 https://docs.n8n.io/deploy/host-n8n/install-options/install-with-docker

[license SDK] 初始化時跳過續訂:未初始化授權憑證
已登錄執行器「JS Task Runner」(QovVV5W-2UjoryQx0WKMt) 
執行個體已登錄
發現 4 個叢集檢查
版本:2.33.7
正在建置工作流程相依性索引...
啟動作用中的工作流程:
完成工作流程相依性索引的建置。已處理 0 個草稿工作流程,0 個已發佈工作流程。
已啟動工作流程「我的工作流程」(ID: xHV9LUdRCSpoKIUA)

編輯器現在可透過以下網址存取:
http://localhost:5678

按「o」在瀏覽器中開啟。
超過 6000 毫秒的逾時
AxiosError: 超過 6000 毫秒的逾時
    at createTimeoutError (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\node_modules\@n8n\backend-network\node_modules\axios\dist\node\axios.cjs:3562:14)
    at RedirectableRequest.handleTimeout (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\node_modules\@n8n\backend-network\node_modules\axios\dist\node\axios.cjs:4080:15)
    at RedirectableRequest.emit (node:events:509:28)
    at Timeout._onTimeout (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\node_modules\follow-redirects\index.js:233:12)
    at listOnTimeout (node:internal/timers:605:17)
    at processTimers (node:internal/timers:541:7)
    at Axios.request (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\node_modules\@n8n\backend-network\node_modules\axios\dist\node\axios.cjs:5427:41)
    at processTicksAndRejections (node:internal/process/task_queues:104:5)
    at invokeAxios (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\node_modules\@n8n\backend-network\src\http\axios\invoke.ts:15:10)
    at httpRequest (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\node_modules\@n8n\backend-network\src\http\axios\request.ts:211:5)
    at Object.request (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\node_modules\@n8n\backend-network\src\http\outbound-http.ts:188:12)
    at paginatedRequest (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\src\utils\strapi-utils.ts:87:15)
    at McpRegistryApiClient.fetchServersMetadata (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\src\modules\mcp-registry\registry\mcp-registry-api.client.ts:31:10)
    at McpRegistryService.refreshUpdatedServers (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\src\modules\mcp-registry\registry\mcp-registry.service.ts:184:20)
    at McpRegistryService.refreshFromApiInternal (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\src\modules\mcp-registry\registry\mcp-registry.service.ts:157:20)
    at McpRegistryService.refreshFromApi (C:\Users\Julle myth\AppData\Roaming\npm\node_modules\n8n\src\modules\mcp-registry\registry\mcp-registry.service.ts:144:4)

從 Strapi API (https://api.n8n.io/api/mcp-servers) 擷取錯誤:超過 6000 毫秒的逾時
無法重新整理 MCP 登錄


這是 ngrok

找到了,這是我的錯。我給你的是 cmd 語法,但你用的是 PowerShell。

看看你自己的日誌:

PS C:\PythonExploration\Automations> set WEBHOOK_URL=https://quiver-comprised-stack.ngrok-free.dev/

開頭的 PS 表示 PowerShell,而 PowerShell 不能理解 set VAR=value。在 PowerShell 中,set 是其他東西的別名,所以變數從未被真正設定。n8n 啟動時仍然認為它在 localhost 上運行,給了 Meta 一個 localhost 回調 URL,Meta 拒絕了它。這就是你的「無效參數」問題。

在 PowerShell 中應該是這樣:

$env:WEBHOOK_URL="https://quiver-comprised-stack.ngrok-free.dev"
n8n start

也去掉尾部的斜杠,否則 webhook 路徑中可能會出現雙斜杠。

在啟動 n8n 之前,可以運行以下命令來確認它是否被設定:

echo $env:WEBHOOK_URL

如果它列印出你的 ngrok 地址,你就沒問題了。然後啟動 n8n,打開 WhatsApp Trigger 節點,webhook URL 應該最終顯示你的 ngrok 域名而不是 localhost。之後發佈。

有一點值得說的是,你的隧道沒問題。ngrok 窗口顯示請求正在命中 n8n 並返回 200,所以那邊一直都在正常工作。只是 n8n 不知道它自己的公開地址。

這有幫助嗎?

我非常感謝你 T_T 我2天的問題終於解決了

歡迎意義重大。