{
  "name": "analyse messages BO (dan)",
  "nodes": [
    {
      "parameters": {
        "multipleMethods": false,
        "httpMethod": "POST",
        "path": "messages_BO",
        "authentication": "none",
        "responseMode": "onReceived",
        "contentTypeNotice": "",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -144,
        528
      ],
      "id": "4256d608-494b-49f7-9d04-44e9e2414f26",
      "name": "Webhook",
      "webhookId": "bc08cc57-be8d-418f-b56a-61de332aa5ab"
    },
    {
      "parameters": {
        "notice": "",
        "model": {
          "__rl": true,
          "value": "gpt-4.1",
          "mode": "list",
          "cachedResultName": "gpt-4.1"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        -144,
        192
      ],
      "id": "e82340c4-3a9f-4b7f-8354-5bab7b7d0713",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "id": "r6W68f8eF9fuaQbZ",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "notice": "",
        "chunkSize": 3000,
        "chunkOverlap": 200,
        "options": {
          "splitCode": "markdown"
        }
      },
      "id": "218ae614-db44-49fb-8b6f-4089977f2995",
      "name": "Document Chunker",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        288,
        -288
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "ragStarterCallout": "",
        "mode": "insert",
        "mongoCollection": {
          "__rl": true,
          "value": "n8n-bo-knowledge",
          "mode": "list",
          "cachedResultName": "n8n-bo-knowledge"
        },
        "embedding": "embedding",
        "metadata_field": "text",
        "vectorIndexName": "data_index",
        "embeddingBatchSize": 200,
        "options": {}
      },
      "id": "35fabe1f-034a-4b03-8067-47e8bb325f28",
      "name": "MongoDB Vector Store Inserter",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreMongoDBAtlas",
      "position": [
        96,
        -704
      ],
      "typeVersion": 1.1,
      "credentials": {
        "mongoDb": {
          "id": "TzJCosdLVXsVwh4r",
          "name": "MongoDB account"
        }
      }
    },
    {
      "parameters": {
        "notice": "",
        "model": "text-embedding-3-small",
        "options": {}
      },
      "id": "5544ee9d-2f3d-417d-b39c-d22ed3ed632c",
      "name": "OpenAI Embeddings Generator",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        80,
        -480
      ],
      "typeVersion": 1.2,
      "credentials": {
        "openAiApi": {
          "id": "r6W68f8eF9fuaQbZ",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "resource": "document",
        "operation": "get",
        "documentURL": "https://docs.google.com/document/d/163Xl_7EV116zMDvtSYuaAt8_n-23RdFKTNQteogDs8E/edit?tab=t.0",
        "simple": true
      },
      "id": "0fa41f47-cdbb-428b-b4a1-b55e4977bd50",
      "name": "Google Docs Importer",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        -144,
        -496
      ],
      "typeVersion": 2,
      "credentials": {
        "googleDocsOAuth2Api": {
          "id": "F7DQ0Bct7pwehPcK",
          "name": "Google Docs account"
        }
      }
    },
    {
      "parameters": {
        "notice": "",
        "dataType": "json",
        "jsonMode": "expressionData",
        "jsonData": "={{ $json.content }}",
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "doc_id",
                "value": "={{ $json.documentId }}"
              }
            ]
          }
        }
      },
      "id": "2485ab0f-9f82-4185-9376-b69d0e1ca91a",
      "name": "Document Section Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        208,
        -480
      ],
      "typeVersion": 1
    },
    {
      "parameters": {
        "descriptionType": "auto",
        "authentication": "oAuth2",
        "resource": "document",
        "operation": "get",
        "documentURL": "https://docs.google.com/document/d/1kqeSKP-KBn4fehfs942A8VukePf7i_2veoShSDO9AkM/edit?usp=sharing",
        "simple": true
      },
      "type": "n8n-nodes-base.googleDocsTool",
      "typeVersion": 2,
      "position": [
        -16,
        192
      ],
      "id": "cc0fdb28-c72f-48d9-b70c-2155bfdd8bd8",
      "name": "Google Docs",
      "credentials": {
        "googleDocsOAuth2Api": {
          "id": "F7DQ0Bct7pwehPcK",
          "name": "Google Docs account"
        }
      }
    },
    {
      "parameters": {
        "notice": "",
        "schemaType": "fromJson",
        "jsonSchemaExample": "{\n  \"Bon\": 2,\n  \"message_automatique\": \"F\u00e9licitations ! Nous sommes ravis de t'accueillir dans notre auto-\u00e9cole. Pour obtenir ton num\u00e9ro NEPH, merci de d\u00e9poser les documents n\u00e9cessaires dans la rubrique \u00ab Documents d'inscription \u00bb de ton espace personnel. Si tu poss\u00e8des d\u00e9j\u00e0 ce num\u00e9ro, tu peux le renseigner directement dans cette m\u00eame rubrique. Merci d'avance pour ta r\u00e9activit\u00e9 !\",\n  \"analyse\": \"L\u2019\u00e9l\u00e8ve demande s\u2019il doit venir avec ses documents \u00e0 l\u2019auto-\u00e9cole. Cela montre une compr\u00e9hension partielle de PermiFast : l\u2019application permet de d\u00e9poser les documents directement dans la rubrique \u00ab Documents d'inscription \u00bb sans forc\u00e9ment les apporter en physique d\u00e8s le d\u00e9part. Il n\u2019est pas dit que l\u2019\u00e9l\u00e8ve ne comprend pas le fonctionnement num\u00e9rique, mais sa formulation traduit un doute sur la proc\u00e9dure, ce qui correspond \u00e0 une compr\u00e9hension partielle.\"\n}\n",
        "autoFix": false
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.2,
      "position": [
        112,
        192
      ],
      "id": "1b07a491-e46b-40a1-b3f9-dd48c1b1dc82",
      "name": "Structured Output Parser"
    },
    {
      "parameters": {
        "preBuiltAgentsCalloutGoogleSheets": "",
        "authentication": "oAuth2",
        "resource": "sheet",
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1-EliDUeQHi0lV1VAd01EMvxWoBUFkuU9WjeQ19V8J54",
          "mode": "list",
          "cachedResultName": "PermiFast \u2013 Analyse IA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-EliDUeQHi0lV1VAd01EMvxWoBUFkuU9WjeQ19V8J54/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Feuille 1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-EliDUeQHi0lV1VAd01EMvxWoBUFkuU9WjeQ19V8J54/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Auto-\u00e9cole": "={{ $('Webhook').item.json.body.name_AE }}",
            "\u00c9l\u00e8ve": "={{ $('Webhook').item.json.body.name_eleve }}",
            "Message (envoy\u00e9)": "={{ $('Webhook').item.json.body.message_content }}",
            "Message From": "={{ $('Webhook').item.json.body.message_from }}",
            "Note IA ": "={{ $json.output.Bon }}",
            "Message Automatique": "={{ $json.output.message_automatique }}",
            "Analyse IA": "={{ $json.output.analyse }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "Auto-\u00e9cole",
              "displayName": "Auto-\u00e9cole",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "\u00c9l\u00e8ve",
              "displayName": "\u00c9l\u00e8ve",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Message (envoy\u00e9)",
              "displayName": "Message (envoy\u00e9)",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Message From",
              "displayName": "Message From",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Note IA ",
              "displayName": "Note IA ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Message Automatique",
              "displayName": "Message Automatique",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Analyse IA",
              "displayName": "Analyse IA",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        304,
        64
      ],
      "id": "5e1f6554-0e2f-4fe8-9886-0f0157a83cee",
      "name": "Google Sheets",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "TgqKotSkVXyXg2d9",
          "name": "Google Sheets account dan"
        }
      }
    },
    {
      "parameters": {
        "notice": "",
        "model": {
          "__rl": true,
          "value": "gpt-4.1",
          "mode": "list",
          "cachedResultName": "gpt-4.1"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        80,
        752
      ],
      "id": "9aaca658-0db2-4f25-b28d-2ce633167176",
      "name": "OpenAI Chat Model1",
      "credentials": {
        "openAiApi": {
          "id": "r6W68f8eF9fuaQbZ",
          "name": "OpenAi account"
        }
      }
    },
    {
      "parameters": {
        "aiAgentStarterCallout": "",
        "preBuiltAgentsCallout": "",
        "promptType": "define",
        "text": "=Tu es un agent charg\u00e9 d\u2019analyser les \u00e9changes entre une auto-\u00e9cole et un \u00e9l\u00e8ve.\nTon r\u00f4le est d\u2019\u00e9valuer la compr\u00e9hension du fonctionnement de PermiFast en fonction de qui envoie le message.\n\nAvant de juger, v\u00e9rifie toujours dans la base de connaissance si l\u2019auto-\u00e9cole est cens\u00e9e avoir acc\u00e8s \u00e0 l\u2019information demand\u00e9e.\nSi oui, toute question demandant cette information \u00e0 l\u2019\u00e9l\u00e8ve est consid\u00e9r\u00e9e comme une mauvaise utilisation du back-office.\n\n1. Donn\u00e9es d\u2019entr\u00e9e\n\n{\n  \"name_AE\": {{ $json.body.name_AE }},\n  \"name_eleve\": {{ $json.body.name_eleve }},\n  \"message_from\": {{ $json.body.message_from }},\n  \"message_to\": {{ $json.body.message_to }},\n  \"message_content\": {{ $json.body.message_content }}\n}\nTu disposes \u00e9galement d\u2019un acc\u00e8s au Google Docs Tool, qui d\u00e9crit toutes les fonctionnalit\u00e9s de PermiFast pour les auto-\u00e9coles et pour les \u00e9l\u00e8ves.\nCe document est ta base de connaissance.\n\n2. Logique conditionnelle\n\nAnalyse le message selon la valeur du champ :\nmessage_from = \"school\" OU \"student\".\n\nA) Si message_from = \"school\" :\n\nAnalyse si l\u2019auto-\u00e9cole d\u00e9montre une bonne compr\u00e9hension des fonctionnalit\u00e9s PermiFast li\u00e9es au contenu de son message :\n\n- inscription des \u00e9l\u00e8ves\n\n- validation NEPH\n\n- Information sur le code de la route de l'\u00e9l\u00e8ve\n\n- d\u00e9p\u00f4t de documents\n\n- messagerie\n\n- profil\n\n- abonnement business\n\netc.\n\nNe juge QUE sur les fonctionnalit\u00e9s mentionn\u00e9es ou sous-entendues dans son message.\nNe p\u00e9nalise pas l\u2019absence de fonctionnalit\u00e9s non li\u00e9es au contexte.\nL\u2019auto-\u00e9cole ne doit JAMAIS demander \u00e0 l\u2019\u00e9l\u00e8ve une information qui est d\u00e9j\u00e0 visible dans son back-office (ex : code de la route obtenu ou non, documents d\u00e9j\u00e0 d\u00e9pos\u00e9s, pr\u00e9sence du NEPH, statut mineur/majeur).\nSi le message de l\u2019auto-\u00e9cole demande une information d\u00e9j\u00e0 affich\u00e9e dans les onglets Mes \u00e9l\u00e8ves ou Mes \u00e9l\u00e8ves en attente de validation, consid\u00e8re que c\u2019est une mauvaise compr\u00e9hension du fonctionnement de PermiFast.\nCela doit entra\u00eener une note 1 (mauvaise compr\u00e9hension) ou 2 (compr\u00e9hension partielle).\n\nB) Si message_from = \"student\" :\n\nAnalyse si l\u2019\u00e9l\u00e8ve semble avoir compris :\n\n- ce qu\u2019il doit faire sur l\u2019app (d\u00e9poser documents, envoyer NEPH, choisir cr\u00e9neaux, etc.)\n\n- son interaction normale avec l\u2019auto-\u00e9cole\n\n- les \u00e9tapes d\u2019inscription PermiFast\n\n- l\u2019usage des documents demand\u00e9s\n\n- les messages automatiques qu\u2019il re\u00e7oit\n\nTon objectif est de d\u00e9tecter s\u2019il a compris comment utiliser correctement PermiFast en fonction du sujet abord\u00e9 dans son message.\n\n3. Syst\u00e8me de notation (identique pour \u00e9l\u00e8ve et auto-\u00e9cole)\n\nTu dois renvoyer une note :\n\n1 : compr\u00e9hension mauvaise ou inexistante\n\n2 : compr\u00e9hension partielle ou maladroite\n\n3 : compr\u00e9hension claire et correcte\n\nNote-toi uniquement \u00e0 partir des fonctionnalit\u00e9s du Google Docs et du message re\u00e7u.\n\n4. Message automatique\n\nSi la note = 1 ou 2, choisis dans la base Google Docs le message automatique le plus pertinent en fonction du contexte analys\u00e9.\n\nSi la note = 3, laisse le champ message_automatique vide.\n\n",
        "hasOutputParser": true,
        "notice": "",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        -112,
        -48
      ],
      "id": "0a6b7e64-91e8-472b-b1f3-b433bc91172c",
      "name": "message unique"
    },
    {
      "parameters": {
        "aiAgentStarterCallout": "",
        "preBuiltAgentsCallout": "",
        "promptType": "define",
        "text": "=Tu es un agent charg\u00e9 d\u2019analyser les \u00e9changes entre une auto-\u00e9cole et un \u00e9l\u00e8ve.\nTon r\u00f4le est d\u2019\u00e9valuer la compr\u00e9hension du fonctionnement de PermiFast en fonction de qui envoie le message.\n\nAvant de juger, v\u00e9rifie toujours dans la base de connaissance si l\u2019auto-\u00e9cole est cens\u00e9e avoir acc\u00e8s \u00e0 l\u2019information demand\u00e9e.\nSi oui, toute question demandant cette information \u00e0 l\u2019\u00e9l\u00e8ve est consid\u00e9r\u00e9e comme une mauvaise utilisation du back-office.\n\nTu dois \u00e9galement AJOUTER CHAQUE message re\u00e7u dans la m\u00e9moire (Simple Memory) exactement sous la forme brute :\n\"{{ $json.body.message_content }}\"\n\nCette m\u00e9moire sera utilis\u00e9e pour d\u00e9terminer s\u2019il faut produire une analyse globale.\n\n--------------------------------------------------\n1. Donn\u00e9es d\u2019entr\u00e9e\n--------------------------------------------------\n\n{\n  \"name_AE\": {{ $json.body.name_AE }},\n  \"name_eleve\": {{ $json.body.name_eleve }},\n  \"message_from\": {{ $json.body.message_from }},\n  \"message_to\": {{ $json.body.message_to }},\n  \"message_content\": {{ $json.body.message_content }}\n}\n\n--------------------------------------------------\n2. Analyse conditionnelle\n--------------------------------------------------\n\nAnalyse le message selon sa source :\n\nA) Si message_from = \"school\" :\n- v\u00e9rifie la compr\u00e9hension des fonctionnalit\u00e9s PermiFast r\u00e9ellement li\u00e9es au message\n- ne juge QUE les fonctionnalit\u00e9s mentionn\u00e9es ou sous-entendues\n- une auto-\u00e9cole ne doit JAMAIS demander une information d\u00e9j\u00e0 visible dans son back-office (documents d\u00e9pos\u00e9s, NEPH, code obtenu, statut mineur/majeur, etc.)\nSi cela arrive \u2192 compr\u00e9hension mauvaise (1) ou partielle (2)\n\nB) Si message_from = \"student\" :\nAnalyse si l\u2019\u00e9l\u00e8ve comprend :\n- d\u00e9p\u00f4t de documents\n- NEPH\n- choix de cr\u00e9neaux\n- \u00e9tapes d\u2019inscription PermiFast\n- fonctionnement de l\u2019app\n- messages automatiques\n- relation normale auto-\u00e9cole \u2194 PermiFast\n\n--------------------------------------------------\n3. Syst\u00e8me de notation\n--------------------------------------------------\n\nPour CHAQUE message, tu dois fournir :\n\n- Bon : compr\u00e9hension fonctionnelle PermiFast\n- efficacit\u00e9 : qualit\u00e9/efficacit\u00e9 de l\u2019\u00e9change\n- compr\u00e9hension : clart\u00e9 globale du message\n- satisfaction : ton implicite (positif / neutre / insatisfaction)\n\nNotes :  \n1 = mauvais  \n2 = partiel  \n3 = bon\n\nChaque note doit \u00eatre coh\u00e9rente avec ton analyse.\n\n--------------------------------------------------\n4. Message automatique\n--------------------------------------------------\n\nSi Bon < 3 \u2192 choisis le meilleur message automatique depuis le Google Docs Tool.  \nSi Bon = 3 \u2192 \"message_automatique\": \"\".\n\n--------------------------------------------------\n5. Analyse globale (si m\u00e9moire \u2265 5)\n--------------------------------------------------\n\nLorsque la m\u00e9moire contient AU MOINS 5 messages, produis aussi une analyse globale de la discussion enti\u00e8re, donc des 5 messages ou plus :\n- Bon global (1/2/3)\n- efficacit\u00e9_globale\n- compr\u00e9hension_globale\n- satisfaction_globale\n- analyse_globale\n- message_automatique_global\n\nBas\u00e9e sur :\n- coh\u00e9rence de l\u2019\u00e9change\n- compr\u00e9hension persistante ou non\n- erreurs r\u00e9p\u00e9t\u00e9es\n- bonne ou mauvaise utilisation de PermiFast\n- exploitation correcte des fonctionnalit\u00e9s\n\n--------------------------------------------------\n6. ID DISCUSSION\n--------------------------------------------------\n\nTu dois renvoyer l\u2019identifiant unique de la discussion :\n\nid_discussion = \"{{ $json.body.name_AE }} {{ $json.body.name_eleve }}\"\n\n--------------------------------------------------\n7. R\u00c8GLES STRICTES POUR L\u2019OUTPUT JSON\n--------------------------------------------------\n\nTu dois TOUJOURS renvoyer exactement l\u2019un des deux JSON suivants :\n\n--------------------------------------------------\n\ud83d\udfe5 SI m\u00e9moire < 5 messages \u2192 JSON EXACT :\n--------------------------------------------------\n\n{\n  \"Bon\": (note individuelle),\n  \"efficacit\u00e9\": (1, 2 ou 3),\n  \"compr\u00e9hension\": (1, 2 ou 3),\n  \"satisfaction\": (1, 2 ou 3),\n  \"message_automatique\": \"texte\",\n  \"analyse\": \"texte\",\n  \"global\": {\n    \"Bon\": null,\n    \"efficacit\u00e9_globale\": null,\n    \"compr\u00e9hension_globale\": null,\n    \"satisfaction_globale\": null,\n    \"analyse_globale\": null,\n    \"message_automatique_global\": null,\n    \"debug_memory_count\": (nombre de messages pr\u00e9sents dans la m\u00e9moire, entier),\n    \"id_discussion\": \"{{ $json.body.name_AE }} {{ $json.body.name_eleve }}\"\n  }\n}\n\n--------------------------------------------------\n\ud83d\udfe9 SI m\u00e9moire \u2265 5 messages \u2192 JSON EXACT :\n--------------------------------------------------\n\n{\n  \"Bon\": (note individuelle),\n  \"efficacit\u00e9\": (1, 2 ou 3),\n  \"compr\u00e9hension\": (1, 2 ou 3),\n  \"satisfaction\": (1, 2 ou 3),\n  \"message_automatique\": \"texte\",\n  \"analyse\": \"texte\",\n  \"global\": {\n    \"Bon\": (note globale),\n    \"efficacit\u00e9_globale\": (1, 2 ou 3),\n    \"compr\u00e9hension_globale\": (1, 2 ou 3),\n    \"satisfaction_globale\": (1, 2 ou 3),\n    \"analyse_globale\": \"texte\",\n    \"message_automatique_global\": \"texte\",\n    \"debug_memory_count\": (nombre de messages pr\u00e9sents dans la m\u00e9moire, entier),\n    \"id_discussion\": \"{{ $json.body.name_AE }} {{ $json.body.name_eleve }}\"\n  }\n}\n\n--------------------------------------------------\nNE RENVOIE JAMAIS autre chose que ce JSON.\n",
        "hasOutputParser": false,
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        112,
        528
      ],
      "id": "d7fd5d30-04a6-4a58-a3f6-6e67b0c5ddf8",
      "name": "discussion"
    },
    {
      "parameters": {
        "descriptionType": "auto",
        "authentication": "oAuth2",
        "resource": "document",
        "operation": "get",
        "documentURL": "https://docs.google.com/document/d/1kqeSKP-KBn4fehfs942A8VukePf7i_2veoShSDO9AkM/edit?usp=sharing",
        "simple": true
      },
      "type": "n8n-nodes-base.googleDocsTool",
      "typeVersion": 2,
      "position": [
        320,
        752
      ],
      "id": "d987cd4b-dc84-415a-aff1-407936cb27e5",
      "name": "knowledge",
      "credentials": {
        "googleDocsOAuth2Api": {
          "id": "F7DQ0Bct7pwehPcK",
          "name": "Google Docs account"
        }
      }
    },
    {
      "parameters": {
        "notice": "",
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Webhook').item.json.body.name_AE }} {{ $('Webhook').item.json.body.name_eleve }}",
        "contextWindowLength": 5
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        208,
        752
      ],
      "id": "74bc4a2d-d79e-44b3-a5bb-c55542badc6d",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "mode": "runOnceForAllItems",
        "language": "javaScript",
        "jsCode": "let raw = items[0].json.output;\n\n// Nettoyage du JSON renvoy\u00e9 par l'IA\nraw = raw.trim();\nif (raw.startsWith('\"') && raw.endsWith('\"')) {\n    raw = raw.slice(1, -1);\n}\nraw = raw.replace(/\\n/g, \"\");\nraw = raw.replace(/\\r/g, \"\");\nraw = raw.replace(/\\\\+/g, \"\\\\\");\n\nlet parsed;\ntry {\n    parsed = JSON.parse(raw);\n} catch (e) {\n    try {\n        let repaired = raw.replace(/\\\\\\\"/g, '\"');\n        repaired = repaired.replace(/\\\\\\\\/g, \"\\\\\");\n        parsed = JSON.parse(repaired);\n    } catch (err) {\n        throw new Error(\"Impossible de parser le JSON de l'IA : \" + err.message + \"\\nTexte re\u00e7u :\\n\" + raw);\n    }\n}\n\n// S\u00e9curisation de l'objet global\nif (!parsed.global || typeof parsed.global !== \"object\") {\n    parsed.global = {\n        Bon: null,\n        analyse_globale: null,\n        message_automatique_global: null,\n        debug_memory_count: null\n    };\n}\n\n// \ud83d\udd25 Convertir debug_memory_count en int si pr\u00e9sent\nif (parsed.global.debug_memory_count !== null && parsed.global.debug_memory_count !== undefined) {\n    const converted = parseInt(parsed.global.debug_memory_count, 10);\n    parsed.global.debug_memory_count = isNaN(converted) ? null : converted;\n}\n\nreturn [\n  {\n    json: parsed\n  }\n];\n",
        "notice": ""
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        528,
        528
      ],
      "id": "ac56feab-2b1b-43b8-9500-dfe7abc89eb1",
      "name": "Code"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "c1fd81e4-5202-45b9-b935-645b9ab703d1",
              "leftValue": "={{ $json.global['efficacit\u00e9_globale'] }}",
              "rightValue": null,
              "operator": {
                "type": "number",
                "operation": "exists",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "looseTypeValidation": false,
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        752,
        528
      ],
      "id": "4300cded-2d5b-4370-a845-c7304302e20d",
      "name": "If"
    },
    {
      "parameters": {
        "preBuiltAgentsCalloutGoogleSheets": "",
        "authentication": "oAuth2",
        "resource": "sheet",
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "value": "1-EliDUeQHi0lV1VAd01EMvxWoBUFkuU9WjeQ19V8J54",
          "mode": "list",
          "cachedResultName": "PermiFast \u2013 Analyse IA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-EliDUeQHi0lV1VAd01EMvxWoBUFkuU9WjeQ19V8J54/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Feuille 1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1-EliDUeQHi0lV1VAd01EMvxWoBUFkuU9WjeQ19V8J54/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Auto-\u00e9cole": "={{ $('Webhook').item.json.body.name_AE }}",
            "\u00c9l\u00e8ve": "={{ $('Webhook').item.json.body.name_eleve }}",
            "Message From": "={{ $('Webhook').item.json.body.message_from }}",
            "Note IA ": "={{ $json.global.Bon }}",
            "Analyse IA": "={{ $json.global.analyse_globale }}",
            "id discussion": "={{ $json.global.id_discussion }}",
            "efficacit\u00e9": "={{ $json.global['efficacit\u00e9_globale'] }}",
            "compr\u00e9hension": "={{ $json.global['compr\u00e9hension_globale'] }}",
            "satisfaction": "={{ $json.global.satisfaction_globale }}"
          },
          "matchingColumns": [
            "id discussion"
          ],
          "schema": [
            {
              "id": "id discussion",
              "displayName": "id discussion",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Auto-\u00e9cole",
              "displayName": "Auto-\u00e9cole",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "\u00c9l\u00e8ve",
              "displayName": "\u00c9l\u00e8ve",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Message From",
              "displayName": "Message From",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Note IA ",
              "displayName": "Note IA ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Analyse IA",
              "displayName": "Analyse IA",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "efficacit\u00e9",
              "displayName": "efficacit\u00e9",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "compr\u00e9hension",
              "displayName": "compr\u00e9hension",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "satisfaction",
              "displayName": "satisfaction",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        1008,
        464
      ],
      "id": "0ec8e529-9918-4d3d-b4ad-22ed39b62375",
      "name": "Google Sheets2",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "TgqKotSkVXyXg2d9",
          "name": "Google Sheets account dan"
        }
      }
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "discussion",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "message unique",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Embeddings Generator": {
      "ai_embedding": [
        [
          {
            "node": "MongoDB Vector Store Inserter",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Google Docs Importer": {
      "main": [
        [
          {
            "node": "MongoDB Vector Store Inserter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Document Section Loader": {
      "ai_document": [
        [
          {
            "node": "MongoDB Vector Store Inserter",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Document Chunker": {
      "ai_textSplitter": [
        [
          {
            "node": "Document Section Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Google Docs": {
      "ai_tool": [
        [
          {
            "node": "message unique",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "message unique",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "discussion",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "message unique": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "discussion": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "knowledge": {
      "ai_tool": [
        [
          {
            "node": "discussion",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "discussion",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "Google Sheets2",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "staticData": null,
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "tags": [
    "QTk2uXeMIEaEGJcI"
  ],
  "versionId": "c7f3ccd0-b81e-4d10-bf62-be4cccf90509"
}