描述问题/错误/问题
我有一个已发布的工作流,使用 Webhook 节点(配置为
“响应:使用 Respond to Webhook Node”)作为
Google Chat 应用的后端。
问题:
- 当我手动向我的生产 webhook URL 发送 POST 请求
(通过 PowerShell/Invoke-RestMethod),工作完美:
执行显示在
嗨 @Octa-004 歡迎!
這幾乎肯定是你的 Webhook 節點的驗證問題,而不是邊緣或 Cloudflare 阻止。Google Chat 用自己的 Authorization: Bearer <JWT>(由 chat@system.gserviceaccount.com 發出,User-Agent Google-Dynamite)簽署每個請求,因此無法攜帶你的 webhook 期望的任何認證。當 Webhook 節點啟用 Header、Basic 或 JWT 驗證時,n8n 會拒絕任何令牌不匹配的請求,並且永遠不會建立執行,這正是為什麼你用正確認證的 PowerShell 呼叫可以工作,Google Chat 不行,而且 Google 日誌記錄「沒有回應或其回應無效」。
將 Webhook 節點的驗證設定為 None 並重新發佈;Google 的請求將接著到達工作流程並記錄執行。若要在沒有 n8n 等級驗證的情況下保持安全,請改為在工作流程內驗證 Google 的 JWT:一個 Code 節點檢查發行者 chat@system.gserviceaccount.com 和受眾(你的應用程式的專案編號或端點 URL),拒絕任何失敗的項目。
針對你的兩個問題:n8n Cloud 在這裡不是選擇性地阻止 Google 的伺服器,而且執行前邊緣日誌不會向使用者公開,所以那是純支援檢視。你不需要它們,因為關閉驗證並重新測試可在一步內確認原因。
一旦交付有效,請確保「回應 Webhook」節點快速返回有效的 Chat JSON,如 {"text":"..."} ,這樣你就不會觸發程式碼 3 以取得真正無效的回應。
Verify requests from Google Chat | Google for Developers
來自 @Anshul_Namdev 的良好診斷——身份驗證不匹配正是為什麼你的手動 PowerShell 呼叫會建立執行,但 Google Chat 卻永遠不會。Google 使用自己的 Bearer JWT 簽署每個請求,所以 Webhook 節點上的任何 Header/Basic/JWT 身份驗證都會在執行建立前拒絕它。
值得補充的部分:一旦你將 Webhook 節點身份驗證設定為「無」以讓 Chat 通過,你就不會想讓端點完全開放。改為在流程內驗證 Google 自己的權杖。在 Webhook 後面放一個 Code(或 IF)節點,並檢查傳入的 Authorization Bearer JWT:
如果任何檢查失敗,停止工作流程。只有真正的 Google Chat 流量會攜帶通過驗證的權杖,所以 Webhook 節點保持開放(Chat 的請求最終會建立執行),而隨機呼叫者會被過濾出去。這給你與節點身份驗證試圖提供的相同保護,而不會阻止你想要的傳送者。
我的自架 n8n 2.2.4 也出現相同症狀,而且身份驗證說明不符合我的情況。
問題
{ “httpMethod”: “POST”, “path”: “my-path”, “responseMode”: “responseNode”, “options”: {} }
typeVersion: 2,無身份驗證金鑰。回應 Webhook 是 respondWith: json,返回 hostAppDataAction.chatDataAction.createMessageAction 信封。
已檢查
問題
既然 @JGCoder 已確認 Webhook 節點不使用身分驗證且手動未驗證的 POST 有效,我會在變更 JWT 設定前分割診斷:
進行一次測試,將工作流程縮減至 Webhook (POST、生產 URL) -> 回應 Webhook,並在幾秒內以 {"text":"ok"} 傳回 HTTP 200。然後將 Google Cloud Logging 中顯示的 URL 和狀態與代理日誌進行比較。這樣可以確定故障是在 Google Chat 傳送、邊緣/代理還是 n8n 本身。