Problème lors de la communication avec Azure Site

Décrivez le problème/l’erreur/la question

Bonjour,
Mon équipe a développé un site web basé sur Azure. Il s’agit essentiellement d’une interface utilisateur qui, lorsqu’elle est sollicitée, exécute un workflow n8n et retourne le résultat. Cependant, si le workflow n8n prend plus de 2 minutes pour s’exécuter, le site génère une erreur. Le workflow n8n lui-même n’a aucun problème à s’exécuter indépendamment pendant plus de 2 minutes, il n’y a un problème que lors de la communication avec le site. Avez-vous des idées sur comment corriger cela ? Faites-moi savoir si vous avez besoin de plus d’informations.

Bonjour @CSIS_Dev

Le problème, c’est qu’Azure dispose d’une « minuterie » intégrée pour toutes les connexions web. Quand votre site demande à n8n de faire quelque chose, Azure maintient la ligne ouverte et attend une réponse. Cependant, si n8n met plus de deux minutes à répondre, Azure suppose que quelque chose a mal tourné et coupe automatiquement la connexion pour économiser les ressources, ce qui explique pourquoi votre site affiche une erreur même si n8n fonctionne toujours.

Vous ne pouvez pas facilement corriger cela en augmentant simplement la minuterie, car ces limites sont profondément intégrées à la façon dont Azure gère le trafic réseau. Compter sur une seule connexion longue durée est instable, car le moindre petit problème de connexion Internet pendant ces deux minutes causerait aussi l’échec de tout le processus.

La meilleure solution est de changer la communication entre votre site et n8n. Au lieu que le site attende la réponse finale, n8n devrait répondre immédiatement avec un message disant « J’ai commencé le travail ; voici votre ID de suivi. » Votre site peut alors afficher un spinner de chargement et vérifier toutes les quelques secondes si le travail est terminé, ce qui permet de livrer le résultat sans jamais atteindre cette limite de deux minutes.

Pour mettre cela en place, vous avez réellement besoin de deux workflows distincts : un pour déclencher le travail et retourner l’ID immédiatement, et un autre pour permettre au site de vérifier si le travail est terminé. Cela devrait ressembler à ceci :

Workflow 1 : Le déclencheur et le processeur

Workflow 2 : Le vérificateur de statut (Endpoint d’interrogation)

Bienvenue à la communauté n8n @CSIS_Dev
Je recommande ce workflow, contactez-moi si vous avez des questions.

{
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "azure-callback",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "f5ca2af4-dfdc-45ce-8c79-d87f386f8a03",
      "name": "Recevoir la requête d'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\": \"Workflow démarré, veuillez attendre le callback.\" }",
        "options": {}
      },
      "id": "39859cb5-60c9-4e97-bff5-82fd56dbc662",
      "name": "Répondre 200 immédiatement",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.5,
      "position": [
        224,
        0
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "resultado",
              "name": "resultado",
              "value": "
3c__PLACEHOLDER_VALUE__Placez ici le résultat de votre traitement__
3e",
              "type": "string"
            },
            {
              "id": "callbackUrl",
              "name": "callbackUrl",
              "value": "={{ $('Recevoir la requête d\'Azure').item.json.body.callbackUrl }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "ae23458e-7109-4600-91c4-e05ace37ac09",
      "name": "Traiter les données",
      "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": "Envoyer le résultat à Azure",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.4,
      "position": [
        672,
        0
      ]
    }
  ],
  "connections": {
    "Recevoir la requête d'Azure": {
      "main": [
        [
          {
            "node": "Répondre 200 immédiatement",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Répondre 200 immédiatement": {
      "main": [
        [
          {
            "node": "Traiter les données",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Traiter les données": {
      "main": [
        [
          {
            "node": "Envoyer le résultat à Azure",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "aiBuilderAssisted": true,
    "builderVariant": "mcp",
    "instanceId": "ea0c2eec4b76caa69b4b4c5710d93f227ef34fb351dbfc568d1671e154e38c4a"
  }
}