AutomationFlowsAI & RAG › Secretaria Ia

Secretaria Ia

Secretaria_IA. Uses postgres, httpRequest, openAi, agent. Webhook trigger; 60 nodes.

Webhook trigger★★★★★ complexityAI-powered60 nodesPostgresHTTP RequestOpenAIAgentMemory Postgres ChatTool ThinkTool Http RequestMcp Client Tool
AI & RAG Trigger: Webhook Nodes: 60 Complexity: ★★★★★ AI nodes: yes Added:
Secretaria Ia — n8n workflow card showing Postgres, HTTP Request, OpenAI integration

This workflow follows the Agent → Chainllm recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Secretaria_IA",
  "nodes": [
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "SELECT COUNT(*) FROM n8n_historico_mensagens;\nSELECT COUNT(*) FROM n8n_fila_mensagens;\n",
        "options": {}
      },
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.6,
      "position": [
        416,
        160
      ],
      "id": "cf931cd5-693e-4536-a4f1-8e57feb8322b",
      "name": "Postgres",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "url": "https://api.elevenlabs.io/v2/voices",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        416,
        320
      ],
      "id": "38a46df3-28cf-4e67-a227-09b2a1a672eb",
      "name": "Testar credencial - ElevenLabs",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "content": "## Teste de conec\u00e7\u00e3o\n",
        "height": 660
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        80
      ],
      "typeVersion": 1,
      "id": "7420679b-eaad-4070-8932-a1af903ae3fa",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "43f31009-3234-4f0e-a776-e8f34979833b",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        1200,
        432
      ],
      "id": "cd5c60a3-5bbb-4eb1-83a0-591fa5468dbe",
      "name": "Webhook"
    },
    {
      "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": "http://145.223.26.136:3000/",
              "type": "string"
            },
            {
              "id": "cf71dea1-d585-4235-8f05-29bc5f82b5df",
              "name": "telegram_chat_id",
              "value": "8081199702",
              "type": "string"
            },
            {
              "id": "1a0d8351-3847-4962-b21a-c313ab25040d",
              "name": "audio_conteudo",
              "value": "={{ $json.body.attachments[0].data_url }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1424,
        432
      ],
      "id": "7da55813-f9b7-4e7e-9b2d-acb88b4ec485",
      "name": "Info"
    },
    {
      "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": [
        1616,
        432
      ],
      "id": "03d5fa46-cc27-4f7d-bb27-1be4f64c573e",
      "name": "Mensagem chegando?"
    },
    {
      "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": [
        1824,
        432
      ],
      "id": "b628e447-9abf-4376-8a0f-85bf5fd91ac1",
      "name": "Tipo de mensagem"
    },
    {
      "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": [
        2160,
        304
      ],
      "id": "54a964f5-a5a4-43de-85e5-3f9bdb6d8afc",
      "name": "Enfileirar mensagem.",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "amount": 16
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        2336,
        304
      ],
      "id": "e4e1e48a-ca82-4492-8afe-301e97a451a6",
      "name": "Esperar"
    },
    {
      "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": [
        2544,
        304
      ],
      "id": "59efc616-0110-4f36-957a-b8414eda917b",
      "name": "Buscar mensagens",
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "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": [
        2736,
        304
      ],
      "id": "88a83d54-7310-43c9-aed4-0913bcaa4fd8",
      "name": "Mensagem encavalada?"
    },
    {
      "parameters": {
        "url": "={{ $json.audio_conteudo }}",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        2144,
        544
      ],
      "id": "121040e3-7b0d-44c2-bfca-d9b66744e141",
      "name": "Download \u00e1udio",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "binaryToPropery",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1,
      "position": [
        2352,
        544
      ],
      "id": "0794b9e6-77cf-4b57-8fad-9b5d4be28c68",
      "name": "Extract from File"
    },
    {
      "parameters": {
        "operation": "toBinary",
        "sourceProperty": "data",
        "options": {}
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        2560,
        544
      ],
      "id": "a9f8445d-f57f-4721-a0d4-e8b66041586e",
      "name": "Convert to File"
    },
    {
      "parameters": {
        "resource": "audio",
        "operation": "transcribe",
        "options": {
          "language": "pt"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        2784,
        544
      ],
      "id": "90cd7f9f-824e-47da-88c7-2e2141cebf51",
      "name": "Transcrever audio",
      "credentials": {
        "openAiApi": {
          "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": [
        2944,
        304
      ],
      "id": "17d13826-9229-43d4-9e1a-9fb60955f953",
      "name": "Limpar fila de mensagens",
      "credentials": {
        "postgres": {
          "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 }}/update_last_seen",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        3280,
        432
      ],
      "id": "dffce46d-9b2c-4d55-b5e1-5e00c148b29e",
      "name": "Marcar como lidas",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "url": "http://145.223.26.136:3000/api/v1/profile",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        416,
        544
      ],
      "id": "86d6d47e-cfff-4d03-94ca-0346cf0ba8b7",
      "name": "Testar credencial - Chatwoot",
      "credentials": {
        "httpHeaderAuth": {
          "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": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "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": [
        3520,
        432
      ],
      "id": "80c221d2-4cee-441c-8e28-8e884422b394",
      "name": "Digitando/Gravando...",
      "credentials": {
        "httpHeaderAuth": {
          "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": [
        3712,
        432
      ],
      "id": "42316e95-d294-44a0-a04c-0a4fcf82458a",
      "name": "Set mensagens",
      "executeOnce": true
    },
    {
      "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 paciente na descri\u00e7\u00e3o do agendamento, juntamente com o nome completo, data de nascimento e quaisquer outras informa\u00e7\u00f5es relevantes fornecidas pelo paciente.\n\n-----------------------\n\n## PAPEL\n\nVoc\u00ea \u00e9 Marlene uma atendente do WhatsApp, altamente especializada, que atua em nome da Cl\u00ednica Jo\u00e3o Paulo, prestando um servi\u00e7o de excel\u00eancia. Sua miss\u00e3o \u00e9 atender aos pacientes 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 pacientes.\n2. Responder d\u00favidas sobre a cl\u00ednica (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 cl\u00ednica, provendo informa\u00e7\u00f5es e reduzindo a carga administrativa dos profissionais de sa\u00fade.\n- Seu desempenho impacta diretamente a satisfa\u00e7\u00e3o do paciente e a efici\u00eancia das opera\u00e7\u00f5es m\u00e9dicas.\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 paciente de forma acolhedora. \n   - Se poss\u00edvel, incentive o envio de \u00e1udio caso o paciente 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 paciente\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 paciente, remova o c\u00f3digo do pa\u00eds (geralmente \"55\"), e formate como \"(11) 1234-5678\"\n\n3. Identificar necessidade\n   - Pergunte a data de prefer\u00eancia para a consulta e se o paciente 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 paciente com os hor\u00e1rios livres encontrados para a data solicitada.\n\n6. Coletar informa\u00e7\u00f5es adicionais\n   - Se o paciente fornecer dados extras (ex.: condi\u00e7\u00e3o de sa\u00fade, conv\u00eanio, etc.), inclua tudo na descri\u00e7\u00e3o do evento no Google Calendar.\n\n7. Agendar consulta\n   - Ap\u00f3s confirma\u00e7\u00e3o do paciente\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 paciente.\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 m\u00e9dicas\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 cl\u00ednica.\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: Av. das Palmeiras, 1500 - Jardim Am\u00e9rica, S\u00e3o Paulo - SP, CEP: 04567-000\n- Telefone: (11) 4456-7890\n- WhatsApp: (11) 99999-9999\n- E-mail: contato@clinicamoreira.com.br\n- Site: www.clinicamoreira.com.br\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 (6233e06ce0830f8e8314b90348b1af03538acc6b17d141dd22e20ec7e19874f8@group.calendar.google.com)\n- Dr. Roberto Almeida - M\u00e9dico - Cardiologia (cde989734a167956d32c703ea1a099d47278588ae6840f9e4e258f6072490aa9@group.calendar.google.com)\n- Dra. Ana Silva - Dentista - Cl\u00ednica Geral (8fcc86586957edeb55c7addd5bab877037471148c2a0c0c436f7956d3869f170@group.calendar.google.com)\n- Dra. Carla Mendes - Dentista - Odontopediatria (7b0e335603f90a703ce41f44c40fd7aad381f6a1e8c236d081c0506c5ad5e97e@group.calendar.google.com)\n\n\n## VALORES E FORMAS DE PAGAMENTO\n- Consulta: R$ 500,00\n- Formas de pagamento: PIX, dinheiro, cart\u00e3o de d\u00e9bito ou cr\u00e9dito\n- Conv\u00eanios aceitos: Bradesco Sa\u00fade, Unimed, SulAm\u00e9rica, Amil\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  - ID da conversa\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 cl\u00ednica ou que ponham em risco a reputa\u00e7\u00e3o do servi\u00e7o.\n- Houver insatisfa\u00e7\u00e3o do paciente 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 paciente 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 paciente 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 cl\u00ednica.\n- Se o usu\u00e1rio pedir um pedido de exame, 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   - Paciente: \"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   - Paciente: \"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 paciente 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 paciente 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 paciente 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 paciente 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 m\u00e9dicas.\n- Nunca envie o link do google Calendar para o paciente\n- Qualquer assunto fora do escopo da cl\u00ednica 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 de colocar o ID da conversa na hora de agendar a 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": [
        4112,
        432
      ],
      "id": "d6bae776-fdc9-4667-96cf-be873ca08cd6",
      "name": "Secret\u00e1ria",
      "retryOnFail": true
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "={{ $('Info').item.json.telefone }}",
        "tableName": "n8n_historico_mensagens",
        "contextWindowLength": 50
      },
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "typeVersion": 1.3,
      "position": [
        3920,
        704
      ],
      "id": "313cbf85-f421-4403-ac5c-9f3ddde0d9f3",
      "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": [
        4048,
        704
      ],
      "id": "4024cc61-ad59-4601-a232-a45065abe746",
      "name": "Refletir"
    },
    {
      "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": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "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": [
        4192,
        704
      ],
      "id": "8025237d-c865-4cc6-bec0-6dc4e1cfa16b",
      "name": "Reagir mensagem",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "sseEndpoint": "https://rayquazads.app.n8n.cloud/mcp/db6bc79d-ba32-41c4-b492-f0f5bbcb8fd3/sse"
      },
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "typeVersion": 1,
      "position": [
        4320,
        704
      ],
      "id": "003fae30-f0cf-4b47-b741-d58017624943",
      "name": "MCP Google Calendar"
    },
    {
      "parameters": {
        "resource": "fileFolder",
        "queryString": "Pedido de Exame",
        "returnAll": true,
        "filter": {
          "folderId": {
            "__rl": true,
            "value": "1Pu2rkCPFLDCauWoYZVVezBeswFmOtdHi",
            "mode": "list",
            "cachedResultName": "Teste IA bot",
            "cachedResultUrl": "https://drive.google.com/drive/folders/1Pu2rkCPFLDCauWoYZVVezBeswFmOtdHi"
          }
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleDriveTool",
      "typeVersion": 3,
      "position": [
        4448,
        704
      ],
      "id": "120ed03e-9105-4691-9a6f-76e8fb1d29ce",
      "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": "xDwUcCXzzsl0UUno",
          "mode": "list",
          "cachedResultName": "Secretaria IA \u2014 3. Baixar e enviar arquivo do 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": [],
          "schema": [
            {
              "id": "file_id",
              "displayName": "file_id",
              "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": [
        4576,
        704
      ],
      "id": "8dd10e3b-2732-43a0-8ae7-860e6491d725",
      "name": "Baixar e enviar arquivo"
    },
    {
      "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": [
        4720,
        704
      ],
      "id": "70bdc380-c54b-4b90-8b96-3c095d5f4820",
      "name": "Enviar alerta de cancelamento",
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "description": "Chame essa ferramenta para direcionar o atendimento para o gestor respons\u00e1vel.",
        "workflowId": {
          "__rl": true,
          "value": "gvwyplHl8aBQTkmx",
          "mode": "list",
          "cachedResultName": "Secretaria IA \u2014 4. Escalar humano"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "telefone": "={{ $('Info').item.json.telefone}}",
            "nome": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('nome', ``, 'string') }}",
            "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 }}",
            "ultima_mensagem": "={{ $('Set mensagens').item.json.mensagem || $('Set mensagens').item.json.audio }}"
          },
          "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"
            },
            {
              "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": [
        4864,
        704
      ],
      "id": "19fd423f-350b-4375-bfa4-acf4a4ee4d79",
      "name": "Escalar humano"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-4o",
          "mode": "list",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        3776,
        704
      ],
      "id": "d89f30b3-9283-4a8a-91d0-dfeede9ac33c",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "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": [
        4576,
        432
      ],
      "id": "bc27d916-3d59-4f94-89e4-e4f2b8a2862d",
      "name": "Tipo de mensagem1"
    },
    {
      "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**INCLUA SOMENTE O TEXTO CONVERTIDO EM AUDIO**\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": [
        5040,
        608
      ],
      "id": "deb27b96-0e9e-44f1-a5f8-ec604a867dfb",
      "name": "Formatar SSML"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-3.5-turbo",
          "mode": "list",
          "cachedResultName": "gpt-3.5-turbo"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        5072,
        800
      ],
      "id": "c5c690d7-b8ee-4e0c-b242-2221c047c266",
      "name": "OpenAI Chat Model1",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "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": [
        5440,
        608
      ],
      "id": "971b202f-d332-4835-ae51-52a0f76b2b95",
      "name": "Gerar \u00e1udio",
      "retryOnFail": true,
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "binaryToPropery",
        "destinationKey": "=data",
        "options": {
          "encoding": "base64"
        }
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1,
      "position": [
        5696,
        608
      ],
      "id": "f1c20998-033a-4e3f-99f5-b5d70ed6e77c",
      "name": "\u00c1udio para base64"
    },
    {
      "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\n- N\u00e3o altere o formato das datas e horarios"
            }
          ]
        }
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.6,
      "position": [
        5056,
        272
      ],
      "id": "5b0e436a-91e9-4875-87cc-fcf6963b2fb5",
      "name": "Formatar texto"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "value": "gpt-3.5-turbo",
          "mode": "list",
          "cachedResultName": "gpt-3.5-turbo"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        5072,
        480
      ],
      "id": "ca157f37-8640-4c6b-bae6-cd1494b44a6c",
      "name": "OpenAI Chat Model2",
      "credentials": {
        "openAiApi": {
          "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": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "typing_status",
              "value": "off"
            }
          ]
        },
        "options": {
          "response": {
            "response": {
              "responseFormat": "text"
            }
          }
        }
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        6080,
        448
      ],
      "id": "6bc2da20-e416-4f16-a3c3-22450dda843a",
      "name": "Resetar status",
      "credentials": {
        "httpHeaderAuth": {
          "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": [
        6384,
        448
      ],
      "id": "1dd62726-4370-499c-81de-b1506ab650ee",
      "name": "Tipo de mensagem2"
    },
    {
      "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": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "content",
              "value": "={{ $('Formatar texto').item.json.text }}"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        6720,
        352
      ],
      "id": "5649dea7-0c1b-46e8-84eb-3ca591994e78",
      "name": "Enviar texto.",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "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": [
        6720,
        624
      ],
      "id": "50f305f3-68cf-4e75-ba2c-995e12e3484d",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "operation": "toBinary",
        "sourceProperty": "=data",
        "options": {}
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        6960,
        624
      ],
      "id": "d6284704-c848-44c8-b28c-b6c526d132f6",
      "name": "Base64 para \u00e1udio"
    },
    {
      "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": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "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": [
        7216,
        624
      ],
      "id": "a356f052-32a9-42a5-a654-82a8ea012a3f",
      "name": "Enviar \u00e1udio",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8 * * 1-6"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        6160,
        1120
      ],
      "id": "7d19b0b1-8d11-4928-88a7-f5d50527a4d5",
      "name": "Gatilho di\u00e1rio"
    },
    {
      "parameters": {
        "url": "http://145.223.26.136:3000/api/v1/profile",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        6416,
        1120
      ],
      "id": "df97ab57-7db6-4bb3-a4cf-2057a52cf4f0",
      "name": "Buscar informa\u00e7\u00f5es da conta",
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "9b3e9f43-424d-495e-81ae-7618b5cb2a4b",
              "name": "url_chatwoot",
              "value": "http://145.223.26.136:3000",
              "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": [
        6672,
        1120
      ],
      "id": "23f103b6-d1a9-41f5-869a-487be05be4b2",
      "name": "Info1"
    },
    {
      "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\n6. **Fa\u00e7a a consulta com todos os calendarios**\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 (6233e06ce0830f8e8314b90348b1af03538acc6b17d141dd22e20ec7e19874f8@group.calendar.google.com)\n- Dr. Roberto Almeida - M\u00e9dico - Cardiologia (cde989734a167956d32c703ea1a099d47278588ae6840f9e4e258f6072490aa9@group.calendar.google.com)\n- Dra. Ana Silva - Dentista - Cl\u00ednica Geral (8fcc86586957edeb55c7addd5bab877037471148c2a0c0c436f7956d3869f170@group.calendar.google.com)\n- Dra. Carla Mendes - Dentista - Odontopediatria (7b0e335603f90a703ce41f44c40fd7aad381f6a1e8c236d081c0506c5ad5e97e@group.calendar.google.com)\n"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.8,
      "position": [
        6976,
        1120
      ],
      "id": "33ace56d-aa9f-48a1-a765-3cf86327c8d7",
      "name": "Assistente de confirma\u00e7\u00e3o",
      "retryOnFail": true
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        6336,
        1392
      ],
      "id": "0a720e78-9577-4f7c-b5c1-f4bf82e5a15b",
      "name": "OpenAI Chat Model3",
      "credential

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

Secretaria_IA. Uses postgres, httpRequest, openAi, agent. Webhook trigger; 60 nodes.

Source: https://github.com/Rayquazads/Secretaria-IA-Automacao-Atendimento-WhatsApp-n8n-OpenAI/blob/e5be3805ca04525b80a2e79e38c8a1b71bc88880/Secretaria_IA.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

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

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

Remi 1.1. Uses lmChatOpenAi, memoryPostgresChat, openAi, postgres. Webhook trigger; 89 nodes.

OpenAI Chat, Memory Postgres Chat, OpenAI +7
AI & RAG

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

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

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

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

🧪 LABR - nuevo asistente (REPARADO). Uses httpRequest, postgres, postgresTool, toolCalculator. Webhook trigger; 63 nodes.

HTTP Request, Postgres, Postgres Tool +9