與 Azure Site 通訊時出現故障

描述問題/錯誤/問題

您好,
我的團隊建立了一個基於 Azure 的網站。它本質上是一個使用者介面,在提示時,會執行 n8n 工作流程並返回輸出。但是,如果 n8n 工作流程執行時間超過 2 分鐘,該網站就會出現錯誤。n8n 工作流程本身獨立運行超過 2 分鐘沒有任何問題,只有在與網站通訊時才會出現問題。有人有關於如何修復此問題的想法嗎?如果您需要任何其他資訊,請告訴我。

Hi @CSIS_Dev

問題在於 Azure 對所有網路連線都設有內建的「計時器」。當你的網站要求 n8n 執行某項操作時,Azure 會保持連線開啟並等待回應。不過,如果 n8n 花費超過兩分鐘才回應,Azure 就會假設出現了問題,並自動切斷連線以節省資源。這就是為什麼你的網站顯示錯誤,即使 n8n 仍在運作中。

你無法僅透過增加計時器來輕易解決此問題,因為這些限制深深嵌入在 Azure 處理網路流量的方式中。依賴單一長時間運行的連線不穩定,因為在這兩分鐘內網際網路連線的任何輕微波動都會導致整個程序失敗。

最佳的解決方案是改變你的網站與 n8n 之間的溝通方式。不是讓網站在線上等待最終答案,而是 n8n 應該立即回覆一則訊息,說「我已開始處理;這是你的追蹤 ID」。你的網站可以顯示載入中的旋轉圖示,然後每隔幾秒檢查一次工作是否完成,這樣就能在不超過兩分鐘限制的情況下傳遞結果。

要實現這一點,你實際上需要兩個獨立的工作流程:一個用於觸發工作並立即返回 ID,另一個用於允許網站檢查工作是否完成。看起來應該像下面這樣:

工作流程 1:觸發器與處理器

工作流程 2:狀態檢查器(輪詢端點)

歡迎來到 n8n 社群 @CSIS_Dev
我推薦這個工作流程,如果你有任何疑問,請聯絡我。

{
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "azure-callback",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "f5ca2af4-dfdc-45ce-8c79-d87f386f8a03",
      "name": "接收 Azure 請求",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        0,
        0
      ],
      "webhookId": "3690eef2-1947-4027-b3c7-eb5401cc6a39"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "{ \"status\": \"processing\", \"message\": \"工作流程已啟動,請等待回呼。\" }",
        "options": {}
      },
      "id": "39859cb5-60c9-4e97-bff5-82fd56dbc662",
      "name": "立即回傳 200",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        224,
        0
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "resultado",
              "name": "resultado",
              "value": "
<__PLACEHOLDER_VALUE__請將你的處理結果放在這裡__
>",
              "type": "string"
            },
            {
              "id": "callbackUrl",
              "name": "callbackUrl",
              "value": "={{ $('接收 Azure 請求').item.json.body.callbackUrl }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "ae23458e-7109-4600-91c4-e05ace37ac09",
      "name": "處理資料",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        448,
        0
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $json.callbackUrl }}",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={ \"status\": \"done\", \"resultado\": \"{{ $json.resultado }}\" }",
        "options": {}
      },
      "id": "849a3532-bde9-41e5-b6e9-17f80bb38d96",
      "name": "將結果傳送至 Azure",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        672,
        0
      ]
    }
  ],
  "connections": {
    "接收 Azure 請求": {
      "main": [
        [
          {
            "node": "立即回傳 200",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "立即回傳 200": {
      "main": [
        [
          {
            "node": "處理資料",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "處理資料": {
      "main": [
        [
          {
            "node": "將結果傳送至 Azure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "aiBuilderAssisted": true,
    "builderVariant": "mcp",
    "instanceId": "ea0c2eec4b76caa69b4b4c5710d93f227ef34fb351dbfc568d1671e154e38c4a"
  }
}