Système de routage et de résumé AI du support client

Avancé

Ceci est unTicket Management, AI Summarizationworkflow d'automatisation du domainecontenant 32 nœuds.Utilise principalement des nœuds comme If, Set, Code, Gmail, Slack. Traitement automatisé du support client via GPT-4o, Slack et une intégration CRM

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Token Bot Slack ou URL Webhook
  • Point de terminaison HTTP Webhook (généré automatiquement par n8n)
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Informations d'identification Google Sheets API
  • Clé API OpenAI
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "wDPgvREnPGzo267x",
  "meta": {
    "instanceId": "f7efda6e0fb3e5b5aba58995b43b7c79234174dc1e6bcfb5578eff460018af38",
    "templateCredsSetupCompleted": true
  },
  "name": "AI Customer Support Triage & Summarization System",
  "tags": [],
  "nodes": [
    {
      "id": "40bab90c-06e8-400e-ba35-d629ab529144",
      "name": "Déclencheur Entrant (Email/Formulaire/Chat)",
      "type": "n8n-nodes-base.webhook",
      "position": [
        928,
        1664
      ],
      "webhookId": "a5df9695-a412-414a-8684-8beae74f0dd4",
      "parameters": {
        "path": "support-intake",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "94f25509-3536-4eaa-8e30-bb0d3d2bcb3a",
      "name": "Configuration du Workflow",
      "type": "n8n-nodes-base.set",
      "position": [
        1152,
        1664
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "technicalSlackChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Technical Slack Channel ID__>"
            },
            {
              "id": "id-2",
              "name": "billingSlackChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Billing Slack Channel ID__>"
            },
            {
              "id": "id-3",
              "name": "generalSlackChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__General Slack Channel ID__>"
            },
            {
              "id": "id-4",
              "name": "urgentSlackChannel",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Urgent Slack Channel ID__>"
            },
            {
              "id": "id-5",
              "name": "crmApiUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__CRM API Endpoint URL__>"
            },
            {
              "id": "id-6",
              "name": "googleSheetId",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Google Sheet ID__>"
            },
            {
              "id": "id-7",
              "name": "slaThresholdHours",
              "type": "number",
              "value": 24
            },
            {
              "id": "id-8",
              "name": "urgencyThreshold",
              "type": "number",
              "value": 4
            },
            {
              "id": "id-9",
              "name": "supportPortalUrl",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Support Portal URL__>"
            },
            {
              "id": "id-10",
              "name": "companyName",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Company Name__>"
            },
            {
              "id": "id-11",
              "name": "supportEmail",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Support Email Address__>"
            },
            {
              "id": "id-12",
              "name": "standardSlaHours",
              "type": "number",
              "value": 48
            },
            {
              "id": "id-13",
              "name": "prioritySlaHours",
              "type": "number",
              "value": 24
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "6df1111d-ada7-4877-8f7c-e8499e9138ee",
      "name": "Extraire les Données Client",
      "type": "n8n-nodes-base.set",
      "position": [
        1376,
        1664
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "customerName",
              "type": "string",
              "value": "={{ $json.body.name || $json.body.from_name || 'Unknown' }}"
            },
            {
              "id": "id-2",
              "name": "customerEmail",
              "type": "string",
              "value": "={{ $json.body.email || $json.body.from_email || '' }}"
            },
            {
              "id": "id-3",
              "name": "product",
              "type": "string",
              "value": "={{ $json.body.product || $json.body.subject || '' }}"
            },
            {
              "id": "id-4",
              "name": "issueType",
              "type": "string",
              "value": "={{ $json.body.issue_type || $json.body.category || '' }}"
            },
            {
              "id": "id-5",
              "name": "rawMessage",
              "type": "string",
              "value": "={{ $json.body.message || $json.body.text || $json.body.content || '' }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "754686ef-a5a9-4158-9eee-be35c091b5f1",
      "name": "Agent de Triage et Synthèse par IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1600,
        1664
      ],
      "parameters": {
        "text": "=You are a customer support triage assistant. Analyze the customer inquiry and provide:\n\n1. A concise summary (max 200 words)\n2. Classification: technical, billing, general, or urgent\n3. Urgency score (1-5, where 5 is most urgent)\n4. Suggested next action\n\nCustomer Details:\nName: {{ $json.customerName }}\nEmail: {{ $json.customerEmail }}\nProduct: {{ $json.product }}\nIssue Type: {{ $json.issueType }}\nMessage: {{ $json.rawMessage }}\n\nProvide structured output with fields: summary, classification, urgency, nextAction",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "471ce97b-249c-4061-bdc1-be65d3d7e014",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1600,
        1888
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {},
      "typeVersion": 1.2
    },
    {
      "id": "097c80f5-3577-4b45-985e-ef073c3a55f3",
      "name": "Analyseur de Sortie Structurée",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1728,
        1888
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\t\"summary\": \"Brief summary of the customer issue (max 200 words)\",\n\t\"classification\": \"technical\",\n\t\"urgency\": 3,\n\t\"nextAction\": \"Recommended next action for support team\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "b97cd4c8-8dbe-434b-b47b-4ca4c9608218",
      "name": "Router par Classification",
      "type": "n8n-nodes-base.switch",
      "position": [
        1952,
        1632
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "technical",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.classification }}",
                    "rightValue": "technical"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "billing",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.classification }}",
                    "rightValue": "billing"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "general",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.classification }}",
                    "rightValue": "general"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "urgent",
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.classification }}",
                    "rightValue": "urgent"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3
    },
    {
      "id": "27af38f5-7f57-48b0-9933-2f14fb492ba1",
      "name": "Publier dans le Slack Technique",
      "type": "n8n-nodes-base.slack",
      "position": [
        2176,
        1376
      ],
      "webhookId": "5641deda-88ec-40e5-97f8-768edddd62ef",
      "parameters": {
        "text": "=*New Technical Support Ticket*\n\n*Customer:* {{ $json.customerName }} ({{ $json.customerEmail }})\n*Product:* {{ $json.product }}\n*Urgency:* {{ $json.urgency }}/5\n\n*Summary:*\n{{ $json.summary }}\n\n*Next Action:*\n{{ $json.nextAction }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.technicalSlackChannel }}"
        },
        "otherOptions": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "22546b0f-d5e9-4f7a-b569-612df6d66721",
      "name": "Publier dans le Slack Facturation",
      "type": "n8n-nodes-base.slack",
      "position": [
        2176,
        1568
      ],
      "webhookId": "d9fbfba9-8405-484b-9e12-3e76274d8a12",
      "parameters": {
        "text": "=*New Billing Support Ticket*\n\n*Customer:* {{ $json.customerName }} ({{ $json.customerEmail }})\n*Product:* {{ $json.product }}\n*Urgency:* {{ $json.urgency }}/5\n\n*Summary:*\n{{ $json.summary }}\n\n*Next Action:*\n{{ $json.nextAction }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.billingSlackChannel }}"
        },
        "otherOptions": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "397fc082-4440-47a2-a6a7-602471bf1485",
      "name": "Publier dans le Slack Général",
      "type": "n8n-nodes-base.slack",
      "position": [
        2176,
        1760
      ],
      "webhookId": "05e761b5-e77e-422a-86ee-8cb0fc907bfb",
      "parameters": {
        "text": "=*New General Support Ticket*\n\n*Customer:* {{ $json.customerName }} ({{ $json.customerEmail }})\n*Product:* {{ $json.product }}\n*Urgency:* {{ $json.urgency }}/5\n\n*Summary:*\n{{ $json.summary }}\n\n*Next Action:*\n{{ $json.nextAction }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.generalSlackChannel }}"
        },
        "otherOptions": {}
      },
      "typeVersion": 2.3
    },
    {
      "id": "96528838-d29c-497d-a221-b2b4c9025a5d",
      "name": "Publier dans le Slack Urgent",
      "type": "n8n-nodes-base.slack",
      "position": [
        2176,
        1952
      ],
      "webhookId": "84244cb1-7ea0-4504-9617-d56b151fe9dc",
      "parameters": {
        "text": "=*🚨 URGENT Support Ticket 🚨*\n\n*Customer:* {{ $json.customerName }} ({{ $json.customerEmail }})\n*Product:* {{ $json.product }}\n*Urgency:* {{ $json.urgency }}/5\n\n*Summary:*\n{{ $json.summary }}\n\n*Next Action:*\n{{ $json.nextAction }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.urgentSlackChannel }}"
        },
        "otherOptions": {
          "includeLinkToWorkflow": true
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "b8aa6a61-7439-4af7-8dcd-00283d0684f8",
      "name": "Créer une Tâche CRM (Technique)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2400,
        1376
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "neverError": true
            }
          }
        },
        "jsonBody": "={{ {\n  \"customer_name\": $json.customerName,\n  \"customer_email\": $json.customerEmail,\n  \"product\": $json.product,\n  \"classification\": \"technical\",\n  \"urgency\": $json.urgency,\n  \"summary\": $json.summary,\n  \"next_action\": $json.nextAction,\n  \"sla_hours\": $json.urgency >= $('Workflow Configuration').first().json.urgencyThreshold ? $('Workflow Configuration').first().json.slaThresholdHours : 48\n} }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "ddb40ba2-945a-4f0f-ad46-ef46eb2d852a",
      "name": "Créer une Tâche CRM (Facturation)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2400,
        1568
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "neverError": true
            }
          }
        },
        "jsonBody": "={{ {\n  \"customer_name\": $json.customerName,\n  \"customer_email\": $json.customerEmail,\n  \"product\": $json.product,\n  \"classification\": \"billing\",\n  \"urgency\": $json.urgency,\n  \"summary\": $json.summary,\n  \"next_action\": $json.nextAction,\n  \"sla_hours\": $json.urgency >= $('Workflow Configuration').first().json.urgencyThreshold ? $('Workflow Configuration').first().json.slaThresholdHours : 48\n} }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8b8e2540-5dd7-4ec1-bc5d-d7e8d4c80ac7",
      "name": "Créer une Tâche CRM (Général)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2400,
        1760
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "neverError": true
            }
          }
        },
        "jsonBody": "={{ {\n  \"customer_name\": $json.customerName,\n  \"customer_email\": $json.customerEmail,\n  \"product\": $json.product,\n  \"classification\": \"general\",\n  \"urgency\": $json.urgency,\n  \"summary\": $json.summary,\n  \"next_action\": $json.nextAction,\n  \"sla_hours\": $json.urgency >= $('Workflow Configuration').first().json.urgencyThreshold ? $('Workflow Configuration').first().json.slaThresholdHours : 48\n} }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8e57b175-aca0-4c67-82dc-10f2bfd245eb",
      "name": "Créer une Tâche CRM (Urgent)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2400,
        1952
      ],
      "parameters": {
        "url": "={{ $('Workflow Configuration').first().json.crmApiUrl }}",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "neverError": true
            }
          }
        },
        "jsonBody": "={\n  \"customer_name\": \"{{ $json.customerName }}\",\n  \"customer_email\": \"{{ $json.customerEmail }}\",\n  \"product\": \"{{ $json.product }}\",\n  \"classification\": \"urgent\",\n  \"urgency\": {{ $json.urgency }},\n  \"summary\": \"{{ $json.summary }}\",\n  \"next_action\": \"{{ $json.nextAction }}\",\n  \"sla_hours\": {{ $('Workflow Configuration').first().json.slaThresholdHours }}\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "1fcfd918-bdb5-4ce3-b038-cab9cfa2c433",
      "name": "Journaliser dans Google Sheets (Technique)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2624,
        1376
      ],
      "parameters": {
        "columns": {
          "value": {
            "Product": "={{ $json.product }}",
            "Summary": "={{ $json.summary }}",
            "Urgency": "={{ $json.urgency }}",
            "Timestamp": "={{ $now.toISO() }}",
            "Next Action": "={{ $json.nextAction }}",
            "Customer Name": "={{ $json.customerName }}",
            "Classification": "technical",
            "Customer Email": "={{ $json.customerEmail }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Name",
              "required": false,
              "displayName": "Customer Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Email",
              "required": false,
              "displayName": "Customer Email",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product",
              "required": false,
              "displayName": "Product",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Classification",
              "required": false,
              "displayName": "Classification",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Urgency",
              "required": false,
              "displayName": "Urgency",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Next Action",
              "required": false,
              "displayName": "Next Action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Customer Email"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Support Tickets"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.googleSheetId }}"
        }
      },
      "credentials": {},
      "typeVersion": 4.7
    },
    {
      "id": "dfecf8ef-ce60-4fa0-b944-529a637ce06b",
      "name": "Journaliser dans Google Sheets (Facturation)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2624,
        1568
      ],
      "parameters": {
        "columns": {
          "value": {
            "Product": "={{ $json.product }}",
            "Summary": "={{ $json.summary }}",
            "Urgency": "={{ $json.urgency }}",
            "Timestamp": "={{ $now.toISO() }}",
            "Next Action": "={{ $json.nextAction }}",
            "Customer Name": "={{ $json.customerName }}",
            "Classification": "billing",
            "Customer Email": "={{ $json.customerEmail }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Name",
              "required": false,
              "displayName": "Customer Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Email",
              "required": false,
              "displayName": "Customer Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product",
              "required": false,
              "displayName": "Product",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Classification",
              "required": false,
              "displayName": "Classification",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Urgency",
              "required": false,
              "displayName": "Urgency",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Next Action",
              "required": false,
              "displayName": "Next Action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Timestamp"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Support Tickets"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.googleSheetId }}"
        }
      },
      "credentials": {},
      "typeVersion": 4.7
    },
    {
      "id": "c492c5b8-8caa-422a-b291-be06512b1810",
      "name": "Journaliser dans Google Sheets (Général)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2624,
        1760
      ],
      "parameters": {
        "columns": {
          "value": {
            "Product": "={{ $json.product }}",
            "Summary": "={{ $json.summary }}",
            "Urgency": "={{ $json.urgency }}",
            "Timestamp": "={{ $now.toISO() }}",
            "Next Action": "={{ $json.nextAction }}",
            "Customer Name": "={{ $json.customerName }}",
            "Classification": "general",
            "Customer Email": "={{ $json.customerEmail }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Name",
              "required": false,
              "displayName": "Customer Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Email",
              "required": false,
              "displayName": "Customer Email",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product",
              "required": false,
              "displayName": "Product",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Classification",
              "required": false,
              "displayName": "Classification",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Urgency",
              "required": false,
              "displayName": "Urgency",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Next Action",
              "required": false,
              "displayName": "Next Action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Customer Email"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Support Tickets"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.googleSheetId }}"
        }
      },
      "credentials": {},
      "typeVersion": 4.7
    },
    {
      "id": "472ccb11-7e70-419c-822f-c6154ea2abc8",
      "name": "Journaliser dans Google Sheets (Urgent)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2624,
        1952
      ],
      "parameters": {
        "columns": {
          "value": {
            "Product": "={{ $json.product }}",
            "Summary": "={{ $json.summary }}",
            "Urgency": "={{ $json.urgency }}",
            "Timestamp": "={{ $now.toISO() }}",
            "Next Action": "={{ $json.nextAction }}",
            "Customer Name": "={{ $json.customerName }}",
            "Classification": "urgent",
            "Customer Email": "={{ $json.customerEmail }}"
          },
          "schema": [
            {
              "id": "Timestamp",
              "required": false,
              "displayName": "Timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Name",
              "required": false,
              "displayName": "Customer Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Customer Email",
              "required": false,
              "displayName": "Customer Email",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "Product",
              "required": false,
              "displayName": "Product",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Classification",
              "required": false,
              "displayName": "Classification",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Urgency",
              "required": false,
              "displayName": "Urgency",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Next Action",
              "required": false,
              "displayName": "Next Action",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Customer Email"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Support Tickets"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Workflow Configuration').first().json.googleSheetId }}"
        }
      },
      "credentials": {},
      "typeVersion": 4.7
    },
    {
      "id": "f74fcb3e-acc8-429a-a372-9b2cb23666ff",
      "name": "Vérifier l'Urgence pour le SLA",
      "type": "n8n-nodes-base.if",
      "position": [
        2848,
        1664
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": false,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.urgency }}",
              "rightValue": "={{ $('Workflow Configuration').first().json.urgencyThreshold }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "b8991d6c-954f-487b-8f11-829761a6d5e6",
      "name": "Gestionnaire d'Erreur - Journaliser dans DLQ",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        928,
        2176
      ],
      "parameters": {
        "url": "<__PLACEHOLDER_VALUE__Dead Letter Queue API Endpoint__>",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { \"workflow\": \"AI Customer Support Triage\", \"error\": $json.error, \"timestamp\": $now.toISO(), \"data\": $json } }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a6fe778b-d8de-4127-8bd6-1cfb0266d228",
      "name": "Générer un Numéro de Référence",
      "type": "n8n-nodes-base.code",
      "position": [
        3072,
        1664
      ],
      "parameters": {
        "jsCode": "const timestamp = Date.now();\nconst random = Math.random().toString(36).substring(2, 8).toUpperCase();\nconst referenceNumber = `SUP-${timestamp}-${random}`;\nconst urgency = items[0].json.urgency;\nconst urgencyThreshold = items[0].json.urgencyThreshold || 4;\nconst slaHours = urgency >= urgencyThreshold ? items[0].json.slaThresholdHours || 24 : 48;\nconst slaResponseTime = `${slaHours} hours`;\nreturn { json: { ...items[0].json, referenceNumber, slaHours, slaResponseTime } };"
      },
      "typeVersion": 2
    },
    {
      "id": "e3b53f01-39cf-40fa-b4b1-a16279d383fa",
      "name": "Préparer les Données de l'Email de Réponse Automatique",
      "type": "n8n-nodes-base.set",
      "position": [
        3296,
        1664
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "id-1",
              "name": "emailSubject",
              "type": "string",
              "value": "=Your Support Request Received - Ref: {{ $json.referenceNumber }}"
            },
            {
              "id": "id-2",
              "name": "emailBody",
              "type": "string",
              "value": "=Dear {{ $json.customerName }},\n\nThank you for contacting {{ $('Workflow Configuration').first().json.companyName }} support. We have received your inquiry and our team is reviewing it.\n\n**Ticket Details:**\n• Reference Number: {{ $json.referenceNumber }}\n• Issue Summary: {{ $json.summary }}\n• Classification: {{ $json.classification }}\n• Priority Level: {{ $json.urgency }}/5\n• Expected Response Time: {{ $json.slaResponseTime }}\n\nOur support team will respond to your request within {{ $json.slaResponseTime }}. You can track the status of your ticket at:\n{{ $('Workflow Configuration').first().json.supportPortalUrl }}\n\nIf you have any additional information to add, please reply to this email with your reference number: {{ $json.referenceNumber }}\n\nBest regards,\n{{ $('Workflow Configuration').first().json.companyName }} Support Team\n{{ $('Workflow Configuration').first().json.supportEmail }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "113a0dee-5142-48ab-9b94-a1ef76407712",
      "name": "Envoyer la Réponse Automatique via Gmail",
      "type": "n8n-nodes-base.gmail",
      "position": [
        3520,
        1664
      ],
      "webhookId": "6c090444-ecd0-486e-9e4d-5ef48968023d",
      "parameters": {
        "sendTo": "={{ $json.customerEmail }}",
        "message": "={{ $json.emailBody }}",
        "options": {},
        "subject": "={{ $json.emailSubject }}"
      },
      "credentials": {},
      "typeVersion": 2.1
    },
    {
      "id": "e92c40d8-b13e-4223-996e-ab9540592c46",
      "name": "Réessayer l'Envoi Automatique (Tentative 1)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3744,
        1664
      ],
      "parameters": {
        "url": "<__PLACEHOLDER_VALUE__SMTP Fallback API Endpoint__>",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ {\n  \"to\": $json.customerEmail,\n  \"subject\": $json.emailSubject,\n  \"body\": $json.emailBody,\n  \"referenceNumber\": $json.referenceNumber\n} }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "d05dc36d-bb82-42d6-a631-5fbe16d3ab04",
      "name": "Réessayer l'Envoi Automatique (Tentative 2)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3968,
        1664
      ],
      "parameters": {
        "url": "<__PLACEHOLDER_VALUE__SMTP Fallback API Endpoint (Backup)__>",
        "method": "POST",
        "options": {
          "response": {
            "response": {
              "neverError": true
            }
          }
        },
        "jsonBody": "={{ {\n  \"to\": $json.customerEmail,\n  \"subject\": $json.emailSubject,\n  \"body\": $json.emailBody,\n  \"referenceNumber\": $json.referenceNumber\n} }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "bacdcf4a-d4ae-4436-bfaf-43954b53d832",
      "name": "Journaliser l'Échec d'Envoi dans DLQ",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        4192,
        1664
      ],
      "parameters": {
        "url": "<__PLACEHOLDER_VALUE__Dead Letter Queue API Endpoint__>",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ { \"workflow\": \"AI Customer Support Auto-Reply\", \"error\": \"Failed to send auto-reply after 3 attempts\", \"timestamp\": $now.toISO(), \"customerEmail\": $json.customerEmail, \"referenceNumber\": $json.referenceNumber, \"data\": $json } }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.3
    },
    {
      "id": "1b09b649-cda1-4e24-aef7-dda7c3edede8",
      "name": "Note Adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        496
      ],
      "parameters": {
        "color": 4,
        "width": 736,
        "height": 640,
        "content": "# 🟢 Setup & Intake\n\n## Configure your email or webhook trigger for new support tickets.  \n\n## Update the “Workflow Configuration” node:\n\n## Slack Channel IDs\n\n## CRM Type (HubSpot or Salesforce)\n\n## Google Sheet ID\n\n## SLA (Service Level Agreement) thresholds  \n\n## Connect credentials for OpenAI, Slack, Google Sheets, and Gmail before running.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "28b93a1c-529b-47b2-bea0-3b6c78ad215b",
      "name": "Note Adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1264,
        512
      ],
      "parameters": {
        "color": 3,
        "width": 784,
        "height": 624,
        "content": "# 🤖 AI Triage\n\n## The AI Triage & Summarization node uses OpenAI to:\n## Summarize the message (<200 words)\n## Classify issue type (technical, billing, general, urgent)\n## Assign urgency (1–5)\n## Suggest next action  \n## Model: GPT 5 (editable).  \n## Output feeds into routing, logging, and auto-reply generation.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "2abd4593-c630-4bb0-96df-f5c592d489d2",
      "name": "Note Adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2128,
        528
      ],
      "parameters": {
        "color": 5,
        "width": 784,
        "height": 608,
        "content": "# 🔀 Routing & Logging\n## Route by Classification directs tickets to Slack channels & CRM task queues.  \n## Each triaged ticket is logged to Google Sheets with:\n## Timestamp\n## Classification & urgency\n## AI summary & suggested action  \n## Failed or missing data goes to the DLQ tab for review.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3482614e-7fe0-4e62-93dd-d15d43c83e60",
      "name": "Note Adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3040,
        544
      ],
      "parameters": {
        "width": 736,
        "height": 592,
        "content": "# ✉️ Auto-Reply & Error Handling\n## The “Auto-Reply Generator” node drafts a personalized acknowledgment email with:\n## Customer name\n##  Issue summary\n## Ticket ID & support SLA timeframe  \n## Email sent via Gmail or SMTP.  \n## Invalid or failed triage attempts are logged to the DLQ for auditing.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5e3bc0f5-b4be-4b12-892c-d9f24a8ad2d3",
      "name": "Note Adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1200,
        2144
      ],
      "parameters": {
        "color": 2,
        "width": 496,
        "height": 320,
        "content": "# 🔴 Error Handler – Log to DLQ\n## Optional global error catcher for failed executions. Configure  with your Google Sheet DLQ tab or remove if handling errors elsewhere in the workflow.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "cddc9402-f487-4610-8ff6-7b0a423840cc",
  "connections": {
    "471ce97b-249c-4061-bdc1-be65d3d7e014": {
      "ai_languageModel": [
        [
          {
            "node": "754686ef-a5a9-4158-9eee-be35c091b5f1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "96528838-d29c-497d-a221-b2b4c9025a5d": {
      "main": [
        [
          {
            "node": "8e57b175-aca0-4c67-82dc-10f2bfd245eb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f74fcb3e-acc8-429a-a372-9b2cb23666ff": {
      "main": [
        [
          {
            "node": "a6fe778b-d8de-4127-8bd6-1cfb0266d228",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6df1111d-ada7-4877-8f7c-e8499e9138ee": {
      "main": [
        [
          {
            "node": "754686ef-a5a9-4158-9eee-be35c091b5f1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "22546b0f-d5e9-4f7a-b569-612df6d66721": {
      "main": [
        [
          {
            "node": "ddb40ba2-945a-4f0f-ad46-ef46eb2d852a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "397fc082-4440-47a2-a6a7-602471bf1485": {
      "main": [
        [
          {
            "node": "8b8e2540-5dd7-4ec1-bc5d-d7e8d4c80ac7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "94f25509-3536-4eaa-8e30-bb0d3d2bcb3a": {
      "main": [
        [
          {
            "node": "6df1111d-ada7-4877-8f7c-e8499e9138ee",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "27af38f5-7f57-48b0-9933-2f14fb492ba1": {
      "main": [
        [
          {
            "node": "b8aa6a61-7439-4af7-8dcd-00283d0684f8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b97cd4c8-8dbe-434b-b47b-4ca4c9608218": {
      "main": [
        [
          {
            "node": "27af38f5-7f57-48b0-9933-2f14fb492ba1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "22546b0f-d5e9-4f7a-b569-612df6d66721",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "397fc082-4440-47a2-a6a7-602471bf1485",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "96528838-d29c-497d-a221-b2b4c9025a5d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8e57b175-aca0-4c67-82dc-10f2bfd245eb": {
      "main": [
        [
          {
            "node": "472ccb11-7e70-419c-822f-c6154ea2abc8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "097c80f5-3577-4b45-985e-ef073c3a55f3": {
      "ai_outputParser": [
        [
          {
            "node": "754686ef-a5a9-4158-9eee-be35c091b5f1",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "ddb40ba2-945a-4f0f-ad46-ef46eb2d852a": {
      "main": [
        [
          {
            "node": "dfecf8ef-ce60-4fa0-b944-529a637ce06b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8b8e2540-5dd7-4ec1-bc5d-d7e8d4c80ac7": {
      "main": [
        [
          {
            "node": "c492c5b8-8caa-422a-b291-be06512b1810",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a6fe778b-d8de-4127-8bd6-1cfb0266d228": {
      "main": [
        [
          {
            "node": "e3b53f01-39cf-40fa-b4b1-a16279d383fa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "113a0dee-5142-48ab-9b94-a1ef76407712": {
      "main": [
        [
          {
            "node": "e92c40d8-b13e-4223-996e-ab9540592c46",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b8aa6a61-7439-4af7-8dcd-00283d0684f8": {
      "main": [
        [
          {
            "node": "1fcfd918-bdb5-4ce3-b038-cab9cfa2c433",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e92c40d8-b13e-4223-996e-ab9540592c46": {
      "main": [
        [
          {
            "node": "d05dc36d-bb82-42d6-a631-5fbe16d3ab04",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d05dc36d-bb82-42d6-a631-5fbe16d3ab04": {
      "main": [
        [
          {
            "node": "bacdcf4a-d4ae-4436-bfaf-43954b53d832",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "472ccb11-7e70-419c-822f-c6154ea2abc8": {
      "main": [
        [
          {
            "node": "f74fcb3e-acc8-429a-a372-9b2cb23666ff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e3b53f01-39cf-40fa-b4b1-a16279d383fa": {
      "main": [
        [
          {
            "node": "113a0dee-5142-48ab-9b94-a1ef76407712",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dfecf8ef-ce60-4fa0-b944-529a637ce06b": {
      "main": [
        [
          {
            "node": "f74fcb3e-acc8-429a-a372-9b2cb23666ff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c492c5b8-8caa-422a-b291-be06512b1810": {
      "main": [
        [
          {
            "node": "f74fcb3e-acc8-429a-a372-9b2cb23666ff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "754686ef-a5a9-4158-9eee-be35c091b5f1": {
      "main": [
        [
          {
            "node": "b97cd4c8-8dbe-434b-b47b-4ca4c9608218",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1fcfd918-bdb5-4ce3-b038-cab9cfa2c433": {
      "main": [
        [
          {
            "node": "f74fcb3e-acc8-429a-a372-9b2cb23666ff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "40bab90c-06e8-400e-ba35-d629ab529144": {
      "main": [
        [
          {
            "node": "94f25509-3536-4eaa-8e30-bb0d3d2bcb3a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Gestion des tickets, Résumé IA

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Workflows recommandés

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds32
Catégorie2
Types de nœuds13
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
NodeAlchemy

NodeAlchemy

@robertsantini

🧠 NodeAlchemy turns ideas into powerful automations. I build modular n8n workflows for creators and businesses — from personal productivity tools to full-scale systems. ⚡ Explore ready-made templates or request a custom build.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34