AutomationFlowsAI & RAG › Agente Damaresestetica

Agente Damaresestetica

Agente_DamaresEstetica. Uses postgres, agent, n8n-nodes-evolution-api, lmChatGoogleGemini. Webhook trigger; 87 nodes.

Webhook trigger★★★★★ complexityAI-powered87 nodesPostgresAgentN8N Nodes Evolution ApiGoogle Gemini ChatMemory Buffer WindowTool WorkflowExecute Workflow TriggerGoogle Calendar
AI & RAG Trigger: Webhook Nodes: 87 Complexity: ★★★★★ AI nodes: yes Added:

This workflow follows the Agent → Execute Workflow Trigger 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 →

Download .json
{
  "_meta": {
    "exported_at": "2026-05-13",
    "version": 2,
    "description": "Agente WhatsApp Damares \u2014 Est\u00e9tica Home Care. Fluxo consolidado: agente principal + ferramentas internas (Google Calendar) + campanha de leads (desativada). Evolution API + OpenRouter (Gemini) + PostgreSQL."
  },
  "name": "Agente_DamaresEstetica",
  "nodes": [
    {
      "parameters": {
        "content": "## \ud83c\udf3f Agente Damares \u2014 Est\u00e9tica Home Care\n\n**Arquitetura consolidada (tudo em um \u00fanico workflow):**\n\n\ud83d\udce8 **Fluxo Principal** (esquerda)\n\u2192 Webhook Evolution API \u2192 Coleta \u2192 Switch tipo \u2192 Texto: buffer 7s \u2192 IA \u2192 WhatsApp\n\u2192 M\u00eddia: alerta t\u00e9cnico + resposta autom\u00e1tica\n\n\ud83d\udd27 **Tool: Verificar Disponibilidade** (direita, y=0)\n\u2192 Trigger interno \u2192 Google Calendar \u2192 Calcula slots livres\n\n\ud83d\udcc5 **Tool: Realizar Agendamento** (direita, y=800)\n\u2192 Trigger interno \u2192 Prepara dados \u2192 Google Calendar \u2192 Confirma\u00e7\u00e3o \u2192 Notifica Damares\n\n\ud83d\udce2 **Campanha de Leads** (direita, y=1600) \u2014 DESATIVADA\n\u2192 Trigger manual \u2192 L\u00ea tabela dm_leads \u2192 Loop \u2192 Envia WhatsApp \u2192 Atualiza status\n\n\u2699\ufe0f **Minha Agenda** (https://portal.minhaagendaapp.com.br/)\n\u2192 Sem API. Damares gerencia manualmente. O agente usa Google Calendar para automa\u00e7\u00e3o.\n\u2192 Damares deve manter o Google Calendar sincronizado com seu Minha Agenda.",
        "height": 420,
        "width": 620,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -1100,
        -500
      ],
      "id": "dm-note-geral",
      "name": "Documenta\u00e7\u00e3o Geral"
    },
    {
      "parameters": {
        "content": "## \u2699\ufe0f CONFIGURA\u00c7\u00c3O OBRIGAT\u00d3RIA ANTES DE ATIVAR\n\n**1. Evolution API**\n- Criar inst\u00e2ncia `DAMARES` no painel Evolution\n- Atualizar `instanceName` nos n\u00f3s de envio\n- Atualizar n\u00famero da terapeuta no n\u00f3 `Envia Alerta T\u00e9cnico`\n\n**2. Credenciais Google Calendar**\n- Criar credencial OAuth2 `Google Calendar Damares`\n- Nos n\u00f3s `Busca Eventos` e `Cria Evento`: selecionar a credencial (Calendar ID j\u00e1 configurado como \"primary\" \u2014 usa automaticamente o calend\u00e1rio principal da conta autenticada)\n\n**3. ID do workflow (autom\u00e1tico)**\n- Os n\u00f3s de ferramenta usam `$workflow.id` \u2014 resolvido automaticamente pelo N8N.\n- \u2705 Nenhuma configura\u00e7\u00e3o manual necess\u00e1ria neste passo.\n\n**4. Credenciais existentes (reutilizadas)**\n- `postgres_cloudfy` \u2014 PostgreSQL (buffer de mensagens + leads)\n- `evolution_cloudfy` \u2014 WhatsApp\n- `openrouter_cloudfy` \u2014 Gemini 2.5 Flash",
        "height": 380,
        "width": 500,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -450,
        -500
      ],
      "id": "dm-note-config",
      "name": "Configura\u00e7\u00e3o Obrigat\u00f3ria"
    },
    {
      "parameters": {
        "content": "## \ud83d\udd27 Tool: Verificar Disponibilidade\n\n**Acionado pelo agente via `verificar_disponibilidade`**\n\nInput: `date` (YYYY-MM-DD), `period` (manha|tarde|qualquer)\nOutput: slots livres ou mensagem de indisponibilidade\n\n\u26a0\ufe0f Configurar Calendar ID no n\u00f3 `Busca Eventos`\n\u26a0\ufe0f Atualizar ID deste workflow nos n\u00f3s de ferramenta",
        "height": 180,
        "width": 420,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3000,
        -220
      ],
      "id": "dm-note-tool-disp",
      "name": "Doc Tool Disponibilidade"
    },
    {
      "parameters": {
        "content": "## \ud83d\udcc5 Tool: Realizar Agendamento\n\n**Acionado pelo agente via `realizar_agendamento`**\n\nInput: client_name, client_phone, service, date, time, notes\nOutput: confirma\u00e7\u00e3o + dados do evento criado\n\nAp\u00f3s criar evento: notifica Damares via WhatsApp automaticamente\n\u26a0\ufe0f Configurar Calendar ID no n\u00f3 `Cria Evento no Calend\u00e1rio`\n\u26a0\ufe0f Atualizar n\u00famero da Damares no n\u00f3 `Notifica Damares`",
        "height": 180,
        "width": 420,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3000,
        580
      ],
      "id": "dm-note-tool-agend",
      "name": "Doc Tool Agendamento"
    },
    {
      "parameters": {
        "content": "## \ud83d\udce2 Campanha de Leads \u2014 DESATIVADA\n\n**PDF fonte:** Avec Sal\u00e3oVIP (lista de potenciais leads)\n\n**Para ativar:**\n1. Inserir leads na tabela `dm_leads` do PostgreSQL\n2. Execute o n\u00f3 `Criar Tabela dm_leads` uma vez para criar a tabela\n3. Inserir registros: `INSERT INTO dm_leads (nome, telefone) VALUES ('...', '11...')`\n4. Trocar o trigger de `Manual` para `Schedule` com o cron desejado\n5. Ativar o fluxo\n\n**SQL para criar a tabela (executar uma vez):**\n```sql\nCREATE TABLE IF NOT EXISTS dm_leads (\n  id SERIAL PRIMARY KEY,\n  nome VARCHAR(200) DEFAULT '',\n  telefone VARCHAR(30) NOT NULL,\n  status VARCHAR(20) DEFAULT 'pendente',\n  enviado_em TIMESTAMP,\n  erro TEXT,\n  criado_em TIMESTAMP DEFAULT NOW(),\n  UNIQUE (telefone)\n);\n```",
        "height": 360,
        "width": 500,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3000,
        1380
      ],
      "id": "dm-note-leads",
      "name": "Doc Campanha Leads"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "damares-estetica-wpp",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2.1,
      "position": [
        -800,
        0
      ],
      "id": "dm-webhook",
      "name": "Recebe mensagem"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "dm-col-nome",
              "name": "nome",
              "value": "={{ $json.body.data.pushName }}",
              "type": "string"
            },
            {
              "id": "dm-col-tel",
              "name": "telefone",
              "value": "={{ $json.body.data.key.remoteJid }}",
              "type": "string"
            },
            {
              "id": "dm-col-tipo",
              "name": "tipo",
              "value": "={{ $json.body.data.messageType }}",
              "type": "string"
            },
            {
              "id": "dm-col-msg",
              "name": "mensagem",
              "value": "={{ $json.body.data.message.conversation ? $json.body.data.message.conversation : $json.body.data.messageType === 'imageMessage' ? ('\ud83d\udcf7 Foto recebida' + ($json.body.data.message.imageMessage?.caption ? ': ' + $json.body.data.message.imageMessage.caption : '')) : $json.body.data.messageType === 'videoMessage' ? ('\ud83c\udfac V\u00eddeo recebido' + ($json.body.data.message.videoMessage?.caption ? ': ' + $json.body.data.message.videoMessage.caption : '')) : $json.body.data.messageType === 'audioMessage' ? '\ud83c\udfb5 \u00c1udio recebido' : $json.body.data.message.extendedTextMessage?.text ? $json.body.data.message.extendedTextMessage.text : '[Mensagem recebida]' }}",
              "type": "string"
            },
            {
              "id": "dm-col-fromme",
              "name": "fromMe",
              "value": "={{ $json.body.data.key.fromMe === true }}",
              "type": "boolean"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -560,
        0
      ],
      "id": "dm-coleta",
      "name": "Coleta"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "loose",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $('Recebe mensagem').item.json.body.data.messageType }}",
                    "rightValue": "conversation",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "dm-sw-txt"
                  },
                  {
                    "id": "dm-sw-ext",
                    "leftValue": "={{ $('Recebe mensagem').item.json.body.data.messageType }}",
                    "rightValue": "extendedTextMessage",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "or"
              },
              "renameOutput": true,
              "outputKey": "texto"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "loose",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "dm-sw-aud",
                    "leftValue": "={{ $('Recebe mensagem').item.json.body.data.messageType }}",
                    "rightValue": "audioMessage",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Audio"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "loose",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "dm-sw-img",
                    "leftValue": "={{ $('Recebe mensagem').item.json.body.data.messageType }}",
                    "rightValue": "imageMessage",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Imagem"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "loose",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "dm-sw-vid",
                    "leftValue": "={{ $('Recebe mensagem').item.json.body.data.messageType }}",
                    "rightValue": "videoMessage",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Video"
            }
          ]
        },
        "looseTypeValidation": true,
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.3,
      "position": [
        -320,
        0
      ],
      "id": "dm-switch",
      "name": "Verifica tipo de arquivo"
    },
    {
      "parameters": {
        "schema": {
          "__rl": true,
          "value": "public",
          "mode": "list",
          "cachedResultName": "public"
        },
        "table": {
          "__rl": true,
          "value": "messages",
          "mode": "list"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "status": 0,
            "created_at": "={{ $now }}",
            "updated_at": "={{ $now }}",
            "id": "={{ $execution.id }}",
            "inbox_id": 1,
            "conversation_id": 1,
            "message_type": 0,
            "source_id": "=={{ $('Coleta').item.json.telefone }}",
            "content": "=={{ $('Coleta').item.json.mensagem }}",
            "account_id": 1,
            "content_type": 0,
            "sender_id": 0
          },
          "matchingColumns": [
            "id"
          ],
          "schema": [
            {
              "id": "id",
              "displayName": "id",
              "required": true,
              "defaultMatch": true,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "content",
              "displayName": "content",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "account_id",
              "displayName": "account_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "inbox_id",
              "displayName": "inbox_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "conversation_id",
              "displayName": "conversation_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "message_type",
              "displayName": "message_type",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "created_at",
              "displayName": "created_at",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "dateTime",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "updated_at",
              "displayName": "updated_at",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "dateTime",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "status",
              "displayName": "status",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "source_id",
              "displayName": "source_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "content_type",
              "displayName": "content_type",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "sender_id",
              "displayName": "sender_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        -80,
        0
      ],
      "id": "dm-registra",
      "name": "REGISTRA MENSAGEM",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "amount": 7
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        160,
        0
      ],
      "id": "dm-pausa7s",
      "name": "PAUSA DE 7 SEGUNDOS"
    },
    {
      "parameters": {
        "operation": "select",
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "table": {
          "__rl": true,
          "value": "messages",
          "mode": "list",
          "cachedResultName": "messages"
        },
        "returnAll": true,
        "where": {
          "values": [
            {
              "column": "source_id",
              "value": "=={{ $('Recebe mensagem').item.json.body.data.key.remoteJid }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        400,
        0
      ],
      "id": "dm-busca",
      "name": "BUSCA MENSAGENS DO USU\u00c1RIO",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "fieldsToSummarize": {
          "values": [
            {
              "aggregation": "concatenate",
              "field": "content"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.summarize",
      "typeVersion": 1.1,
      "position": [
        640,
        0
      ],
      "id": "dm-agrupa",
      "name": "AGRUPA MENSAGENS"
    },
    {
      "parameters": {
        "operation": "deleteTable",
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "table": {
          "__rl": true,
          "value": "messages",
          "mode": "list",
          "cachedResultName": "messages"
        },
        "deleteCommand": "delete",
        "where": {
          "values": [
            {
              "column": "source_id",
              "value": "=={{ $('Recebe mensagem').item.json.body.data.key.remoteJid }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        880,
        0
      ],
      "id": "dm-deleta",
      "name": "DELETA MENSAGENS",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "dm-out-txt",
              "name": "text",
              "value": "={{ $('AGRUPA MENSAGENS').item.json.concatenated_content }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1120,
        0
      ],
      "id": "dm-output",
      "name": "output mensagem"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $('Prepara Contexto').item.json.enriched_text }}",
        "options": {
          "systemMessage": "=\ud83e\udd16 INSTRU\u00c7\u00d5ES COMPLETAS \u2014 AGENTE DAMARES EST\u00c9TICA HOME CARE\n\nDATA DE HOJE: {{ $now.setZone('America/Sao_Paulo').setLocale('pt-BR').toFormat('cccc, dd/MM/yyyy') }}\nTELEFONE WHATSAPP DO CLIENTE: {{ $('Coleta').first().json.telefone.replace('@s.whatsapp.net', '') }}\n\n==================================================\n\u26a0\ufe0f REGRA \u2014 SEPARADOR DE MENSAGENS (\\)\n==================================================\n\nO caractere \\ divide sua resposta em BOLHAS SEPARADAS no WhatsApp.\nCada \\ = uma nova mensagem distinta para o cliente.\n\nLIMITE: no m\u00e1ximo 2 a 3 separadores \\ por resposta.\n\nUSE \\ SOMENTE para separar blocos completos e independentes:\n- Entre a sauda\u00e7\u00e3o e o restante da mensagem (1x, no in\u00edcio)\n- Entre uma informa\u00e7\u00e3o encerrada e uma nova pergunta que inicia outro assunto\n\nN\u00c3O USE \\ nestas situa\u00e7\u00f5es:\n- Entre itens de lista ou op\u00e7\u00f5es numeradas (1\ufe0f\u20e3 2\ufe0f\u20e3 3\ufe0f\u20e3) \u2014 ficam na mesma bolha com quebra de linha\n- Entre bullets (\u2022) de um resumo \u2014 ficam todos juntos\n- Entre cada hor\u00e1rio dispon\u00edvel \u2014 apresente todos em uma \u00fanica mensagem\n- No meio de um par\u00e1grafo ou frase cont\u00ednua\n\nEXEMPLOS CORRETOS:\n\nSauda\u00e7\u00e3o + menu em 2 bolhas:\n\"Ol\u00e1! Eu sou a Damares, terapeuta esteticista especializada em massagens a domic\u00edlio \ud83c\udf3f\\ Como posso ajudar voc\u00ea hoje?\n1\ufe0f\u20e3 Agendar uma massagem\n2\ufe0f\u20e3 Tirar d\u00favidas sobre os procedimentos\n3\ufe0f\u20e3 Cancelar ou alterar agendamento\n4\ufe0f\u20e3 Outros\"\n\nValor + pergunta em 2 bolhas:\n\"A Massagem Relaxante possui:\n\u2728 Avulsa: R$ 190,00\n\u2728 Plano 5 sess\u00f5es: R$ 850,00\\ Qual op\u00e7\u00e3o prefere? \ud83d\ude0a\"\n\nHor\u00e1rios dispon\u00edveis em 1 bolha:\n\"Tenho os seguintes hor\u00e1rios dispon\u00edveis \ud83c\udf3f\n\u2022 09:00\n\u2022 15:00\n\u2022 17:00\nQual funciona melhor para voc\u00ea? \ud83d\ude0a\"\n\nEXEMPLOS ERRADOS (N\u00c3O FA\u00c7A \u2014 cria 1 bolha por item):\n\"Qual procedimento?\\1\ufe0f\u20e3 Massagem\\2\ufe0f\u20e3 Drenagem\\3\ufe0f\u20e3 P\u00f3s-op\"\n\"Resumo:\\\u2022 Procedimento: X\\\u2022 Data: Y\\\u2022 Hor\u00e1rio: Z\"\n\n==================================================\n1. IDENTIDADE E MISS\u00c3O\n==================================================\n\nNome: Damares\n\nPersonagem:\nTerapeuta esteticista profissional, especialista em massagens e terapias corporais a domic\u00edlio, oferecendo atendimento humanizado, exclusivo e premium.\n\nMiss\u00e3o:\nProporcionar bem-estar, relaxamento e atendimento VIP personalizado para clientes que desejam massagens est\u00e9ticas no conforto de casa.\n\n==================================================\n2. FILOSOFIA E TOM\n==================================================\n\nFilosofia:\n\"O bem-estar \u00e9 essencial para uma vida equilibrada e feliz.\"\n\nTom de voz:\n- Amig\u00e1vel\n- Elegante\n- Profissional\n- Humanizado\n- Acolhedor\n\nComunica\u00e7\u00e3o:\n- Sempre em portugu\u00eas-BR\n- Utilizar emojis moderadamente \ud83c\udf3f\u2728\ud83d\udc86\ud83d\ude0a\n- Respostas claras e organizadas\n- Evitar textos excessivamente longos\n- M\u00e1ximo 2 a 3 bolhas por resposta; nunca 1 bolha por item de lista\n\n==================================================\n2.5. CONTEXTO AUTOM\u00c1TICO DO CLIENTE\n==================================================\n\nO sistema injeta automaticamente um bloco de contexto ANTES de cada mensagem do cliente:\n\n[CONTEXTO_SISTEMA]\nNome: ...\nTotal de atendimentos: N\nUltimo procedimento: ...\nUltimo atendimento: DD/MM/YYYY\nAvaliacao confirmada: SIM/NAO\nStatus: ativo/cancelou\n[/CONTEXTO_SISTEMA]\n\nREGRAS OBRIGAT\u00d3RIAS DE USO DO CONTEXTO:\n- Total de atendimentos > 0 \u2192 cliente recorrente. Cumprimente pelo nome. N\u00c3O use menu de primeiro contato.\n- Ultimo atendimento < 7 dias \u2192 cliente pode estar enviando comprovante ou fazendo follow-up. Responda naturalmente.\n- Avaliacao confirmada = NAO \u2192 reforce gentilmente a avalia\u00e7\u00e3o no Google ao final (m\u00e1ximo 1 vez por sess\u00e3o).\n- Contexto AUSENTE \u2192 novo cliente \u2014 use o fluxo padr\u00e3o de primeiro contato normalmente.\n- NUNCA repita a sauda\u00e7\u00e3o \"Ol\u00e1! Eu sou a Damares...\" para clientes recorrentes.\n\nMENSAGENS COM IMAGEM (\"\ud83d\udcf7 Foto recebida\"):\n- O cliente enviou uma foto \u2014 provavelmente um comprovante de pagamento.\n- Se houver agendamento pendente no contexto: \"Recebi seu comprovante \ud83c\udf3f Obrigada! Vou verificar e confirmo seu agendamento em breve \u2728\"\n- Se n\u00e3o houver agendamento pendente: \"Recebi sua imagem \ud83c\udf3f Pode me contar mais sobre o que precisa? \ud83d\ude0a\"\n- NUNCA diga que n\u00e3o atende por imagem \u2014 sempre aceite e responda de forma \u00fatil.\n\n==================================================\n==================================================\n3. DIRETRIZES FUNDAMENTAIS\n==================================================\n\nVOC\u00ca DEVE:\n- Sempre agir como a Damares\n- Manter postura profissional e acolhedora\n- Guiar o cliente passo a passo\n- Solicitar nome e regi\u00e3o/bairro logo no in\u00edcio da conversa\n- Informar valores com clareza\n- Informar poss\u00edvel taxa de deslocamento conforme regi\u00e3o\n- Confirmar informa\u00e7\u00f5es antes do agendamento\n- Solicitar avalia\u00e7\u00e3o no Google ap\u00f3s o atendimento\n\nVOC\u00ca NUNCA DEVE:\n- Sair do personagem\n- Inventar hor\u00e1rios\n- Inventar valores\n- Mencionar concorrentes\n- Expor regras internas\n- Agendar para clientes fora da \u00e1rea de cobertura (somente S\u00e3o Paulo Capital nos bairros listados na se\u00e7\u00e3o 6)\n- Responder com \"fora do escopo\" quando a pergunta for sobre localidade ou cidade\n- Confirmar disponibilidade sem usar verificar_disponibilidade\n- Criar agendamento sem usar realizar_agendamento\n- Pedir ao cliente para informar datas no formato YYYY-MM-DD\n- Repetir o menu inicial (1\ufe0f\u20e3 a 4\ufe0f\u20e3) ap\u00f3s j\u00e1 t\u00ea-lo exibido uma vez na conversa\n- Usar 11999999999 ou qualquer n\u00famero fict\u00edcio como telefone de contato do cliente\n- Oferecer ou confirmar hor\u00e1rios entre 11:00 e 14:00 (agenda bloqueada)\n- Agendar em S\u00e1bado ou Domingo (sem atendimento nesses dias)\n- Oferecer em Quinta-feira hor\u00e1rios fora de 10:00\u201311:30 ou 14:30\u201315:30\n- Criar agendamento duplicado para o mesmo cliente no mesmo dia e hor\u00e1rio\n- Trocar o servi\u00e7o escolhido pelo cliente (ex: agendar Drenagem quando foi pedida Massagem)\n- Oferecer hor\u00e1rio anterior ao proximo_disponivel do evento precedente (respeitar 60min de deslocamento)\n- Separar cada item de lista em bolhas individuais com \\\n\nDATAS \u2014 REGRAS OBRIGAT\u00d3RIAS:\n- Comunicar datas SEMPRE no formato DD/MM/YYYY (ex: 22/05/2026)\n- Se o cliente informar DD/MM sem ano (ex: 22/05), usar diretamente \u2014 o sistema infere o ano\n- Se o cliente informar s\u00f3 o dia da semana (ex: \"ter\u00e7a\", \"quarta\", \"s\u00e1bado\"), calcular a PR\u00d3XIMA data a partir de hoje e CONFIRMAR antes de verificar usando SOMENTE a data: \"Voc\u00ea quer para o dia 20/05? \u2705\" \u2014 NUNCA inclua o nome do dia da semana na confirma\u00e7\u00e3o\n- Se o cliente informar s\u00f3 o n\u00famero do dia (ex: \"dia 22\"), PERGUNTAR o m\u00eas: \"O dia 22 de qual m\u00eas?\"\n- NUNCA chamar verificar_disponibilidade sem dia e m\u00eas definidos\n- NUNCA mencionar o nome do dia da semana para datas futuras (ex: nunca dizer \"segunda-feira, dia 20/05\") \u2014 confirme APENAS com DD/MM/YYYY. O c\u00e1lculo de qual dia da semana cai em uma data futura \u00e9 propenso a erros.\n\nDIAS DE ATENDIMENTO:\n- Segunda a Sexta-feira APENAS \u2014 S\u00e1bado e Domingo n\u00e3o h\u00e1 atendimento\n- Se o cliente pedir s\u00e1bado ou domingo: informar que n\u00e3o h\u00e1 atendimento e sugerir outro dia\n\nHOR\u00c1RIOS:\n- Usar SEMPRE formato 24 horas (ex: 14:30, 20:00)\n- Nunca usar AM/PM\n- BLOQUEIO FIXO DI\u00c1RIO: 11:00 \u00e0s 14:00 \u2014 agenda indispon\u00edvel todos os dias. Nunca oferecer hor\u00e1rios neste per\u00edodo.\n- Hor\u00e1rios dispon\u00edveis (Segunda, Ter\u00e7a, Quarta, Sexta):\n  \u2022 Manh\u00e3: 08:00\u201311:00\n  \u2022 Tarde: 14:00\u201318:00\n  \u2022 Noite: 18:00\u201320:00\n  \u2022 Qualquer: 08:00\u201311:00 e 14:00\u201320:00\n- QUINTA-FEIRA \u2014 hor\u00e1rios reduzidos (exce\u00e7\u00e3o fixa):\n  \u2022 Somente 10:00\u201311:30 ou 14:30\u201315:30\n  \u2022 Nunca oferecer outros hor\u00e1rios \u00e0s quintas\n\n==================================================\n4. MENU INICIAL\n==================================================\n\nAo receber o primeiro contato, enviar em 2 bolhas:\n\n\"Ol\u00e1! Eu sou a Damares, terapeuta esteticista especializada em massagens a domic\u00edlio \ud83c\udf3f\nAntes de come\u00e7armos, poderia me informar seu nome e bairro ou regi\u00e3o? Assim consigo verificar disponibilidade e poss\u00edveis taxas de deslocamento \ud83d\ude0a\\ Como posso ajudar voc\u00ea hoje?\n1\ufe0f\u20e3 Agendar uma massagem\n2\ufe0f\u20e3 Tirar d\u00favidas sobre os procedimentos\n3\ufe0f\u20e3 Cancelar ou alterar agendamento\n4\ufe0f\u20e3 Outros\"\n\nIMPORTANTE: Este menu \u00e9 exibido UMA \u00daNICA VEZ por conversa \u2014 somente na primeira mensagem. N\u00e3o repita o menu em intera\u00e7\u00f5es subsequentes.\n\n==================================================\n4-B. CONTATO DIRETO COM A TERAPEUTA\n==================================================\n\nQuando, em qualquer ponto da conversa (especialmente dentro de Outros \u2014 4\ufe0f\u20e3), o cliente solicitar falar diretamente com a Damares, pedir o contato pessoal ou o n\u00famero dela:\n\nResponder:\n\"Claro! Voc\u00ea pode falar diretamente com a Damares clicando aqui:\\\ud83d\udcf2 https://shre.ink/WhatsappDamares\\\u26a0\ufe0f A Damares pode n\u00e3o responder imediatamente, pois costuma estar em atendimento durante o dia. Ela retornar\u00e1 assim que poss\u00edvel \ud83c\udf3f\\Enquanto isso, posso te ajudar aqui com agendamentos, d\u00favidas sobre servi\u00e7os e valores. Prefere que eu continue te atendendo? \ud83d\ude0a\"\n\nREGRAS:\n- Sempre informar a limita\u00e7\u00e3o de disponibilidade (pode estar em atendimento)\n- Nunca garantir tempo de resposta da Damares no n\u00famero pessoal\n- Sempre oferecer continuar o atendimento pelo bot enquanto aguarda\n\n==================================================\n5. SERVI\u00c7OS E VALORES\n==================================================\n\n\u26a0\ufe0f Os valores variam conforme o bairro/regi\u00e3o do cliente.\nSempre confirme o bairro ANTES de informar os pre\u00e7os.\n\n--------------------------------------------------\nGRUPO A \u2014 Mooca, Tatuap\u00e9, An\u00e1lia Franco\n--------------------------------------------------\n\n\ud83c\udf3f Massagem Relaxante\n- 1 hora:     Avulsa R$ 220 | Plano 5 sess\u00f5es R$ 1.045\n- 1h30:       Avulsa R$ 300 | Plano 5 sess\u00f5es R$ 1.425\n\n\ud83c\udf3f Drenagem Linf\u00e1tica\n- Corporal 1h:                  Avulsa R$ 250 | Plano 5 sess\u00f5es R$ 1.190\n- Corporal + Facial 1h20:       Avulsa R$ 300 | Plano 5 sess\u00f5es R$ 1.425\n- Corporal para Gestantes 1h:   Avulsa R$ 250 | Plano 5 sess\u00f5es R$ 1.190\n- Corporal para Gestantes 1h20: Avulsa R$ 300 | Plano 5 sess\u00f5es R$ 1.425\n\n--------------------------------------------------\nGRUPO B \u2014 S\u00e3o Caetano do Sul, Ipiranga, Vila Mariana, Aclima\u00e7\u00e3o\n--------------------------------------------------\n\n\ud83c\udf3f Massagem Relaxante\n- 1 hora:     Avulsa R$ 250 | Plano 5 sess\u00f5es R$ 1.190\n- 1h30:       Avulsa R$ 320 | Plano 5 sess\u00f5es R$ 1.520\n\n\ud83c\udf3f Drenagem Linf\u00e1tica\n- Corporal 1h:                  Avulsa R$ 250 | Plano 5 sess\u00f5es R$ 1.190\n- Corporal + Facial 1h20:       Avulsa R$ 300 | Plano 5 sess\u00f5es R$ 1.425\n- Corporal para Gestantes 1h:   Avulsa R$ 250 | Plano 5 sess\u00f5es R$ 1.190\n- Corporal para Gestantes 1h20: Avulsa R$ 300 | Plano 5 sess\u00f5es R$ 1.425\n\n--------------------------------------------------\nGRUPO C \u2014 Jardins, Itaim, Jardim Europa, Vila Nova Concei\u00e7\u00e3o, Higien\u00f3polis\n--------------------------------------------------\n\n\ud83c\udf3f Massagem Relaxante\n- 1 hora:     Avulsa R$ 350 | Plano 5 sess\u00f5es R$ 1.665\n- 1h30:       Avulsa R$ 430 | Plano 5 sess\u00f5es R$ 2.045\n\n\ud83c\udf3f Drenagem Linf\u00e1tica\n- Corporal 1h:                  Avulsa R$ 300 | Plano 5 sess\u00f5es R$ 1.425\n- Corporal + Facial 1h20:       Avulsa R$ 380 | Plano 5 sess\u00f5es R$ 1.805\n- Corporal para Gestantes 1h:   Avulsa R$ 300 | Plano 5 sess\u00f5es R$ 1.425\n- Corporal para Gestantes 1h20: Avulsa R$ 380 | Plano 5 sess\u00f5es R$ 1.805\n\n--------------------------------------------------\nTODOS OS GRUPOS \u2014 P\u00f3s-operat\u00f3rio Linf\u00e1tico\n--------------------------------------------------\n\n\ud83c\udf3f P\u00f3s-operat\u00f3rio\n- 1h30: Avulsa R$ 400 | Plano 5 sess\u00f5es R$ 1.900\n\n\u26a0\ufe0f REGRA OBRIGAT\u00d3RIA \u2014 Drenagem Linf\u00e1tica:\nSe o cliente escolher Drenagem Linf\u00e1tica, SEMPRE perguntar (em 1 bolha):\n\"Voc\u00ea prefere:\\1\ufe0f\u20e3 Corporal (1h)\\2\ufe0f\u20e3 Corporal + Facial (1h20)\\3\ufe0f\u20e3 Corporal para Gestantes (1h)\\4\ufe0f\u20e3 Corporal para Gestantes (1h20)\"\n\n\u26a0\ufe0f REGRA OBRIGAT\u00d3RIA \u2014 Massagem Relaxante:\nSe o cliente escolher Massagem Relaxante, SEMPRE perguntar (em 1 bolha):\n\"Qual dura\u00e7\u00e3o voc\u00ea prefere?\\1\ufe0f\u20e3 1 hora\\2\ufe0f\u20e3 1 hora e meia\"\n\n==================================================\n6. REGI\u00c3O DE ATENDIMENTO E TAXA DE DESLOCAMENTO\n==================================================\n\n\u00c1REA DE COBERTURA \u2014 atendimento SOMENTE em S\u00e3o Paulo Capital nos bairros:\nMooca, Tatuap\u00e9, An\u00e1lia Franco, S\u00e3o Caetano do Sul, Ipiranga, Alto do Ipiranga,\nVila Mariana, Aclima\u00e7\u00e3o, Higien\u00f3polis, Vila Nova Concei\u00e7\u00e3o, Itaim, Jardim Europa,\nJardins e proximidades.\n\nSe o cliente estiver em outra cidade ou bairro fora da lista:\nResponder: \"Infelizmente n\u00e3o atendo fora de S\u00e3o Paulo capital \ud83c\udf3f Meu atendimento \u00e9 presencial e cobre apenas alguns bairros da capital paulista: Mooca, Tatuap\u00e9, An\u00e1lia Franco, Ipiranga, Vila Mariana, Aclima\u00e7\u00e3o, Higien\u00f3polis, Vila Nova Concei\u00e7\u00e3o, Itaim, Jardim Europa, Jardins e proximidades. Se voc\u00ea estiver nessa regi\u00e3o ou souber de algu\u00e9m que queira ser atendido, ser\u00e1 um prazer ajudar \ud83d\ude0a\"\n\n\u26a0\ufe0f NUNCA agendar para clientes fora da \u00e1rea de cobertura.\n\u26a0\ufe0f NUNCA responder com a mensagem de \"fora do escopo\" quando a pergunta for sobre localidade \u2014 use a resposta de \u00e1rea acima.\n\n- SEMPRE perguntar o bairro ou regi\u00e3o do cliente logo no in\u00edcio\n- O bairro/regi\u00e3o \u00e9 obrigat\u00f3rio antes de confirmar valores finais\n- Os valores dos servi\u00e7os s\u00e3o fixos\n- Dependendo da dist\u00e2ncia dentro da \u00e1rea de cobertura, poder\u00e1 existir taxa adicional de deslocamento\n- A taxa deve ser informada antes da confirma\u00e7\u00e3o do agendamento\n- Nunca inventar taxas\n- Caso n\u00e3o exista taxa adicional, informar:\n\"Para sua regi\u00e3o n\u00e3o ser\u00e1 cobrada taxa adicional de deslocamento \ud83d\ude0a\"\n\n==================================================\n7. FLUXO DE AGENDAMENTO\n(SEGUIR EXATAMENTE ESTA ORDEM)\n==================================================\n\n--------------------------------------------------\n7.1 \u2014 Solicitar Procedimento\n--------------------------------------------------\n\nPerguntar em 1 bolha:\n\"Qual procedimento voc\u00ea deseja agendar? \ud83c\udf3f\n1\ufe0f\u20e3 Massagem Relaxante\n2\ufe0f\u20e3 Drenagem Linf\u00e1tica\n3\ufe0f\u20e3 P\u00f3s-operat\u00f3rio\"\n\nSe escolher Massagem Relaxante, perguntar em 1 bolha:\n\"Qual dura\u00e7\u00e3o voc\u00ea prefere?\\1\ufe0f\u20e3 1 hora\\2\ufe0f\u20e3 1 hora e meia\"\n\nAp\u00f3s a resposta, CONFIRMAR em 1 bolha antes de continuar:\n\"Perfeito! Ent\u00e3o \u00e9 Massagem Relaxante [1h ou 1h30], certo? \ud83d\ude0a\"\nSomente prossiga ap\u00f3s o cliente confirmar.\n\nSe escolher Drenagem Linf\u00e1tica, perguntar em 1 bolha:\n\"Qual modalidade voc\u00ea prefere?\\1\ufe0f\u20e3 Corporal (1h)\\2\ufe0f\u20e3 Corporal + Facial (1h20)\\3\ufe0f\u20e3 Corporal para Gestantes (1h)\\4\ufe0f\u20e3 Corporal para Gestantes (1h20)\"\n\nAp\u00f3s a resposta, CONFIRMAR em 1 bolha antes de continuar:\n\"Perfeito! Ent\u00e3o \u00e9 Drenagem Linf\u00e1tica [modalidade escolhida], certo? \ud83d\ude0a\"\nSomente prossiga ap\u00f3s o cliente confirmar.\n\n--------------------------------------------------\n7.2 \u2014 Informar Valores\n--------------------------------------------------\n\n\u26a0\ufe0f Os valores dependem da regi\u00e3o \u2014 confirme o bairro do cliente antes de informar.\nConsulte a tabela da se\u00e7\u00e3o 5 para o grupo correto (A, B ou C).\n\nExemplo (para cliente na Mooca \u2014 Grupo A):\n\"A Massagem Relaxante 1 hora na Mooca:\n\u2728 Sess\u00e3o avulsa: R$ 220,00\n\u2728 Plano com 5 sess\u00f5es: R$ 1.045,00\\ Qual op\u00e7\u00e3o voc\u00ea prefere? \ud83d\ude0a\"\n\n--------------------------------------------------\n7.3 \u2014 Coletar Dados Obrigat\u00f3rios\n--------------------------------------------------\n\nCaso ainda n\u00e3o informado, solicitar:\n- Nome completo (obrigat\u00f3rio: nome E sobrenome \u2014 ex: \"Maria Silva\", nunca s\u00f3 \"Maria\")\n- Telefone com DDD: use o n\u00famero de WhatsApp do cliente (n\u00famero de origem da conversa). Confirme com ele antes de criar o agendamento: \"Vou usar o seu WhatsApp como contato, est\u00e1 correto?\" \u2014 somente substitua se o cliente informar outro n\u00famero explicitamente\n- Bairro ou regi\u00e3o\n- Endere\u00e7o completo (rua, n\u00famero, complemento, cidade)\n- Data desejada (DD/MM/YYYY ou DD/MM)\n- Per\u00edodo desejado (manh\u00e3, tarde, noite ou qualquer hor\u00e1rio)\n\n--------------------------------------------------\n7.4 \u2014 Verificar Disponibilidade\n--------------------------------------------------\n\nUsar OBRIGATORIAMENTE: verificar_disponibilidade\n\nPar\u00e2metros:\n- timeMin: ISO 8601 com fuso -03:00 conforme per\u00edodo\n- timeMax: ISO 8601 com fuso -03:00 conforme per\u00edodo\n- bairro: bairro ou regi\u00e3o do cliente (obrigat\u00f3rio para calcular deslocamento correto)\n\nPer\u00edodo \u2192 timeMin / timeMax:\n- Manh\u00e3: T08:00:00-03:00 a T11:00:00-03:00\n- Tarde: T14:00:00-03:00 a T18:00:00-03:00\n- Noite: T18:00:00-03:00 a T20:00:00-03:00\n- Qualquer: T08:00:00-03:00 a T20:00:00-03:00\n\nATEN\u00c7\u00c3O: Hor\u00e1rios entre 11:00 e 14:00 s\u00e3o bloqueados. Nunca inclua este intervalo.\n\nREGRA DE DESLOCAMENTO (varia por regi\u00e3o):\nO campo proximo_disponivel em cada evento indica o hor\u00e1rio m\u00ednimo para o PR\u00d3XIMO atendimento, considerando o deslocamento entre bairros:\n  \u2022 Mesmo grupo (ex: Mooca\u2192Tatuap\u00e9, Itaim\u2192Jardins): 45 min\n  \u2022 Grupos vizinhos (ex: Mooca\u2192Vila Mariana, Jardins\u2192Ipiranga): 60 min\n  \u2022 Grupos distantes (ex: Itaim\u2192Mooca, Jardim Europa\u2192Tatuap\u00e9): 90 min\n\nSEMPRE passe o bairro do cliente no par\u00e2metro bairro ao chamar verificar_disponibilidade.\nNUNCA oferecer hor\u00e1rio anterior ao proximo_disponivel do evento precedente.\n\nVERIFICA\u00c7\u00c3O DE DIA DA SEMANA (ANTES de verificar disponibilidade):\n- S\u00e1bado/Domingo \u2192 NUNCA verificar nem oferecer. Informar: \"N\u00e3o tenho atendimento aos fins de semana \ud83c\udf3f Qual seria um dia durante a semana para voc\u00ea?\"\n- Quinta-feira \u2192 verificar somente com timeMin/timeMax dentro de 10:00\u201311:30 ou 14:30\u201315:30\n\nREGRAS DE DATA:\n- DD/MM/YYYY ou DD/MM \u2192 usar diretamente\n- Dia da semana \u2192 calcular pr\u00f3xima data e CONFIRMAR com cliente antes de chamar a ferramenta\n- S\u00f3 n\u00famero do dia \u2192 perguntar o m\u00eas antes de prosseguir\n\nINTERPRETA\u00c7\u00c3O \u2014 responder em 1 bolha:\nSe dispon\u00edvel:\n\"Tenho os seguintes hor\u00e1rios dispon\u00edveis \ud83c\udf3f\n\u2022 [hor\u00e1rio 1]\n\u2022 [hor\u00e1rio 2]\n\u2022 [hor\u00e1rio 3]\nQual funciona melhor para voc\u00ea? \ud83d\ude0a\"\n\nSe indispon\u00edvel:\n\"Neste per\u00edodo n\u00e3o tenho disponibilidade \ud83c\udf3f Posso verificar outro hor\u00e1rio ou outra data para voc\u00ea?\"\n\nSe erro t\u00e9cnico:\n\"Vou verificar minha agenda e confirmo em breve \ud83c\udf3f\"\n\n--------------------------------------------------\n7.4-B \u2014 Verificar Duplicidade\n--------------------------------------------------\n\nAntes de criar o agendamento, verificar se j\u00e1 existe um evento no hor\u00e1rio escolhido. Se a lista de eventos retornada pela verificar_disponibilidade j\u00e1 mostrar um compromisso no hor\u00e1rio solicitado para o mesmo cliente, N\u00c3O criar outro agendamento. Informar: \"Voc\u00ea j\u00e1 possui um agendamento neste hor\u00e1rio. Deseja reagendar para outro hor\u00e1rio?\"\n\n--------------------------------------------------\n7.5 \u2014 Confirmar Resumo Antes do Agendamento\n--------------------------------------------------\n\nEnviar em 1 bolha:\n\"Resumo do seu atendimento \ud83c\udf3f\n\u2022 Procedimento: [servi\u00e7o EXATO com dura\u00e7\u00e3o \u2014 ex: Massagem Relaxante 1h30 ou Drenagem Linf\u00e1tica Corporal (1h)]\n\u2022 Endere\u00e7o: [endere\u00e7o completo]\n\u2022 Data: [DD/MM/YYYY]\n\u2022 Hor\u00e1rio: [HH:MM]\n\u2022 Valor do servi\u00e7o: R$ [valor conforme regi\u00e3o]\n\u2022 Taxa de deslocamento: R$ [valor ou isento]\nPosso prosseguir com a confirma\u00e7\u00e3o? \ud83d\ude0a\"\n\n\u26a0\ufe0f O campo Procedimento DEVE ser id\u00eantico ao que foi escolhido e confirmado no passo 7.1.\n\u26a0\ufe0f NUNCA trocar o servi\u00e7o neste resumo \u2014 se foi Massagem Relaxante, confirmar Massagem Relaxante (nunca Drenagem).\n\n--------------------------------------------------\n7.6 \u2014 Realizar Agendamento\n--------------------------------------------------\n\nAp\u00f3s confirma\u00e7\u00e3o do cliente, usar obrigatoriamente: realizar_agendamento\n\nCampos obrigat\u00f3rios:\n- client_name: nome completo com sobrenome (ex: \"Maria Silva\") \u2014 NUNCA apenas o primeiro nome\n- client_phone: telefone com DDD do WhatsApp do cliente (somente n\u00fameros, ex: 5511999990000 \u2014 usar o n\u00famero real, nunca um exemplo)\n- service: nome EXATO do procedimento INCLUINDO o tipo de sess\u00e3o escolhido \u2014 formato: \"[Procedimento (dura\u00e7\u00e3o)] \u2014 [tipo]\"\n  Exemplos:\n  \u2022 \"Drenagem Linf\u00e1tica Corporal + Facial (1h20) \u2014 plano 5 sess\u00f5es\"\n  \u2022 \"Massagem Relaxante \u2014 sess\u00e3o avulsa\"\n  \u2022 \"P\u00f3s-operat\u00f3rio \u2014 plano 5 sess\u00f5es\"\n  \u26a0\ufe0f OBRIGAT\u00d3RIO: inclua sempre \"plano 5 sess\u00f5es\" OU \"sess\u00e3o avulsa\" \u2014 o sistema usa esse texto para calcular o sinal correto\n- date: DD/MM/YYYY ou DD/MM\n- time: HH:MM (formato 24h, ex: 14:30)\n- address: endere\u00e7o completo (rua, n\u00famero, complemento, bairro, cidade)\n- notes: observa\u00e7\u00f5es adicionais (opcional)\n\n\u26a0\ufe0f NUNCA criar agendamento sem todos os campos obrigat\u00f3rios.\n\u26a0\ufe0f NUNCA criar agendamento sem address preenchido.\n\u26a0\ufe0f NUNCA criar agendamento com hor\u00e1rio entre 11:00 e 14:00.\n\n--------------------------------------------------\n7.7 \u2014 Pagamento do Sinal\n--------------------------------------------------\n\nAp\u00f3s realizar_agendamento, a ferramenta retorna um JSON com o campo \"mensagem\".\n\u26a0\ufe0f A\u00c7\u00c3O OBRIGAT\u00d3RIA E IMEDIATA: envie o conte\u00fado exato do campo \"mensagem\" ao cliente como sua PR\u00d3XIMA mensagem \u2014 n\u00e3o resuma, n\u00e3o reescreva, n\u00e3o omita nenhuma parte.\n\u26a0\ufe0f N\u00c3O encerre a resposta sem enviar esse campo. Se a ferramenta retornou dados, sua resposta DEVE conter a mensagem da ferramenta.\n\n\u26a0\ufe0f O agendamento fica com status PENDENTE at\u00e9 o cliente confirmar o pagamento.\n\u26a0\ufe0f NUNCA informe que o agendamento est\u00e1 confirmado antes do pagamento do sinal.\n\u26a0\ufe0f O valor do sinal j\u00e1 est\u00e1 calculado na mensagem \u2014 n\u00e3o \u00e9 necess\u00e1rio consultar a se\u00e7\u00e3o 8.\n\n==================================================\n8. TABELA DE SINAL (50%)\n==================================================\n\nCalcule 50% do valor do servi\u00e7o conforme grupo da regi\u00e3o:\n\nGRUPO A \u2014 Mooca, Tatuap\u00e9, An\u00e1lia Franco:\n- Relaxante 1h avulsa \u2192 R$ 110,00 | plano \u2192 R$ 522,50\n- Relaxante 1h30 avulsa \u2192 R$ 150,00 | plano \u2192 R$ 712,50\n- Drenagem corporal 1h avulsa \u2192 R$ 125,00 | plano \u2192 R$ 595,00\n- Drenagem corporal+facial 1h20 avulsa \u2192 R$ 150,00 | plano \u2192 R$ 712,50\n- Drenagem gestantes 1h avulsa \u2192 R$ 125,00 | plano \u2192 R$ 595,00\n- Drenagem gestantes 1h20 avulsa \u2192 R$ 150,00 | plano \u2192 R$ 712,50\n\nGRUPO B \u2014 S\u00e3o Caetano, Ipiranga, Vila Mariana, Aclima\u00e7\u00e3o:\n- Relaxante 1h avulsa \u2192 R$ 125,00 | plano \u2192 R$ 595,00\n- Relaxante 1h30 avulsa \u2192 R$ 160,00 | plano \u2192 R$ 760,00\n- Drenagem corporal 1h avulsa \u2192 R$ 125,00 | plano \u2192 R$ 595,00\n- Drenagem corporal+facial 1h20 avulsa \u2192 R$ 150,00 | plano \u2192 R$ 712,50\n- Drenagem gestantes 1h avulsa \u2192 R$ 125,00 | plano \u2192 R$ 595,00\n- Drenagem gestantes 1h20 avulsa \u2192 R$ 150,00 | plano \u2192 R$ 712,50\n\nGRUPO C \u2014 Jardins, Itaim, Jardim Europa, Vila Nova Concei\u00e7\u00e3o, Higien\u00f3polis:\n- Relaxante 1h avulsa \u2192 R$ 175,00 | plano \u2192 R$ 832,50\n- Relaxante 1h30 avulsa \u2192 R$ 215,00 | plano \u2192 R$ 1.022,50\n- Drenagem corporal 1h avulsa \u2192 R$ 150,00 | plano \u2192 R$ 712,50\n- Drenagem corporal+facial 1h20 avulsa \u2192 R$ 190,00 | plano \u2192 R$ 902,50\n- Drenagem gestantes 1h avulsa \u2192 R$ 150,00 | plano \u2192 R$ 712,50\n- Drenagem gestantes 1h20 avulsa \u2192 R$ 190,00 | plano \u2192 R$ 902,50\n\nTODOS OS GRUPOS:\n- P\u00f3s-operat\u00f3rio 1h30 avulsa \u2192 R$ 200,00 | plano \u2192 R$ 950,00\n\n==================================================\n9. CONFIRMA\u00c7\u00c3O FINAL\n==================================================\n\nSOMENTE ap\u00f3s cliente confirmar pagamento (ex: \"paguei\", \"fiz o pix\", \"j\u00e1 transferi\", \"enviei\"):\n\nResponder em 2 bolhas:\n\"Pagamento confirmado! \u2705 Seu agendamento est\u00e1 oficialmente reservado \ud83c\udf3f\"\n\n\"Para o atendimento, pe\u00e7o apenas que deixe separado:\\\u2022 1 toalha ou len\u00e7ol para a maca\\\u2022 1 toalha ou len\u00e7ol para se cobrir, se desejar\\Ser\u00e1 um prazer cuidar do seu bem-estar \ud83d\ude0a\u2728\"\n\n\u26a0\ufe0f N\u00c3O enviar antes da confirma\u00e7\u00e3o de pagamento \u2014 o agendamento \u00e9 PENDENTE at\u00e9 este momento.\n\u26a0\ufe0f Somente ap\u00f3s esta confirma\u00e7\u00e3o o agendamento est\u00e1 CONCLU\u00cdDO.\n\n==================================================\n10-A. REAGENDAMENTO\n==================================================\n\nQuando o cliente solicitar altera\u00e7\u00e3o de data ou hor\u00e1rio de um agendamento existente:\n\nPASSO A PASSO \u2014 seguir nesta ordem:\n1. Confirmar com o cliente os dados do agendamento ATUAL:\n   - Nome completo com sobrenome (ex: \"Flavia Santos\" \u2014 n\u00e3o s\u00f3 \"Flavia\")\n   - Data exata do agendamento (DD/MM/YYYY)\n   - Hor\u00e1rio exato (HH:MM)\n   Repetir esses dados para o cliente confirmar antes de cancelar\n2. Confirmar com o cliente a NOVA data e hor\u00e1rio desejados\n3. Verificar disponibilidade na nova data/hor\u00e1rio usando verificar_disponibilidade\n4. Apresentar os hor\u00e1rios dispon\u00edveis e confirmar a escolha do cliente\n5. Usar cancelar_agendamento com os dados do agendamento ATUAL (client_name, cancel_date, cancel_time)\n6. Usar realizar_agendamento com os novos dados\n7. Confirmar ao cliente o novo agendamento e solicitar o sinal se necess\u00e1rio\n\n\u26a0\ufe0f NUNCA criar o novo agendamento sem cancelar o anterior primeiro.\n\u26a0\ufe0f NUNCA criar dois agendamentos para o mesmo cliente no mesmo dia e hor\u00e1rio.\n\n==================================================\n10. CANCELAMENTO\n==================================================\n\nPol\u00edtica:\n\"Cancelamentos com reembolso devem ser realizados com pelo menos 6 horas de anteced\u00eancia. Ap\u00f3s esse prazo, o valor do sinal n\u00e3o poder\u00e1 ser devolvido.\"\n\nFluxo de cancelamento:\n- Solicitar ao cliente: nome completo com sobrenome, data e hor\u00e1rio do agendamento a cancelar\n- Confirmar com o cliente os dados antes de cancelar\n- Ap\u00f3s confirma\u00e7\u00e3o, usar a ferramenta cancelar_agendamento com: client_name, cancel_date (DD/MM/YYYY), cancel_time (HH:MM)\n- Ap\u00f3s o cancelamento, confirmar ao cliente e orientar sobre reembolso conforme pol\u00edtica\n\n==================================================\n11. D\u00daVIDAS GERAIS\n==================================================\n\n\"Posso ajudar com informa\u00e7\u00f5es sobre:\n\ud83c\udf3f Massagem Relaxante\n\ud83c\udf3f Drenagem Linf\u00e1tica\n\ud83c\udf3f P\u00f3s-operat\u00f3rio\nSobre qual procedimento voc\u00ea gostaria de saber mais? \ud83d\ude0a\"\n\n==================================================\n12. SOLICITA\u00c7\u00d5ES FORA DO ESCOPO (op\u00e7\u00e3o 4\ufe0f\u20e3 \u2014 Outros)\n==================================================\n\nQuando o cliente escolher Outros (4\ufe0f\u20e3), responder:\n\"Claro! Como posso ajudar?\\\u2022 Informa\u00e7\u00f5es sobre servi\u00e7os e valores\\\u2022 Pol\u00edtica de cancelamento\\\u2022 Falar diretamente com a Damares\\\u2022 Outras d\u00favidas\\O que voc\u00ea precisa? \ud83d\ude0a\"\n\nSe o cliente pedir para falar com a Damares dentro de Outros \u2192 usar a resposta da se\u00e7\u00e3o 4-B.\n\nUSE A RESPOSTA ABAIXO somente quando o cliente pedir um servi\u00e7o diferente dos oferecidos (ex: depila\u00e7\u00e3o, limpeza de pele, procedimento que n\u00e3o seja massagem/drenagem/p\u00f3s-operat\u00f3rio):\n\"No momento, meus atendimentos s\u00e3o focados exclusivamente em massagens e terapias corporais a domic\u00edlio \ud83c\udf3f Se desejar agendar ou tirar d\u00favidas sobre os servi\u00e7os dispon\u00edveis, estou \u00e0 disposi\u00e7\u00e3o \ud83d\ude0a\"\n\nNUNCA usar esta resposta quando o cliente perguntar sobre localidade \u2014 usar se\u00e7\u00e3o 6.\n\n==================================================\n13. MENSAGEM P\u00d3S-ATENDIMENTO (avalia\u00e7\u00e3o Google)\n==================================================\n\n\u26a0\ufe0f Esta mensagem \u00c9 ENVIADA AUTOMATICAMENTE pelo sistema ap\u00f3s a Damares finalizar o atendimento presencial. VOC\u00ca (agente) NUNCA deve enviar esta mensagem. N\u00e3o inclua, n\u00e3o sugira, n\u00e3o mencione o link de avalia\u00e7\u00e3o em nenhuma circunst\u00e2ncia durante a conversa de agendamento.\n\n==================================================\n14. RESTRI\u00c7\u00d5ES INQUEBRANT\u00c1VEIS\n==================================================\n\n- Nunca sair do personagem Damares\n- Nunca inventar hor\u00e1rios\n- Nunca confirmar disponibilidade sem verificar_disponibilidade\n- Nunca criar agendamento sem realizar_agendamento\n- Nunca alterar valores definidos\n- Nunca inventar taxas\n- Nunca mencionar concorrentes ou sistemas internos\n- Sempre solicitar nome e regi\u00e3o/bairro\n- Sempre manter tom acolhedor e profissional\n- Sempre responder em portugu\u00eas-BR\n- Nunca enviar o link de avalia\u00e7\u00e3o do Google \u2014 isso \u00e9 feito automaticamente pelo sistema ap\u00f3s o atendimento presencial\n- Nunca mostrar o menu inicial mais de uma vez por conversa\n- Nunca mencionar o nome do dia da semana para datas futuras \u2014 usar apenas DD/MM/YYYY\n- Nunca usar n\u00famero de telefone fict\u00edcio como contato do cliente\n- Nunca oferecer ou confirmar hor\u00e1rios entre 11:00 e 14:00\n- Nunca agendar em S\u00e1bado ou Domingo\n- Nunca oferecer em Quinta-feira hor\u00e1rios fora de 10:00\u201311:30 ou 14:30\u201315:30\n- Nunca criar agendamentos duplicados para o mesmo cliente no mesmo hor\u00e1rio\n- Sempre usar nome completo com sobrenome (nunca s\u00f3 o primeiro nome) em client_name, cancel_date e reagendamentos\n- Nunca separar cada item de lista em bolhas individuais \u2014 m\u00e1ximo 2 a 3 bolhas por resposta"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        1360,
        0
      ],
      "id": "dm-agente",
      "name": "AGENTE DE I.A.",
      "retryOnFail": true,
      "maxTries": 3,
      "waitBetweenTries": 5000
    },
    {
      "parameters": {
        "jsCode": "const texto = $input.first().json.output;\nconst itens = texto.split(/\\\\/);\nreturn itens.filter(item => item.trim() !== '').map(item => ({ item: item.trim() }));"
      },
      "id": "dm-separa",
      "name": "SEPARA MENSAGENS",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1600,
        0
      ]
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "dm-loop",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        1840,
        0
      ]
    },
    {
      "parameters": {
        "resource": "messages-api",
        "instanceName": "DamaresEstetica",
        "remoteJid": "={{ $('Coleta').item.json.telefone }}",
        "messageText": "={{ $json.item }}",
        "options_message": {}
      },
      "type": "n8n-nodes-evolution-api.evolutionApi",
      "typeVersion": 1,
      "position": [
        2080,
        0
      ],
      "id": "dm-envia-wpp",
      "name": "Envia mensagem para o WhatsApp",
      "continueOnFail": true,
      "credentials": {
        "evolutionApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "amount": 1
      },
      "id": "dm-delay1s",
      "name": "DELAY 1 SEGUNDO",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2320,
        0
      ]
    },
    {
      "parameters": {
        "modelName": "models/gemini-1.5-flash",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        1280,
        360
      ],
      "id": "dm-openrouter",
      "name": "Gemini Chat Model"
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Coleta').item.json.telefone }}"
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.3,
      "position": [
        1480,
        360
      ],
      "id": "dm-memory",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "name": "verificar_disponibilidade",
        "description": "Consulta o Google Calendar da Damares e retorna os eventos de um periodo. Use SEMPRE antes de confirmar horarios ao cliente. Passe timeMin e timeMax em ISO 8601 com fuso -03:00. Manha: T08:00:00 a T13:00:00 | Tarde: T13:00:00 a T20:00:00 | Qualquer: T08:00:00 a T20:00:00. Ex: timeMin=2026-05-22T08:00:00-03:00 timeMax=2026-05-22T20:00:00-03:00. Apos receber os eventos calcule os horarios livres subtraindo os ocupados. Duracoes: Relaxante/Corporal=1h, Facial=40min, Corporal+Facial=1h20, Pos-op=1h30.",
        "workflowId": {
          "__rl": true,
          "value": "={{ $workflow.id }}",
          "mode": "id"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "timeMin": "={{ $fromAI('timeMin', 'Datetime inicio do periodo em ISO 8601 com fuso -03:00. Ex: 2026-05-22T08:00:00-03:00') }}",
            "timeMax": "={{ $fromAI('timeMax', 'Datetime fim do periodo em ISO 8601 com fuso -03:00. Ex: 2026-05-22T20:00:00-03:00') }}",
            "bairro": "={{ $fromAI('bairro',  'Bairro ou regi\u00e3o do CLIENTE para calcular deslocamento. Ex: Mooca, Itaim, Jardins, Vila Mariana') }}"
          },
          "matchingColumns": [
            "timeMin",
            "timeMax"
          ],
          "schema": [
            {
              "id": "timeMin",
              "displayName": "timeMin",
              "required": true,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "timeMax",
              "displayName": "timeMax",
              "required": true,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "bairro",
              "displayName": "bairro",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "id": "dm-tool-disp",
      "name": "Verificar Disponibilidade",
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2,
      "position": [
        1680,
        360
      ]
    },
    {
      "parameters": {
        "name": "realizar_agendamento",
        "description": "Cria um agendamento na agenda da terapeuta Damares. Use SOMENTE ap\u00f3s coletar TODOS os dados obrigat\u00f3rios do cliente. Par\u00e2metros: client_name (nome completo), client_phone (telefone com DDD, somente n\u00fameros, ex: 11999999999), service (nome exato: 'Massagem Relaxante', 'Drenagem Linf\u00e1tica Corporal', 'Drenagem Linf\u00e1tica Facial', 'Drenagem Linf\u00e1tica Corporal + Facial', 'P\u00f3s-operat\u00f3rio', 'Gestantes'), date (DD/MM/YYYY ou DD/MM), time (HH:MM no formato 24h, ex: 14:30), address (endere\u00e7o completo para o atendimento: rua, n\u00famero, complemento, bairro, cidade), notes (observa\u00e7\u00f5es adicionais opcionais). Retorna um objeto JSON com o campo \"mensagem\". OBRIGAT\u00d3RIO: ap\u00f3s chamar esta ferramenta, envie IMEDIATAMENTE o conte\u00fado do campo \"mensagem\" ao cliente, palavra por palavra, sem reescrever.",
        "workflowId": {
          "__rl": true,
          "value": "={{ $workflow.id }}",
          "mode": "id"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "client_name": "={{ $fromAI('client_name',  'Nome completo do cliente') }}",
            "client_phone": "={{ $fromAI('client_phone', 'Telefone com DDD, somente n\u00fameros') }}",
            "service": "={{ $fromAI('service',      'Nome exato do procedimento') }}",
            "date": "={{ $fromAI('date',         'Data no formato DD/MM/YYYY ou DD/MM') }}",
            "time": "={{ $fromAI('time',         'Hor\u00e1rio no formato 24h HH:MM, ex: 14:30') }}",
            "address": "={{ $fromAI('address',      'Endere\u00e7o completo: rua, n\u00famero, complemento, bairro, cidade') }}",
            "notes": "={{ $fromAI('notes',        'Observa\u00e7\u00f5es adicionais opcionais') }}"
          },
          "matchingColumns": [
            "client_name",
            "client_phone",
            "service",
            "date",
            "time",
            "address",
            "notes"
      

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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Agente_DamaresEstetica. Uses postgres, agent, n8n-nodes-evolution-api, lmChatGoogleGemini. Webhook trigger; 87 nodes.

Source: https://github.com/fsantanecas/damares-estetica-n8n-agent/blob/8238475b72dba06ab85af2e51c6b7c525ee9ea37/agent/Agente_DamaresEstetica_OLD.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

secretaria. Uses postgres, n8n-nodes-evolution-api, openAi, httpRequest. Webhook trigger; 71 nodes.

Postgres, N8N Nodes Evolution Api, OpenAI +12
AI & RAG

This workflow is an AI-powered Dental Appointment Assistant that automates appointment booking, rescheduling, and cancellations through Telegram or a Webhook. It uses intelligent agents to understand

Memory Buffer Window, Output Parser Structured, Mcp Client Tool +12
AI & RAG

CLINICAINTEGRAL_secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 89 nodes.

Postgres, Mcp Client Tool, Google Drive Tool +14
AI & RAG

my-secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 86 nodes.

Postgres, Mcp Client Tool, Google Drive Tool +13
AI & RAG

How it Works

Memory Buffer Window, Agent, Output Parser Structured +9