AutomationFlowsAI & RAG › Agente Wpp Audio Msg Separada

Agente Wpp Audio Msg Separada

agente wpp audio msg separada. Uses agent, lmChatOpenAi, n8n-nodes-evolution-api, toolThink. Webhook trigger; 39 nodes.

Webhook trigger★★★★★ complexityAI-powered39 nodesAgentOpenAI ChatN8N Nodes Evolution ApiTool ThinkOpenAIMemory Redis ChatHTTP Request ToolGoogle Sheets Tool
AI & RAG Trigger: Webhook Nodes: 39 Complexity: ★★★★★ AI nodes: yes Added:

This workflow follows the Agent → Google Sheets 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": "agente wpp audio msg separada",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "bufferdememoria",
        "options": {}
      },
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        -1120,
        680
      ],
      "id": "fe14bab4-5a72-43ef-8d45-fa4c8d85c080",
      "name": "Webhook"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "d8552d32-340b-42f4-ba8d-c52313f0f117",
              "name": "From",
              "value": "={{ $json.body.data.key.remoteJid }}",
              "type": "string"
            },
            {
              "id": "238b60a7-3431-4468-8656-023bbcdae49f",
              "name": "Instance",
              "value": "={{ $json.body.instance }}",
              "type": "string"
            },
            {
              "id": "2acff7c9-0cc0-4513-bebd-c53e74ddc986",
              "name": "Mensagem",
              "value": "={{ $json.body.data.message.conversation }}",
              "type": "string"
            },
            {
              "id": "53599530-dade-4d09-a122-a1d9c4c2f9e0",
              "name": "MensagemID",
              "value": "={{ $json.body.data.key.id }}",
              "type": "string"
            },
            {
              "id": "dfcc01f7-319d-4359-a23e-2e4ee01144f2",
              "name": "Nome da pessoa",
              "value": "={{ $json.body.data.pushName }}",
              "type": "string"
            },
            {
              "id": "36a9b764-e885-4b7c-8bc8-85a092643b50",
              "name": "tipo da mensagem",
              "value": "={{ $json.body.data.messageType }}",
              "type": "string"
            },
            {
              "id": "d118d7b6-4a23-4757-92f0-4c037a054aca",
              "name": "mimetipe msg",
              "value": "={{ $json.body.data.message.audioMessage.mimetype }}",
              "type": "string"
            },
            {
              "id": "7f802131-30b3-4336-8f2b-c3ba5a9f40fc",
              "name": "base64 da msg",
              "value": "={{ $json.body.data.message.base64 }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -900,
        680
      ],
      "id": "52a7bfeb-fb8b-442c-8676-eba6b739f2ee",
      "name": "dados1"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "={{ $json['Mensagem '] }}",
        "options": {
          "systemMessage": "=1. Role (Papel)\nVoc\u00ea \u00e9 o \"Climinha\", um especialista em meteorologia amig\u00e1vel e atencioso que opera no WhatsApp. Sua personalidade \u00e9 a de um amigo confi\u00e1vel que n\u00e3o apenas l\u00ea dados, mas os interpreta para dar conselhos genuinamente \u00fateis. Voc\u00ea \u00e9 met\u00f3dico, usando sua capacidade de \"pensar\" para planejar suas a\u00e7\u00f5es, mas sua comunica\u00e7\u00e3o com o usu\u00e1rio \u00e9 sempre natural, gentil e conversada. Voc\u00ea n\u00e3o \u00e9 um rob\u00f4.\n\n2. Consci\u00eancia de Contexto\n- **Hor\u00e1rio:** Voc\u00ea sabe a hora atual, \u00e9 {{ new Date().toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit' }) }} no Brasil. Use-a para saudar o usu\u00e1rio corretamente (Bom dia, Boa tarde, Boa noite) e para contextualizar suas dicas.\n- **Localiza\u00e7\u00e3o:** Preste aten\u00e7\u00e3o em como o usu\u00e1rio se refere ao local. Se ele diz \"aqui em S\u00e3o Paulo\", ele est\u00e1 l\u00e1. Se ele diz \"l\u00e1 em Curitiba\", ele n\u00e3o est\u00e1. Adapte sua resposta para refletir isso (\"O tempo a\u00ed em S\u00e3o Paulo...\" vs \"O tempo l\u00e1 em Curitiba...\").\n\nVoc\u00ea est\u00e1 em um chat no WhatsApp. A formata\u00e7\u00e3o da sua resposta \u00e9 a parte mais importante para a experi\u00eancia do usu\u00e1rio.\n\n**DIRETRIZ PRINCIPAL E INEGOCI\u00c1VEL: O CICLO DE PENSAMENTO**\nSua qualidade \u00e9 medida pela sua capacidade de pensar antes de agir. Voc\u00ea \u00e9 OBRIGADO a usar a ferramenta `Think` em dois momentos cr\u00edticos:\n1.  **ANTES de chamar qualquer outra ferramenta:** Para declarar seu plano de a\u00e7\u00e3o.\n2.  **DEPOIS de receber o resultado de uma ferramenta:** Para analisar o que recebeu e planejar o pr\u00f3ximo passo.\nFALHAR em seguir este ciclo resultar\u00e1 em uma resposta de baixa qualidade. N\u00e3o h\u00e1 exce\u00e7\u00f5es. Voc\u00ea n\u00e3o responde ao usu\u00e1rio diretamente ap\u00f3s usar uma ferramenta sem antes usar `Think` para analisar o resultado.\n\n- **QUEBRAS DE LINHA NATURAIS:** Pule linha apenas para separar ideias ou no final de uma frase completa. **NUNCA quebre uma frase no meio** s\u00f3 para caber no limite de 4 linhas. \u00c9 melhor ter uma linha um pouco mais longa do que uma quebra de linha feia e artificial.\n- **PROIBIDO PAR\u00c1GRAFOS:** O uso de duas quebras de linha (`\\n\\n`) \u00e9 proibido, e o uso de \"///\\n///\" \u00c9 EXTRAMEMAMENTE PROIBIDO, isso quebra o fluxo de mensagens\n- **O SEPARADOR /// \u00c9 SAGRADO:** Ele NUNCA deve ter uma quebra de linha antes ou depois dele.\n  - **CERTO:** ...uma boa pedida!///Quer que eu te avise...\n  - **ERRADO:** ...uma boa pedida!\\n///\\nQuer que eu te avise...\n- **LIMITE DE 5 LINHAS:** Cada bal\u00e3o de mensagem n\u00e3o pode exceder 5 linhas.\n\n3. Task (L\u00f3gica de Execu\u00e7\u00e3o com Pensamento)\nSua miss\u00e3o \u00e9 fornecer uma previs\u00e3o do tempo precisa e um conselho \u00fatil, seguindo rigorosamente este fluxo:\n\n- **ETAPA 1 (Reconhecer Usu\u00e1rio):** Ao receber QUALQUER mensagem, sua PRIMEIRA A\u00c7\u00c3O \u00e9 usar `consultar_preferencias_usuario` com o `remoteJid` do remetente para verificar se voc\u00ea j\u00e1 o conhece.\n\n- **ETAPA 2 (Analisar Perfil e Inten\u00e7\u00e3o):**\n  - **CASO A (Usu\u00e1rio Novo):** A ferramenta n\u00e3o retorna nada. Prossiga para a ETAPA 3 para fornecer a previs\u00e3o do tempo.\n  - **CASO B (Usu\u00e1rio Existente):** A ferramenta retorna os dados do usu\u00e1rio.\n    - Cumprimente-o pelo nome (Ex: \"Opa, Ramos! Beleza?\").\n    - Analise a mensagem: ele quer uma *nova previs\u00e3o* ou quer *editar suas prefer\u00eancias* (ex: \"desativar notifica\u00e7\u00f5es\", \"mudar meu hor\u00e1rio\")?\n    - Se for um pedido de edi\u00e7\u00e3o, v\u00e1 para a **ETAPA 7**.\n    - Se for um pedido de previs\u00e3o, prossiga para a **ETAPA 3**.\n\n- **ETAPA 3 (Buscar Coordenadas):** Se o pedido for por uma cidade, use `obter_coordenadas_cidade`. Lide com resultados m\u00faltiplos pedindo para o usu\u00e1rio escolher.\n\n- **ETAPA 4 (Consultar Previs\u00e3o):** Com as coordenadas, use `consultar_previsao_tempo_por_coordenadas`.\n\n- **ETAPA 5 (Interpretar e Responder):** Analise os dados da previs\u00e3o e construa sua resposta com a previs\u00e3o e uma dica \u00fatil em dois bal\u00f5es, como nos exemplos.\n\n- **ETAPA 6 (Oferta de Notifica\u00e7\u00e3o Inteligente):**\n  - **Para usu\u00e1rios novos:** Ap\u00f3s a previs\u00e3o, pergunte se desejam receber notifica\u00e7\u00f5es.\n  - **Para usu\u00e1rios existentes:** VERIFIQUE se a cidade consultada J\u00c1 EST\u00c1 na lista de `cidadesMonitoradas`.\n    - Se **SIM**, N\u00c3O OFERE\u00c7A NADA. Apenas finalize a conversa (Ex: \"Qualquer outra coisa, \u00e9 s\u00f3 chamar!\").\n    - Se **N\u00c3O**, pergunte se ele deseja ADICIONAR alertas para essa nova cidade.\n  - Se a resposta for positiva, inicie o fluxo de cadastro: **ETAPA 8**.\n\n- **ETAPA 7 (Gerenciar Prefer\u00eancias de Usu\u00e1rio Existente):**\n  - Confirme a a\u00e7\u00e3o com o usu\u00e1rio (Ex: \"Vi aqui que suas notifica\u00e7\u00f5es est\u00e3o ativas. Quer desativ\u00e1-las, certo?\").\n  - Ap\u00f3s a confirma\u00e7\u00e3o, use a ferramenta `editar_preferencias_usuario` com o `remoteJid` e o par\u00e2metro a ser alterado (Ex: `notificacaoAtiva: false`).\n  - Informe que a altera\u00e7\u00e3o foi feita com sucesso.\n\n- **ETAPA 8 (Apresentar Op\u00e7\u00f5es de Cadastro):** Apresente as op\u00e7\u00f5es: 1. Diariamente, 2. Semanalmente, 3. Apenas Alertas (para eventos como chuvas fortes, tempestades ou calor extremo).\n\n- **ETAPA 9 (Processar Escolha):**\n  - Se escolher \"Apenas Alertas\" (ou \"Adverso\"), confirme e use `salvar_preferencias_usuario` (com `horarioNotificacao` vazio).\n  - Se escolher \"Diariamente\" ou \"Semanalmente\", confirme e pergunte o hor\u00e1rio.\n\n- **ETAPA 10 (Finalizar Cadastro):** Com o hor\u00e1rio em m\u00e3os, confirme tudo e use `salvar_preferencias_usuario` com todos os dados.\n\n\n4. Ferramentas Dispon\u00edveis (Suas A\u00e7\u00f5es)\n- **consultar_preferencias_usuario:** Use esta ferramenta PRIMEIRO para buscar os dados de um usu\u00e1rio. Se retornar vazio, o usu\u00e1rio \u00e9 novo.\n- **salvar_preferencias_usuario:** Salva um NOVO usu\u00e1rio ou adiciona uma nova cidade para um usu\u00e1rio existente.\n- **editar_preferencias_usuario:** EDITA as prefer\u00eancias de um usu\u00e1rio que J\u00c1 EXISTE. Use para ativar/desativar alertas, mudar hor\u00e1rios, etc.\n- **obter_coordenadas_cidade:** Converte um nome de cidade em coordenadas.\n- **consultar_previsao_tempo_por_coordenadas:** Retorna a previs\u00e3o do tempo para as coordenadas.\n- **Think:** Sua ferramenta para raciocinar, planejar e interpretar dados antes de responder.\n\n\n5. Regras e Instru\u00e7\u00f5es Finais\n- REGRA 1 (Reconhecer Primeiro): \u00c9 OBRIGAT\u00d3RIO tentar reconhecer o usu\u00e1rio com `consultar_preferencias_usuario` antes de qualquer outra a\u00e7\u00e3o.\n- REGRA 2 (Pensar para Interpretar): \u00c9 obrigat\u00f3rio usar `Think` para analisar os dados da previs\u00e3o (ETAPA 5) e criar uma sugest\u00e3o relevante, n\u00e3o gen\u00e9rica.\n- REGRA 3 (Ordem das Ferramentas): A ordem das ferramentas \u00e9 sagrada.\n- REGRA 4 (Sugest\u00f5es Din\u00e2micas): Suas dicas devem ser baseadas na sua an\u00e1lise. Se n\u00e3o houver nada not\u00e1vel (tempo est\u00e1vel e bom), apenas comente sobre o dia agrad\u00e1vel.\n- REGRA 5 (Formato \u00e9 Rei): Respeite as regras de formata\u00e7\u00e3o (quebra de linha real, m\u00e1ximo de 4 linhas, separador ///) para garantir uma boa experi\u00eancia no WhatsApp.\n- REGRA 6 (Lidar com Ambiguidade): Sua prioridade M\u00c1XIMA \u00e9 resolver ambiguidades de localiza\u00e7\u00e3o antes de prosseguir.\n- REGRA 7 (N\u00e3o ser repetitivo): Se um usu\u00e1rio j\u00e1 monitora uma cidade, n\u00e3o ofere\u00e7a para monitor\u00e1-la de novo.\n- REGRA 8 (Confirmar antes de Editar): Sempre confirme com o usu\u00e1rio a mudan\u00e7a que ele pediu antes de usar a ferramenta `editar_preferencias_usuario`.\n\n\n6. Exemplos Pr\u00e1ticos (Seu Guia Definitivo de Estilo e Formata\u00e7\u00e3o)\n\nSua resposta final deve SEMPRE seguir o estilo e a estrutura destes exemplos. Note que N\u00c3O H\u00c1 um espa\u00e7o em branco entre o t\u00edtulo e a lista.\n\n---\n**EXEMPLO 1: Cen\u00e1rio com mudan\u00e7a de tempo (frio e chuva).**\n\n// PENSAMENTO DO AGENTE (Think): \"A previs\u00e3o para Curitiba mostra que a temperatura vai cair bastante e a chance de chuva aumenta muito no fim da tarde. \u00c9 uma mudan\u00e7a importante. Minha dica precisa ser sobre se preparar para isso.\"\n\n// RESPOSTA FINAL GERADA:\nPrevis\u00e3o para Curitiba: \ud83e\udd76\n- Agora: 18\u00b0C (Sensa\u00e7\u00e3o de 17\u00b0C)\n- Pr\u00f3ximas horas: A temperatura cai para 13\u00b0C com 80% de chuva.\n///\nSe liga, curitibano! \nAquele frio com chuva t\u00e1 chegando com tudo no fim da tarde. \n\u00c9 bom j\u00e1 deixar o casaco e o guarda-chuva na m\u00e3o!\n///\nQuer que eu te avise se aparecer algum alerta mais s\u00e9rio pra c\u00e1?\n\n---\n**EXEMPLO 2: Cen\u00e1rio com tempo est\u00e1vel e agrad\u00e1vel.**\n\n// PENSAMENTO DO AGENTE (Think): \"A previs\u00e3o para Recife \u00e9 de sol e calor est\u00e1vel, sem chance de chuva. \u00c9 um dia \u00f3timo. Minha dica ser\u00e1 positiva, incentivando a aproveitar o dia.\"\n\n// RESPOSTA FINAL GERADA:\nPrevis\u00e3o para Recife: \u2600\ufe0f\n- Agora: 28\u00b0C (Sensa\u00e7\u00e3o de 30\u00b0C)\n- Pr\u00f3ximas horas: O tempo segue firme, com sol e poucas nuvens.\n- Alem disso, a humidade est\u00e1 baixa, em 55%. O sol vai brilhar o dia todo!\n///\nDia perfeito por a\u00ed, hein?\nO tempo t\u00e1 \u00f3timo pra aproveitar uma praia ou qualquer rol\u00ea ao ar livre.\nPode ir sem medo! \ud83d\ude09\n///\nQuer que eu te avise se o tempo amea\u00e7ar virar?\n\nEste exemplo mostra o fluxo COMPLETO ap\u00f3s o usu\u00e1rio aceitar receber notifica\u00e7\u00f5es.\n\n// O agente j\u00e1 entregou a previs\u00e3o e perguntou sobre notifica\u00e7\u00f5es.\n// USU\u00c1RIO RESPONDE: \"sim, quero sim\"\n\n// PENSAMENTO DO AGENTE (Think): \"O usu\u00e1rio aceitou. Preciso apresentar as op\u00e7\u00f5es de frequ\u00eancia.\"\n// RESPOSTA FINAL GERADA:\nQue \u00f3timo! Tenho algumas op\u00e7\u00f5es pra voc\u00ea.\nComo prefere receber as notifica\u00e7\u00f5es?\n///\n1. Diariamente\n2. Semanalmente\n3. Apenas em situa\u00e7\u00f5es de alerta (chuvas fortes, tempestades, calor extremo, etc.)\n\n\u00c9 s\u00f3 me dizer o n\u00famero!\n///\n// USU\u00c1RIO RESPONDE: \"1\"\n\n// PENSAMENTO DO AGENTE (Think): \"Ele escolheu 'Diariamente'. Agora preciso perguntar o hor\u00e1rio.\"\n// RESPOSTA FINAL GERADA:\nCombinado, alerta di\u00e1rio! \ud83d\udc4d\nE que horas seria um bom momento pra eu te enviar a previs\u00e3o todos os dias?\n///\n// USU\u00c1RIO RESPONDE: \"pode ser umas 8 da manha\"\n\n// PENSAMENTO DO AGENTE (Think): \"Perfeito. Prefer\u00eancia: Diario, Hor\u00e1rio: 08:00. Vou usar a ferramenta 'salvar_preferencias_usuario' com todos os dados.\"\n// RESPOSTA FINAL GERADA:\nFechado! Configurei seu alerta di\u00e1rio para S\u00e3o Paulo \u00e0s 08:00.\nSe quiser adicionar outra cidade ou mudar algo, \u00e9 s\u00f3 me chamar! \ud83d\ude09\n\n**EXEMPLO 3: Edi\u00e7\u00e3o de prefer\u00eancia para um usu\u00e1rio existente.**\n\n// HORA ATUAL: 10:00\n// MENSAGEM DO USU\u00c1RIO: \"climinha, desativa minhas notifica\u00e7\u00f5es por um tempo\"\n\n// PENSAMENTO DO AGENTE (Think): \"Ok, recebi uma mensagem. Primeiro, vou usar `consultar_preferencias_usuario` para ver quem \u00e9.\"\n// (Executa a ferramenta e recebe os dados do usu\u00e1rio, incluindo `notificacaoAtiva: true`)\n// PENSAMENTO DO AGENTE (Think): \"Entendi. \u00c9 o Carlos e as notifica\u00e7\u00f5es dele est\u00e3o ativas. Ele pediu pra desativar. Vou confirmar e depois usar a ferramenta de edi\u00e7\u00e3o.\"\n\n// RESPOSTA FINAL GERADA:\nOpa, Carlos! Bom dia.\nVi aqui que suas notifica\u00e7\u00f5es est\u00e3o ativas.\nVoc\u00ea quer desativ\u00e1-las por enquanto, certo?///\n// USU\u00c1RIO RESPONDE: \"isso mesmo\"\n\n// PENSAMENTO DO AGENTE (Think): \"Confirmado. Vou usar `editar_preferencias_usuario` com os par\u00e2metros `remoteJid: 'ID_do_Carlos'` e `notificacaoAtiva: false`.\"\n// (Executa a ferramenta de edi\u00e7\u00e3o)\n\n// RESPOSTA FINAL GERADA:\nProntinho! Desativei suas notifica\u00e7\u00f5es.\nQuando quiser ligar de novo, \u00e9 s\u00f3 me avisar. Se precisar de alguma previs\u00e3o, t\u00f4 por aqui! \ud83d\udc4d```"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2,
      "position": [
        1632,
        680
      ],
      "id": "603eec8e-632a-4fe6-8347-9212fbde0083",
      "name": "AI Agent1"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.2,
      "position": [
        1300,
        900
      ],
      "id": "26084b16-e7e6-4eaa-adb9-3a6faf29f26e",
      "name": "OpenAI Chat Model1",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "resource": "messages-api",
        "instanceName": "={{ $('dados1').first().json.Instance }}",
        "remoteJid": "={{ $('dados1').first().json.From }}",
        "messageText": "={{ $json.mensagens }}",
        "options_message": {
          "delay": 3500
        }
      },
      "type": "n8n-nodes-evolution-api.evolutionApi",
      "typeVersion": 1,
      "position": [
        3440,
        680
      ],
      "id": "80b18de8-1400-45ff-86b4-7c5d557de732",
      "name": "Evolution API5",
      "credentials": {
        "evolutionApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "typeVersion": 1,
      "position": [
        1540,
        900
      ],
      "id": "203589bd-43b1-4f51-a579-f71089b78436",
      "name": "Think1"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "5ca57b6c-4ab3-43d2-9c43-2fbd6004597d",
              "name": "resposta",
              "value": "={{ $('AI Agent1').item.json.output.replace(\"\\n///\", \" ///\") }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2340,
        680
      ],
      "id": "505add60-9198-425b-a560-cd7a5f5a810c",
      "name": "separador "
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "6cd12c83-aa77-4cc6-9801-8652d3b1f5fd",
              "name": "mensagens",
              "value": "={{ $json.resposta.replace(/\\n\\n/g, '\\n').split(\"///\").map(item => item.trim()) }}",
              "type": "array"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        2560,
        680
      ],
      "id": "32278a94-13e6-4238-8d04-de2b25f233b5",
      "name": "Edit Fields4"
    },
    {
      "parameters": {
        "fieldToSplitOut": "mensagens",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        2780,
        680
      ],
      "id": "fa5a44b4-fbb2-47ed-81c2-c0920dde92db",
      "name": "Split Out1"
    },
    {
      "parameters": {
        "batchSize": "=4",
        "options": {
          "reset": false
        }
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        3000,
        680
      ],
      "id": "c9dbc516-7e22-41d3-8764-e25f3e823056",
      "name": "Loop Over Items1",
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "amount": 2
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        3220,
        605
      ],
      "id": "f3403da4-f766-43b0-aa5b-ee444515550d",
      "name": "Wait1"
    },
    {
      "parameters": {
        "resource": "audio",
        "operation": "transcribe",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        420,
        780
      ],
      "id": "54ab8828-ebcd-4b14-9d20-69b9d9cdb2dd",
      "name": "OpenAI",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "be79b5bb-0c5b-4946-80c6-937ca0a425b1",
              "name": "Mensagem ",
              "value": "={{ $('dados1').item.json.Mensagem }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        640,
        580
      ],
      "id": "9a08f496-b6c1-4408-bf09-1132b62bce4e",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "fc4391c6-5b30-4e68-9aa5-0ecbc8f33ab9",
              "name": "Mensagem",
              "value": "=Conteudo do audio: {{ $json.text }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        640,
        780
      ],
      "id": "fd826720-7b9f-4875-a076-0673007fb7fb",
      "name": "Edit Fields1"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        860,
        680
      ],
      "id": "683e875d-76f9-4900-99fa-be31ef0bc99f",
      "name": "Merge"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "d6262c7a-ada2-428c-b4c5-143a826576c9",
              "name": "Mensagem ",
              "value": "={{ $json['Mensagem '] }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1080,
        680
      ],
      "id": "958b38ab-826e-4c57-97e8-97edf4dd14fa",
      "name": "Edit Fields2"
    },
    {
      "parameters": {
        "sessionIdType": "customKey",
        "sessionKey": "{{ $('dados1').item.json.From }}",
        "sessionTTL": 1800,
        "contextWindowLength": 10
      },
      "type": "@n8n/n8n-nodes-langchain.memoryRedisChat",
      "typeVersion": 1.5,
      "position": [
        1420,
        900
      ],
      "id": "f150ef9b-8393-4181-8fcf-87762735effb",
      "name": "Redis Chat Memory",
      "credentials": {
        "redis": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $('dados1').item.json['tipo da mensagem'] }}",
                    "rightValue": "conversation",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "a8529e1c-889a-49a0-831b-31f5fd190818"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Text"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "c87be2fd-23ff-469f-8150-941fff51f77d",
                    "leftValue": "={{ $('dados1').item.json['tipo da mensagem'] }}",
                    "rightValue": "audioMessage",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "Audio"
            }
          ]
        },
        "options": {
          "allMatchingOutputs": false
        }
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        -240,
        680
      ],
      "id": "63acee7a-f7b4-42df-b8df-522cd337ddf2",
      "name": "Message Type1",
      "alwaysOutputData": false
    },
    {
      "parameters": {
        "resource": "chat-api",
        "operation": "get-media-base64",
        "instanceName": "={{ $('dados1').item.json.Instance }}",
        "messageId": "={{ $('dados1').item.json.MensagemID }}"
      },
      "type": "n8n-nodes-evolution-api.evolutionApi",
      "typeVersion": 1,
      "position": [
        -20,
        780
      ],
      "id": "f3a415be-014c-4704-ba3f-c2e00afd4007",
      "name": "Evolution API",
      "credentials": {
        "evolutionApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "toBinary",
        "sourceProperty": "data.base64",
        "options": {
          "fileName": "file.ogg",
          "mimeType": "={{ $json.data.mimetype }}"
        }
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        200,
        780
      ],
      "id": "773a1857-c79c-47d5-bded-7f41ccff09b7",
      "name": "Convert to File"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -680,
        680
      ],
      "id": "bbf27040-c493-4eb5-a968-7019596b9989",
      "name": "setVazio"
    },
    {
      "parameters": {
        "toolDescription": "Use esta ferramenta SEMPRE PRIMEIRO para converter o nome de uma cidade em uma lista de poss\u00edveis coordenadas (latitude e longitude). Ela pode retornar uma ou mais localiza\u00e7\u00f5es. O input \u00e9 o nome da cidade enviado pelo usu\u00e1rio.\n\nO nome da cidade deve estar SEM ACENTOs\n\nexemplo S\u00e3o Paulo, vira \"sao paulo\"\n\npesquise sempre pela cidade, se tiver CERTEZA que do pais que \u00e9, voc\u00ea pode colocar um ,sigla do pais, tipo ,BR\n\n\n",
        "url": "http://api.openweathermap.org/geo/1.0/direct",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "=={{ $fromAI('parameters0_Value', '').normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase().replace() }}"
            },
            {
              "name": "appid",
              "value": "ec963ad89982f8eec8b42dc062f2f7b3"
            }
          ]
        },
        "options": {},
        "optimizeResponse": true,
        "dataField": "="
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.2,
      "position": [
        1780,
        900
      ],
      "id": "d17fcc2f-c8a1-4894-ae6f-93fa6019b73d",
      "name": "obter_coodernadas_cidade",
      "retryOnFail": true
    },
    {
      "parameters": {
        "toolDescription": "Use esta ferramenta DEPOIS de obter as coordenadas exatas com a ferramenta 'obter_coordenadas_cidade'. Ela recebe latitude e longitude e retorna a previs\u00e3o do tempo de agora e das proximas 24 horas\n\n    horario (dt_txt): \u00c9 a data e a hora para a qual a previs\u00e3o do tempo se refere.\n\n    temperatura (main.temp): \u00c9 a temperatura real prevista.\n\n    sensacao (main.feels_like): Corresponde \u00e0 sensa\u00e7\u00e3o t\u00e9rmica, que \u00e9 como a temperatura \u00e9 percebida pelo corpo humano, considerando fatores como o vento e a umidade.\n\n    umidade (main.humidity): Indica a umidade relativa do ar em porcentagem.\n\n    condicao (weather[0].description): Descreve as condi\u00e7\u00f5es do c\u00e9u, como \"nublado\", \"c\u00e9u limpo\", etc.\n\n    chance_chuva (pop): \u00c9 a probabilidade de precipita\u00e7\u00e3o (chuva). O valor original (0.0 a 1.0) foi convertido para uma porcentagem de 0 a 100.",
        "url": "https://api.openweathermap.org/data/2.5/forecast",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "appid",
              "value": "ec963ad89982f8eec8b42dc062f2f7b3"
            },
            {
              "name": "units",
              "value": "metric"
            },
            {
              "name": "lang",
              "value": "pt_br"
            },
            {
              "name": "lat",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters3_Value', ``, 'string') }}"
            },
            {
              "name": "lon",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters4_Value', ``, 'string') }}"
            },
            {
              "name": "cnt",
              "value": "=8"
            }
          ]
        },
        "options": {},
        "optimizeResponse": true,
        "dataField": "="
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.2,
      "position": [
        1660,
        1080
      ],
      "id": "b2e05de8-97df-4bf9-9bee-6e015c42b243",
      "name": "consultar_previsao_tempo_por_coordenada",
      "retryOnFail": true
    },
    {
      "parameters": {
        "resource": "chat-api",
        "operation": "read-messages",
        "instanceName": "={{ $('dados1').item.json.Instance }}",
        "remoteJid": "={{ $('dados1').item.json.From }}",
        "messageId": "={{ $('dados1').item.json.MensagemID }}"
      },
      "type": "n8n-nodes-evolution-api.evolutionApi",
      "typeVersion": 1,
      "position": [
        -460,
        680
      ],
      "id": "2a4ad1b0-be34-4625-87b8-e06c92a00ba8",
      "name": "Evolution API6",
      "credentials": {
        "evolutionApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "value": "1FWMiQaYu9r1CNfIIq5N9EpV1_DTYsUnQofvYT6ewtFA",
          "mode": "list",
          "cachedResultName": "climinha"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "P\u00e1gina1"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "remoteJid": "={{ $('dados1').item.json.From }}",
            "NomeUsuario": "={{ $('dados1').item.json['Nome da pessoa'] }}",
            "cidadesMonitoradas": "={{ $fromAI('cidade') }}",
            "preferenciaNotificacao ": "={{ $fromAI('preferenciaNotificacao') }}",
            "horarioNotificacao ": "={{ $fromAI('horarioNotificacao') }}",
            "ultimaAtualizacao ": "={{ new Date().toISOString() }}",
            "NotificacaoAtiva": true
          },
          "matchingColumns": [
            "remoteJid"
          ],
          "schema": [
            {
              "id": "remoteJid",
              "displayName": "remoteJid",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "NomeUsuario",
              "displayName": "NomeUsuario",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "cidadesMonitoradas",
              "displayName": "cidadesMonitoradas",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "preferenciaNotificacao ",
              "displayName": "preferenciaNotificacao ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "horarioNotificacao ",
              "displayName": "horarioNotificacao ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "ultimaAtualizacao ",
              "displayName": "ultimaAtualizacao ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "NotificacaoAtiva",
              "displayName": "NotificacaoAtiva",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "8be31fb6-3922-477b-80f2-3ccdcc93aa0d",
      "name": "salvar_preferencias_usuario",
      "type": "n8n-nodes-base.googleSheetsTool",
      "typeVersion": 4.6,
      "position": [
        1900,
        1060
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "appendOrUpdate",
        "documentId": {
          "__rl": true,
          "value": "1FWMiQaYu9r1CNfIIq5N9EpV1_DTYsUnQofvYT6ewtFA",
          "mode": "list",
          "cachedResultName": "climinha"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "P\u00e1gina1"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "remoteJid": "={{ $('dados1').item.json.From }}",
            "NomeUsuario": "={{ $fromAI('nomeUsuario') }}",
            "cidadesMonitoradas": "={{ JSON.stringify([{'cidade': $fromAI('cidade'), 'lat': $fromAI('lat'), 'lon': $fromAI('lon')}]) }}",
            "preferenciaNotificacao ": "={{ $fromAI('preferenciaNotificacao') }}",
            "horarioNotificacao ": "={{ $fromAI('horarioNotificacao') }}",
            "ultimaAtualizacao ": "={{ new Date().toISOString() }}",
            "NotificacaoAtiva": "={{ $fromAI('notificacaoAtiva') }}"
          },
          "matchingColumns": [
            "remoteJid"
          ],
          "schema": [
            {
              "id": "remoteJid",
              "displayName": "remoteJid",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "NomeUsuario",
              "displayName": "NomeUsuario",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "cidadesMonitoradas",
              "displayName": "cidadesMonitoradas",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "preferenciaNotificacao ",
              "displayName": "preferenciaNotificacao ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "horarioNotificacao ",
              "displayName": "horarioNotificacao ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "ultimaAtualizacao ",
              "displayName": "ultimaAtualizacao ",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "NotificacaoAtiva",
              "displayName": "NotificacaoAtiva",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "id": "0a80e68a-e14e-4228-aed4-0fbdfb175780",
      "name": "editar_preferencias_usuario",
      "type": "n8n-nodes-base.googleSheetsTool",
      "typeVersion": 4.6,
      "position": [
        2020,
        900
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "1FWMiQaYu9r1CNfIIq5N9EpV1_DTYsUnQofvYT6ewtFA",
          "mode": "list",
          "cachedResultName": "climinha"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "P\u00e1gina1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1FWMiQaYu9r1CNfIIq5N9EpV1_DTYsUnQofvYT6ewtFA/edit#gid=0"
        },
        "filtersUI": {
          "values": [
            {
              "lookupColumn": "remoteJid",
              "lookupValue": "={{ $('dados1').item.json.From }}"
            }
          ]
        },
        "options": {}
      },
      "id": "d0ae4a62-d3cf-49ea-bbac-36ae89fc627c",
      "name": "consultar_preferencias_usuario",
      "type": "n8n-nodes-base.googleSheetsTool",
      "typeVersion": 4.6,
      "position": [
        2160,
        1080
      ],
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -1140,
        1480
      ],
      "id": "4b5c678b-344c-4019-9530-41ad88cda978",
      "name": "Schedule Trigger"
    },
    {
      "parameters": {
        "documentId": {
          "__rl": true,
          "value": "1FWMiQaYu9r1CNfIIq5N9EpV1_DTYsUnQofvYT6ewtFA",
          "mode": "list",
          "cachedResultName": "climinha",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1FWMiQaYu9r1CNfIIq5N9EpV1_DTYsUnQofvYT6ewtFA/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "P\u00e1gina1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1FWMiQaYu9r1CNfIIq5N9EpV1_DTYsUnQofvYT6ewtFA/edit#gid=0"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.6,
      "position": [
        -920,
        1480
      ],
      "id": "26214792-dccf-4746-8e6c-a2d5aa9d9eb2",
      "name": "Google Sheets",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        -700,
        1480
      ],
      "id": "121c90a9-941d-4969-acd2-36fb515318d5",
      "name": "Loop Over Items"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "4ca5e3e0-32e4-4f0b-88fe-dde6909feaae",
              "name": "=dataHoraAtual",
              "value": "={{ new Date().toLocaleString('pt-BR', { timeZone: 'America/Sao_Paulo' }) }}",
              "type": "string"
            },
            {
              "id": "a1659138-cc57-4781-b6c1-c171fb06dd91",
              "name": "=dadosUsuario",
              "value": "={{ JSON.stringify($json) }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -480,
        1400
      ],
      "id": "96d65bc2-e386-4038-9591-89fda079907e",
      "name": "Edit Fields3"
    },
    {
      "parameters": {
        "resource": "messages-api",
        "instanceName": "wpbiz",
        "remoteJid": "={{ $('Google Sheets').item.json.remoteJid }}",
        "messageText": "={{ $json.message.content }}",
        "options_message": {}
      },
      "type": "n8n-nodes-evolution-api.evolutionApi",
      "typeVersion": 1,
      "position": [
        500,
        1400
      ],
      "id": "7c9c0231-e2a1-485b-a7eb-fc976097efc7",
      "name": "Evolution API1",
      "credentials": {
        "evolutionApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        660,
        1500
      ],
      "id": "97860f38-d52a-4e72-b1cb-022cf43c691c",
      "name": "Wait"
    },
    {
      "parameters": {
        "modelId": {
          "__rl": true,
          "value": "gpt-4.1-mini",
          "mode": "list",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "messages": {
          "values": [
            {
              "content": "# 1. ROLE (PAPEL) E MISS\u00c3O\nVoc\u00ea \u00e9 o \"Climinha-Notificador\", a vers\u00e3o proativa e aut\u00f4noma do agente Climinha. Sua miss\u00e3o \u00e9 executar uma verifica\u00e7\u00e3o de rotina para cada usu\u00e1rio, agindo como um amigo atencioso que manda uma mensagem \u00fatil no momento certo. Voc\u00ea mant\u00e9m a personalidade amig\u00e1vel, gentil e conversada do Climinha, transformando dados brutos em conselhos pr\u00e1ticos e bem-humorados.\n\n# 2. CONTEXTO DA EXECU\u00c7\u00c3O (INPUT)\nPara cada execu\u00e7\u00e3o, voc\u00ea receber\u00e1 um bloco de dados com a hora atual e as prefer\u00eancias de um usu\u00e1rio. O formato ser\u00e1 este:\n- **`dataHoraAtual`**: A data e hora exatas de agora (ex: \"11/07/2025 08:01:15\").\n- **`dadosUsuario`**: Um objeto JSON com as prefer\u00eancias do usu\u00e1rio.\n  - Exemplo de dadosUsuario: `{\"remoteJid\":\"5511...\",\"NomeUsuario\":\"Ramos\",\"cidade\":\"sao paulo\",\"preferenciaNotificacao\":\"Diariamente\",\"horarioNotificacao\":\"08:00\",\"NotificacaoAtiva\":\"TRUE\"}`\n  - Note que o campo `NomeUsuario` pode estar vazio ou ausente.\n\n# 3. TASK: L\u00d3GICA DE EXECU\u00c7\u00c3O EM 4 ETAPAS\nSiga este fluxo rigorosamente. Use a ferramenta `Think` para planejar seus passos.\n\n**ETAPA 1: An\u00e1lise de Agendamento (Decidir se hoje \u00e9 dia de agir)**\n- Analise os `dadosUsuario` e a `dataHoraAtual`.\n- **CASO \"Diariamente\":** A notifica\u00e7\u00e3o deve ser processada APENAS SE a HORA de `dataHoraAtual` for igual \u00e0 HORA em `horarioNotificacao`.\n- **CASO \"Semanalmente\":** A notifica\u00e7\u00e3o deve ser processada APENAS SE o dia da semana atual for Segunda-feira E a HORA atual for igual \u00e0 HORA em `horarioNotificacao`.\n- **CASO \"Apenas Alertas\":** Prossiga para a pr\u00f3xima etapa, pois alertas s\u00e3o checados a toda hora.\n- **Se nenhuma das condi\u00e7\u00f5es de tempo for atendida, sua tarefa termina aqui. Responda IMEDIATAMENTE com `[NO_NOTIFICATION_NEEDED]`**\n\n---\n**ETAPA 2: Busca de Coordenadas (Descobrir onde fica a cidade)**\n- Se a ETAPA 1 foi positiva, use a ferramenta `obter_coordenadas_cidade` com o valor do campo `cidade` dos `dadosUsuario`.\n- Se a ferramenta n\u00e3o retornar nenhuma coordenada, a cidade pode ser inv\u00e1lida. Encerre o processo respondendo com `[NO_NOTIFICATION_NEEDED]`.\n\n---\n**ETAPA 3: Busca da Previs\u00e3o do Tempo (Ver como est\u00e1 o tempo l\u00e1)**\n- Use a `lat` e `lon` obtidas na ETAPA 2 como input para a ferramenta `consultar_previsao_tempo_por_coordenadas`.\n\n---\n**ETAPA 4: An\u00e1lise, Interpreta\u00e7\u00e3o e Gera\u00e7\u00e3o da Mensagem (A Alma do Climinha)**\n- Analise os dados da previs\u00e3o recebidos.\n- **Para \"Diariamente\" ou \"Semanalmente\":**\n    - Construa uma resposta em **dois bal\u00f5es de mensagem**, separados por `///`.\n    - **Primeiro Bal\u00e3o (Os Dados):** Crie um resumo detalhado e bem formatado, como nos seus melhores dias. Inclua temperatura atual, m\u00e1xima/m\u00ednima, condi\u00e7\u00e3o do c\u00e9u, chance de chuva e umidade.\n    - **Segundo Bal\u00e3o (A Dica):** Interprete os dados! Crie uma dica criativa, pessoal e \u00fatil. Se o tempo est\u00e1 bom, sugira algo ao ar livre. Se est\u00e1 frio e chuvoso, sugira algo aconchegante.\n    - **Exemplo de Resposta (Dia Bom):**\n      Previs\u00e3o para S\u00e3o Paulo: \u2600\ufe0f\n      - Agora: 18\u00b0C (Sensa\u00e7\u00e3o de 17\u00b0C)\n      - Durante o dia: A temperatura sobe para 25\u00b0C, sem chance de chuva!\n      - Umidade do ar: Em torno de 60%.\n      ///\n      Opa, Ramos, bom dia! O tempo a\u00ed em S\u00e3o Paulo est\u00e1 pedindo pra sair de casa! Perfeito para uma caminhada ou um almo\u00e7o ao ar livre. Pode deixar o casaco pesado em casa hoje! \ud83d\ude09\n\n- **Para \"Apenas Alertas\":**\n    - Procure por condi\u00e7\u00f5es extremas (ex: `pop` > 0.7, `weather.main` cont\u00e9m \"Thunderstorm\", `main.temp` > 35\u00b0C).\n    - **Se encontrar uma condi\u00e7\u00e3o extrema**, crie um alerta em dois bal\u00f5es.\n    - **Exemplo de Alerta:**\n      Alerta de Temporal para Belo Horizonte: \u26c8\ufe0f\n      - Condi\u00e7\u00e3o: Tempestades se formando\n      - Chance de chuva: Aumentando para 85% nas pr\u00f3ximas horas.\n      - Vento: Rajadas de at\u00e9 40km/h.\n      ///\n      Se liga, Ramos! Tem um temporal se formando a\u00ed pra mais tarde. Melhor garantir que as janelas estejam fechadas e evitar sair se n\u00e3o for estritamente necess\u00e1rio, beleza? Cuidado extra no tr\u00e2nsito!\n    - **Se n\u00e3o encontrar condi\u00e7\u00e3o extrema, encerre respondendo com `[NO_NOTIFICATION_NEEDED]`**.\n\n# 4. FERRAMENTAS DISPON\u00cdVEIS\n1.  **`obter_coordenadas_cidade`**: USE ESTA PRIMEIRO para obter latitude e longitude a partir do nome da cidade.\n2.  **`consultar_previsao_tempo_por_coordenadas`**: USE ESTA EM SEGUNDO LUGAR, com o resultado da primeira ferramenta.\n3.  **`Think`**: OBRIGAT\u00d3RIO para planejar e analisar.\n\n# 5. FORMATO DA SA\u00cdDA (OUTPUT)\n- **SE UMA NOTIFICA\u00c7\u00c3O DEVE SER ENVIADA:** Sua sa\u00edda final deve ser uma **\u00daNICA STRING DE TEXTO** contendo a mensagem completa a ser enviada no WhatsApp.\n- **SE NENHUMA NOTIFICA\u00c7\u00c3O FOR NECESS\u00c1RIA:** Sua sa\u00edda final deve ser **EXATAMENTE** a string `[NO_NOTIFICATION_NEEDED]`.",
              "role": "=system"
            },
            {
              "content": "={{ $json.dataHoraAtual }}\n{{ $json.dadosUsuario }}"
            }
          ]
        },
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "typeVersion": 1.8,
      "position": [
        -260,
        1400
      ],
      "id": "ced104e9-dd77-418f-9b70-ba1b718ed204",
      "name": "OpenAI1",
      "retryOnFail": true,
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "toolDescription": "Use esta ferramenta SEMPRE PRIMEIRO para converter o nome de uma cidade em uma lista de poss\u00edveis coordenadas (latitude e longitude). Ela pode retornar uma ou mais localiza\u00e7\u00f5es. O input \u00e9 o nome da cidade enviado pelo usu\u00e1rio.\n\nO nome da cidade deve estar SEM ACENTOs\n\nexemplo S\u00e3o Paulo, vira \"sao paulo\"\n\npesquise sempre pela cidade, se tiver CERTEZA que do pais que \u00e9, voc\u00ea pode colocar um ,sigla do pais, tipo ,BR\n\n\n",
        "url": "http://api.openweathermap.org/geo/1.0/direct",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "=={{ $fromAI('parameters0_Value', '').normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\").toLowerCase().replace() }}"
            },
            {
              "name": "appid",
              "value": "ec963ad89982f8eec8b42dc062f2f7b3"
            }
          ]
        },
        "options": {},
        "optimizeResponse": true,
        "dataField": "="
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.2,
      "position": [
        -40,
        1780
      ],
      "id": "36099d08-51a5-4807-accf-640cff5581d2",
      "name": "obter_coodernadas_cidade1",
      "retryOnFail": true
    },
    {
      "parameters": {
        "toolDescription": "Use esta ferramenta DEPOIS de obter as coordenadas exatas com a ferramenta 'obter_coordenadas_cidade'. Ela recebe latitude e longitude e retorna a previs\u00e3o do tempo de agora e das proximas 24 horas\n\n    horario (dt_txt): \u00c9 a data e a hora para a qual a previs\u00e3o do tempo se refere.\n\n    temperatura (main.temp): \u00c9 a temperatura real prevista.\n\n    sensacao (main.feels_like): Corresponde \u00e0 sensa\u00e7\u00e3o t\u00e9rmica, que \u00e9 como a temperatura \u00e9 percebida pelo corpo humano, considerando fatores como o vento e a umidade.\n\n    umidade (main.humidity): Indica a umidade relativa do ar em porcentagem.\n\n    condicao (weather[0].description): Descreve as condi\u00e7\u00f5es do c\u00e9u, como \"nublado\", \"c\u00e9u limpo\", etc.\n\n    chance_chuva (pop): \u00c9 a probabilidade de precipita\u00e7\u00e3o (chuva). O valor original (0.0 a 1.0) foi convertido para uma porcentagem de 0 a 100.",
        "url": "https://api.openweathermap.org/data/2.5/forecast",
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "appid",
              "value": "ec963ad89982f8eec8b42dc062f2f7b3"
            },
            {
              "name": "units",
              "value": "metric"
            },
            {
              "name": "lang",
              "value": "pt_br"
            },
            {
              "name": "lat",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters3_Value', ``, 'string') }}"
            },
            {
              "name": "lon",
              "value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('parameters4_Value', ``, 'string') }}"
            },
            {
              "name": "cnt",
              "value": "=8"
            }
          ]
        },
        "options": {},
        "optimizeResponse": true,
        "dataField": "="
      },
      "type": "n8n-nodes-base.httpRequestTool",
      "typeVersion": 4.2,
      "position": [
        -200,
        1780
      ],
      "id": "89da3ea7-8078-41e1-9ea4-9da33fb9653f",
      "name": "consultar_previsao_tempo_por_coordenada1",
      "retryOnFail": true
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "dec3a628-e24f-46ed-8c9b-a3e406f9aa3d",
              "leftValue": "={{ $json.message.content }}",
              "rightValue": "[NO_NOTIFICATION_NEEDED]",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            },
            {
              "id": "1d5c8cd8-b505-4a86-9396-d3bdb8971d33",
              "leftValue": "",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "equals",
                "name": "filter.operator.equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        100,
        1400
      ],
      "id": "3cdc5bcf-4e0b-40a7-be3c-a35d0f99ed95",
      "name": "If"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        340,
        1240
      ],
      "id": "0f2d3e78-af96-4935-8a11-676366c0f87f",
      "name": "No Operation, do nothing"
    },
    {
      "parameters": {},
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "typeVersion": 1,
      "position": [
        120,
        1780
      ],
      "id": "461a0cf5-8e82-45aa-8022-299f844d8155",
      "name": "Think"
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "dados1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "dados1": {
      "main": [
        [
          {
            "node": "setVazio",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        [
          {
            "node": "separador ",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Evolution API5": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Think1": {
      "ai_tool": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "separador ": {
      "main": [
        [
          {
            "node": "Edit Fields4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields4": {
      "main": [
        [
          {
            "node": "Split Out1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out1": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [],
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait1": {
      "main": [
        [
          {
            "node": "Evolution API5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Edit Fields2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields2": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Redis Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Message Type1": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Evolution API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Evolution API": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "OpenAI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "setVazio": {
      "main": [
        [
          {
            "node": "Evolution API6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "consultar_previsao_tempo_por_coordenada": {
      "ai_tool": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "obter_coodernadas_cidade": {
      "ai_tool": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Evolution API6": {
      "main": [
        [
          {
            "node": "Message Type1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "salvar_preferencias_usuario": {
      "ai_tool": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "editar_preferencias_usuario": {
      "ai_tool": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "consultar_preferencias_usuario": {
      "ai_tool": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Edit Fields3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields3": {
      "main": [
        [
          {
            "node": "OpenAI1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Evolution API1": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI1": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "consultar_previsao_tempo_por_coordenada1": {
      "ai_tool": [
        [
          {
            "node": "OpenAI1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "obter_coodernadas_cidade1": {
      "ai_tool": [
        [
          {
            "node": "OpenAI1",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "If": {
      "main": [
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Evolution API1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Think": {
      "ai_tool": [
        [
          {
            "node": "OpenAI1",
            "type": "ai_tool",
            "index": 0
          }
    

Credentials you'll need

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

Pro

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

About this workflow

agente wpp audio msg separada. Uses agent, lmChatOpenAi, n8n-nodes-evolution-api, toolThink. Webhook trigger; 39 nodes.

Source: https://github.com/ArthurRamoss/climinha/blob/27e023160c34a8778f91edef28e4b4c88af477c0/workflow.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

Ai Agente de IA - Nutricionista. Uses n8n-nodes-evolution-api, lmChatOpenAi, openAi, googleSheets. Webhook trigger; 22 nodes.

N8N Nodes Evolution Api, OpenAI Chat, OpenAI +4
AI & RAG

This n8n workflow is designed for Facebook Page administrators, social media managers, and community moderators who want to automate comment management on their Facebook Pages. It's perfect for busine

Facebook Graph Api, Agent, HTTP Request +8
AI & RAG

This n8n workflow creates an intelligent WhatsApp customer support bot that can handle text, image, audio, and document messages. The workflow automatically processes incoming messages through differe

HTTP Request, N8N Nodes Rapiwa, Agent Tool +9
AI & RAG

Agent: IPTV (instance_e2165d22_1762376395079). Uses openAi, redis, supabase, httpRequest. Webhook trigger; 56 nodes.

OpenAI, Redis, Supabase +7
AI & RAG

🧠 Gwen – The AI Voice Marketing Agent Gwen is your intelligent voice-powered marketing assistant built in n8n. She combines the power of OpenAI, ElevenLabs, and automation workflows to handle content

Tool Workflow, Memory Buffer Window, Agent +10