🔀 Workflow N8N : Orchestrateur avec 3 Agents

Assistant Service Client - Architecture complète dans un seul workflow

🎯 Cas d'usage : Assistant Service Client Intelligent

🎯
Webhook
Trigger
Reçoit la requête du client
🧠
Orchestrateur
Switch Node
Analyse l'intention et route vers le bon agent
Agent FAQ
OpenAI Node
Questions générales et documentation
🎫
Agent Ticket
HTTP + DB
Crée un ticket support
📦
Agent Commande
API Node
Vérifie le statut de commande
Réponse
Respond Webhook
Retourne la réponse au client

1️⃣ Node Webhook (Trigger)

{
  "method": "POST",
  "path": "assistant-client",
  "responseMode": "responseNode",
  "options": {}
}

📥 Données reçues du webhook :

{{ $json.body.message }} : Le message du client
{{ $json.body.user_id }} : L'identifiant du client (optionnel)

🧠 Node Switch (Orchestrateur) - Logique de routage

{
  "mode": "rules",
  "rules": [
    {
      "name": "FAQ",
      "conditions": [
        {
          "leftValue": "={{ $json.body.message.toLowerCase() }}",
          "operator": "contains",
          "rightValue": "comment|pourquoi|qu'est-ce|expliquer|info"
        }
      ]
    },
    {
      "name": "Ticket Support",
      "conditions": [
        {
          "leftValue": "={{ $json.body.message.toLowerCase() }}",
          "operator": "contains",
          "rightValue": "problème|bug|erreur|aide|support|urgent"
        }
      ]
    },
    {
      "name": "Commande",
      "conditions": [
        {
          "leftValue": "={{ $json.body.message.toLowerCase() }}",
          "operator": "contains",
          "rightValue": "commande|livraison|tracking|statut|numéro"
        }
      ]
    }
  ],
  "fallback": "FAQ"
}

🎯 Comment ça marche ?

Le Switch Node analyse le message avec des règles basées sur des mots-clés. Selon les termes détectés, il route vers le bon agent. Si aucune règle ne correspond, il utilise l'agent FAQ par défaut.

💡 Version avancée avec IA :

Au lieu d'un Switch simple, utilisez un node OpenAI avec ce prompt :

"Analyse ce message client et réponds uniquement par : FAQ, TICKET, ou COMMANDE. Message: {{ $json.body.message }}"

Puis utilisez un Switch sur la réponse de l'IA pour router intelligemment !

❓ Agent 1 : FAQ (OpenAI Node)

{
  "model": "gpt-4",
  "messages": [
    {
      "role": "system",
      "content": "Tu es un assistant FAQ. Réponds aux questions sur nos produits et services. Sois concis et précis."
    },
    {
      "role": "user",
      "content": "={{ $json.body.message }}"
    }
  ],
  "temperature": 0.7
}

🎫 Agent 2 : Ticket Support (HTTP Request + Set)

// Node 1: Set - Prépare les données du ticket
{
  "ticket_id": "={{ 'TICKET-' + Date.now() }}",
  "user_id": "={{ $json.body.user_id || 'anonymous' }}",
  "message": "={{ $json.body.message }}",
  "status": "open",
  "priority": "normal",
  "created_at": "={{ new Date().toISOString() }}"
}

// Node 2: HTTP Request - Envoie au système de ticketing
{
  "method": "POST",
  "url": "https://votre-api.com/tickets",
  "body": {
    "ticket": "={{ $json }}"
  },
  "authentication": "headerAuth",
  "headerAuth": {
    "name": "Authorization",
    "value": "Bearer YOUR_API_KEY"
  }
}

// Node 3: Set - Formate la réponse
{
  "response": "Ticket créé avec succès ! Numéro : {{ $json.ticket_id }}. Notre équipe vous contactera sous 24h."
}

📦 Agent 3 : Statut Commande (HTTP Request)

// Node 1: Code - Extrait le numéro de commande
const message = $input.item.json.body.message;
const orderMatch = message.match(/\d{6,}/); // Cherche 6+ chiffres

return {
  order_number: orderMatch ? orderMatch[0] : null
};

// Node 2: IF - Vérifie si numéro trouvé
// Si oui, continue vers HTTP Request
// Si non, retourne erreur

// Node 3: HTTP Request - Appelle l'API de commandes
{
  "method": "GET",
  "url": "https://votre-api.com/orders/={{ $json.order_number }}",
  "authentication": "headerAuth"
}

// Node 4: Set - Formate la réponse
{
  "response": "Commande {{ $json.order_number }}: Statut {{ $json.status }}. Livraison estimée : {{ $json.delivery_date }}"
}

✅ Bonnes pratiques pour ce workflow

1. Ajoutez un node Error Trigger : Créez une branche qui capture toutes les erreurs et retourne un message générique au client.

📊 Logging et monitoring

2. Insérez un node Set après l'orchestrateur : Loggez quelle branche a été choisie avec timestamp. Utile pour analyser l'usage.

🧪 Testing

3. Créez des nodes "Set" de test : Avant de connecter les vraies APIs, simulez les réponses avec des données statiques pour tester le flux.

🔄 Amélioration continue

4. Ajoutez un node "Append to Sheet" : Enregistrez chaque interaction dans Google Sheets pour analyser les cas non gérés et améliorer vos règles de routage.

🚀 Pour passer en production

5. Variables d'environnement : Utilisez des credentials N8N pour toutes vos clés API. Jamais de clés en dur dans les nodes !

6. Rate limiting : Ajoutez un node "Wait" si vous appelez des APIs externes pour éviter de dépasser les quotas.

7. Validation des entrées : Ajoutez un node "IF" juste après le Webhook pour vérifier que les données reçues sont valides.

📝 Exemple de test avec données simulées

// Créez un node "Set" pour tester sans API
{
  "test_scenarios": [
    {
      "body": {
        "message": "Comment fonctionne votre service ?",
        "user_id": "test123"
      }
    },
    {
      "body": {
        "message": "J'ai un problème urgent avec mon compte",
        "user_id": "test456"
      }
    },
    {
      "body": {
        "message": "Où est ma commande 123456 ?",
        "user_id": "test789"
      }
    }
  ]
}

// Puis connectez ce node au Switch pour tester les 3 branches