This workflow follows the Agent → Memory Buffer Window recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"name": "NeoTravel \u2014 Agent Devis",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "neotravel-chat-webhook-001/chat",
"responseMode": "lastNode",
"options": {}
},
"id": "chat-trigger-001",
"name": "When chat message received",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
1136,
240
]
},
{
"parameters": {
"options": {
"systemMessage": "Tu es Alex, conseiller commercial virtuel de NeoTravel, sp\u00e9cialiste des transferts en autocar.\n\nTa mission : \u00e9tablir un devis de transfert en collectant les informations du client une par une,\nen appelant le moteur de calcul, puis en pr\u00e9sentant le r\u00e9sultat clairement.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nCOLLECTE D'INFORMATIONS \u2014 UNE \u00c0 LA FOIS, DANS L'ORDRE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\n\u00c9tape 1 \u2014 DISTANCE\n Si le client mentionne des noms de villes (ex : \"Paris \u2192 Lyon\", \"Bordeaux \u2192 Biarritz\") :\n \u2192 Appelle IMM\u00c9DIATEMENT l'outil calculer_distance avec les noms des deux villes.\n \u2192 La r\u00e9ponse contient distanceKm : utilise cette valeur directement, sans la confirmer avec le client.\n \u2192 Passe imm\u00e9diatement \u00e0 l'\u00e9tape suivante.\n Si le client donne directement un nombre de km :\n \u2192 Utilise ce nombre tel quel, sans appeler calculer_distance.\n Si la destination est inconnue ou ambigu\u00eb :\n \u2192 Demande uniquement les villes de d\u00e9part et d'arriv\u00e9e.\n\n\u00c9tape 2 \u2014 PASSAGERS\n Demande : \"Combien de passagers voyagent ?\"\n\n\u00c9tape 3 \u2014 TYPE DE TRANSFERT\n Demande : \"S'agit-il d'un transfert simple (aller uniquement) ou aller-retour ?\"\n \u2192 Convertis en : \"simple\" ou \"aller_retour\"\n\n\u00c9tape 4 \u2014 DATE DE D\u00c9PART\n Demande : \"Quelle est la date de d\u00e9part souhait\u00e9e ?\"\n \u2192 Convertis toujours la date au format YYYY-MM-DD avant d'appeler l'outil.\n Exemple : \"le 15 ao\u00fbt\" \u2192 \"2026-08-15\"\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nAPPEL DE L'OUTIL calculer_devis\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nD\u00e8s que les 4 informations sont collect\u00e9es (distanceKm, nombrePassagers, typeTransfert, dateDepart),\nappelle IMM\u00c9DIATEMENT l'outil calculer_devis.\nN'annonce pas que tu vas calculer \u2014 appelle directement l'outil.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nTRAITEMENT DE LA R\u00c9PONSE DE L'OUTIL\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nCAS 1 \u2014 { \"type\": \"prix\" }\n Pr\u00e9sente le devis d\u00e9taill\u00e9 ainsi, en incluant les \u00e9tapes de calcul :\n \"Voici votre devis NeoTravel :\n D\u00e9tail du calcul :\n [Affiche ici chaque ligne du tableau 'details' fourni par l'outil (label et montant)]\n\n Prix HT : [prixHT] \u20ac\n TVA (10%) : [tva] \u20ac\n Prix TTC : [prixTTC] \u20ac\n\n Ce devis est valable 30 jours.\"\n\nCAS 2 \u2014 { \"type\": \"cas_complexe\" }\n R\u00e9ponds : \"Votre demande n\u00e9cessite une \u00e9tude personnalis\u00e9e. Un conseiller NeoTravel vous contactera dans les 24 heures.\"\n\nCAS 3 \u2014 { \"type\": \"erreur_validation\" }\n Reformule poliment la question correspondant au champ invalide.\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nR\u00c8GLES ABSOLUES\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n1. Ne JAMAIS donner un prix sans avoir appel\u00e9 l'outil calculer_devis.\n2. Ne JAMAIS inventer ou estimer un tarif.\n3. Ne JAMAIS demander plusieurs informations en m\u00eame temps.\n4. Ne JAMAIS traiter un cas complexe (>85 passagers) sans escalader."
},
"promptType": "define",
"text": "={{ $json.body.chatInput }}"
},
"id": "ai-agent-001",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.7,
"position": [
1376,
240
]
},
{
"parameters": {
"options": {}
},
"id": "vercel-model-001",
"name": "Vercel AI Gateway Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatVercelAiGateway",
"typeVersion": 1,
"position": [
1232,
432
],
"credentials": {
"vercelAiGatewayApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"sessionIdType": "customKey",
"sessionKey": "={{ $json.body.sessionId }}",
"windowSize": 10
},
"id": "memory-001",
"name": "Window Buffer Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"typeVersion": 1.3,
"position": [
1376,
448
]
},
{
"parameters": {
"name": "calculer_distance",
"description": "Calcule la distance routi\u00e8re r\u00e9elle en kilom\u00e8tres entre deux villes fran\u00e7aises. Appelle cet outil d\u00e8s que le client mentionne des noms de villes. Retourne distanceKm (entier).",
"method": "POST",
"url": "http://127.0.0.1:3001/distance",
"sendBody": true,
"specifyBody": "keypairs",
"bodyParameters": {
"parameters": [
{
"name": "villeDepart",
"value": "Nom de la ville de d\u00e9part, ex: Paris, Bordeaux, Marseille",
"parameterType": "ai"
},
{
"name": "villeArrivee",
"value": "Nom de la ville arriv\u00e9e, ex: Lyon, Biarritz, Nice",
"parameterType": "ai"
}
]
},
"options": {}
},
"id": "http-distance-001",
"name": "calculer_distance",
"type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
"typeVersion": 1.1,
"position": [
1536,
448
]
},
{
"parameters": {
"name": "calculer_devis",
"description": "Calcule le prix du devis NeoTravel pour un transfert en autocar. Appelle cet outil uniquement quand tu as les 4 informations : distanceKm (nombre de km), nombrePassagers (nombre de passagers), typeTransfert (exactement simple ou aller_retour), dateDepart (format YYYY-MM-DD). R\u00e8gles tarifaires : Forfait jusqu'\u00e0 180km (ex: 10km=250\u20ac, 180km=900\u20ac), au-del\u00e0: (KMx2)x2.5\u20ac. Aller-retour : x2. Saisonnalit\u00e9 : basse (-7%), moyenne (0%), haute (+10%), tr\u00e8s haute (+15%). D\u00e9lai : <=14J (+10%), 14-30J (+5%), 30-90J (-5%), >90J (-10%). Capacit\u00e9 : <=19 (-5%), 20-53 (0%), 54-63 (+15%), 64-67 (+20%), 68-85 (+40%). Marge commerciale : 15%.",
"method": "POST",
"url": "http://127.0.0.1:3001/devis",
"sendBody": true,
"specifyBody": "keypairs",
"bodyParameters": {
"parameters": [
{
"name": "distanceKm",
"value": "Distance en kilom\u00e8tres entre d\u00e9part et destination, nombre entier",
"parameterType": "ai"
},
{
"name": "nombrePassagers",
"value": "Nombre total de passagers, nombre entier",
"parameterType": "ai"
},
{
"name": "typeTransfert",
"value": "Type de trajet : simple pour aller uniquement, aller_retour pour aller-retour",
"parameterType": "ai"
},
{
"name": "dateDepart",
"value": "Date de d\u00e9part au format YYYY-MM-DD, exemple 2026-08-15",
"parameterType": "ai"
},
{
"name": "userEmail",
"value": "={{ $('When chat message received').first().json.body.userEmail }}",
"parameterType": "fixed"
}
]
},
"options": {}
},
"id": "http-devis-001",
"name": "calculer_devis",
"type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
"typeVersion": 1.1,
"position": [
1696,
448
]
}
],
"connections": {
"When chat message received": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Vercel AI Gateway Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Window Buffer Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"calculer_distance": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"calculer_devis": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"meta": {
"templateCredsSetupCompleted": true
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
vercelAiGatewayApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
NeoTravel — Agent Devis. Uses agent, lmChatVercelAiGateway, memoryBufferWindow, toolHttpRequest. Webhook trigger; 6 nodes.
Source: https://github.com/Dirimo/Neotravel/blob/9084520e4ab7aaaae1c35ee95489352e95f46ace/n8n/workflow.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
N8N Workflow. Uses httpRequest, toolHttpRequest, memoryBufferWindow, lmChatGoogleGemini. Webhook trigger; 13 nodes.
Somar.IA SaaS - Agente Autônomo WhatsApp (Gemini). Uses agent, lmChatGoogleGemini, memoryBufferWindow, toolHttpRequest. Webhook trigger; 7 nodes.
Lead capture agent Hubspot. Uses agent, toolHttpRequest, lmChatOpenAi, memoryBufferWindow. Webhook trigger; 6 nodes.
AI Support Chatbot. Uses agent, lmChatOpenAi, memoryBufferWindow, toolHttpRequest. Webhook trigger; 6 nodes.
L&D_AgentsAI_ATIVO. Uses httpRequest, agent, googleCalendarTool, toolSerpApi. Webhook trigger; 93 nodes.