{ "id": "BMI5WkmyU8nZqfII", "meta": { "instanceId": "workflow-ca0c9aa2", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:51.028573", "updatedAt": "2025-09-29T07:07:51.028586", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "modelo do chatbot", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "trigger-a26e9b1d", "name": "Manual Trigger", "type": "n8n-nodes-base.manualTrigger", "typeVersion": 1, "position": [ 100, 100 ], "parameters": {} }, { "id": "c6e454af-70a1-4c65-8450-8159f7fc738b", "name": "If Node", "type": "n8n-nodes-base.if", "position": [ 160, 560 ], "parameters": { "options": {}, "conditions": { "options": { "version": 1, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "7ea831a4-0e20-4725-a6f5-3dc2f41f1cf4", "operator": { "type": "object", "operation": "exists", "singleValue": true }, "leftValue": "={{ $json.leadData }}", "rightValue": "" }, { "id": "ccb46339-4e43-42e6-aa45-d5a0cbd62214", "operator": { "name": "filter.operator.equals", "type": "string", "operation": "equals" }, "leftValue": "", "rightValue": "" } ] } }, "typeVersion": 2, "notes": "This if node performs automated tasks as part of the workflow." }, { "id": "2221736f-ef99-4ac8-8a81-51af6d4e7dcd", "name": "Edit Fields1", "type": "n8n-nodes-base.set", "position": [ 440, 960 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "19a16867-b574-4b99-82f1-a86752b7fe9f", "name": "chatInput", "type": "string", "value": "=\"Hello, just so you can get to know me, with no intention of a response, please save this information in your memory. My name is {{ $json.leadData.name }}. I am {{ $json.leadData.age }} years old and currently live in {{ $json.leadData.city }}, {{ $json.leadData.state }}. My profession is {{ $json.leadData.profession }}, and my education level is {{ $json.leadData.educationLevel }}.\nIf I’m part of an adhesion group and have an entity, it would be {{ $json.leadData.entity }}.\n\nI am using a {{ $json.leadData.deviceType }} device to access this through the {{ $json.leadData.channel }} channel. At the moment, I am looking for a health insurance plan of type {{ $json.leadData.quotationType }}.\"" }, { "id": "0df8d578-8332-4cde-9044-489de16ab390", "name": "session_id", "type": "string", "value": "={{ $json.session_id }}" } ] } }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "6aa1b3a4-0e6a-4312-9d9f-f67c4bf8f443", "name": "Edit Fields2", "type": "n8n-nodes-base.set", "position": [ 920, 960 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "19a16867-b574-4b99-82f1-a86752b7fe9f", "name": "chatInput", "type": "string", "value": "={{ $('Chat Trigger').item.json.chatInput}}" }, { "id": "0df8d578-8332-4cde-9044-489de16ab390", "name": "session_id", "type": "string", "value": "={{ $('Chat Trigger').item.json.session_id }}" } ] } }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "6afe6158-7a8b-4a83-a778-6fd28e2a11af", "name": "OpenAI", "type": "n8n-nodes-base.noOp", "position": [ 600, 960 ], "parameters": { "options": {}, "resource": "assistant", "assistantId": { "__rl": true, "mode": "list", "value": "asst_numdCoMZPQ6GwfiJg5drg9hr", "cachedResultName": "Chat IA - Testes - Dezembro - APIS" } }, "credentials": { "openAiApi": { "id": "FW1FWHcMcwemQ1kZ", "name": "OpenAi account" } }, "typeVersion": 1.4, "notes": "This openAi node performs automated tasks as part of the workflow." }, { "id": "4b961f1d-7da2-4a0b-98e3-7ec35ee14335", "name": "Chat Trigger", "type": "n8n-nodes-base.noOp", "position": [ -20, 560 ], "webhookId": "1f83e8ac-d465-454a-8327-cef7f0149cb1", "parameters": { "public": true, "options": {}, "initialMessages": "Olá 👋\nSou Jovelino, o serviço de IA do Joov, me mande sua pergunta e responderei em seguida! :)" }, "typeVersion": 1, "notes": "This chatTrigger node performs automated tasks as part of the workflow." }, { "id": "dccdb07f-97db-4a5a-9b09-02a5de65246e", "name": "Postgres Chat Memory", "type": "n8n-nodes-base.noOp", "position": [ 640, 720 ], "parameters": { "tableName": "aimessages", "sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey", "contextWindowLength": 30 }, "credentials": { "postgres": { "id": "M1cYa0bOSX1nfczy", "name": "Postgres account" } }, "typeVersion": 1.3, "notes": "This memoryPostgresChat node performs automated tasks as part of the workflow." }, { "id": "553dd27b-ab06-4605-99e0-8f15735cfff3", "name": "Postgres Chat Memory1", "type": "n8n-nodes-base.noOp", "position": [ 760, 1160 ], "parameters": { "tableName": "aimessages", "sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey", "contextWindowLength": 1 }, "credentials": { "postgres": { "id": "M1cYa0bOSX1nfczy", "name": "Postgres account" } }, "typeVersion": 1.3, "notes": "This memoryPostgresChat node performs automated tasks as part of the workflow." }, { "id": "0103fb97-c691-4bd3-b26d-85aaa9774594", "name": "Products in Daatabase", "type": "n8n-nodes-base.mySqlTool", "position": [ 1460, 600 ], "parameters": { "query": "SELECT * \nFROM Products p \nWHERE \n cityQuery = '{{ $fromAI(\"cityQuery\") }}' AND \n state = '{{ $fromAI(\"state\") }}' AND \n modality = 'PME' AND \n removed = 0 AND \n ({{ $fromAI(\"holderCount\") || 1 }} + {{ $fromAI(\"dependentsCount\") || 0 }}) BETWEEN p.minLifeAmount AND p.maxLifeAmount AND\n (CASE\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 0 AND 18 THEN priceAtAge0To18\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 19 AND 23 THEN priceAtAge19To23\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 24 AND 28 THEN priceAtAge24To28\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 29 AND 33 THEN priceAtAge29To33\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 34 AND 38 THEN priceAtAge34To38\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 39 AND 43 THEN priceAtAge39To43\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 44 AND 48 THEN priceAtAge44To48\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 49 AND 53 THEN priceAtAge49To53\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 54 AND 58 THEN priceAtAge54To58\n ELSE priceAtAge59To199\n END) IS NOT NULL\nORDER BY \n (CASE\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 0 AND 18 THEN priceAtAge0To18\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 19 AND 23 THEN priceAtAge19To23\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 24 AND 28 THEN priceAtAge24To28\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 29 AND 33 THEN priceAtAge29To33\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 34 AND 38 THEN priceAtAge34To38\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 39 AND 43 THEN priceAtAge39To43\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 44 AND 48 THEN priceAtAge44To48\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 49 AND 53 THEN priceAtAge49To53\n WHEN {{ $fromAI(\"holderAge\") }} BETWEEN 54 AND 58 THEN priceAtAge54To58\n ELSE priceAtAge59To199\n END) ASC, \n createdAt DESC\nLIMIT 3;\n", "options": { "detailedOutput": true }, "operation": "executeQuery", "descriptionType": "manual", "toolDescription": "// Search for the X product bla bla bla" }, "credentials": { "mySql": { "id": "lkGJt8aNB0azyaGy", "name": "MySQL account 2" } }, "typeVersion": 2.4, "notes": "This mySqlTool node performs automated tasks as part of the workflow." }, { "id": "0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb", "name": "Knowledge Base", "type": "n8n-nodes-base.noOp", "position": [ 1340, 600 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}{modalidade}&estado=SP&cidade={city}&operadora={operadora}", "toolDescription": "Here you will find the knowlegde base of my shop and bla bla bla Use this when they ask for price, whatever i want." }, "typeVersion": 1.1, "notes": "This toolHttpRequest node performs automated tasks as part of the workflow." }, { "id": "393f792a-4eff-4b33-aac0-025fc622a4b3", "name": "External API", "type": "n8n-nodes-base.noOp", "position": [ 1200, 600 ], "parameters": { "url": "{{ $env.WEBHOOK_URL }}", "method": "POST", "jsonBody": "={\n \"name\": \"{{json.name}}\",\n \"birthdate\": \"{{json.birthdate }}\"\n}", "sendBody": true, "specifyBody": "json", "toolDescription": "Pegue o nome completo em camel case, exemplo: Fernanda Melo, e a data de nacimento nesse formato: 1990-03-28" }, "typeVersion": 1.1, "notes": "This toolHttpRequest node performs automated tasks as part of the workflow." }, { "id": "7ce7a5e7-6238-4479-a26f-bdcde1784188", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ 1160, 414 ], "parameters": { "color": 5, "width": 436.73182569600795, "height": 367.7413881276459, "content": "TOOLS" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "df6737ca-c588-48fc-9761-2a5307841298", "name": "OpenAI2", "type": "n8n-nodes-base.noOp", "position": [ 460, 460 ], "parameters": { "text": "={{ $json.chatInput }}", "prompt": "define", "options": {}, "resource": "assistant", "assistantId": { "__rl": true, "mode": "list", "value": "asst_x2qfc7EuoPv7XGOL84ClEZ3L", "cachedResultName": "PINE" } }, "credentials": { "openAiApi": { "id": "FW1FWHcMcwemQ1kZ", "name": "OpenAi account" } }, "typeVersion": 1.4, "notes": "This openAi node performs automated tasks as part of the workflow." } ], "active": false, "pinData": {}, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "versionId": "d1dc3988-6677-47c9-b91a-6875c7b6151d", "connections": { "0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb": { "main": [ [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb", "type": "main", "index": 0 } ], [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb-6e59d01b", "type": "main", "index": 0 } ], [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb-e0148d70", "type": "main", "index": 0 } ], [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb-96cc0e1c", "type": "main", "index": 0 } ], [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb-c6628741", "type": "main", "index": 0 } ], [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb-0652161d", "type": "main", "index": 0 } ], [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb-9335bb5c", "type": "main", "index": 0 } ], [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb-9c6a5a18", "type": "main", "index": 0 } ], [ { "node": "error-handler-0cdfd89f-eb9e-4b6c-90d1-1cf8d6ed96bb-a53d68b4", "type": "main", "index": 0 } ] ] }, "393f792a-4eff-4b33-aac0-025fc622a4b3": { "main": [ [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3", "type": "main", "index": 0 } ], [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3-aece7e14", "type": "main", "index": 0 } ], [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3-8de824b3", "type": "main", "index": 0 } ], [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3-4be1e45b", "type": "main", "index": 0 } ], [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3-b873a679", "type": "main", "index": 0 } ], [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3-93bda848", "type": "main", "index": 0 } ], [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3-fb448e44", "type": "main", "index": 0 } ], [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3-f8c46bea", "type": "main", "index": 0 } ], [ { "node": "error-handler-393f792a-4eff-4b33-aac0-025fc622a4b3-7d11861e", "type": "main", "index": 0 } ] ] }, "6afe6158-7a8b-4a83-a778-6fd28e2a11af": { "main": [ [ { "node": "error-handler-6afe6158-7a8b-4a83-a778-6fd28e2a11af-cc57505e", "type": "main", "index": 0 } ] ] }, "df6737ca-c588-48fc-9761-2a5307841298": { "main": [ [ { "node": "error-handler-df6737ca-c588-48fc-9761-2a5307841298-da7d8976", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: modelo do chatbot. This workflow integrates 9 different services: stickyNote, toolHttpRequest, mySqlTool, memoryPostgresChat, set. It contains 18 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: modelo do chatbot. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }