第 1 節 - 步驟 2.5 - HTTP Post 請求上的 422 錯誤(SendToPriorityQueue 節點)

  • n8n 版本: 2.30.7(雲端)
  • 資料庫(預設值:SQLite): 預設值
  • n8n EXECUTIONS_PROCESS 設定(預設值:own、main): 預設值
  • 執行 n8n 的方式(Docker、npm、n8n cloud、desktop app): n8n cloud
  • 作業系統: Windows 11

你好,

雖然我的其他 HTTP POST Request 節點運作正常,但我的 SendToPriorityQueue 節點返回以下錯誤:

您的請求無效或無法由服務處理 [項目 0]

缺少一個或多個必需參數。請確保您正在傳送 assessment_id 和訂單資料。

我認為這可能是輸入的問題,因為這個和運作正常的 HTTP Post 請求之間的唯一差異是,前者的輸入(訂單清單)被包裝在一個稱為 enriched_orders 的已定義物件中,而在後者失敗的 POST 請求中,輸入是一個未定義的訂單陣列 - 沒有封裝物件,但課程說明不需要它,所以我無法弄清楚我做錯了什麼。

以下是 POST 請求的 JSON:

{
"body": {
"order_id": "ORD-014",
"customer_id": "CUST-004",
"customer_name": "DataFlow Ltd",
"subscription": "Enterprise"
},
"headers": {
"x-assessment-id": "0a238a9ad1137d3bf5cf2df2e7355e3b",
"hidden": "hidden",
"accept": "application/json,text/html,application/xhtml+xml,application/xml,text/;q=0.9, image/;q=0.8, /;q=0.7"
},
"method": "POST",
"uri": "``https://learn.app.n8n.cloud/webhook/course/n8n102/priority-queue``",
"gzip": true,
"rejectUnauthorized": true,
"followRedirect": true,
"resolveWithFullResponse": true,
"sendCredentialsOnCrossOriginRedirect": false,
"followAllRedirects": true,
"timeout": 300000,
"encoding": null,
"json": false,
"useStream": true

那個選項傾印是 n8n 的內部請求物件,其中兩個地方很突出:“json”: false,以及清單中任何地方都沒有 content-type 標頭。

所以端點很可能收到的本體它沒有解析為 JSON,這就產生了你看到的「缺少一個或多個必需參數」,儘管欄位明確在有效載荷中。伺服器找不到 order_id,因為它根本沒有將本體解析成欄位。

我會特別比較你的兩個 HTTP Request 節點的 Body Content Type(Send Body,然後 Body Content Type,然後 JSON),而不是資料的形狀。如果工作正常的節點設定為 JSON,而這個節點不是,那麼單單這個差異就能解釋它,enriched_orders 包裝器只是紅鯡魚。

有兩件事能快速解決這個問題:

1. 在失敗的節點上啟用「Include Response Headers and Status」。422 本體通常會列出它找不到的欄位,這將其從推測變成單行答案。

2. 暫時將失敗的節點重新指向另一個工作流程中的 Webhook 節點,並觸發一次。這向你顯示確切到達的內容,包括 content-type 和本體是作為解析的欄位還是單一字串到達。通常比推理快。

我從這裡無法判斷的一件事:端點是否還要在本體中使用 assessment_id,而不只是作為 x-assessment-id 標頭。該錯誤將「assessment_id 和訂單資料」一起命名,聽起來像它期望兩者都在有效載荷中,但這取決於課程的 API 合約。如果步驟 1 的回應本體列出它,那就是你的答案。