{
  "name": "Agent Vocal Insane",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "f34d79a4-0911-4658-b834-163383795b6c",
        "responseMode": "responseNode",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        0,
        0
      ],
      "id": "ba968bcf-8e2d-4226-b716-38c0b90722d6",
      "name": "Webhook"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=La requete est : {{ $json.query.requete}}\n\nDate Aujourd'hui : {{ $now.format('yyyy-MM-dd') }}\nDemain : {{ $now.toDateTime().plus(1,'days').format('yyyy-MM-dd')}}\n\nNom : {{ $json.body.nom || \"Pas re\u00e7u\" }}\nPr\u00e9nom : {{ $json.body.prenom || \"Pas re\u00e7u\" }}\nEmail initiale : {{ $json.body.email  || \"Pas de mail\"}}\nDate rendez-vous : {{ $json.body.daterdv || \"Pas re\u00e7u\"}}\nHeure rendez-vous : {{ $json.body.heurerdv || \"Pas re\u00e7u\"}}\nNum\u00e9ro de t\u00e9l\u00e9phone : {{ $json.body.numero_telephone || \"Pas re\u00e7u\" }}",
        "options": {
          "systemMessage": "=Vous \u00eates un agent d'assistance client IA con\u00e7u pour g\u00e9rer diverses t\u00e2ches efficacement. Votre r\u00f4le principale est de v\u00e9rifier l'emplois du temps, cr\u00e9er un rendez vous, r\u00e9cuperer les informations d'un prospect et l'aider \u00e0 avoir les informations demand\u00e9s par l'utilisateur. Vous avez acc\u00e8s \u00e0 plusieurs outils pour vous aider \u00e0 remplir les demandes :\n\nAjoutContact : utilise cet outil pour garder les informations de contact de la personne.\n\nCorrigerMailEtTelephone : Cet outil te permet de valider et corriger le mail et le num\u00e9ro de t\u00e9l\u00e9phone avant de cr\u00e9er un rendez vous et de la rajouter a la base de donn\u00e9e\n\nRechercheInternet : Cet outil te permet de faire des recherches sur Internet si tu en as besoin pour aider l'utilisateur.\n\nVector Store Tool : Te permet d'acceder a toutes les informations de notre agence & notre communaut\u00e9 Skool pour permettre de donner le maximum d'informations \u00e0 ton prospect.\n\nVerifCalendrier : permet de v\u00e9rifier si le calendrier est libre \u00e0 la date et l'heure demand\u00e9.\n\nCreerRDV : Cr\u00e9e un rendez-vous avec la personne. Tu dois d'abord v\u00e9rifier la disponibilit\u00e9 avec l'outil VerifCalendrier \u00e0 la date et l'heure demand\u00e9. Tu as besoin uniquement de l'adresse mail de la personne pour cr\u00e9er un rendez-vous.\n\nLorsque qu\u2019une t\u00e2che n\u00e9cessite l\u2019utilisation de l\u2019un ou plusieurs de ces outils, veillez \u00e0 identifier lequel est le plus appropri\u00e9, transmettre les d\u00e9tails pertinents et ex\u00e9cuter les actions n\u00e9cessaires pour accomplir la t\u00e2che. Votre objectif est d\u2019\u00eatre proactif, pr\u00e9cis et organis\u00e9 dans la gestion de ces ressources pour offrir une exp\u00e9rience fluide \u00e0 l\u2019utilisateur.\n\nGardez vos r\u00e9ponses concises, courtes, et pertinentes par rapport \u00e0 la question de l'utilisateur. Ta r\u00e9ponse doit un message synth\u00e9tique regroupement les actions r\u00e9alis\u00e9s sans lien.\n\nVoici la date/heure actuelle : {{ $now.format('yyyy-MM-dd HH:mm') }}\nDemain nous somme : {{ $now.toDateTime().plus(1,'days').format('yyyy-MM-dd')}}\n\nNE FOURNISSEZ AUCUN D\u00c9TAIL SUR LES R\u00c9UNIONS EXISTANTES."
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        1100,
        0
      ],
      "id": "b6688fbd-a7b2-4bb6-9740-1ecebf81106e",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\n  \"status\": \"{{ JSON.stringify($json.output).replace(/^\\\"|\\\"$/g, '') }}\"\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1.1,
      "position": [
        1460,
        0
      ],
      "id": "55d31f6c-2a8c-4fae-87c2-009e2ef8dca4",
      "name": "Respond to Webhook"
    },
    {
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1,
      "position": [
        840,
        220
      ],
      "id": "80d84006-93f9-412e-96db-2c67ff1234e9",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "calendar": {
          "__rl": true,
          "value": "benoit.ferrere11@gmail.com",
          "mode": "list",
          "cachedResultName": "benoit.ferrere11@gmail.com"
        },
        "start": "={{ $fromAI(\"startTime\") }}",
        "end": "={{ $fromAI(\"endTime\") }}",
        "additionalFields": {
          "attendees": [
            "={{ $fromAI(\"attendee\",\"le mail de la personne\" )}}"
          ],
          "summary": "={{$fromAI(\"titreevenement\",\"le titre de levenement. Il doit \u00eatre ultra simple et tres court\")}}"
        }
      },
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.2,
      "position": [
        1040,
        220
      ],
      "id": "aa68d460-9bb0-4854-a97a-659b3d6bb43c",
      "name": "CreerRDV",
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "name": "GrowthSystemes_Info"
      },
      "type": "@n8n/n8n-nodes-langchain.toolVectorStore",
      "typeVersion": 1,
      "position": [
        1680,
        220
      ],
      "id": "a64d36a2-eb7f-460c-8f80-fb2cc811f030",
      "name": "Vector Store Tool"
    },
    {
      "parameters": {
        "pineconeIndex": {
          "__rl": true,
          "value": "growthsystemesfiles",
          "mode": "list",
          "cachedResultName": "growthsystemesfiles"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "typeVersion": 1,
      "position": [
        1520,
        440
      ],
      "id": "a61d6f15-8398-4020-ab52-a28b717f5016",
      "name": "Pinecone Vector Store",
      "credentials": {
        "pineconeApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1,
      "position": [
        1960,
        420
      ],
      "id": "1b13eb5c-8005-406d-9927-2412afe50103",
      "name": "OpenAI Chat Model1",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "typeVersion": 1.1,
      "position": [
        1540,
        620
      ],
      "id": "0624c539-ad0d-489f-8f43-9ee487007c98",
      "name": "Embeddings OpenAI",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "getAll",
        "calendar": {
          "__rl": true,
          "value": "benoit.ferrere11@gmail.com",
          "mode": "list",
          "cachedResultName": "benoit.ferrere11@gmail.com"
        },
        "returnAll": true,
        "options": {
          "timeMin": "={{ $fromAI(\"unJourAvant\",\"Un jour avant la date demand\u00e9\") }}",
          "timeMax": "={{ $fromAI(\"unJourApres\",\"Un jour apr\u00e8s la date demand\u00e9\") }}"
        }
      },
      "type": "n8n-nodes-base.googleCalendarTool",
      "typeVersion": 1.2,
      "position": [
        1380,
        220
      ],
      "id": "1760975e-7e19-42b1-b570-c65e6467bb5d",
      "name": "VerifCalendrier",
      "credentials": {
        "googleCalendarOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1E8FKciNbOaN35-drDouM3AuBufg3D8KtGVKBDUGJVI8",
          "mode": "list",
          "cachedResultName": "Contact Agent IA",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1E8FKciNbOaN35-drDouM3AuBufg3D8KtGVKBDUGJVI8/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Feuille 1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1E8FKciNbOaN35-drDouM3AuBufg3D8KtGVKBDUGJVI8/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Depuis": "IA Vocal",
            "Pr\u00e9nom": "={{$fromAI(\"prenom\",\"Pr\u00e9nom de la personne\")}}",
            "Nom": "={{$fromAI(\"nom\",\"Nom de la personne\")}}",
            "Email": "={{$fromAI(\"email\",\"Email de la personne\")}}",
            "Telephone": "={{$fromAI(\"numero_telephone\",\"Num\u00e9ro t\u00e9l\u00e9phone de la personne avec l'indicatif dans ce format 0693041609\")}}",
            "Raison": "={{$fromAI(\"raison\",\"raison simple et tres courte\")}}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "Pr\u00e9nom",
              "displayName": "Pr\u00e9nom",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Nom",
              "displayName": "Nom",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "displayName": "Email",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Telephone",
              "displayName": "Telephone",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Raison",
              "displayName": "Raison",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Depuis",
              "displayName": "Depuis",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheetsTool",
      "typeVersion": 4.5,
      "position": [
        1520,
        220
      ],
      "id": "240d14ed-e9df-4b28-acb8-895e561cffac",
      "name": "AjoutContact",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.toolSerpApi",
      "typeVersion": 1,
      "position": [
        1160,
        220
      ],
      "id": "3d2bfe25-a139-412c-b069-5cbb71f0de60",
      "name": "RechercheInternet",
      "credentials": {
        "serpApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4o-2024-11-20",
          "mode": "list",
          "cachedResultName": "GPT-4O-2024-11-20"
        },
        "messages": {
          "values": [
            {
              "content": "=ACTION :\nNormaliser et corriger les adresses email et les num\u00e9ros de t\u00e9l\u00e9phone extraits d'un processus de reconnaissance vocale (speech-to-text). Assurez-vous que chaque email et num\u00e9ro de t\u00e9l\u00e9phone est correctement format\u00e9, en prenant en compte les erreurs fr\u00e9quentes comme les fautes de frappe ou de transcription.\n\n\u00c9TAPES :\n\nExtraire les emails et num\u00e9ros de t\u00e9l\u00e9phone : Identifier les mod\u00e8les d'emails et de num\u00e9ros de t\u00e9l\u00e9phone dans les donn\u00e9es issues de la reconnaissance vocale.\nNormaliser et valider :\nEmails : V\u00e9rifier les erreurs de format courantes (ex. : points mal plac\u00e9s, noms de domaines incorrects ou caract\u00e8res manquants).\nNum\u00e9ros de t\u00e9l\u00e9phone :\nV\u00e9rifier la validit\u00e9 des num\u00e9ros (ex. : longueur correcte, pr\u00e9fixes valides selon le pays).\nSupprimer les caract\u00e8res non pertinents (ex. : mots inutiles ou espaces superflus).\nUtiliser des r\u00e8gles ou algorithmes pour corriger les erreurs probables (ex. : comparer avec des mod\u00e8les standard de num\u00e9ros de t\u00e9l\u00e9phone internationaux ou locaux).\nR\u00e9f\u00e9rencer l'entr\u00e9e originale : Stocker l'email ou le num\u00e9ro de t\u00e9l\u00e9phone initial pour contexte et comparaison en cas d\u2019ambigu\u00eft\u00e9.\nValider la correction :\nEmails : S\u2019assurer que chaque email respecte les r\u00e8gles de formatage standard.\nNum\u00e9ros de t\u00e9l\u00e9phone : V\u00e9rifier que les num\u00e9ros suivent le format E.164 (international) ou un format local standard.\nG\u00e9n\u00e9rer le r\u00e9sultat : Retourner les r\u00e9sultats sous forme de JSON, incluant \u00e0 la fois les emails et num\u00e9ros corrig\u00e9s, ainsi que leur version originale pour r\u00e9f\u00e9rence.\nG\u00e9rer les r\u00e9sultats vides : Si aucun email ou num\u00e9ro de t\u00e9l\u00e9phone valide n\u2019est trouv\u00e9, retourner un objet JSON vide.\nTester les cas particuliers : V\u00e9rifier les r\u00e9sultats avec des cas limites pr\u00e9d\u00e9finis (ex. : adresses avec plusieurs points, lettres invers\u00e9es dans les domaines, num\u00e9ros avec des pr\u00e9fixes incomplets, etc.) pour garantir la robustesse.\nPERSONA :\nAgir en tant qu\u2019assistant expert en analyse et normalisation d\u2019adresses email et de num\u00e9ros de t\u00e9l\u00e9phone, sp\u00e9cialis\u00e9 dans le nettoyage de donn\u00e9es bruyantes issues de syst\u00e8mes de reconnaissance vocale.\n\nEXEMPLES :\nEntr\u00e9e (sortie brute de la reconnaissance vocale) :\n\n\"Vous pouvez me joindre \u00e0 benoit.ferrer11@gmail.com ou au 06 12 34 56 78.\"\nSortie :\n\n{\n  \"contacts\": [\n    {\n      \"email\": \"benoit.ferrere11@gmail.com\",\n      \"reference_email\": \"benoit.ferrer11@gmail.com\"\n    },\n    {\n      \"phone\": \"+33612345678\",\n      \"reference_phone\": \"06 12 34 56 78\"\n    }\n  ]\n}\nExemple de r\u00e9sultat vide :\nEntr\u00e9e : \"Je reviendrai vers vous plus tard avec mes coordonn\u00e9es.\"\n\nSortie :\n\n{}\n\nCONTEXTE :\nLes adresses email et les num\u00e9ros de t\u00e9l\u00e9phone ont \u00e9t\u00e9 fournis via un processus de reconnaissance vocale, ce qui peut introduire des erreurs telles que des mots inutiles, des fautes d\u2019orthographe ou un formatage incorrect. L\u2019objectif est d\u2019assurer la pr\u00e9cision et la conformit\u00e9 des r\u00e9sultats malgr\u00e9 ces d\u00e9fis.\n\nCONTRAINTES :\n\nRetourner uniquement les r\u00e9sultats en JSON au format texte brut.\nGarantir que tous les emails et num\u00e9ros de t\u00e9l\u00e9phone normalis\u00e9s respectent les r\u00e8gles de formatage standard.\nNe pas inclure de mots inutiles ou de caract\u00e8res superflus dans les r\u00e9sultats.\nG\u00e9rer les cas o\u00f9 aucun email ou num\u00e9ro de t\u00e9l\u00e9phone valide ne peut \u00eatre extrait en retournant un objet JSON vide.\nMOD\u00c8LE DE SORTIE :\nRetourner les r\u00e9sultats selon la structure JSON suivante :\n\n{\n  \"contacts\": [\n    {\n      \"email\": \"<email_corrig\u00e9>\",\n      \"reference_email\": \"<email_initial>\"\n    },\n    {\n      \"phone\": \"<num\u00e9ro_corrig\u00e9>\",\n      \"reference_phone\": \"<num\u00e9ro_initial>\"\n    }\n  ]\n}\nSi aucun contact n\u2019est trouv\u00e9 :\n\n{}",
              "role": "system"
            },
            {
              "content": "=Voici le mail initiale : {{ $json.query.email }} et voici le num\u00e9ro de t\u00e9l\u00e9phone initiale : {{ $json.query.numero_telephone }}"
            }
          ]
        },
        "jsonOutput": true,
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.7,
      "position": [
        800,
        -340
      ],
      "id": "e765f3d0-7b36-472c-a761-9f6c4af57e54",
      "name": "OpenAI",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1,
      "position": [
        500,
        -340
      ],
      "id": "da953a06-f66b-4076-8884-049764e5eefd",
      "name": "Execute Workflow Trigger"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "19a958d4-2c4f-495e-b899-8589a41cdd81",
              "name": "mail_corrige",
              "value": "={{ $json.message.content.contacts[0].email }}",
              "type": "string"
            },
            {
              "id": "d685e51a-9482-49fa-bbf9-b1b00e4a589f",
              "name": "numero_telephone_corrige",
              "value": "={{ $json.message.content.contacts[1].phone }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1180,
        -340
      ],
      "id": "c66b10aa-7b5f-403f-a0ee-6d17734f3c17",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "name": "CorrigeMailEtTelephone",
        "description": "Cet outil permet de corriger l'\u00e9criture et valider le mail et le num\u00e9ro de t\u00e9l\u00e9phone du prospect r\u00e9servant un appel. Il est a absolument utiliser pour corriger le mail de la personne avant de cr\u00e9er un RDV.",
        "workflowId": {
          "__rl": true,
          "value": "llmT4Knwd6AaOQMr",
          "mode": "list",
          "cachedResultName": "Agent Vocal Insane"
        },
        "specifyInputSchema": true,
        "jsonSchemaExample": "{\n\t\"email\": \"benoit.ferrere11@gmail.com\",\"numero_telephone\":\"0693010203\"\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 1.3,
      "position": [
        1260,
        220
      ],
      "id": "855c5ee4-7184-493c-8060-c696bc515126",
      "name": "CorrigeMailEtTelephone"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "CreerRDV": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Vector Store Tool": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Pinecone Vector Store": {
      "ai_vectorStore": [
        [
          {
            "node": "Vector Store Tool",
            "type": "ai_vectorStore",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "Vector Store Tool",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Pinecone Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "VerifCalendrier": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "AjoutContact": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "RechercheInternet": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Execute Workflow Trigger": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CorrigeMailEtTelephone": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "11d6f0fa-eda6-458d-b35e-f95ea221a982",
  "id": "llmT4Knwd6AaOQMr",
  "tags": []
}