{
  "name": "An\u00e1lise de Reembolso",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "0d83d114-c844-46f4-a520-3f2cd4a40c55",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -496,
        0
      ],
      "id": "19222990-b452-4748-a3a3-0efb655efd11",
      "name": "Webhook"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.body.data.fields }}",
        "hasOutputParser": true,
        "options": {
          "systemMessage": "=Voc\u00ea \u00e9 um agente que processa respostas de um formul\u00e1rio de reembolso.\n\nVoc\u00ea deve trabalhar apenas com os dados recebidos na entrada e pela planilha contida na tool.\n\nAs informa\u00e7\u00f5es que voc\u00ea ir\u00e1 precisar retornar s\u00e3o as seguintes:\n\n- nome: Nome do cliente proveniente do formul\u00e1rio\n- email: E-mail do cliente proveniente do formul\u00e1rio\n- produto_reembolso: De qual produto o cliente est\u00e1 pedindo reembolso, proveniente do formul\u00e1rio\n- comentario: Coment\u00e1rio por escrito do cliente, proveniente do formul\u00e1rio\n- sentimento: Uma an\u00e1lise de sentimento a partir do coment\u00e1rio do cliente no formul\u00e1rio (instru\u00e7\u00f5es mais \u00e0 frente no prompt)\n- cliente_encontrado: uma informa\u00e7\u00e3o de verdadeiro ou falso informando se encontrou o cliente na planilha (tool)\n- nome_completo: Nome do cliente proveniente da planilha (tool)\n- total_gasto_cliente: Valor total gasto pelo cliente proveniente da planilha (tool)\n- dias_desde_compra: h\u00e1 quantos dias o cliente fez a \u00faltima compra, calculado a partir dos dados da planilha (instru\u00e7\u00f5es mais \u00e0 frente no prompt)\n\n\n\nSiga rigorosamente as etapas abaixo.\n\n---\n\n### 1) Extra\u00e7\u00e3o dos campos do formul\u00e1rio\nExtraia os seguintes campos da resposta do formul\u00e1rio:\n- Nome\n- Email\n- Qual produto que voc\u00ea deseja reembolso?\n- Comente aqui o que houve\n\nSe algum campo de texto n\u00e3o existir, retorne um texto vazio \"\".\n\n---\n\n### 2) Busca do cliente na base\n- Normalize o email (trim + lowercase).\n- Use o email como \u00daNICA chave para buscar o cliente na base (Google Sheets) via tool.\n- Nunca invente dados do cliente.\n\n- Se encontrar o cliente:\n  - cliente_encontrado = true\n  - Preencha com os dados exatos da planilha:\n    - nome_completo: valor da coluna \"nome_cliente\"\n    - total_gasto_cliente: valor da coluna \"total_gasto_cliente\"\n\n- Se n\u00e3o encontrar o cliente na planilha:\n  - cliente_encontrado = false\n  - nome_completo: \u201c\u201d\n  - total_gasto_cliente: \u201c\u201d\n\n\n\n\n---\n\n### 3) Datas e prazo\n- Calcule a informa\u00e7\u00e3o dias_desde_compra, subtraindo a data atual da data da \u00faltima compra do cliente\n- A data da \u00faltima compra vem da planilha na tool na coluna data_ultima_compra.\n- A data atual: {{ $now }}\n- Considere apenas a parte da data (dia/m\u00eas/ano) e ignore o hor\u00e1rio\n- Voc\u00ea N\u00c3O deve gerar data atual por conta pr\u00f3pria.\n\nCom essas duas datas:\n- Calcule a quantidade de dias corridos entre data_atual e data_ultima_compra.\n- O c\u00e1lculo deve considerar apenas dias corridos.\n- Se data_ultima_compra ou data_atual n\u00e3o existirem, dias_desde_compra deve ser 0 (zero).\n\n\u26a0\ufe0f Importante:\n- Voc\u00ea N\u00c3O deve decidir aprova\u00e7\u00e3o ou nega\u00e7\u00e3o de reembolso.\n- Apenas calcule e informe os dias desde a compra.\n\n---\n\n### 4) An\u00e1lise de sentimento\nAnalise exclusivamente o texto do campo \"Comente aqui o que houve\" e classifique em:\n- positivo\n- neutro\n- negativo\n- muito_negativo\n\nCrit\u00e9rios:\nPOSITIVO: Texto educado ou positivo.\nNEUTRO: Texto objetivo, calmo ou vazio.\nNEGATIVO: Frustra\u00e7\u00e3o clara ou tom r\u00edspido.\nMUITO_NEGATIVO: Agressivo, xingamentos, amea\u00e7as de procon, processos, reclame aqui ou outros tipos de amea\u00e7a ou CAPS LOCK.\n\nNa d\u00favida entre negativo e muito negativo, seja conservador, escolha negativo.\n\n---\n\n### 5) Formato de sa\u00edda (OBRIGAT\u00d3RIO)\nRetorne APENAS um JSON cru.\nN\u00c3O use markdown (sem ```json).\n\nExemplo de estrutura desejada:\n\n{\n  \"nome\": \"Texto ou vazio\",\n  \"email\": \"Texto ou vazio\",\n  \"produto_reembolso\": \"Texto ou vazio\",\n  \"comentario\": \"Texto ou vazio\",\n  \"sentimento\": \"Texto ou vazio\",\n  \"cliente_encontrado\": true ou false,\n  \"nome_completo\": \"Texto ou vazio\",\n  \"total_gasto_cliente\": numero,\n  \"dias_desde_compra\": numero,\n  }\n\n\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        -288,
        0
      ],
      "id": "c94ac607-8304-48e1-8c8d-fd0299dc981a",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "modelName": "models/gemini-2.5-flash",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1.1,
      "position": [
        -384,
        224
      ],
      "id": "f2f004c9-5d55-496e-88b8-1d6332c14a07",
      "name": "Google Gemini Chat Model",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "=https://docs.google.com/spreadsheets/d/13RuEWE53pKb5NLMkae6Oww8kEQSFYTholYOg9ShMp94/edit?gid=0#gid=0",
          "mode": "url"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "P\u00e1gina1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/13RuEWE53pKb5NLMkae6Oww8kEQSFYTholYOg9ShMp94/edit#gid=0"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheetsTool",
      "typeVersion": 4.7,
      "position": [
        -192,
        224
      ],
      "id": "383798a3-fcc0-4484-916a-b10abbf779b4",
      "name": "Get row(s) in sheet in Google Sheets",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n  \"nome\": \"Alon\",\n  \"email\": \"alon@exemplo.com\",\n  \"produto_reembolso\": \"Software de Contabilidade\",\n  \"comentario\": \"O software \u00e9 bom mas tive problemas pessoais\",\n  \"sentimento\": \"neutro\",\n  \"cliente_encontrado\": true,\n  \"nome_completo\": \"Alon Pinheiro\",\n  \"total_gasto_cliente\": 1000,\n  \"dias_desde_compra\": 15\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        0,
        224
      ],
      "id": "8ce237b3-8bd5-4cc9-bda4-efe35f290fe0",
      "name": "Structured Output Parser"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "4e6add36-4c22-40de-b790-86d87c456afd",
              "leftValue": "={{ $json.output.dias_desde_compra }}",
              "rightValue": 7,
              "operator": {
                "type": "number",
                "operation": "gt"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        64,
        0
      ],
      "id": "8173a6ca-b873-4910-9f18-68ce54bfc2cb",
      "name": "If"
    },
    {
      "parameters": {
        "content": "Cliente Comum",
        "height": 176,
        "width": 464,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        304,
        -192
      ],
      "id": "0dfe0524-aab9-4165-9d72-5c32e046d008",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "content": "Cliente VIP",
        "height": 176,
        "width": 672,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        304,
        16
      ],
      "id": "02736ce9-4420-4697-b354-2fdd6012763f",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "content": "Cliente Problem\u00e1tico",
        "height": 176,
        "width": 672,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        304,
        224
      ],
      "id": "0ef64ecc-a5ac-4cb5-933a-1e31e8915534",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "e71718fc-5bbe-407e-976e-965c65739207",
              "leftValue": "={{ $('AI Agent').item.json.output.total_gasto_cliente }}",
              "rightValue": 3000,
              "operator": {
                "type": "number",
                "operation": "lt"
              }
            },
            {
              "id": "d563c870-5024-4c17-858c-c57e34bf73aa",
              "leftValue": "={{ $('AI Agent').item.json.output.sentimento }}",
              "rightValue": "muito_negativo",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        336,
        -144
      ],
      "id": "3b71b51e-4f18-4b56-b948-550464d7e3a5",
      "name": "If1"
    },
    {
      "parameters": {
        "sendTo": "={{ $('AI Agent').item.json.output.email }}",
        "subject": "Retorno sobre sua solicita\u00e7\u00e3o de reembolso",
        "message": "=Ol\u00e1, {{ $('AI Agent').item.json.output.nome }}. Analisei sua solicita\u00e7\u00e3o de reembolso. Verifiquei aqui que a compra foi efetuada h\u00e1 mais de 7 dias. Como o prazo de garantia incondicional \u00e9 de 7 dias corridos, infelizmente n\u00e3o conseguiremos prosseguir com o reembolso. Caso tenha d\u00favidas sobre o acesso ou uso do produto, nossa equipe de suporte continua \u00e0 disposi\u00e7\u00e3o para te ajudar a tirar o melhor proveito dele. Atenciosamente, Raul.",
        "options": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.2,
      "position": [
        576,
        -160
      ],
      "id": "39e4c286-875a-4b95-a062-494f05f1f7d7",
      "name": "Send a message",
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "df8d94c9-c5ab-41ec-b3e9-fe0cded1eafa",
              "leftValue": "={{ $('AI Agent').item.json.output.total_gasto_cliente }}",
              "rightValue": 3000,
              "operator": {
                "type": "number",
                "operation": "gte"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        368,
        64
      ],
      "id": "9e3c65b7-b714-44be-91cb-687d7f1f4a3d",
      "name": "If2"
    },
    {
      "parameters": {
        "sendTo": "={{ $('AI Agent').item.json.output.email }}",
        "subject": "Atualiza\u00e7\u00e3o sobre seu pedido de reembolso",
        "message": "=Ol\u00e1, {{ $('AI Agent').item.json.output.nome }}. Recebi sua solicita\u00e7\u00e3o de reembolso. Notei que o prazo contratual de 7 dias j\u00e1 expirou, que \u00e9 o prazo de garantia do produto.\nPor\u00e9m, como voc\u00ea \u00e9 um dos nossos melhores clientes, n\u00e3o quero encerrar seu caso automaticamente. Encaminhei seu pedido pessoalmente para a nossa equipe financeira analisar uma exce\u00e7\u00e3o.\nEm at\u00e9 24h a nossa equipe entrar\u00e1 em contato com voc\u00ea para dar um retorno.\nAtenciosamente, Raul.",
        "options": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.2,
      "position": [
        576,
        48
      ],
      "id": "ea331569-bd8a-47e2-ab14-d371903c7020",
      "name": "Send a message1",
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "id": "ce74ea4c-1fef-425b-a84f-9aa3edd05e2b",
              "leftValue": "={{ $('AI Agent').item.json.output.sentimento }}",
              "rightValue": "muito_negativo",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.3,
      "position": [
        368,
        272
      ],
      "id": "d29639d1-b86c-4de2-a142-f3f4594a5a8f",
      "name": "If3"
    },
    {
      "parameters": {
        "sendTo": "={{ $('AI Agent').item.json.output.email }}",
        "subject": "Recebemos sua mensagem - Caso escalado para a Ger\u00eancia",
        "message": "=Ol\u00e1, {{ $('AI Agent').item.json.output.nome }}. Li atentamente seu coment\u00e1rio e lamento sua insatisfa\u00e7\u00e3o.\nO sistema identificou que a compra est\u00e1 fora do prazo de garantia de 7 dias. No entanto, dada a seriedade do seu relato, optei por n\u00e3o finalizar o atendimento por aqui.\nEscalei seu caso com prioridade para o nosso gerente de suporte. Ele vai analisar a situa\u00e7\u00e3o e retornar\u00e1 o contato o mais breve poss\u00edvel para resolvermos isso.\nAtenciosamente, Raul.",
        "options": {
          "appendAttribution": false
        }
      },
      "type": "n8n-nodes-base.gmail",
      "typeVersion": 2.2,
      "position": [
        576,
        256
      ],
      "id": "2b884af4-f6ad-4c61-91c8-472c1fb66f9d",
      "name": "Send a message2",
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "8622511380",
        "text": "=<b>Pedido de Reembolso fora do Prazo</b> \nPessoal, chegou um pedido de reembolso de um cliente que estourou o prazo de 7 dias (est\u00e1 com {{ $('AI Agent').item.json.output.dias_desde_compra }} dias). O sistema barrou, mas como ele \u00e9 VIP, pe\u00e7o que verifiquem com aten\u00e7\u00e3o e avaliem reembolsar o aluno. Avisei pra ele que a gente ia analisar com carinho e dar um retorno em 24h. Conseguem ver com o financeiro se liberamos essa exce\u00e7\u00e3o pra n\u00e3o perder o cliente? \n\n<b>Cliente:</b> {{ $('AI Agent').item.json.output.nome }} \n<b>E-mail:</b> {{ $('AI Agent').item.json.output.email }} \n<b>Produto:</b> {{ $('AI Agent').item.json.output.produto_reembolso }}",
        "additionalFields": {
          "appendAttribution": false,
          "parse_mode": "HTML"
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        784,
        48
      ],
      "id": "5da34a6e-bfc6-450b-98ae-eccafc4d54e1",
      "name": "Send a text message",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "8622511380",
        "text": "=\u26a0\ufe0f Aten\u00e7\u00e3o aqui, gente.\nTemos um cliente que pediu reembolso fora do prazo, mas mandou uma mensagem bem pesada..\nO coment\u00e1rio dele foi esse: \"{{ $('AI Agent').item.json.output.comentario }}\"\nPra evitar que ele v\u00e1 pro Reclame Aqui ou procon, eu j\u00e1 respondi dizendo que escalei o caso pra ger\u00eancia. Conseguem dar uma aten\u00e7\u00e3o pra esse caso por favor?\nCliente: {{ $('AI Agent').item.json.output.nome_completo }}\nE-mail: {{ $('AI Agent').item.json.output.email }}\nProduto: {{ $('AI Agent').item.json.output.produto_reembolso }}",
        "additionalFields": {
          "appendAttribution": false,
          "parse_mode": "MarkdownV2"
        }
      },
      "type": "n8n-nodes-base.telegram",
      "typeVersion": 1.2,
      "position": [
        784,
        256
      ],
      "id": "c37c2c23-7afb-4e99-a3fd-8f843df66204",
      "name": "Send a text message1",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet in Google Sheets": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "If1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If1": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "If2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If2": {
      "main": [
        [
          {
            "node": "Send a message1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "If3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If3": {
      "main": [
        [
          {
            "node": "Send a message2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message1": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a message2": {
      "main": [
        [
          {
            "node": "Send a text message1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "aac69fdf-504b-4130-a778-0980f5c74d07",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodeGroups": [],
  "id": "IKJfjEwf9Bh75Ka2",
  "tags": []
}