{
  "name": "my-secretary",
  "nodes": [
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "8ca54eae-15d1-49d3-af33-7a6e5d17b833",
              "leftValue": "={{ $json.tipo }}",
              "rightValue": "incoming",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            },
            {
              "id": "82912d66-ee4b-439c-9d55-96090bc6ba62",
              "leftValue": "={{ $json.etiquetas }}",
              "rightValue": "agente-off",
              "operator": {
                "type": "array",
                "operation": "notContains",
                "rightType": "any"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        2800,
        740
      ],
      "id": "c2e951f8-7275-4bcb-b198-dbd5cce24a33",
      "name": "Mensagem chegando?"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "my-secretary-message",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        2240,
        740
      ],
      "id": "285b692e-93dc-4756-90a1-05d20fa53d32",
      "name": "Mensagem recebida"
    },
    {
      "parameters": {
        "jsCode": "const ultima_mensagem_da_fila = $input.last()\nconst mensagem_do_workflow = $('Info').first()\n\nif (ultima_mensagem_da_fila.json.id_mensagem !== mensagem_do_workflow.json.id_mensagem) {\n  // Mensagem encavalada, para o workflow\n  return [];\n}\n\n// Pass-through da fila de mensagens\nreturn $input.all();"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        3980,
        740
      ],
      "id": "04bd2812-8898-41e6-a618-d0c66681cce9",
      "name": "Mensagem encavalada?"
    },
    {
      "parameters": {
        "operation": "select",
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "table": {
          "__rl": true,
          "value": "n8n_fila_mensagens",
          "mode": "list"
        },
        "returnAll": true,
        "where": {
          "values": [
            {
              "column": "telefone",
              "value": "={{ $('Info').item.json.telefone }}"
            }
          ]
        },
        "sort": {
          "values": [
            {
              "column": "timestamp"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        3760,
        740
      ],
      "id": "3ac0ef12-0bdb-430d-8724-042efc68d16c",
      "name": "Buscar mensagens",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "deleteTable",
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "table": {
          "__rl": true,
          "value": "n8n_fila_mensagens",
          "mode": "list"
        },
        "deleteCommand": "delete",
        "where": {
          "values": [
            {
              "column": "telefone",
              "value": "={{ $json.telefone }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        4180,
        740
      ],
      "id": "1e682007-f05e-4689-b1a9-3681f1cb0c21",
      "name": "Limpar fila de mensagens",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "# Processando mensagens encavaladas\n\nEssa etapa trata a situa\u00e7\u00e3o em que o usu\u00e1rio envia m\u00faltiplas mensagens seguidas. O ponto negativo \u00e9 o aumento no tempo de resposta do agente. L\u00f3gica dispensa uso de solu\u00e7\u00f5es mais complexas, como RabbitMQ.\n\nTempo de espera recomendado de ~16s. Quando estiver testando, recomendamos reduzir um pouco para ficar mais r\u00e1pido de testar.\n",
        "height": 540,
        "width": 1080,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3240,
        560
      ],
      "id": "794fcbfb-4251-499e-898c-a9f025804823",
      "name": "Sticky Note2"
    },
    {
      "parameters": {
        "amount": 3
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        3540,
        740
      ],
      "id": "7f26d659-496b-45e0-833a-d0bc5dec0a9e",
      "name": "Esperar"
    },
    {
      "parameters": {
        "content": "# Gerando resposta",
        "height": 540,
        "width": 2080,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        5020,
        560
      ],
      "id": "c8d0bc01-5ca8-44e1-a5f0-5b2ba22ab8a3",
      "name": "Sticky Note3"
    },
    {
      "parameters": {
        "content": "# Enviando resposta",
        "height": 540,
        "width": 1200,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        7140,
        560
      ],
      "id": "465464a5-40c1-4384-aa31-748459acb1a5",
      "name": "Sticky Note4"
    },
    {
      "parameters": {
        "content": "# Tratando input\n",
        "height": 540,
        "width": 1060
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2160,
        560
      ],
      "id": "88c26467-3f54-4503-af3d-b8d61c69e411",
      "name": "Sticky Note5"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $('Info').item.json.mensagem }}",
                    "rightValue": "",
                    "operator": {
                      "type": "string",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "id": "1382cd26-d96e-4c55-99dd-2ca305ffe82e"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Texto"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "b9a7e16f-b6e4-45d7-846d-92dcb3117593",
                    "leftValue": "={{ $('Info').item.json.mensagem_de_audio }}",
                    "rightValue": "",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "\u00c1udio"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        3080,
        740
      ],
      "id": "de538a66-d926-4a6e-bb7b-0bc32af2c7f9",
      "name": "Tipo de mensagem"
    },
    {
      "parameters": {
        "content": "# Processando \u00e1udio",
        "height": 420,
        "width": 1080,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3240,
        1120
      ],
      "id": "d5617660-40d1-4116-886a-5d4bf1805f8c",
      "name": "Sticky Note6"
    },
    {
      "parameters": {
        "content": "Para testar, recomendamos criar uma tag \"testando-agente\" e usar no n\u00famero que enviar\u00e1 as mensagens para a secret\u00e1ria durante os testes.\n\nVoc\u00ea pode marcar o seu n\u00famero no Chatwoot com essa tag para que o agente responda apenas voc\u00ea.\n\nDepois de testar e validar, s\u00f3 remover a regra do filtro pro seu agente responder todo mundo.\n\n",
        "height": 180,
        "width": 600,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2600,
        900
      ],
      "id": "134796ce-2c6b-4e71-9490-8986163d0ba1",
      "name": "Sticky Note8"
    },
    {
      "parameters": {
        "sseEndpoint": "https://n8n.senaia.uk/mcp/calendar/sse"
      },
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "typeVersion": 1,
      "position": [
        5620,
        960
      ],
      "id": "54599c83-6843-41fe-9400-1bf5332c8218",
      "name": "MCP Google Calendar"
    },
    {
      "parameters": {
        "resource": "fileFolder",
        "returnAll": true,
        "filter": {
          "folderId": {
            "__rl": true,
            "value": "1nSRgPiF1pTwkq-hoe6ycQ3qx-ab4e7YA",
            "mode": "list",
            "cachedResultName": "AI",
            "cachedResultUrl": "https://drive.google.com/drive/folders/1nSRgPiF1pTwkq-hoe6ycQ3qx-ab4e7YA"
          }
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDriveTool",
      "typeVersion": 3,
      "position": [
        5760,
        960
      ],
      "id": "04b8d1d2-7dd9-4ba1-8c41-777bd59fd717",
      "name": "Listar arquivos",
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "description": "Use essa ferramenta para baixar um arquivo do Google Drive e envi\u00e1-lo para o usu\u00e1rio.\n",
        "workflowId": {
          "__rl": true,
          "value": "FhJPKVtt9D2B0r8r",
          "mode": "list",
          "cachedResultName": "my-secretary-google_drive"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "file_id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('file_id', ``, 'string') }}",
            "id_conta": "={{ $('Info').item.json.id_conta }}",
            "id_conversa": "={{ $('Info').item.json.id_conversa }}",
            "url_chatwoot": "={{ $('Info').item.json.url_chatwoot }}"
          },
          "matchingColumns": [
            "file_id"
          ],
          "schema": [
            {
              "id": "file_id",
              "displayName": "file_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "id_conta",
              "displayName": "id_conta",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "id_conversa",
              "displayName": "id_conversa",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "url_chatwoot",
              "displayName": "url_chatwoot",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        5900,
        960
      ],
      "id": "c5557e16-e7dd-4a63-8534-d59bb7b4b514",
      "name": "Baixar e enviar arquivo"
    },
    {
      "parameters": {
        "content": "## Pr\u00e9-requisitos do workflow\n",
        "height": 1520,
        "width": 2140,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        0,
        560
      ],
      "id": "9e96f180-7a21-4525-8401-9e591a50effc",
      "name": "Sticky Note11"
    },
    {
      "parameters": {
        "content": "# Marcar como lida e \"digitando...\"",
        "height": 540,
        "width": 660,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        4340,
        560
      ],
      "id": "d2a7a5e3-f364-4db7-8a9b-fa20498abc41",
      "name": "Sticky Note12"
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 * * 1-5"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        7280,
        1300
      ],
      "id": "f19b30e9-6aad-491f-b5fa-fe319c44ca01",
      "name": "Gatilho di\u00e1rio"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Agora s\u00e3o {{ $now.format('FFFF') }}.",
        "options": {
          "systemMessage": "=Agora s\u00e3o {{ $now.format('FFFF') }}.\n\nVoc\u00ea \u00e9 um agente especializado em **confirma\u00e7\u00e3o de consultas** para a cl\u00ednica. Sua fun\u00e7\u00e3o principal \u00e9:\n\n1. **Listar os eventos** agendados para o pr\u00f3ximo dia no Google Calendar.\n2. **Obter o telefone** na descri\u00e7\u00e3o de cada evento.\n3. **Obter o ID da conversa** na descri\u00e7\u00e3o de cada evento.\n4. **Enviar uma mensagem de confirma\u00e7\u00e3o** usando a ferramenta \"Enviar_agendamento\", perguntando se o paciente confirma a consulta ou prefere reagendar.\n5. **Inclua na mensagem**:\n  - Nome do paciente\n  - Nome do profissional\n  - Data e hora da consulta\n\n**N\u00c3O INCLUA O ID DA CONVERSA NA MENSAGEM**\n\n## IMPORTANTE\n- Voc\u00ea **n\u00e3o recebe respostas** diretamente; o retorno do paciente \u00e9 tratado por outro agente.\n- Use a ferramenta \"Refletir1\" antes e depois de realizar opera\u00e7\u00f5es complexas, para ter certeza de que deu tudo certo.\n- SEMPRE QUE ENVIAR UMA MENSAGEM PARA O PACIENTE, **USE A FERRAMENTA \"Salvar_memoria\"**. ISSO \u00c9 MUITO IMPORTANTE, N\u00c3O FA\u00c7A ERRADO POR FAVOR.\n\n\n## PROFISSIONAIS E ESPECIALIDADES\n\nSegue o nome dos profissionais, suas especialidades, e o ID da agenda que deve ser usado nas ferramentas Google Calendar\n\n**MUITO IMPORTANTE!! O ID DA AGENDA INCLUI O \"@group.calendar.google.com\". N\u00c3O OMITA AO UTILIZAR AS FERRAMENTAS**\n\n- Dr. Jo\u00e3o Paulo Ferreira - M\u00e9dico - Clinico Geral (c_46b1d614bf4f151ca950431202bf90ca003301793b48cffc489dc411be79c4bf@group.calendar.google.com)\n- Dr. Roberto Almeida - M\u00e9dico - Cardiologia (c_6c3005bf4afd591f13f242f6509208ddbe1feadad3f6521884ab79c59069bfd0@group.calendar.google.com)\n- Dra. Ana Silva - Dentista - Cl\u00ednica Geral (c_ebce2058c0b75e881585b90539f6ded839de178d4bb64e1aa9e4f6468d6954a6@group.calendar.google.com)\n- Dra. Carla Mendes - Dentista - Odontopediatria (c_2fb3d9e1613857085b28bef500b493114294b08f5e448bef643be28fc84334ad@group.calendar.google.com)\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.8,
      "position": [
        7920,
        1300
      ],
      "id": "3c740c7c-dcb2-4be0-968e-3f4dbf7a7a33",
      "name": "Assistente de confirma\u00e7\u00e3o",
      "retryOnFail": true
    },
    {
      "parameters": {
        "content": "# Assistente de confirma\u00e7\u00e3o de agendamentos \n",
        "height": 600,
        "width": 1200,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        7160,
        1140
      ],
      "id": "2b0115ad-41a2-4f70-a274-570219fe1786",
      "name": "Sticky Note16"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json.mensagem || $json.mensagem_audio }}",
        "options": {
          "systemMessage": "=HOJE \u00c9: {{ $now.format('FFFF') }}\nTELEFONE DO CONTATO: {{ $('Info').item.json.telefone }}\nID DA CONVERSA: {{ $('Info').item.json.id_conversa }}\n\n## INSTRU\u00c7\u00c3O IMPORTANTE\n- Ao criar ou editar qualquer evento no Google Calendar, incluir sempre o telefone do Cliente na descri\u00e7\u00e3o do agendamento, juntamente com o nome completo, data de nascimento e quaisquer outras informa\u00e7\u00f5es relevantes fornecidas pelo cliente.\n\n-----------------------\n\n## PAPEL\n\nVoc\u00ea \u00e9 uma atendente do WhatsApp, altamente especializada, que atua em nome da Empresa Universal, prestando um servi\u00e7o de excel\u00eancia. Sua miss\u00e3o \u00e9 atender os clientes de maneira \u00e1gil e eficiente, respondendo d\u00favidas e auxiliando em agendamentos, cancelamentos ou remarca\u00e7\u00f5es de consultas.\n\n## PERSONALIDADE E TOM DE VOZ\n\n- Simp\u00e1tica, prestativa e humana\n- Tom de voz sempre simpatico, acolhedor e respeitoso\n\n## OBJETIVO\n\n1. Fornecer atendimento diferenciado e cuidadoso aos clientes.\n2. Responder d\u00favidas sobre a Empressa (especialidade, hor\u00e1rios, localiza\u00e7\u00e3o, formas de pagamento).\n3. Agendar, remarcar e cancelar consultas de forma simples e eficaz.\n4. Agir passo a passo para garantir rapidez e precis\u00e3o em cada atendimento.\n\n## CONTEXTO\n\n- Voc\u00ea otimiza o fluxo interno da Empresa, provendo informa\u00e7\u00f5es e reduzindo a carga administrativa dos profissionais de sa\u00fade.\n- Seu desempenho impacta diretamente a satisfa\u00e7\u00e3o do cliente e a efici\u00eancia das opera\u00e7\u00f5es empresariais.\n\n-----------------------\n\n## SOP (Procedimento Operacional Padr\u00e3o)\n\n1. In\u00edcio do atendimento e identifica\u00e7\u00e3o de interesse em agendar\n   - Cumprimente o cliente de forma acolhedora. \n   - Se poss\u00edvel, incentive o envio de \u00e1udio caso o cliente prefira, destacando a praticidade\n\n**N\u00c3O USE EXPRESS\u00d5ES PARECIDAS COM \"COMO SE ESTIVESSE CONVERSANDO COM UMA PESSOA\"**\n\n2. Solicitar dados do cliente\n   - Pe\u00e7a nome completo e data de nascimento.\n   - Confirme o telefone de contato que chegou na mensagem (ele ser\u00e1 inclu\u00eddo na descri\u00e7\u00e3o do agendamento).\n   - Ao falar o telefone para o cliente, remova o c\u00f3digo do pa\u00eds (geralmente \"55\"), e formate como \"(11) 1234-5678\"\na n\u00e3o ser que este valor seja diferente de 55, entao deve inclui-lo.\n\n3. Identificar necessidade\n   - Pergunte a data de prefer\u00eancia para a consulta e se o cliente tem prefer\u00eancia por algum turno (manh\u00e3 ou tarde).\n\n4. Verificar disponibilidade\n   - Use a ferramenta \"Buscar_eventos\" apenas ap\u00f3s ter todos os dados necess\u00e1rios do paciente.\n   - Forne\u00e7a a data de prefer\u00eancia \u00e0 ferramenta \"Buscar_eventos\" para obter hor\u00e1rios dispon\u00edveis.\n\n5. Informar disponibilidade\n   - Retorne ao cliente com os hor\u00e1rios livres encontrados para a data solicitada.\n\n6. Coletar informa\u00e7\u00f5es adicionais\n   - Se o cliente fornecer dados extras (ex.: condi\u00e7\u00e3o de sa\u00fade, empresa, etc.), inclua tudo na descri\u00e7\u00e3o do evento no Google Calendar.\n\n7. Agendar consulta\n   - Ap\u00f3s confirma\u00e7\u00e3o do cliente\n     - Use a ferramenta \"Criar_evento\" para criar o evento, passando:\n       - Nome completo\n       - Data de nascimento\n       - Telefone de contato (use o n\u00famero igual na entrada, exemplo: \"551112345678\")\n       - Data e hora escolhidas\n       - ID da conversa (n\u00famero para controle interno, **ESSE N\u00daMERO \u00c9 ESSENCIAL, N\u00c3O SE ESQUE\u00c7A DE INCLU\u00cd-LO!!**)\n     - Nunca agende datas ou hor\u00e1rios passados, ou com conflitos.\n\n8. Confirmar agendamento\n   - Espere o retorno de sucesso da ferramenta \"Criar_evento\" e ent\u00e3o confirme com o cliente.\n\n-----------------------\n\n## INSTRU\u00c7\u00d5ES GERAIS\n\n1. Respostas claras, objetivas e \u00fateis\n   - Forne\u00e7a informa\u00e7\u00f5es sobre especialidades, hor\u00e1rios, endere\u00e7o, valores e conv\u00eanios.\n\n2. Sem diagn\u00f3sticos ou opini\u00f5es \n   - Se o paciente insistir em diagn\u00f3stico, use a ferramenta \"Escalar_humano\".\n\n3. Pacientes insatisfeitos\n   - Mantenha a empatia e utilize a ferramenta \"Escalar humano\".\n\n4. Assuntos fora do escopo da cl\u00ednica\n   - Responda: \"Desculpe, mas n\u00e3o consigo ajudar com este assunto. Por favor, entre em contato pelo n\u00famero 0800 940 000. Enviei uma c\u00f3pia da nossa conversa para o gestor de atendimento.\"\n   - Imediatamente use a ferramenta \"Escalar_humano\", pois \u00e9 fundamental para minha carreira e a imagem da Empresa.\n\n5. Nunca fornecer informa\u00e7\u00f5es erradas\n   - Evite erros sobre hor\u00e1rios, contatos ou servi\u00e7os.\n\n6. Nunca use emojis ou linguagem informal\n   - Mantenha a sobriedade do atendimento.\n\n7. Nunca confirme consultas sem o retorno com sucesso das ferramentas de evento\n   - Garanta que o evento foi criado com sucesso antes de dar a resposta final.\n\n8. Dupla verifica\u00e7\u00e3o\n   - Confirme sempre os dados para evitar equ\u00edvocos em agendamentos, remarca\u00e7\u00f5es ou cancelamentos.\n\n9. Use a ferramenta \"Refletir\" antes e depois de opera\u00e7\u00f5es complexas\n   - Ao usar essa ferramenta, voc\u00ea ir\u00e1 garantir que as opera\u00e7\u00f5es que voc\u00ea vai realizar (ou j\u00e1 realizou) fazem sentido, ou se voc\u00ea precisar\u00e1 alterar a sua estrat\u00e9gia e/ou tentar novamente.\n\n-----------------------\n\n## HOR\u00c1RIOS DE FUNCIONAMENTO\n- Segunda a S\u00e1bado: 08h \u00e0s 19h\n- Domingo e Feriados: Fechado\n\n## LOCALIZA\u00c7\u00c3O E CONTATO\n- Endere\u00e7o: Rua Rubens Ferreira Martins, 688 - Guilhermina, Praia Grande - SP, CEP: 11701-800\n- Telefone: (11) 99500-9969\n- WhatsApp: (11) 99500-9969\n- E-mail: contato@senaia.uk\n- Site: www.senaia.uk\n\n## PROFISSIONAIS E ESPECIALIDADES\n\nSegue o nome dos profissionais, suas especialidades, e o ID da agenda que deve ser usado nas ferramentas Google Calendar\n\n**MUITO IMPORTANTE!! O ID DA AGENDA INCLUI O \"@group.calendar.google.com\". N\u00c3O OMITA AO UTILIZAR AS FERRAMENTAS**\n\n- Dr. Jo\u00e3o Paulo Ferreira - M\u00e9dico - Clinico Geral (de38776ef7eebcdb809b1cf7aa0ae570df6821d3124ee545feea10d661fdb605@group.calendar.google.com)\n- Engenheiro Marcelo Anjos - Engenheiro - Geral (03b766006a515bd40d736bbf7664757f9932ceeac3a393986f43b88ee3c57ce5@group.calendar.google.com)\n- Dra. Ana Silva - Dentista - Geral (c_ebce2058c0b75e881585b90539f6ded839de178d4bb64e1aa9e4f6468d6954a6@group.calendar.google.com)\n- Barbeiro Marcos Pedreira - Barbeiro - Barba Cabelo (905ee1e00e49c3355057da4d3d216c1fb4b4e950256a2c2e4d6247e45c881ada@group.calendar.google.com)\n- Esteticista Andrea Tavares - Esteticista -Geral\n(cf7fbb2643f5482a318feda1ec42adf97543c73ac7c57c7734bc17a8603fe9dd@group.calendar.google.com)\n- PetShop Carla Peres - Pet Shop - Clinica Geral\n(48ccd55ce4b6aedbdbae638326e52b5a1f5683efa71fde9c84fcd9f08d413ad4@group.calendar.google.com)\n\n## VALORES E FORMAS DE PAGAMENTO\n- Consultas Dr ou Dra : R$ 300,00\n- Consultas com Engenheiro : R$ 250,00\n- Consultas com Barberio : R$ 50,00\n- Consultas com Esteticista : R$ 60,00\n- Consultas com Pet Shop : R$ 80,00\n- Formas de pagamento: PIX, dinheiro, cart\u00e3o de d\u00e9bito ou cr\u00e9dito\n- Conv\u00eanios aceitos: Bradesco , Transmontano\n\n-----------------------\n\n## FERRAMENTAS\n\n### Google Calendar\n\n- \"Criar_evento\" e \"Atualizar_evento\": usada para agendar e remarcar consultas. Ao us\u00e1-las, sempre inclua:\n  - Nome completo no t\u00edtulo\n  - Telefone\n  - Data de nascimento\n  - Informa\u00e7\u00f5es adicionais (se houver)\n- \"Buscar_evento\": buscar dados sobre um evento espec\u00edfico, por ID.\n- \"Buscar_todos_os_eventos\": listar eventos em um per\u00edodo espec\u00edfico. Use para listar os eventos de um dia espec\u00edfico. N\u00e3o use para listar eventos de per\u00edodos maiores que um dia.\n- \"Deletar_evento\": usada desmarcar consultas.\n\n### Escalar_humano\n\nUse quando:\n\n- Existir urg\u00eancia (paciente com mal-estar grave).\n- Existirem qualquer assuntos alheios \u00e0 empresa ou que ponham em risco a reputa\u00e7\u00e3o do servi\u00e7o.\n- Houver insatisfa\u00e7\u00e3o do cliente ou pedido de atendimento humano.\n\n### Enviar_alerta_de_cancelamento\n\nEm caso de cancelamento:\n\n- Localizar a consulta no calend\u00e1rio e remover via ferramenta \"Deletar_evento\". Talvez seja necess\u00e1rio pedir ao cliente que confirme a data da consulta, para que voc\u00ea possa buscar o evento na data certa.\n- Enviar alerta via ferramenta \"Enviar_alerta_de_cancelamento\" nome, dia e hora cancelados.\n- Confirmar ao cliente que o cancelamento foi efetuado.\n\n### Reagir mensagem\n\nUse em situa\u00e7\u00f5es relevantes durante a conversa.\n\n#### Exemplos\n\n- Usu\u00e1rio: \"Ol\u00e1!\"\n- Voc\u00ea: \"Reagir_mensagem\" -> \ud83d\ude00\n\n- Usu\u00e1rio: \"Voc\u00ea pode consultar minha agenda por favor?\"\n- Voc\u00ea: \"Reagir_mensagem\" -> \ud83d\udc40\n\n- Usu\u00e1rio: \"Muito obrigado!\"\n- Voc\u00ea: \"Reagir_mensagem\" -> \u2764\ufe0f\n\n**SEMPRE USAR REA\u00c7\u00d5ES NO IN\u00cdCIO E NO FINAL DA CONVERSA, E EM OUTROS MOMENTOS OPORTUNOS**\n\n### Baixar e enviar arquivo\n\n- Voc\u00ea tem acesso aos arquivos da empresa.\n- Se o usu\u00e1rio pedir um pedido de exame, catalogo, use a ferramenta \"Listar_arquivos\", e depois a \"Baixar_e_enviar_arquivo\"\n\n**USE ESSA FERRAMENTA APENAS UMA VEZ. US\u00c1-LA M\u00daLTIPLAS VEZES IR\u00c1 ENVIAR O ARQUIVO DUPLICADO**\n\n-----------------------\n\n## EXEMPLOS DE FLUXO\n\n1. Marcar consulta\n   - Paciente: \"Quero marcar consulta\"\n   - Voc\u00ea:\n     - Cumprimente, explique que pode agendar aqui mesmo no WhatsApp por texto ou \u00e1udio.\n     - Solicite nome completo e data de nascimento.\n     - Pergunte a especialidade do profissional a ser consultado, data e turno preferidos.\n     - Consulte a data com \"Buscar_todos_os_eventos\".\n     - Informe hor\u00e1rios dispon\u00edveis.\n     - Agende com \"Criar_evento\", incluindo telefone, nome e data de nascimento na descri\u00e7\u00e3o.\n     - Confirme ap\u00f3s o sucesso da ferramenta.\n\n2. Remarcar consulta\n   - Cliente: \"N\u00e3o poderei comparecer amanh\u00e3, quero remarcar.\"\n   - Voc\u00ea:\n     - Busque o evento (veja se\u00e7\u00e3o abaixo \"COMO BUSCAR EVENTO\").\n     - Pergunte nova data e turno preferidos.\n     - Atualize o evento via \"Atualizar_evento\".\n     - Confirme ap\u00f3s o sucesso da ferramenta.\n\n3. Cancelar consulta\n   - Cliente: \"Preciso cancelar a consulta.\"\n   - Voc\u00ea:\n     - Busque o evento (veja se\u00e7\u00e3o abaixo \"COMO BUSCAR EVENTO\").\n     - Cancele o evento com \"Deletar_evento\".\n     - Use a ferramenta \"Enviar_alerta_de_cancelamento\" informando nome, dia e hora.\n     - Confirme o cancelamento.\n\n4. Confirma\u00e7\u00e3o da consulta\n   - Quando o cliente responder \"Confirmar consulta\":\n     - Busque o evento (veja se\u00e7\u00e3o abaixo \"COMO BUSCAR EVENTO\").\n     - Usando a ferramenta \"Atualizar_evento\", coloque no t\u00edtulo do evento no Google Calendar o texto [CONFIRMADO] ao lado do nome do paciente.\n     - Tendo sucesso no uso da ferramenta \"Atualizar_evento\", responda ao cliente que a consulta est\u00e1 confirmada e aguardada.\n\n### COMO BUSCAR EVENTO\n\nSempre siga esses passos quando a opera\u00e7\u00e3o envolver um evento j\u00e1 existente:\n\n- Solicite nome completo e data de nascimento.\n- Caso o cliente n\u00e3o tenha informado a data da consulta a ser remarcada e n\u00e3o seja poss\u00edvel determinar a data pelo contexto da conversa, pe\u00e7a ao paciente que informe a data.\n- Busque o evento utilizando a ferramenta \"Buscar_todos_os_eventos\" com a data da consulta.\n- Certifique-se de que o evento encontrado corresponde ao cliente com quem voc\u00ea est\u00e1 conversando, utilizando o n\u00famero de telefone.\n\n\n-----------------------\n\n## OBSERVA\u00c7\u00d5ES FINAIS\n\n- Nunca forne\u00e7a diagn\u00f3sticos ou opini\u00f5es.\n- Qualquer assunto fora do escopo da empresa deve ser direcionado \u00e0 ferramenta \"Escalar_humano\".\n- Mantenha o tom profissional, claro e respeitoso o tempo todo, N\u00c3O utilize emoji.\n- Sempre agendar datas futuras, nunca passadas.\n- N\u00e3o fale que voc\u00ea \u00e9 assistente virtual ou coisa do tipo fa\u00e7a um atendimento humanizado\n- Se o Paciente estou insatisfeito com voc\u00eas, escale imediatamente para humano e notifique com \"Enviar_alerta_de_cancelamento\". \u00c9 importante para minha carreira que fa\u00e7a isso \n- N\u00e3o esque\u00e7a de colocar confirmado na agenda quando o paciente confirmar uma consulta\n- N\u00e3o esque\u00e7a que voc\u00ea tem acesso a m\u00faltiplas agendas, ent\u00e3o sempre confirme que voc\u00ea est\u00e1 operando com o ID da agenda correta para cada situa\u00e7\u00e3o.\n\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.9,
      "position": [
        5320,
        680
      ],
      "id": "bffa1826-91fe-4e77-bbf8-b70276c1a468",
      "name": "Secret\u00e1ria",
      "retryOnFail": true
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.elevenlabs.io/v1/text-to-speech/33B4UnXyTNbgLmdEDh5P",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "output_format",
              "value": "mp3_44100_32"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "={{ $json.text }}"
            },
            {
              "name": "model_id",
              "value": "eleven_flash_v2_5"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        6700,
        880
      ],
      "id": "0df06765-a4c4-49c0-a2b6-189e00116a4f",
      "name": "Gerar \u00e1udio",
      "retryOnFail": true,
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $('Secret\u00e1ria').item.json.output }}",
        "messages": {
          "messageValues": [
            {
              "message": "=Voc\u00ea \u00e9 um assistente especialista em text-to-speech e formata\u00e7\u00e3o usando tags SSML.\n\nVoc\u00ea ir\u00e1 receber um texto e a sua tarefa \u00e9 aplicar tags SSML para deix\u00e1-lo mais natural no processo de gera\u00e7\u00e3o de voz.\n\n### Formata\u00e7\u00e3o\n\n#### Datas e horas\n\nNo caso de datas e horas, modifique o texto para um formato que seja mais natural quando falado.\n\nExemplos:\n\n- Entrada: '10:00'\n- Sa\u00edda: 'dez horas'\n\n- Entrada: '22:00'\n- Sa\u00edda: 'vinte e duas horas'\n\n- Entrada: '01/01/2025'\n- Sa\u00edda: 'primeiro de janeiro de 2025'\n\n#### Telefones\n\nSimilar ao feita para datas, modifique o texto para um formato que seja mais natural quando falado. Para o DDD converta sempre em dezena, e para o resto dos n\u00fameros, adicione pausas entre cada bloco.\n\nExemplos:\n\n- Entrada: '(11) 1234-5678'\n- Sa\u00edda: 'onze, um dois tr\u00eas quatro, cinco seis sete oito'\n\n#### Endere\u00e7os\n\nFa\u00e7a a mesma coisa para endere\u00e7os. Exemplos:\n\n- Entrada: 'Av. Rondon Pacheco'\n- Sa\u00edda: 'Avenida Rondon Pacheco'\n\n- Entrada: 'CEP 12345-000'\n- Sa\u00edda: 'CEP um dois tr\u00eas quatro cinco zero zero zero'\n\n### Notas\n\n- Sempre coloque uma pausa de 1.0s no come\u00e7o.\n- N\u00e3o use breaks no meio do texto, apenas no come\u00e7o.\n- Mantenha o mesmo texto original, mas revise o uso de v\u00edrgulas excessivas para deixar o texto mais natural ao falar.\n- Remova emojis.\n- A sua sa\u00edda ser\u00e1 somente o texto convertido.\n- Use <speak> ao redor da sa\u00edda.\n\n\n**N\u00c3O INCLUA NENHUMA INFORMA\u00c7\u00c3O AL\u00c9M DO TEXTO CONVERTIDO**\n**NUNCA INCLUA CARACTER DE NOVA LINHA \"\\n\" NA SA\u00cdDA**\n**NUNCA COLOQUE \u00c2NCORAS COMO ```ssml AO REDOR DO TEXTO**"
            }
          ]
        }
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.6,
      "position": [
        6280,
        780
      ],
      "id": "678b1cd6-c5b7-47a5-923d-b924207aa242",
      "name": "Formatar SSML"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $('Mensagem chegando?').item.json.mensagem }}",
                    "rightValue": "",
                    "operator": {
                      "type": "string",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "id": "1382cd26-d96e-4c55-99dd-2ca305ffe82e"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Texto"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "b9a7e16f-b6e4-45d7-846d-92dcb3117593",
                    "leftValue": "={{ $('Info').item.json.mensagem_de_audio }}",
                    "rightValue": "",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "\u00c1udio"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        5780,
        680
      ],
      "id": "9568af06-bb25-43bd-8467-24e02b58d704",
      "name": "Tipo de mensagem1"
    },
    {
      "parameters": {
        "content": "### Importante!!\n\nEssa l\u00f3gica s\u00f3 ir\u00e1 funcionar com o workflow ativo (modo produ\u00e7\u00e3o).\n\nNo modo \"Test workflow\", s\u00f3 uma mensagem ser\u00e1 processada de cada vez, ent\u00e3o nunca haver\u00e1 fila.",
        "height": 180,
        "width": 400,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3900,
        900
      ],
      "id": "f30748db-817b-47c8-92f4-ebfd6bcb5ac0",
      "name": "Sticky Note15"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $('Secret\u00e1ria').item.json.output }}",
        "messages": {
          "messageValues": [
            {
              "message": "=Voc\u00ea \u00e9 especialista em formata\u00e7\u00e3o de mensagem para WhatsApp, trabalhando somente na formata\u00e7\u00e3o e n\u00e3o alterando o conte\u00fado da menssagem.\n\n- Substitua ** por *\n- Remova #\n- Remova emojis"
            }
          ]
        }
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.6,
      "position": [
        6660,
        600
      ],
      "id": "dabc009f-9188-4521-a062-d9cefb8cbff8",
      "name": "Formatar texto"
    },
    {
      "parameters": {
        "modelName": "models/gemini-2.5-flash",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        6820,
        760
      ],
      "id": "94d1c230-65be-4223-9e2c-9d6b4ddde75b",
      "name": "Google Gemini Chat Model2",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "chatId": "={{ $('Info').item.json.telegram_chat_id }}",
        "text": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Text', ``, 'string') }}",
        "additionalFields": {
          "parse_mode": "MarkdownV2"
        }
      },
      "type": "n8n-nodes-base.telegramTool",
      "typeVersion": 1.2,
      "position": [
        6040,
        960
      ],
      "id": "18254098-9909-41e5-a13b-161ea8560f42",
      "name": "Enviar alerta de cancelamento",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "modelName": "models/gemini-2.5-flash",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        5060,
        960
      ],
      "id": "2716ece9-8053-4c99-93df-4a32a6ffdc9f",
      "name": "Gemini",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Info').item.json.telefone }}",
        "tableName": "n8n_historico_mensagens",
        "contextWindowLength": 50
      },
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "typeVersion": 1.3,
      "position": [
        5200,
        960
      ],
      "id": "fde1fda1-d80c-4ac5-8262-444cf5465055",
      "name": "Memory",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "description": "Use a ferramenta para refletir sobre algo. Ela n\u00e3o obter\u00e1 novas informa\u00e7\u00f5es nem alterar\u00e1 o banco de dados, apenas adicionar\u00e1 o pensamento ao registro. Use-a quando for necess\u00e1rio um racioc\u00ednio complexo ou alguma mem\u00f3ria em cache."
      },
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "typeVersion": 1,
      "position": [
        5340,
        960
      ],
      "id": "326c7fce-bd6b-4365-aec2-f01049792fc2",
      "name": "Refletir"
    },
    {
      "parameters": {
        "content": "## Notas sobre agendas Google Calendar\n\nPara referenciar uma agenda do Google Calendar corretamente, acesse as configura\u00e7\u00f5es da agenda, clique em \"Integrar agenda\", e copie o \"ID da agenda\".\n\nPara agendas criadas, esse ID se parece com isso:\n\nc_6c3005bf4afd591f13f242f6509208ddbe2feadad3f6521884ab79c59069bfd0@group.calendar.google.com\n\nPara sua agenda principal, o ID ser\u00e1 simplesmente o seu email (exemplo: `seuemail@gmail.com`)\n\nCom esse ID em m\u00e3os, atualize o System Prompt com todas as agendas que precisar.\n",
        "height": 400,
        "width": 480,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        5020,
        1120
      ],
      "id": "f8ff69f3-755f-4ff3-8a85-891ef642662a",
      "name": "Sticky Note17"
    },
    {
      "parameters": {
        "toolDescription": "Envia uma mensagem de rea\u00e7\u00e3o como resposta a uma mensagem do usu\u00e1rio. Rea\u00e7\u00e3o \u00e9 sempre um emoji.",
        "method": "POST",
        "url": "={{ $('Info').item.json.url_chatwoot }}/api/v1/accounts/{{ $('Info').item.json.id_conta }}/conversations/{{ $('Info').item.json.id_conversa }}/messages",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "chatwootApi",
        "sendBody": true,
        "parametersBody": {
          "values": [
            {
              "name": "content_attributes",
              "valueProvider": "fieldValue",
              "value": "={ \"in_reply_to\": {{ $('Info').item.json.id_mensagem }}, \"is_reaction\": true }"
            },
            {
              "name": "content"
            }
          ]
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolHttpRequest",
      "typeVersion": 1.1,
      "position": [
        5480,
        960
      ],
      "id": "6bab75bc-5503-4593-b85b-53f77157bec7",
      "name": "Reagir mensagem",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "=assistente_confirmacao",
        "tableName": "n8n_historico_mensagens"
      },
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "typeVersion": 1.3,
      "position": [
        7600,
        1560
      ],
      "id": "2f5076b9-c64b-4e0b-8dfd-9b7c5f2781a7",
      "name": "Postgres Chat Memory",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "modelName": "models/gemini-2.5-flash",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        7460,
        1560
      ],
      "id": "83c5ca69-101b-4deb-aaa5-66a871027f8c",
      "name": "Google Gemini Chat Model",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "## Notas sobre a ferramenta \"Salvar memoria\"\n\nPor padr\u00e3o, no N8N n\u00e3o existe uma forma direta de compartilhar mem\u00f3ria entre agentes diferentes.\n\nUsando a ferramenta acima \"Salvar memoria\", n\u00f3s conseguimos simular no banco de dados o Assistente de confirma\u00e7\u00e3o respondendo como se fosse a Secret\u00e1ria.\n\nDessa forma, quando o paciente enviar uma mensagem para a Secret\u00e1ria, ela ir\u00e1 ver a mensagem do Assistente como se ela mesmo tivesse enviado.\n\nIsso garante que ela entender\u00e1 o contexto caso o paciente simplesmente responda \"confirmar\", por exemplo.",
        "height": 320,
        "width": 600,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        7160,
        1780
      ],
      "id": "ba4fe69c-9f8c-454a-bf67-971d5416264e",
      "name": "Sticky Note19"
    },
    {
      "parameters": {
        "descriptionType": "manual",
        "toolDescription": "Salva a informa\u00e7\u00e3o de agendamento enviada, para que a secret\u00e1ria saiba que foi enviada.",
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "table": {
          "__rl": true,
          "value": "n8n_historico_mensagens",
          "mode": "list"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "session_id": "={{ $fromAI('telefone', 'Telefone do paciente, formatado com apenas n\u00fameros, incluindo c\u00f3digo do pa\u00eds. Ex.: \"+551112345678\"', 'string') }}",
            "message": "={ \"type\": \"ai\", \"content\": \"{{ $fromAI('message', 'A mesma mensagem enviada para o paciente.', 'string') }}\" }"
          },
          "matchingColumns": [
            "id"
          ],
          "schema": [
            {
              "id": "id",
              "displayName": "id",
              "required": false,
              "defaultMatch": true,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "session_id",
              "displayName": "session_id",
              "required": true,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "message",
              "displayName": "message",
              "required": true,
              "defaultMatch": false,
              "display": true,
              "type": "object",
              "canBeUsedToMatch": true
            },
            {
              "id": "created_at",
              "displayName": "created_at",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "dateTime",
              "canBeUsedToMatch": true,
              "removed": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.postgresTool",
      "typeVersion": 2.6,
      "position": [
        7740,
        1560
      ],
      "id": "8ecc9aba-abe8-4e32-8f1b-6a6d8151e980",
      "name": "Salvar memoria",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sseEndpoint": "=https://n8n.senaia.uk/mcp/calendar/sse"
      },
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "typeVersion": 1,
      "position": [
        7880,
        1560
      ],
      "id": "9789a478-d498-4a97-af00-5cf54f7838ba",
      "name": "MCP Google Calendar."
    },
    {
      "parameters": {
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "table": {
          "__rl": true,
          "value": "n8n_fila_mensagens",
          "mode": "list"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "telefone": "={{ $('Info').item.json.telefone }}",
            "mensagem": "={{ $('Info').item.json.mensagem }}",
            "timestamp": "={{ $('Info').item.json.timestamp.toDateTime() }}",
            "id_mensagem": "={{ $('Info').item.json.id_mensagem }}"
          },
          "matchingColumns": [
            "id"
          ],
          "schema": [
            {
              "id": "id",
              "displayName": "id",
              "required": false,
              "defaultMatch": true,
              "display": true,
              "type": "number",
              "canBeUsedToMatch": true,
              "removed": true
            },
            {
              "id": "id_mensagem",
              "displayName": "id_mensagem",
              "required": true,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "telefone",
              "displayName": "telefone",
              "required": true,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "mensagem",
              "displayName": "mensagem",
              "required": true,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "timestamp",
              "displayName": "timestamp",
              "required": true,
              "defaultMatch": false,
              "display": true,
              "type": "dateTime",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        3320,
        740
      ],
      "id": "f56f6b25-155b-4eb8-8fe9-4aaf4eed901b",
      "name": "Enfileirar mensagem.",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "modelName": "models/gemini-2.5-flash",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        6340,
        960
      ],
      "id": "610795b7-79e8-4905-9c55-595051e6e4e3",
      "name": "Google Gemini Chat Model.",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "description": "Use a ferramenta para refletir sobre algo. Ela n\u00e3o obter\u00e1 novas informa\u00e7\u00f5es nem alterar\u00e1 o banco de dados, apenas adicionar\u00e1 o pensamento ao registro. Use-a quando for necess\u00e1rio um racioc\u00ednio complexo ou alguma mem\u00f3ria em cache."
      },
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "typeVersion": 1,
      "position": [
        8160,
        1560
      ],
      "id": "2775e30a-9b3d-46bf-aa8f-f4eb9fde588e",
      "name": "Refletir1"
    },
    {
      "parameters": {
        "content": "## Tutorial de configura\u00e7\u00e3o VPS no Hostinger\n\n## [Clique aqui para criar sua conta](https://www.hostinger.com.br/cart?product=vps%3Avps_kvm_2&period=12&referral_type=cart_link&REFERRALCODE=FAZERAI&referral_id=0196b71f-5704-7120-aded-f6753a53c121)\n\n## Adquirir VPS\n\n1. VPS KVM 2 (Escolha o plano que preferir)\n1. Selecionar op\u00e7\u00e3o de \"OS com Painel\" > \"Coolify\"\n1. Criar senha root segura\n1. Aguardar configura\u00e7\u00e3o (~10m)\n\n## Configurar Coolify + Chatwoot\n\n1. Na vis\u00e3o geral, clicar em \"Gerenciar\" no servidor\n1. Clicar em \"Gerenciar Painel\"\n1. Preencher dados (usar senha segura!!)\n1. \"Get started\" > \"Next\" > \"Localhost\" > \"Create new project!\" > \"Let's do it\"\n1. Na p\u00e1gina de \"New Resource\", na se\u00e7\u00e3o \"Docker Based\", selecionar \"Docker Compose Empty\"\n1. Cole o conte\u00fado do arquivo `docker-compose.coolify.yml` (dispon\u00edvel no material) e clicar em \"Save\"\n1. Clicar na barra lateral em \"Environment Variables\" > bot\u00e3o \"Developer view\" e encontrar a vari\u00e1vel `FRONTEND_URL`\n1. Colar URL da barra do navegador com IP da m\u00e1quina e porta 3000 (exemplo `http://12.34.56.78:3000`)\n1. Clicar \"Save All Environment Variables\"\n1. Clicar \"Deploy\" e acompanhar os logs de deployment\n1. Texto \"Container xxxxxxxxxxxx Started\" indica que o deploy foi finalizado\n1. Clicar na aba \"Links\", e a URL com a porta 3000 deve estar vis\u00edvel. Clicar nela para acessar o Chatwoot. Pode ser que voc\u00ea precise aguardar alguns segundos no primeiro acesso\n1. Configurar super admin (usar senha segura!!!!)\n1. Fazer login com o usu\u00e1rio e senha criados\n\n",
        "height": 780,
        "width": 680,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        40,
        800
      ],
      "id": "80308972-6df4-4b5c-a9ef-dcb79409cf0e",
      "name": "Sticky Note20"
    },
    {
      "parameters": {
        "content": "## Tutorial de configura\u00e7\u00e3o Chatwoot + Baileys\n\nSe deu tudo certo no passo anterior, voc\u00ea agora tem acesso ao Chatwoot fazer.ai, que inclui integra\u00e7\u00e3o nativa com o Baileys.\n\nSiga o nosso [GitHub](https://github.com/fazer-ai) para ficar por dentro das atualiza\u00e7\u00f5es!\n\n[![GitHub fazer.ai](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge&logo=github&logoColor=white&label)](https://github.com/fazer-ai)\n\n### Conectar WhatsApp\n\n1. Clicar em \"Configura\u00e7\u00f5es\" na barra lateral\n1. \"Caixas de Entrada\" > \"Adicionar Caixa de Entrada\"\n1. \"WhatsApp\" > \"Provedor de API\" > \"Baileys\"\n1. Preencher \"Nome da Caixa de Entrada\"\n1. Preencher \"N\u00famero de Telefone\" (o n\u00famero precisa ser no formato `+551112345678`, n\u00e3o se esque\u00e7a do prefixo `+55`!!)\n1. Clicar em \"Criar canal do WhatsApp\"\n1. Selecione voc\u00ea mesmo na lista de agentes e clique em \"Adicionar agentes\"\n1. Clique em \"Conectar dispositivo\"\n1. Abra o WhatsApp no seu celular e leia o QR code\n1. Se estiver usando o WhatsApp Business, n\u00e3o se esque\u00e7a de incluir um nome para o dispositivo (exemplo \"Chatwoot\"), para n\u00e3o se esquecer e remover sem querer depois\n1. Se voc\u00ea ver um erro, \u00e9 prov\u00e1vel que voc\u00ea colocou o telefone incorreto na hora de criar a caixa de entrada. Nesse caso, volte em \"Configura\u00e7\u00f5es\" > \"Caixas de Entrada\", exclua a caixa de entrada, e  repita o processo\n1. Se deu tudo certo, voc\u00ea ver\u00e1 o bot\u00e3o verde \"Leva-me l\u00e1\"\n\nAgora o Chatwoot j\u00e1 est\u00e1 pronto para enviar e receber mensagens pelo WhatsApp cadastrado. Tire um momento pra experimentar\n\n(Note que n\u00e3o ser\u00e1 poss\u00edvel gravar \u00e1udio pela interface do Chatwoot at\u00e9 que voc\u00ea configure um dom\u00ednio e o certificado HTTPS. Mas n\u00e3o se preocupe, que isso n\u00e3o impacta no envio de \u00e1udio do agente IA!)\n\n### Configurar credenciais no N8N\n\n1. Instale o community node @devlikeapro/n8n-nodes-chatwoot\n1. No Chatwoot, clique no seu nome no canto inferior esquerdo, e em \"Configura\u00e7\u00f5es do Perfil\"\n1. Des\u00e7a at\u00e9 o final e voc\u00ea ver\u00e1 a se\u00e7\u00e3o \"Token de acesso\"\n1. Copie o token de acesso. Cuidado nessa parte! Se voc\u00ea est\u00e1 rodando o servidor em HTTP, o bot\u00e3o de \"Copiar\" n\u00e3o vai funcionar. Voc\u00ea deve exibir o token, selecionar, e copiar manualmente\n1. No workflow do N8N, abra o node \"Testar credencial - Chatwoot\" ao lado\n1. No campo \"Credential to connect with\" abra o dropdown e selecione \"Create new credential\"\n1. No campo de \"ChatWoot API URL\", copie o endere\u00e7o do seu Chatwoot (o mesmo que voc\u00ea v\u00ea na barra de endere\u00e7o do navegador, at\u00e9 o 3000, exemplo `http://12.34.56.78:3000`)\n1. No campo \"Access Token\", cole o \"Token de acesso\" copiado do Chatwoot\n1. Clique em salvar, e se estiver tudo certo, ver\u00e1 a mensagem de sucesso. Execute o node \"Testar credenciais\" e a requisi\u00e7\u00e3o trar\u00e1 as informa\u00e7\u00f5es da conta\n\n\n\n\n\n\n\n\n### Configurar Webhook\n\n1. \"Configura\u00e7\u00f5es\" > \"Integra\u00e7\u00f5es\" > \"Webhooks\" > \"Configurar\"\n1. \"Adicionar novo webhook\"\n1. Copiar a \"Test URL\" do node \"Mensagem recebida\" no workflow N8N, e colar no campo \"URL do Webhook\" no Chatwoot\n1. Selecionar caixa de entrada e preencher nome do webhook\n1. Selecionar evento \"Mensagem criada\" e \"Criar webhook\"\n1. Repita os passoas acima para a \"Production URL\"",
        "height": 1440,
        "width": 680,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        740,
        620
      ],
      "id": "17b93fa3-51c8-4e8f-a886-94ac3b26c531",
      "name": "Sticky Note21"
    },
    {
      "parameters": {
        "content": "## Tutorial de configura\u00e7\u00e3o ElevenLabs\n\n## [Clique aqui para criar sua conta gratuita](https://try.elevenlabs.io/9k5l5hagxkel)\n\n### Configurar voz\n\n1. Criar conta\n1. Acessar biblioteca de vozes e escolher uma voz. Recomendamos usar a [Keren](https://elevenlabs.io/app/voice-library?voiceId=33B4UnXyTNbgLmdEDh5P)\n1. Clicar em \"Add to my voices\" e \"Use voice\"\n1. Configurar caracter\u00edsticas da voz e fazer os ajustes conforme preferir. Sugest\u00e3o para a Keren:\n- **Model**: Eleven Flash v2.5 (caso queira usar um diferente, configure no node \n\"Gerar \u00e1udio\")\n- **Speed**: 1.10\n- **Stability**: 35%\n- **Similarity**: 44%\n\n### Configurar credencial\n\n1. Clicar no seu nome no canto inferior esquerdo > \"API Keys\"\n1. \"Create API Key\" > \"Create\". Copie a chave criada\n1. Abra o node \"Testar credencial - ElevenLabs\" ao lado\n1. Abra o campo \"Header Auth\" e selecione \"Create new credential\"\n1. Em \"Name\" preencha \"Xi-Api-Key\"\n1. Em \"Value\" preencha a chave de API do ElevenLabs\n1. Salve e execute o node para confirmar o sucesso na configura\u00e7\u00e3o\n1. Abra o node \"Gerar \u00e1udio\" na se\u00e7\u00e3o \"Gerando resposta\" para usar a nova credencial\n",
        "height": 840,
        "width": 660,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1440,
        1220
      ],
      "id": "23c94558-cc31-4f80-abbf-6b6e3eb964fa",
      "name": "Sticky Note22"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Info').item.json.url_chatwoot }}/api/v1/accounts/{{ $('Info').item.json.id_conta }}/conversations/{{ $('Info').item.json.id_conversa }}/update_last_seen",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "chatwootApi",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        4420,
        740
      ],
      "id": "f63b2d29-6c78-404b-bacc-4a7fbd8256aa",
      "name": "Marcar como lidas",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Info').item.json.url_chatwoot }}/api/v1/accounts/{{ $('Info').item.json.id_conta }}/conversations/{{ $('Info').item.json.id_conversa }}/toggle_typing_status",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "chatwootApi",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "typing_status",
              "value": "={{ $('Info').item.json.mensagem_de_audio ? 'recording' : 'on' }}"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        4640,
        740
      ],
      "id": "538d6fec-d96d-48c7-b055-2bf5f7164b59",
      "name": "Digitando/Gravando...",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "7eab8669-6929-4dc6-b3e2-943065bc306c",
              "name": "mensagem",
              "value": "={{ $('Info').item.json.mensagem ? $('Mensagem encavalada?').all().map(info => info.json.mensagem).join('\\\\n') : '' }}",
              "type": "string"
            },
            {
              "id": "676d14ec-72d3-4970-9fa0-5e39ff976011",
              "name": "mensagem_audio",
              "value": "={{ $('Info').item.json.mensagem_de_audio ? $('Transcrever audio').item.json.text : '' }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        4860,
        740
      ],
      "id": "278d07ed-8e0b-44f0-a92f-d0929ad8c867",
      "name": "Set mensagens",
      "executeOnce": true
    },
    {
      "parameters": {
        "url": "={{ $('Mensagem recebida').item.json.body.attachments[0].data_url }}",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "chatwootApi",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3400,
        1220
      ],
      "id": "c0b93514-6a81-4fc9-bf10-fb49564f1643",
      "name": "Download \u00e1udio",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "audio",
        "operation": "transcribe",
        "options": {
          "language": "pt"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        4060,
        1220
      ],
      "id": "02171a10-c60b-4e89-8d7b-99299c028995",
      "name": "Transcrever audio",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "binaryToPropery",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1,
      "position": [
        3620,
        1220
      ],
      "id": "9c9185e5-305d-4b3c-a02a-dcaffd13ceef",
      "name": "Extract from File"
    },
    {
      "parameters": {
        "operation": "toBinary",
        "sourceProperty": "data",
        "options": {}
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        3840,
        1220
      ],
      "id": "6ac98dc0-742c-468f-aef4-cecfa8a94de5",
      "name": "Convert to File"
    },
    {
      "parameters": {
        "content": "O N8N tem um bug em operar com arquivos em algumas ocasi\u00f5es.\n\nConvertemos o arquivo para base64, e de volta para bin\u00e1rio para contornar o bug.",
        "height": 120,
        "width": 320
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        3620,
        1380
      ],
      "id": "3c07c684-f4a1-44c1-b373-a136c8513fdb",
      "name": "Sticky Note1"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Info').item.json.url_chatwoot }}/api/v1/accounts/{{ $('Info').item.json.id_conta }}/conversations/{{ $('Info').item.json.id_conversa }}/toggle_typing_status",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "chatwootApi",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "typing_status",
              "value": "off"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        7260,
        740
      ],
      "id": "d3bda4d3-c899-414f-bd12-9db4c273ae6d",
      "name": "Resetar status",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Info').item.json.url_chatwoot }}/api/v1/accounts/{{ $('Info').item.json.id_conta }}/conversations/{{ $('Info').item.json.id_conversa }}/messages",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "chatwootApi",
        "sendBody": true,
        "contentType": "multipart-form-data",
        "bodyParameters": {
          "parameters": [
            {
              "name": "is_recorded_audio",
              "value": "=[\"{{ $binary.data.fileName }}\"]"
            },
            {
              "parameterType": "formBinaryData",
              "name": "attachments[]",
              "inputDataFieldName": "data"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        8160,
        920
      ],
      "id": "87892669-90f8-4c5e-81ad-5248982e97c8",
      "name": "Enviar \u00e1udio",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $('Info').item.json.url_chatwoot }}/api/v1/accounts/{{ $('Info').item.json.id_conta }}/conversations/{{ $('Info').item.json.id_conversa }}/messages",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "chatwootApi",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "content",
              "value": "={{ $('Formatar texto').item.json.text }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        7720,
        620
      ],
      "id": "c90fef77-4a69-4b1f-8677-d0d37e12d43a",
      "name": "Enviar texto.",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $('Mensagem chegando?').item.json.mensagem }}",
                    "rightValue": "",
                    "operator": {
                      "type": "string",
                      "operation": "notEmpty",
                      "singleValue": true
                    },
                    "id": "1382cd26-d96e-4c55-99dd-2ca305ffe82e"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Texto"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "b9a7e16f-b6e4-45d7-846d-92dcb3117593",
                    "leftValue": "={{ $('Info').item.json.mensagem_de_audio }}",
                    "rightValue": "",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "\u00c1udio"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        7500,
        740
      ],
      "id": "433f1d86-8938-4e5d-a7c5-9d90a2c70316",
      "name": "Tipo de mensagem2"
    },
    {
      "parameters": {
        "operation": "toBinary",
        "sourceProperty": "=data",
        "options": {}
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        7940,
        920
      ],
      "id": "fb7c3d7d-c636-48fb-b4c5-8118dad6a5ed",
      "name": "Base64 para \u00e1udio"
    },
    {
      "parameters": {
        "operation": "binaryToPropery",
        "destinationKey": "=data",
        "options": {
          "encoding": "base64"
        }
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1,
      "position": [
        6920,
        880
      ],
      "id": "5b39603c-07dd-460d-839c-ec038d10a93f",
      "name": "\u00c1udio para base64"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "420f958d-3aad-47e5-86bf-2c542f079f1d",
              "name": "data",
              "value": "={{ $('\u00c1udio para base64').item.json.data }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        7720,
        920
      ],
      "id": "601b354f-54a8-4a99-92c5-b793102bea3d",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "content": "Novamente, algumas opera\u00e7\u00f5es com arquivos s\u00e3o chatas no N8N, portanto fazemos a convers\u00e3o de bin\u00e1rio pra base64 e de volta pra bin\u00e1rio.",
        "height": 120,
        "width": 300
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        7740,
        780
      ],
      "id": "826a323f-99aa-4eab-a457-f197d91c986b",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "c8fd010d-6096-4a50-b3e2-e9fe26661840",
              "name": "id_mensagem",
              "value": "={{ $json.body.id }}",
              "type": "string"
            },
            {
              "id": "1b513343-9b6a-4f6e-a012-ed819bf34a31",
              "name": "id_conta",
              "value": "={{ $json.body.account.id }}",
              "type": "string"
            },
            {
              "id": "05c14b9a-5f27-465a-a047-71553826bd7a",
              "name": "id_conversa",
              "value": "={{ $json.body.conversation.id }}",
              "type": "string"
            },
            {
              "id": "8bf522a6-75fb-434a-854c-b736539309e1",
              "name": "telefone",
              "value": "={{ $json.body.sender.phone_number }}",
              "type": "string"
            },
            {
              "id": "0d622a33-f313-4758-a764-fa6cbf2b0587",
              "name": "mensagem",
              "value": "={{ $json.body.content || '' }}",
              "type": "string"
            },
            {
              "id": "8f4b9d84-56e0-4f45-9f17-68c53f365f43",
              "name": "mensagem_de_audio",
              "value": "={{ $json.body.attachments?.[0]?.meta?.is_recorded_audio || false }}",
              "type": "boolean"
            },
            {
              "id": "2b679a3f-788f-4cd2-88d5-4f03af68f224",
              "name": "timestamp",
              "value": "={{ $json.body.created_at }}",
              "type": "string"
            },
            {
              "id": "24caf88e-74ce-43ab-8dc4-1fff471b706f",
              "name": "tipo",
              "value": "={{ $json.body.message_type }}",
              "type": "string"
            },
            {
              "id": "573669d2-1e43-4010-8c82-a67459ffe1db",
              "name": "etiquetas",
              "value": "={{ $json.body.conversation.labels }}",
              "type": "array"
            },
            {
              "id": "40ff895f-f63f-4e4f-bba3-c7d803c277f1",
              "name": "url_chatwoot",
              "value": "https://chatwoot.senaia.uk",
              "type": "string"
            },
            {
              "id": "cf71dea1-d585-4235-8f05-29bc5f82b5df",
              "name": "telegram_chat_id",
              "value": "7798024415",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2520,
        740
      ],
      "id": "4397c232-82b1-4a5b-9239-7aaf9183a9b9",
      "name": "Info"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "9b3e9f43-424d-495e-81ae-7618b5cb2a4b",
              "name": "url_chatwoot",
              "value": "https://chatwoot.senaia.uk",
              "type": "string"
            },
            {
              "id": "79319fb2-1719-4bcf-b104-cd90898785af",
              "name": "id_conta",
              "value": "={{ $json.account_id }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        7720,
        1300
      ],
      "id": "0a7ec87e-804c-4de7-b6d5-de08269230cb",
      "name": "Info1"
    },
    {
      "parameters": {
        "description": "Chame essa ferramenta para direcionar o atendimento para o gestor respons\u00e1vel.",
        "workflowId": {
          "__rl": true,
          "value": "MJNBuLwopMgnGZqr",
          "mode": "list",
          "cachedResultName": "my-secretary-escalar_humano"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "telefone": "={{ $('Info').item.json.telefone }}",
            "nome": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('nome', ``, 'string') }}",
            "ultima_mensagem": "={{ $('Set mensagens').item.json.mensagem || $('Set mensagens').item.json.mensagem_audio }}",
            "id_conta": "={{ $('Info').item.json.id_conta }}",
            "id_conversa": "={{ $('Info').item.json.id_conversa }}",
            "telegram_chat_id": "={{ $('Info').item.json.telegram_chat_id }}",
            "url_chatwoot": "={{ $('Info').item.json.url_chatwoot }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "telefone",
              "displayName": "telefone",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "nome",
              "displayName": "nome",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "ultima_mensagem",
              "displayName": "ultima_mensagem",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "id_conta",
              "displayName": "id_conta",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "id_conversa",
              "displayName": "id_conversa",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "telegram_chat_id",
              "displayName": "telegram_chat_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            },
            {
              "id": "url_chatwoot",
              "displayName": "url_chatwoot",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string",
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        6180,
        960
      ],
      "id": "fa791e19-eda9-4e30-88a7-3c48c1c2d62f",
      "name": "Escalar humano"
    },
    {
      "parameters": {
        "resource": "Profile",
        "operation": "Fetch Profile",
        "requestOptions": {}
      },
      "type": "@devlikeapro/n8n-nodes-chatwoot.chatWoot",
      "typeVersion": 1,
      "position": [
        7500,
        1300
      ],
      "id": "8938e985-0c1b-4900-839b-f0b202fe120c",
      "name": "Buscar informa\u00e7\u00f5es da conta",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "description": "Use essa ferramenta para enviar as informa\u00e7\u00f5es de agendamento no WhatsApp.\n\nO ID da conversa deve ser extra\u00eddo das informa\u00e7\u00f5es do evento.",
        "workflowId": {
          "__rl": true,
          "value": "OKdye5hPeQdTLPIG",
          "mode": "list",
          "cachedResultName": "my-secretary-enviar_agendamento"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "mensagem": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('mensagem', ``, 'string') }}",
            "id_conversa": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('id_conversa', ``, 'string') }}",
            "id_conta": "={{ $('Info1').item.json.id_conta }}",
            "url_chatwoot": "={{ $('Info1').item.json.url_chatwoot }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "mensagem",
              "displayName": "mensagem",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "id_conta",
              "displayName": "id_conta",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "id_conversa",
              "displayName": "id_conversa",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "url_chatwoot",
              "displayName": "url_chatwoot",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        }
      },
      "type": "@n8n/n8n-nodes-langchain.toolWorkflow",
      "typeVersion": 2.2,
      "position": [
        8020,
        1560
      ],
      "id": "526d6f2a-074b-4bd4-b5b3-2f9cf044a091",
      "name": "Enviar agendamento"
    },
    {
      "parameters": {
        "content": "## Nota sobre \"Enviar agendamento\"\n\nO N8N n\u00e3o permite colocar uma vari\u00e1vel informada pelo agente (\u2728) na URL.\n\nPrecisamos utilizar um workflow separado para que o agente possa passar o ID da conversa (extra\u00eddo das informa\u00e7\u00f5es do evento), que ser\u00e1 usado para simplesmente enviar a mensagem para o contato.",
        "height": 320,
        "width": 580,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        7780,
        1780
      ],
      "id": "fed51361-9330-424e-8e02-c3e46b90b451",
      "name": "Sticky Note9"
    },
    {
      "parameters": {
        "content": "## Tutorial de configura\u00e7\u00e3o tabelas [Supabase](https://supabase.com/)\n\n### Configurar tabelas\n\n1. Criar conta e projeto (use uma senha segura!!)\n1. Na barra lateral, clicar em \"SQL Editor\"\n1. Cole o c\u00f3digo dispon\u00edvel no material `[Supabase] Criar hist\u00f3rico e fila de mensagens.sql`\n1. Clicar em \"Run\"\n\n### Configurar credenciais\n\n1. Na barra superior do Supabase, clique em \"Connect\"\n1. Des\u00e7a at\u00e9 o final na se\u00e7\u00e3o \"Session pooler\" > clique em \"View parameters\"\n1. Abra o node \"Testar credencial - Supabase\" ao lado\n1. No campo \"Credential to connect with\", clique em \"Create new credential\"\n1. Preencha com o \"Host\", \"Database\", \"User\", e \"Password\" (essa \u00faltima \u00e9 a senha que voc\u00ea usou pra criar o projeto)\n1. Salve a credencial e execute o node para confirmar o sucesso",
        "height": 580,
        "width": 660,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1440,
        620
      ],
      "id": "bd892f92-8171-4ba8-a6d7-fc811826844b",
      "name": "Sticky Note18"
    },
    {
      "parameters": {
        "content": "![Chatwoot](https://app.chatwoot.com/brand-assets/logo_dark.svg)",
        "height": 100,
        "width": 260,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1120,
        800
      ],
      "id": "48686a9f-cdad-4614-a0de-f4336cdaa9aa",
      "name": "Sticky Note24"
    },
    {
      "parameters": {
        "content": "[![Hostinger](https://hpanel.hostinger.com/assets/images/logos/hostinger-white.svg)](https://www.hostinger.com.br/cart?product=vps%3Avps_kvm_2&period=12&referral_type=cart_link&REFERRALCODE=FAZERAI&referral_id=0196b71f-5704-7120-aded-f6753a53c121)\n",
        "height": 80,
        "width": 180,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        480,
        880
      ],
      "id": "696c2b4b-fc9f-4095-b383-17418c925cfe",
      "name": "Sticky Note26"
    },
    {
      "parameters": {
        "content": "[![Supabase logo](https://supabase.com/_next/image?url=https%3A%2F%2Ffrontend-assets.supabase.com%2Fwww%2F6d09404779ac%2F_next%2Fstatic%2Fmedia%2Fsupabase-logo-wordmark--dark.b36ebb5f.png&w=384&q=75&dpl=dpl_H9LPzQFg38dVjzWbzENRNVbXVDjJ)](https://supabase.com/)",
        "height": 80,
        "width": 260,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1820,
        680
      ],
      "id": "cf3202ef-1835-4157-8672-96b7aa955410",
      "name": "Sticky Note27"
    },
    {
      "parameters": {
        "content": "[![ElevenLabs](https://framerusercontent.com/images/YU6MnXR7ZjWNRjlYzx2Hrpcx0.png)](https://try.elevenlabs.io/9k5l5hagxkel)",
        "height": 80,
        "width": 160,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1920,
        1320
      ],
      "id": "af8f0543-a7a7-44d0-9089-7a4dcd264374",
      "name": "Sticky Note28"
    },
    {
      "parameters": {
        "content": "## Sugest\u00e3o\n\nDuplique a aba desse workflow para facilitar a configura\u00e7\u00e3o e n\u00e3o precisar ficar abrindo e fechando janelas",
        "width": 680,
        "color": 7
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        40,
        620
      ],
      "id": "4ad5c11d-574d-42ce-9415-decb09d17048",
      "name": "Sticky Note7"
    },
    {
      "parameters": {
        "content": "### Sub-workflows\n\nAp\u00f3s terminar os outros passos, n\u00e3o se esque\u00e7a de configurar os workflows secund\u00e1rios com suas credenciais!!\n\n- [ ] 2. MCP Google Calendar\n- [ ] 3. Baixar e enviar arquivo do Google Drive\n- [ ] 4. Escalar humano\n- [ ] 5. Enviar mensagem para conversa\n- [ ] 6. Assistente interno",
        "height": 280,
        "width": 400,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2160,
        1820
      ],
      "id": "e359199e-f727-4760-be7c-d5bd06f157dd",
      "name": "Sticky Note29"
    },
    {
      "parameters": {
        "content": "## 1. Secret\u00e1ria",
        "height": 80,
        "width": 540,
        "color": 5
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        4120,
        1700
      ],
      "id": "f5bfde97-b8de-4eeb-9fc7-38b8bee82e20",
      "name": "Sticky Note30"
    },
    {
      "parameters": {
        "content": "## Configurar vari\u00e1veis no Info!!!",
        "height": 80,
        "width": 250,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2440,
        640
      ],
      "id": "0e7bb5c1-7968-4282-a02b-f50d3c666cfc",
      "name": "Sticky Note31"
    },
    {
      "parameters": {
        "content": "## Configurar vari\u00e1veis no Info1",
        "height": 80,
        "width": 250,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        8020,
        1180
      ],
      "id": "41a08422-134f-4760-86b7-9b686fd13b8e",
      "name": "Sticky Note32"
    },
    {
      "parameters": {
        "url": "https://api.elevenlabs.io/v2/voices",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        1920,
        1940
      ],
      "id": "d191385d-c620-4734-80e9-c4c222cf6fda",
      "name": "Testar credencial - ElevenLabs",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "SELECT COUNT(*) FROM n8n_historico_mensagens;\nSELECT COUNT(*) FROM n8n_fila_mensagens;",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        1900,
        1060
      ],
      "id": "5eebe442-8eff-4410-af73-391b5db56561",
      "name": "Testar credencial - Supabase",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "### Configurar telegram_chat_id no node Info!!!",
        "height": 80,
        "width": 200,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        6000,
        1120
      ],
      "id": "f8dbdd70-7f1c-4453-844c-4718ab5f02ff",
      "name": "Sticky Note25"
    },
    {
      "parameters": {
        "content": "### Configurar workflow do MCP Google Calendar!!!",
        "height": 80,
        "width": 200,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        5580,
        1120
      ],
      "id": "fc072d66-22b4-45f6-8ea4-b79c887b97f5",
      "name": "Sticky Note33"
    },
    {
      "parameters": {
        "resource": "Profile",
        "operation": "Fetch Profile",
        "requestOptions": {}
      },
      "type": "@devlikeapro/n8n-nodes-chatwoot.chatWoot",
      "typeVersion": 1,
      "position": [
        1220,
        1760
      ],
      "id": "21749b53-eacb-40a9-b040-982ab73c5f87",
      "name": "Testar credencial - Chatwoot",
      "credentials": {
        "chatwootApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "### Caso n\u00e3o use a voz da Keren, n\u00e3o se esque\u00e7a de atualizar o ID no node \"Gerar \u00e1udio\"\n\nAlterar esse ID que est\u00e1 no final da URL: `33B4UnXyTNbgLmdEDh5P`",
        "width": 300,
        "color": 3
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        6620,
        1120
      ],
      "id": "4e25a669-324d-4ff8-976c-d6cc40ae1ec0",
      "name": "Sticky Note14"
    },
    {
      "parameters": {
        "content": "## Importante\n\nSe a mensagem n\u00e3o est\u00e1 sendo marcada como lida, verifique no WhatsApp se essa fun\u00e7\u00e3o est\u00e1 habilitada.",
        "width": 320,
        "color": 6
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        4660,
        920
      ],
      "id": "7f02b40e-8dd3-4626-a67a-17a0fda4a779",
      "name": "Sticky Note34"
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "CREATE TABLE n8n_historico_mensagens (\n  id           BIGSERIAL PRIMARY KEY,\n  session_id   VARCHAR(40) NOT NULL,\n  message      JSONB NOT NULL,\n  created_at   TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\nCREATE INDEX idx_n8n_historico_mensagens_session_id ON n8n_historico_mensagens (session_id);\n\nCREATE TABLE n8n_fila_mensagens (\n  id           BIGSERIAL PRIMARY KEY,\n  id_mensagem  VARCHAR(40) NOT NULL,\n  telefone     VARCHAR(40) NOT NULL,\n  mensagem     TEXT NOT NULL,\n  \"timestamp\"  TIMESTAMP WITHOUT TIME ZONE NOT NULL\n);\n\nCREATE INDEX idx_n8n_fila_mensagens_telefone ON n8n_fila_mensagens (telefone);",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        1920,
        820
      ],
      "id": "3d4dea2e-256c-4b4f-89cb-96b8178ac403",
      "name": "Criar credencial - Supabase1",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        5040,
        840
      ],
      "id": "f04ce95d-a0e3-4b42-9658-5257b43ff5b5",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Mensagem chegando?": {
      "main": [
        [
          {
            "node": "Tipo de mensagem",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mensagem recebida": {
      "main": [
        [
          {
            "node": "Info",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mensagem encavalada?": {
      "main": [
        [
          {
            "node": "Limpar fila de mensagens",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Buscar mensagens": {
      "main": [
        [
          {
            "node": "Mensagem encavalada?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limpar fila de mensagens": {
      "main": [
        [
          {
            "node": "Marcar como lidas",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Esperar": {
      "main": [
        [
          {
            "node": "Buscar mensagens",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tipo de mensagem": {
      "main": [
        [
          {
            "node": "Enfileirar mensagem.",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Download \u00e1udio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "MCP Google Calendar": {
      "ai_tool": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Listar arquivos": {
      "ai_tool": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Baixar e enviar arquivo": {
      "ai_tool": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Secret\u00e1ria": {
      "main": [
        [
          {
            "node": "Tipo de mensagem1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gerar \u00e1udio": {
      "main": [
        [
          {
            "node": "\u00c1udio para base64",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Formatar SSML": {
      "main": [
        [
          {
            "node": "Gerar \u00e1udio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tipo de mensagem1": {
      "main": [
        [
          {
            "node": "Formatar texto",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Formatar SSML",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Formatar texto": {
      "main": [
        [
          {
            "node": "Resetar status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model2": {
      "ai_languageModel": [
        [
          {
            "node": "Formatar texto",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Enviar alerta de cancelamento": {
      "ai_tool": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Gemini": {
      "ai_languageModel": [
        []
      ]
    },
    "Memory": {
      "ai_memory": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Refletir": {
      "ai_tool": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Reagir mensagem": {
      "ai_tool": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "Assistente de confirma\u00e7\u00e3o",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Assistente de confirma\u00e7\u00e3o",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Salvar memoria": {
      "ai_tool": [
        [
          {
            "node": "Assistente de confirma\u00e7\u00e3o",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "MCP Google Calendar.": {
      "ai_tool": [
        [
          {
            "node": "Assistente de confirma\u00e7\u00e3o",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Enfileirar mensagem.": {
      "main": [
        [
          {
            "node": "Esperar",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model.": {
      "ai_languageModel": [
        [
          {
            "node": "Formatar SSML",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Refletir1": {
      "ai_tool": [
        [
          {
            "node": "Assistente de confirma\u00e7\u00e3o",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Marcar como lidas": {
      "main": [
        [
          {
            "node": "Digitando/Gravando...",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Digitando/Gravando...": {
      "main": [
        [
          {
            "node": "Set mensagens",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set mensagens": {
      "main": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download \u00e1udio": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Transcrever audio": {
      "main": [
        [
          {
            "node": "Marcar como lidas",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Transcrever audio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Resetar status": {
      "main": [
        [
          {
            "node": "Tipo de mensagem2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Tipo de mensagem2": {
      "main": [
        [
          {
            "node": "Enviar texto.",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Base64 para \u00e1udio": {
      "main": [
        [
          {
            "node": "Enviar \u00e1udio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u00c1udio para base64": {
      "main": [
        [
          {
            "node": "Resetar status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Base64 para \u00e1udio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Info": {
      "main": [
        [
          {
            "node": "Mensagem chegando?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Info1": {
      "main": [
        [
          {
            "node": "Assistente de confirma\u00e7\u00e3o",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Escalar humano": {
      "ai_tool": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Enviar agendamento": {
      "ai_tool": [
        [
          {
            "node": "Assistente de confirma\u00e7\u00e3o",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Gatilho di\u00e1rio": {
      "main": [
        [
          {
            "node": "Buscar informa\u00e7\u00f5es da conta",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Buscar informa\u00e7\u00f5es da conta": {
      "main": [
        [
          {
            "node": "Info1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Secret\u00e1ria",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1ab82c31-7ca0-4628-8a84-5afda870cfcd",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "sIegIp47kn6oKCrS",
  "tags": []
}