0% acharam este documento útil (0 voto)
36 visualizações41 páginas

Message

O documento descreve um fluxo de trabalho para agendamento de serviços em uma barbearia, incluindo a estruturação de dados de mensagens recebidas e interações com APIs. Ele detalha como interpretar solicitações de agendamento, verificar horários e executar ações como agendar, cancelar ou atualizar eventos. Além disso, inclui informações sobre credenciais e chamadas de função para manipulação de dados e comunicação com serviços externos.

Enviado por

Thyego Brandão
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
36 visualizações41 páginas

Message

O documento descreve um fluxo de trabalho para agendamento de serviços em uma barbearia, incluindo a estruturação de dados de mensagens recebidas e interações com APIs. Ele detalha como interpretar solicitações de agendamento, verificar horários e executar ações como agendar, cancelar ou atualizar eventos. Além disso, inclui informações sobre credenciais e chamadas de função para manipulação de dados e comunicação com serviços externos.

Enviado por

Thyego Brandão
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato TXT, PDF, TXT ou leia on-line no Scribd

{

"nodes": [
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "ed5a7603-c227-4d6a-91fd-d2aa5e127f89",
"name": "openai_token",
"value": "sk-proj-SPUV_MEeH5-
Z6A6c0h2l_sZ3bfL_tm5_84cJpEHllKv46P4s4J7YrMa5TlP4hpJCk5SojRFl32T3BlbkFJFASBEuBB_7wL
h_R6xSFilIVBfiBrNmN4-jVmCAV8vA0Uayf35Jag18jLgA01t9UBDz1uy0M6AA",
"type": "string"
},
{
"id": "dd5595fa-ebc6-4b31-acca-6608ddb82cfd",
"name": "base_leads_supabase",
"value": "leads_cliente_A",
"type": "string"
},
{
"id": "8a8c1da1-9d3f-44f3-adff-4ee96b7e997d",
"name": "prompt_agent",
"value": "Detalhes da Barbearia Nome: Barbearia Estilo Endereço: Rua
Teste, 13, Centro, Cidade Exemplo, SP, 12345-678 Horário de Atendimento: 09:00 às
20:00 Serviços e Valores: Corte de Cabelo: R$ 40,00 Barba: R$ 25,00 Pintura de
Cabelo: R$ 50,00 Sobrancelha: R$ 15,00 Lavagem de Cabelo: R$ 20,00 Pacote Completo
(Corte + Barba): R$ 60,00 Ferramentas (Functions) 1. Ferramentas de Google Calendar
verEventos Descrição: Lista eventos (filtro de datas opcional). agendarEvento
Descrição: Cria evento (título, descrição, datas no formato ISO 8601, etc.).
Converta “amanhã” para data/hora exatas. Se não houver data de término, assuma 1
hora. Pode incluir Google Meet (peça Attendees). cancelarEvento Descrição: Cancela
evento pelo ID. atualizarEvento Descrição: Altera dados de um evento (ID, título,
descrição, datas etc.). Sempre ISO 8601; se sem término, 1 hora. obterEvento
Descrição: Obtém detalhes de evento (ID). Regras Fundamentais Corrente de Ações
(Chain of Actions) Você não tem memória de IDs/dados entre solicitações, portanto
sempre deve buscá-las antes de executar qualquer ação. Se o usuário pedir “buscar
empresas X e mandar email para cada uma”, chame search_google (ou buscarGoogle) e,
na mesma solicitação, parse e chame enviarEmail. Formato de Datas/Horas Sempre ISO
8601 (YYYY-MM-DDTHH:MM:SS-03:00). Se “amanhã”, converta. Sem término, 1 hora.
Chamadas de Função Ao chamar qualquer função, retorne apenas a saída necessária.
Preencha parâmetros obrigatórios (ID, query, datas etc.). Respostas ao Usuário Em
português, claro e objetivo. Não apresente dados sensíveis não solicitados. Cadeia
de Pensamentos para Evitar Erros Quando receber um pedido relacionado à barbearia,
siga estes passos: Interpretar a Solicitação Exemplo: O lead diz “Quero agendar
um corte de cabelo para às 20h.” Reconhecer que é um pedido de agendamento e que
20h é fora do horário. Checar Restrições Horário de funcionamento (09:00–20:00).
Se for um serviço inexistente (ex.: “Quero agendar uma cirurgia plástica”), deve
recusar ou redirecionar, pois não está no escopo. Converter Datas e Horas Se o
usuário falar “amanhã de manhã”, pergunte qual horário exato, ou assuma 09:00. Se
disser “amanhã às 15h”, converta para ISO 8601 (ex.: 2025-03-12T15:00:00-03:00).
Verificar Disponibilidade Se precisar ver eventos, use verEventos. Se houver
conflito, proponha outro horário. Executar Ação Agendar? Use agendarEvento.
Cancelar? Precisará do ID do evento → use verEventos para encontrá-lo → depois
cancelarEvento. Atualizar? Mesmo fluxo: obter ID → chamar atualizarEvento. Retornar
Resposta ao Usuário Sempre em português claro. Se o horário for inválido, explique
por que e sugira um horário dentro de 09:00–20:00. Caso precise de mais detalhes
(ex.: “Qual serviço você deseja?”), pergunte antes de prosseguir. Exemplos de
Aplicação Exemplo 1: Usuário: “Quero marcar corte de cabelo hoje às 19h.” Passo 1:
Interpretar → é um agendamento. Passo 2: Checar → 19h > 20h, fora do horário. Passo
3: Sugerir horário alternativo (ex.: 18h). Se o usuário aceitar 18h, converter para
ISO 8601 e usar agendarEvento. Retornar mensagem “Ok, marquei seu corte de cabelo
às 18h.” Exemplo 2: Usuário: “Quero ver meus horários para amanhã.” Passo 1:
Interpretar → ver eventos. Passo 2: Checar datas (amanhã = YYYY-MM-DD). Passo 3:
Use verEventos com data de amanhã. Passo 4: Retornar a lista ao usuário em texto de
WhatsApp (“Você tem corte de cabelo às 09:00, barba às 14:00, etc.”). Exemplo 3:
Usuário: “Qual o preço do corte de cabelo?” Resposta: “O corte de cabelo custa R$
40,00. Deseja agendar um horário?”",
"type": "string"
},
{
"id": "f9eb7d7c-2fe9-46b8-abc8-2360f2c1e4bd",
"name": "delay_mensagens_segundos",
"value": 20,
"type": "number"
},
{
"id": "46e4cb3a-e0ed-4a75-8d58-b7a37445650e",
"name": "model",
"value": "gpt-4.1-mini",
"type": "string"
},
{
"id": "e1c483ae-8c4e-454d-ac4d-903b45ec7575",
"name": "temperature",
"value": 0.2,
"type": "number"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
112,
-384
],
"id": "cb0d845f-3fa7-4193-8b9b-1c57c710f7f3",
"name": "Credenciais"
},
{
"parameters": {},
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
576,
-368
],
"id": "7eeaa83d-3bba-4eb7-adef-029baed03afa",
"name": "No Operation, do nothing"
},
{
"parameters": {
"method": "POST",
"url": "={{ $item(\"0\").$node[\"Webhook\"].json[\"body\"]
[\"server_url\"] }}/chat/getBase64FromMediaMessage/{{ $item(\"0\").
$node[\"Webhook\"].json[\"body\"][\"instance\"] }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "={{ $item(\"0\").$node[\"Webhook\"].json[\"body\"]
[\"apikey\"] }}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"message\": {\n \"key\": {\
n \"id\": \"{{ $json.body.data.key.id }}\"\n }\n },\n \"convertToMp4\":
true\n}",
"options": {
"redirect": {
"redirect": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1040,
-64
],
"id": "774fa708-3ff9-4ab6-911d-4213555ad3de",
"name": "HTTP Request"
},
{
"parameters": {
"operation": "toBinary",
"sourceProperty": "base64",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
1200,
-64
],
"id": "6cefa31c-80c2-4fab-9a5c-0d906e169971",
"name": "Convert to File"
},
{
"parameters": {
"method": "POST",
"url": "https://api.openai.com/v1/audio/transcriptions",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $item(\"0\").
$node[\"Credenciais\"].json[\"openai_token\"] }}"
}
]
},
"sendBody": true,
"contentType": "multipart-form-data",
"bodyParameters": {
"parameters": [
{
"name": "model",
"value": "gpt-4o-transcribe"
},
{
"parameterType": "formBinaryData",
"name": "file",
"inputDataFieldName": "data"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1392,
-64
],
"id": "14cdce87-f3f9-4ff5-bc46-3497cbb2fa47",
"name": "Transcreve o audio"
},
{
"parameters": {
"numberInputs": 5
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
1856,
-336
],
"id": "1f536007-bcdf-4b92-86c6-04da14abf4cf",
"name": "Referencia das mensagens recebidas",
"alwaysOutputData": false
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "27c51e29-c60d-4722-886b-f36f029414f8",
"name": "remoteJid",
"value": "={{ $json.body.data.key.remoteJid }}",
"type": "string"
},
{
"id": "2ff399a7-fa5d-489f-b297-6cd7d2b81968",
"name": "message",
"value": "={{ $json.body.data.message.conversation }}",
"type": "string"
},
{
"id": "587e6349-c26f-417b-8288-e9a5eeed6028",
"name": "id",
"value": "={{ $json.body.data.key.id }}",
"type": "string"
},
{
"id": "c03314b4-3da4-4bcc-946b-54765e418838",
"name": "Timestamp",
"value": "={{ $json.body.data.messageTimestamp }}",
"type": "number"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1216,
-592
],
"id": "eac08406-b934-4b9c-9688-28d9433f7cd9",
"name": "Estruturei os dados (conversation)"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "27c51e29-c60d-4722-886b-f36f029414f8",
"name": "remoteJid",
"value": "={{ $json.body.data.key.remoteJid }}",
"type": "string"
},
{
"id": "2ff399a7-fa5d-489f-b297-6cd7d2b81968",
"name": "message",
"value":
"={{ $json.body.data.message.ephemeralMessage.message.extendedTextMessage.text }}",
"type": "string"
},
{
"id": "587e6349-c26f-417b-8288-e9a5eeed6028",
"name": "id",
"value": "={{ $json.body.data.key.id }}",
"type": "string"
},
{
"id": "c03314b4-3da4-4bcc-946b-54765e418838",
"name": "Timestamp",
"value": "={{ $json.body.data.messageTimestamp }}",
"type": "number"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1216,
-416
],
"id": "093b11e2-d5bb-4a7b-b63d-c1a397952529",
"name": "Estruturei os dados (EphemeralMessage)"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "27c51e29-c60d-4722-886b-f36f029414f8",
"name": "remoteJid",
"value": "={{ $json.body.data.key.remoteJid }}",
"type": "string"
},
{
"id": "2ff399a7-fa5d-489f-b297-6cd7d2b81968",
"name": "message",
"value": "={{ $json.body.data.message.extendedTextMessage.text }}",
"type": "string"
},
{
"id": "587e6349-c26f-417b-8288-e9a5eeed6028",
"name": "id",
"value": "={{ $json.body.data.key.id }}",
"type": "string"
},
{
"id": "c03314b4-3da4-4bcc-946b-54765e418838",
"name": "Timestamp",
"value": "={{ $json.body.data.messageTimestamp }}",
"type": "number"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1232,
-240
],
"id": "c5ed1650-b953-48a8-854d-af7e6b0cbf24",
"name": "Estruturei os dados (extendedTextMessage"
},
{
"parameters": {
"operation": "push",
"list": "={{ $json.remoteJid }}",
"messageData": "={{ $json.toJsonString() }}",
"tail": true
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
2064,
-304
],
"id": "51b8a997-e7ac-4bc0-b0f0-300219381002",
"name": "Add mensagens na lista",
"credentials": {
"redis": {
"id": "mYCbO9zX6OE4bagD",
"name": "Redis account"
}
}
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ JSON.parse($json.messages.last()).id }}",
"rightValue": "={{ $('Referencia das mensagens
recebidas').item.json.id }}",
"operator": {
"type": "string",
"operation": "notEquals"
},
"id": "5636b6a7-4781-4c26-ab42-2a5d4ed01177"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "faz nada"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "dc40b6b5-14aa-47dc-ae35-c9353a9ebae1",
"leftValue":
"={{ DateTime.fromSeconds(Number(JSON.parse($json.messages.last()).Timestamp)) }}",
"rightValue": "={{ $now.minus($item(\"0\").
$node[\"Credenciais\"].json[\"delay_mensagens_segundos\"], 'seconds' ) }}",
"operator": {
"type": "dateTime",
"operation": "before"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "seguir fluxo"
}
]
},
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "Aguardar"
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
2432,
-320
],
"id": "57cf6fb3-fd72-4e53-909a-a3c06e91547e",
"name": "Acumulo de mensagens"
},
{
"parameters": {},
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
2688,
-640
],
"id": "6e5d2f3f-45d7-452c-99ba-cf32aa1183b6",
"name": "No Operation, do nothing1"
},
{
"parameters": {},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
2656,
-208
],
"id": "a858ad9d-122a-49dd-a3d7-c5a094f9ccfa",
"name": "Wait",
"webhookId": "b766236b-1d1d-4ff0-bb5c-86d120b3f8b3"
},
{
"parameters": {
"fieldToSplitOut": "messages",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
2896,
-304
],
"id": "c79b43c0-fe12-428e-b293-03b01076491d",
"name": "Separa em várias mensagens"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "1bfdbd5e-2f81-4034-9752-5d4e7ca3eadb",
"name": "messages",
"value": "={{ $json.messages }}",
"type": "object"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
3072,
-304
],
"id": "f26d5846-4e3c-439e-8fc4-aef19c346d97",
"name": "texto para objeto"
},
{
"parameters": {
"operation": "delete",
"key": "=5521997001902@s.whatsapp.net\n"
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
2688,
-464
],
"id": "90719bb4-d4fb-4863-85dd-e3e85ab509a3",
"name": "Redis",
"credentials": {
"redis": {
"id": "mYCbO9zX6OE4bagD",
"name": "Redis account"
}
}
},
{
"parameters": {
"mode": "chooseBranch",
"useDataOfInput": 2
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
272,
-240
],
"id": "79f029a7-6645-4458-9e5c-1a26ae6f3786",
"name": "Envia os dados do webhook"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "1dc7119e-e8c6-4ae6-9c8e-2fde502a49b0",
"leftValue": "={{ $json.body.data.key.fromMe }}",
"rightValue": "",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
432,
-224
],
"id": "d06d5164-719d-4c85-b1af-251d87b16eb5",
"name": "Verifica se a mensagem é do meu time"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "49dfe280-3ebe-4fc7-ae60-d846c024bc82",
"leftValue": "={{ $json.body.data.messageType }}",
"rightValue": "conversation",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "conversation"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "ef483d0a-fb62-47c6-9674-c77928d06783",
"leftValue": "={{ $json.body.data.messageType }}",
"rightValue": "ephemeralMessage",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Mensagens temporárias"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "f5a226fa-fb37-4872-af24-ca09cc1a842f",
"leftValue": "={{ $json.body.data.messageType }}",
"rightValue": "extentededTextMessage",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "ExtentededTextMessage"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "ca819673-aa47-4421-8e31-d9a935feff49",
"leftValue": "={{ $json.body.data.messageType }}",
"rightValue": "audioMessage",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Audio"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "553c1c24-2e85-4a78-871d-8d6dfe83fea6",
"leftValue": "={{ $json.body.data.messageType }}",
"rightValue": "imageMessage",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Imagem"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
768,
-256
],
"id": "ad2e9f35-a5be-4d67-a526-f412f3610937",
"name": "Roteador de mensagens",
"alwaysOutputData": false
},
{
"parameters": {
"operation": "getAll",
"tableId": "={{ $item(\"0\").
$node[\"Credenciais\"].json[\"base_leads_supabase\"] }}",
"returnAll": true,
"filters": {
"conditions": [
{
"keyName": "remotejid",
"condition": "eq",
"keyValue": "={{ $('Referencia das mensagens
recebidas').item.json.remoteJid }}"
}
]
}
},
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
3696,
-304
],
"id": "07b7183f-81ca-4727-a590-5c33364198ed",
"name": "Varredura do Banco de dados REMOTEJID",
"alwaysOutputData": true,
"credentials": {
"supabaseApi": {
"id": "mi3uRUpfc3zrd8a4",
"name": "Supabase cloud alltomatizando "
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "c6bd840d-1b83-41e0-a53d-075ef7bbad89",
"leftValue": "={{ $json }}",
"rightValue": "",
"operator": {
"type": "object",
"operation": "notEmpty",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
3904,
-304
],
"id": "e5a761fd-e4f3-4535-b11c-02daac6cb5c9",
"name": "Verificar se existe o LEAD está no BD"
},
{
"parameters": {
"tableId": "={{ $item(\"0\").
$node[\"Credenciais\"].json[\"base_leads_supabase\"] }}",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "remotejid",
"fieldValue": "={{ $item(\"0\").$node[\"Referencia das mensagens
recebidas\"].json[\"remoteJid\"] }}"
},
{
"fieldId": "name",
"fieldValue": "={{ $item(\"0\").$node[\"Webhook\"].json[\"body\"]
[\"data\"][\"pushName\"] }}"
},
{
"fieldId": "timestamp",
"fieldValue": "={{ $now }}"
}
]
}
},
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
4144,
-224
],
"id": "17a82da8-42ba-4a60-99ca-e28d2f98f306",
"name": "Cria LEAD no BD",
"credentials": {
"supabaseApi": {
"id": "mi3uRUpfc3zrd8a4",
"name": "Supabase cloud alltomatizando "
}
}
},
{
"parameters": {},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
4384,
-304
],
"id": "62bce807-e2a4-482e-a4d0-a7a62688b088",
"name": "Carrega Json"
},
{
"parameters": {
"content": "# Verificação de LEADS no supabase",
"height": 352,
"width": 912,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
3616,
-432
],
"typeVersion": 1,
"id": "5e281c27-a65c-45e3-97e3-a4bf71d485e4",
"name": "Sticky Note"
},
{
"parameters": {
"content": "# Junta Mensagens recebidas",
"height": 352,
"width": 736,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"position": [
2864,
-432
],
"typeVersion": 1,
"id": "6531b5b2-32a5-4e24-ba19-b5b685f70e71",
"name": "Sticky Note1"
},
{
"parameters": {
"fieldsToSummarize": {
"values": [
{
"aggregation": "concatenate",
"field": "messages.message",
"separateBy": "\n"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.summarize",
"typeVersion": 1.1,
"position": [
3280,
-304
],
"id": "eabd5517-d161-4dd5-a06b-52fdd48b0ddd",
"name": "Concatena mensagens "
},
{
"parameters": {
"content": "# BUFFER de mensagens",
"height": 848,
"width": 816,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"position": [
2032,
-656
],
"typeVersion": 1,
"id": "630ef344-d805-4021-80e6-61fc0c8771e5",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "# ROTEAMENTO de mensagens recebidas",
"height": 1120,
"width": 1264,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"position": [
752,
-656
],
"typeVersion": 1,
"id": "9340e6ca-6dd9-4309-a59d-1bd3515f9002",
"name": "Sticky Note3"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "a3d5d19e-a5a0-4c9e-9ae0-c4198877920b",
"name": "remoteJid",
"value": "={{ $('Roteador de
mensagens').item.json.body.data.key.remoteJid }}",
"type": "string"
},
{
"id": "70690517-d8a4-420a-b587-24d414b17a54",
"name": "message",
"value": "={{ $json.text }}",
"type": "string"
},
{
"id": "8d7ec572-37c7-4197-aa16-b2d258fae481",
"name": "id",
"value": "={{ $('Roteador de
mensagens').item.json.body.data.key.id }}",
"type": "string"
},
{
"id": "0f6f24e2-25a1-45af-8285-aad2921cd536",
"name": "timestamp",
"value": "={{ $('Roteador de
mensagens').item.json.body.data.messageTimestamp }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1568,
-64
],
"id": "666eb537-1244-4b42-bbaf-3c0de698e0f5",
"name": "Estruturar os dados (Audio)"
},
{
"parameters": {
"operation": "delete",
"tableId": "leads_cliente_A",
"filters": {
"conditions": [
{
"keyName": "remotejid",
"condition": "eq",
"keyValue": "5521997001902@s.whatsapp.net"
}
]
}
},
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
4192,
-576
],
"id": "99a81498-f849-4f48-b498-956a0d8af86c",
"name": "Deleta histórico",
"credentials": {
"supabaseApi": {
"id": "mi3uRUpfc3zrd8a4",
"name": "Supabase cloud alltomatizando "
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "82e1d4ff-ffd0-4746-9e96-932d41b28d34",
"name": "model",
"value": "={{ $item(\"0\").
$node[\"Credenciais\"].json[\"model\"] }}",
"type": "string"
},
{
"id": "202025cd-aa08-469c-9df6-5eae941a3e9d",
"name": "instructions",
"value": "=## Data e hora atual: {{ $now.format('yyyy-MM-dd
HH:mm') }}\n\n## Nome do Usuário: Sempre chame o usuário pelo nome: '{{ $
('Webhook').item.json.body.data.pushName.split(' ')[0] }}'",
"type": "string"
},
{
"id": "8909ab42-40c6-418a-853c-d7481791ab94",
"name": "temperature",
"value": "={{ $item(\"0\").
$node[\"Credenciais\"].json[\"temperature\"] }}",
"type": "number"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
4656,
-560
],
"id": "9a6b9261-1566-42f8-800c-e68a6f0603ca",
"name": "Modelo, instruções, Temperatura"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $item(\"0\").$node[\"Varredura do Banco de
dados REMOTEJID\"].json }}",
"rightValue": "",
"operator": {
"type": "object",
"operation": "empty",
"singleValue": true
},
"id": "75fed03c-7c54-4ec6-9367-26d5f6d204cc"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Primeira mensagem"
}
]
},
"options": {
"fallbackOutput": "extra",
"renameFallbackOutput": "Próximas mensagens"
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
4656,
-304
],
"id": "7e88b619-dd99-491b-b3a9-0d5bf81d92b3",
"name": "Verificar se é a primeira mensagem"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "502776f5-eb0c-49bd-aa62-eb2d6008fecd",
"name": "input[0].role",
"value": "developer",
"type": "string"
},
{
"id": "f799ea89-be9e-46e9-949f-299eeb1d58b3",
"name": "input[0].content[0].type",
"value": "input_text",
"type": "string"
},
{
"id": "4accdd23-5cc4-41c7-ac8d-d7f887a9ba32",
"name": "input[0].content[0].text",
"value": "={{ $item(\"0\").
$node[\"Credenciais\"].json[\"prompt_agent\"] }}",
"type": "string"
},
{
"id": "f05de5fd-ed94-4e16-8a9e-da8b40535773",
"name": "input[1].role",
"value": "user",
"type": "string"
},
{
"id": "9cb1292b-a97d-4f18-8b47-213e6ea21be7",
"name": "input[1].content[0].type",
"value": "input_text",
"type": "string"
},
{
"id": "579227d1-59ff-44d9-9cc5-203c8a965424",
"name": "input[1].content[0].text",
"value": "={{ $('Referencia dados
estruturados').item.json.message }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
4864,
-416
],
"id": "97b980b4-57b6-4c6e-bd10-53e1c6b9e227",
"name": "Prompt do Agent e mensagem do usuário"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "5102605e-c6fb-4bf7-b053-5f7e1ebdcf70",
"name": "remoteJid",
"value": "={{ $('Referencia das mensagens
recebidas').item.json.remoteJid }}",
"type": "string"
},
{
"id": "a4740ab9-8fa3-4873-b752-e7df0b64460a",
"name": "message",
"value": "={{ $json.concatenated_messages_message }}",
"type": "string"
},
{
"id": "0b7349b0-3fd9-4412-91a4-ae81fab65c4e",
"name": "id",
"value": "={{ $('Referencia das mensagens
recebidas').item.json.id }}",
"type": "string"
},
{
"id": "90f4f7ec-fde1-46d0-97f3-e06a919406e2",
"name": "Timestamp",
"value": "={{ $('Referencia das mensagens
recebidas').item.json.Timestamp }}",
"type": "number"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
3488,
-304
],
"id": "154cb60a-4842-4b0c-9de7-17a4ec00ca83",
"name": "Referencia dados estruturados"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "502776f5-eb0c-49bd-aa62-eb2d6008fecd",
"name": "input[0].role",
"value": "user",
"type": "string"
},
{
"id": "f799ea89-be9e-46e9-949f-299eeb1d58b3",
"name": "input[0].content[0].type",
"value": "input_text",
"type": "string"
},
{
"id": "4accdd23-5cc4-41c7-ac8d-d7f887a9ba32",
"name": "input[0].content[0].text",
"value": "={{ $('Referencia dados
estruturados').item.json.message }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
4864,
-240
],
"id": "a1e9fb5e-5c47-4dbf-b289-a66c2a4ec63d",
"name": "Incluir mensagem do usuário"
},
{
"parameters": {
"operation": "getAll",
"tableId": "={{ $item(\"0\").
$node[\"Credenciais\"].json[\"base_leads_supabase\"] }}",
"returnAll": true,
"filters": {
"conditions": [
{
"keyName": "remotejid",
"condition": "eq",
"keyValue": "={{ $('Referencia das mensagens
recebidas').item.json.remoteJid }}"
}
]
}
},
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
4656,
-64
],
"id": "53c6aff9-b57b-46be-b83f-d335b84cbf99",
"name": "Pega o Response_id",
"credentials": {
"supabaseApi": {
"id": "mi3uRUpfc3zrd8a4",
"name": "Supabase cloud alltomatizando "
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "3a1502ff-e1ea-454a-b8b6-3fa93b6df9fc",
"name": "previous_response_id",
"value": "={{ $json.response_id }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
4864,
-64
],
"id": "6393c919-583b-475e-876a-7bc155cc509f",
"name": "Seta o Previous_response_id"
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"numberInputs": 3,
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
5248,
-352
],
"id": "a63cfe2c-695f-4cbd-af10-f2015bcf6288",
"name": "Montar o JSON"
},
{
"parameters": {
"method": "POST",
"url": "https://api.openai.com/v1/responses",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $item(\"0\").
$node[\"Credenciais\"].json[\"openai_token\"] }}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ $json }}",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
5424,
-336
],
"id": "c2ea719f-30aa-46ee-a229-f3f7a4b11d1d",
"name": "Cria Response_id"
},
{
"parameters": {
"operation": "update",
"tableId": "={{ $item(\"0\").
$node[\"Credenciais\"].json[\"base_leads_supabase\"] }}",
"filters": {
"conditions": [
{
"keyName": "remotejid",
"condition": "eq",
"keyValue": "={{ $('Referencia das mensagens
recebidas').item.json.remoteJid }}"
}
]
},
"fieldsUi": {
"fieldValues": [
{
"fieldId": "response_id",
"fieldValue": "={{ $json.id }}"
},
{
"fieldId": "tokens",
"fieldValue": "={{ $json.usage.total_tokens }}"
}
]
}
},
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
5568,
-576
],
"id": "7764b0d9-6533-4d12-ab3b-c72bebdb8791",
"name": "Atualiza Responde_id no BD",
"credentials": {
"supabaseApi": {
"id": "mi3uRUpfc3zrd8a4",
"name": "Supabase cloud alltomatizando "
}
}
},
{
"parameters": {
"content": "# Verificação e Inclusão de Leads no Supabase",
"height": 752,
"width": 1200,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
4544,
-656
],
"typeVersion": 1,
"id": "900f711f-8784-4c8d-9d2e-f60412351758",
"name": "Sticky Note4"
},
{
"parameters": {
"content": "# API Responses",
"height": 752,
"width": 1360
},
"type": "n8n-nodes-base.stickyNote",
"position": [
5760,
-656
],
"typeVersion": 1,
"id": "47031d11-8566-44e0-877f-ecdec9de286d",
"name": "Sticky Note5"
},
{
"parameters": {
"content": "# Limpar histórico",
"height": 208,
"width": 352,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"position": [
4176,
-656
],
"typeVersion": 1,
"id": "570ad898-a695-4869-ba96-34a376f364de",
"name": "Sticky Note6"
},
{
"parameters": {
"method": "POST",
"url": "https://api.openai.com/v1/chat/completions",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "=Bearer {{ $item(\"0\").
$node[\"Credenciais\"].json[\"openai_token\"] }}"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"model\": \"gpt-4.1-mini\",\n \"messages\": [\n
{\n \"role\": \"system\",\n \"content\": \"Você é um sistema
especializado em dividir mensagens em chunks seguindo regras específicas. Analise a
mensagem de entrada e divida-a em chunks seguindo estas regras obrigatórias:\\n\\
nREGRAS DE CHUNKING:\\n\\n1. REGRAS GERAIS:\\n - Cada chunk deve conter no máximo
2-3 frases completas por parágrafo\\n - Preserve a ordem original do conteúdo\\n
- Não modifique o conteúdo original de forma alguma\\n - Use '\\\\n' para
representar quebras de linha\\n - Não ignore nenhuma parte do texto\\n -
Mensagens dentro de <template_de_respostas> devem ser agrupadas em um único chunk,
devendo ocupar o espaço de uma única mensagem. A tag '<template_de_respostas>' não
deve aparecer na resposta ao usuário. \\n\\n2. REGRAS PARA MÍDIA:\\n \\n
EXEMPLO DE ENTRADA:\\n ```\\n \\\"E aeee! Olha só, quero te mostrar a nossa
Área de Membros TOP que você terá acesso por R$ 19,90:
<video>https://cdn.xpiria.com.br/xpiria/tour_area_de_membros.mp4 </video>\\n \\n
E aí, será que vale a pena? Mas me conta, você é iniciante ou já trabalha com
automações e IA?\\\"\\n ```\\n\\n CHUNKS CORRETOS:\\n ```\\n
{\\\"message\\\": \\\"E aeee! Olha só, quero te mostrar a nossa Área de Membros TOP
que você terá acesso por R$ 19,90\\\", \\\"sequence_number\\\": 1},\\n
{\\\"message\\\":
\\\"<video>https://cdn.xpiria.com.br/xpiria/tour_area_de_membros.mp4
</video>\\\", \\\"sequence_number\\\": 2},\\n {\\\"message\\\": \\\"E aí, será
que vale a pena? Mas me conta, você é iniciante ou já trabalha com automações e
IA?\\\", \\\"sequence_number\\\": 3}\\n ```\\n\\n REGRAS:\\n - Cada mídia
(imagem, vídeo, documento ou áudio) deve estar em um chunk separado\\n - Formatos
de mídia são identificados por:\\n * Imagens: `<imagem>url</imagem>`\\n *
Vídeos: `<video>url</video>`\\n * Áudios: `<audio>url</audio>`\\n *
Documentos: `<documento>url</documento>`\\n - Links normais (URLs ou markdown)
devem permanecer junto com seu texto\\n - Textos introdutórios de mídia devem
ficar em chunks separados\\n\\n3. REGRAS DE FORMATAÇÃO:\\n - Mantenha emojis e
formatação especial exatamente como no original\\n - Preserve espaços e quebras
de linha conforme o original\\n - Não adicione pontuação ou formatação extra\\n\\
n4. REGRAS DE VALIDAÇÃO:\\n - Cada mídia deve estar em seu próprio chunk\\n -
Confirme se cada chunk tem um número de sequência único\\n - Garanta que o
conteúdo total dos chunks equivale exatamente ao conteúdo original\\n - Garanta que
as mensagens contidas em <template_de_respostas> estão em apenas um único chunk \\
n\\n PROCESSO DE ANÁLISE:\\n1. Identifique elementos de mídia (imagens, vídeos,
documentos ou áudios)\\n2. Separe textos introdutórios de mídia\\n3. Mantenha URLs
e links normais junto com seu texto\\n4. Aplique as regras de chunking conforme os
exemplos acima\\n5. Valide o resultado final\\n\\nFormate a saída como um objeto
JSON.\"\n },\n {\n \"role\": \"user\",\n \"content\":
{{ JSON.stringify($json.output[0].content[0].text) }}\n }\n ],\
n \"response_format\": {\n \"type\": \"json_schema\",\
n \"json_schema\": {\n \"name\": \"message_chunks\",\n \"strict\": true,\
n \"schema\": {\n \"type\": \"object\",\n \"properties\": {\
n \"chunks\": {\n \"type\": \"array\",\n \"description\": \"An
array of message chunks, where each chunk is a separate paragraph.\",\
n \"items\": {\n \"type\": \"object\",\n \"properties\":
{\n \"message\": {\n \"type\": \"string\",\
n \"description\": \"An exact extraction from the original message.
Each chunk must strictly reflect a coherent segment of the input, matching the
original format and content without alteration. Links and media must appear in
exclusive chunks, isolated, never duplicated, and never omitted.\"\n },\
n \"sequence_number\": {\n \"type\": \"number\",\n
\"description\": \"The order of this chunk in the original message.\"\
n }\n },\n \"required\": [\n \"message\",\n
\"sequence_number\"\n ],\n \"additionalProperties\": false\n
}\n }\n },\n \"required\": [\n \"chunks\"\n ],\
n \"additionalProperties\": false\n }\n}\n }\n }\n",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
5808,
-336
],
"id": "7c65308a-d1dc-4330-9d63-12ebdecd9230",
"name": "Chat completion - Fraciona Mensagens IA"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "3aa0f46f-fda7-49ee-a628-ea545f06fedd",
"name": "messages",
"value": "={{ $json.choices[0].message.content }}",
"type": "object"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
5984,
-336
],
"id": "6ed05ec9-35f9-41a9-838c-e2b1a677471d",
"name": "Transformar em objeto"
},
{
"parameters": {
"fieldToSplitOut": "messages.chunks",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
6192,
-336
],
"id": "5292ed7d-00f2-461f-ac1b-05d501058d53",
"name": "Split Out"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
6400,
-336
],
"id": "62fbf48d-e5e4-4b24-b48c-ec34b8d31af4",
"name": "Loop Over Items"
},
{
"parameters": {},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
6848,
-240
],
"id": "77cef190-7542-4a85-8941-de554bd306cf",
"name": "Wait1",
"webhookId": "28831099-8999-4bf5-90f5-d6b495d7fa0b"
},
{
"parameters": {
"method": "POST",
"url": "={{ $item(\"0\").$node[\"Webhook\"].json[\"body\"]
[\"server_url\"] }}/message/sendText/{{ $item(\"0\").
$node[\"Webhook\"].json[\"body\"][\"instance\"] }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "={{ $item(\"0\").$node[\"Webhook\"].json[\"body\"]
[\"apikey\"] }}"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "number",
"value": "={{ $('Referencia das mensagens
recebidas').item.json.remoteJid }}"
},
{
"name": "text",
"value": "={{ $json.message }}"
},
{
"name": "delay",
"value": "={{ 1200 }}"
}
]
},
"options": {
"redirect": {
"redirect": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
6640,
-288
],
"id": "fd3a2824-aacf-447c-b301-d331f45015ab",
"name": "Enviar mensagem de texto"
},
{
"parameters": {
"method": "POST",
"url": "={{ $item(\"0\").$node[\"Webhook\"].json[\"body\"]
[\"server_url\"] }}/chat/getBase64FromMediaMessage/{{ $item(\"0\").
$node[\"Webhook\"].json[\"body\"][\"instance\"] }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "apikey",
"value": "={{ $('Webhook').item.json.body.apikey }}"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"message\": {\n \"key\": {\
n \"id\": \"{{ $json.body.data.key.id }}\"\n }\n },\n \"convertToMp4\":
true\n}",
"options": {
"redirect": {
"redirect": {}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1040,
96
],
"id": "7c248543-2a43-4655-b73c-7f9923b75ded",
"name": "Pega base 64 pelo ID da Mensagem IMG"
},
{
"parameters": {
"operation": "toBinary",
"sourceProperty": "base64",
"options": {}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
1200,
96
],
"id": "a5215c38-3514-49c7-b69f-cca6c90c00c7",
"name": "Convert to File1"
},
{
"parameters": {
"resource": "image",
"operation": "analyze",
"modelId": {
"__rl": true,
"value": "gpt-4o-mini",
"mode": "list",
"cachedResultName": "GPT-4O-MINI"
},
"text": "o que está na imagem?",
"inputType": "base64",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
1392,
96
],
"id": "7fde4ea8-79b0-4eb2-9df1-584fe9c488de",
"name": "Analyze image",
"credentials": {
"openAiApi": {
"id": "SisrpJAFDFNc7VYU",
"name": "OpenAi account"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "a3d5d19e-a5a0-4c9e-9ae0-c4198877920b",
"name": "remoteJid",
"value": "={{ $('Roteador de
mensagens').item.json.body.data.key.remoteJid }}",
"type": "string"
},
{
"id": "70690517-d8a4-420a-b587-24d414b17a54",
"name": "message",
"value": "={{ $item(\"0\").$node[\"Analyze image\"].json[\"content\"]
}}",
"type": "string"
},
{
"id": "8d7ec572-37c7-4197-aa16-b2d258fae481",
"name": "id",
"value": "={{ $('Roteador de
mensagens').item.json.body.data.key.id }}",
"type": "string"
},
{
"id": "0f6f24e2-25a1-45af-8285-aad2921cd536",
"name": "timestamp",
"value": "={{ $('Roteador de
mensagens').item.json.body.data.messageTimestamp }}",
"type": "string"
},
{
"id": "0eccd064-d8f5-49e1-bab0-1dd8d819a0bb",
"name": "",
"value": "",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1568,
96
],
"id": "1ef0f5a3-1ffa-4cfd-a9b7-b8063165dbea",
"name": "Estruturar os dados (Audio)1"
},
{
"parameters": {
"operation": "get",
"propertyName": "messages",
"key": "={{ $('Referencia das mensagens
recebidas').item.json.remoteJid }}",
"options": {}
},
"type": "n8n-nodes-base.redis",
"typeVersion": 1,
"position": [
2256,
-304
],
"id": "77aa8412-a2e3-4ccb-b475-3ab4084a5ff6",
"name": "Pega as mensagens da lista",
"credentials": {
"redis": {
"id": "mYCbO9zX6OE4bagD",
"name": "Redis account"
}
}
},
{
"parameters": {
"httpMethod": "POST",
"path": "testeaula",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-112,
-224
],
"id": "1edc3f9f-a8e8-46a8-a61e-7cb94ba495d1",
"name": "Webhook",
"webhookId": "cb5a78cd-6ffc-44e9-8c24-dfb79d2f76f2"
}
],
"connections": {
"Credenciais": {
"main": [
[
{
"node": "Envia os dados do webhook",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "Convert to File",
"type": "main",
"index": 0
}
]
]
},
"Convert to File": {
"main": [
[
{
"node": "Transcreve o audio",
"type": "main",
"index": 0
}
]
]
},
"Transcreve o audio": {
"main": [
[
{
"node": "Estruturar os dados (Audio)",
"type": "main",
"index": 0
}
]
]
},
"Referencia das mensagens recebidas": {
"main": [
[
{
"node": "Add mensagens na lista",
"type": "main",
"index": 0
}
]
]
},
"Estruturei os dados (conversation)": {
"main": [
[
{
"node": "Referencia das mensagens recebidas",
"type": "main",
"index": 0
}
]
]
},
"Estruturei os dados (EphemeralMessage)": {
"main": [
[
{
"node": "Referencia das mensagens recebidas",
"type": "main",
"index": 1
}
]
]
},
"Estruturei os dados (extendedTextMessage": {
"main": [
[
{
"node": "Referencia das mensagens recebidas",
"type": "main",
"index": 2
}
]
]
},
"Add mensagens na lista": {
"main": [
[
{
"node": "Pega as mensagens da lista",
"type": "main",
"index": 0
}
]
]
},
"Acumulo de mensagens": {
"main": [
[
{
"node": "No Operation, do nothing1",
"type": "main",
"index": 0
}
],
[
{
"node": "Separa em várias mensagens",
"type": "main",
"index": 0
},
{
"node": "Redis",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Pega as mensagens da lista",
"type": "main",
"index": 0
}
]
]
},
"Separa em várias mensagens": {
"main": [
[
{
"node": "texto para objeto",
"type": "main",
"index": 0
}
]
]
},
"texto para objeto": {
"main": [
[
{
"node": "Concatena mensagens ",
"type": "main",
"index": 0
}
]
]
},
"Envia os dados do webhook": {
"main": [
[
{
"node": "Verifica se a mensagem é do meu time",
"type": "main",
"index": 0
}
]
]
},
"Verifica se a mensagem é do meu time": {
"main": [
[
{
"node": "No Operation, do nothing",
"type": "main",
"index": 0
}
],
[
{
"node": "Roteador de mensagens",
"type": "main",
"index": 0
}
]
]
},
"Roteador de mensagens": {
"main": [
[
{
"node": "Estruturei os dados (conversation)",
"type": "main",
"index": 0
}
],
[
{
"node": "Estruturei os dados (EphemeralMessage)",
"type": "main",
"index": 0
}
],
[
{
"node": "Estruturei os dados (extendedTextMessage",
"type": "main",
"index": 0
}
],
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
],
[
{
"node": "Pega base 64 pelo ID da Mensagem IMG",
"type": "main",
"index": 0
}
]
]
},
"Varredura do Banco de dados REMOTEJID": {
"main": [
[
{
"node": "Verificar se existe o LEAD está no BD",
"type": "main",
"index": 0
}
]
]
},
"Verificar se existe o LEAD está no BD": {
"main": [
[
{
"node": "Carrega Json",
"type": "main",
"index": 0
}
],
[
{
"node": "Cria LEAD no BD",
"type": "main",
"index": 0
}
]
]
},
"Cria LEAD no BD": {
"main": [
[
{
"node": "Carrega Json",
"type": "main",
"index": 1
}
]
]
},
"Carrega Json": {
"main": [
[
{
"node": "Modelo, instruções, Temperatura",
"type": "main",
"index": 0
},
{
"node": "Verificar se é a primeira mensagem",
"type": "main",
"index": 0
},
{
"node": "Pega o Response_id",
"type": "main",
"index": 0
}
]
]
},
"Concatena mensagens ": {
"main": [
[
{
"node": "Referencia dados estruturados",
"type": "main",
"index": 0
}
]
]
},
"Estruturar os dados (Audio)": {
"main": [
[
{
"node": "Referencia das mensagens recebidas",
"type": "main",
"index": 3
}
]
]
},
"Modelo, instruções, Temperatura": {
"main": [
[
{
"node": "Montar o JSON",
"type": "main",
"index": 0
}
]
]
},
"Verificar se é a primeira mensagem": {
"main": [
[
{
"node": "Prompt do Agent e mensagem do usuário",
"type": "main",
"index": 0
}
],
[
{
"node": "Incluir mensagem do usuário",
"type": "main",
"index": 0
}
]
]
},
"Prompt do Agent e mensagem do usuário": {
"main": [
[
{
"node": "Montar o JSON",
"type": "main",
"index": 1
}
]
]
},
"Referencia dados estruturados": {
"main": [
[
{
"node": "Varredura do Banco de dados REMOTEJID",
"type": "main",
"index": 0
}
]
]
},
"Incluir mensagem do usuário": {
"main": [
[
{
"node": "Montar o JSON",
"type": "main",
"index": 1
}
]
]
},
"Pega o Response_id": {
"main": [
[
{
"node": "Seta o Previous_response_id",
"type": "main",
"index": 0
}
]
]
},
"Seta o Previous_response_id": {
"main": [
[
{
"node": "Montar o JSON",
"type": "main",
"index": 2
}
]
]
},
"Montar o JSON": {
"main": [
[
{
"node": "Cria Response_id",
"type": "main",
"index": 0
}
]
]
},
"Cria Response_id": {
"main": [
[
{
"node": "Atualiza Responde_id no BD",
"type": "main",
"index": 0
},
{
"node": "Chat completion - Fraciona Mensagens IA",
"type": "main",
"index": 0
}
]
]
},
"Atualiza Responde_id no BD": {
"main": [
[]
]
},
"Chat completion - Fraciona Mensagens IA": {
"main": [
[
{
"node": "Transformar em objeto",
"type": "main",
"index": 0
}
]
]
},
"Transformar em objeto": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Enviar mensagem de texto",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Enviar mensagem de texto": {
"main": [
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
]
]
},
"Pega base 64 pelo ID da Mensagem IMG": {
"main": [
[
{
"node": "Convert to File1",
"type": "main",
"index": 0
}
]
]
},
"Convert to File1": {
"main": [
[
{
"node": "Analyze image",
"type": "main",
"index": 0
}
]
]
},
"Analyze image": {
"main": [
[
{
"node": "Estruturar os dados (Audio)1",
"type": "main",
"index": 0
}
]
]
},
"Estruturar os dados (Audio)1": {
"main": [
[
{
"node": "Referencia das mensagens recebidas",
"type": "main",
"index": 4
}
]
]
},
"Pega as mensagens da lista": {
"main": [
[
{
"node": "Acumulo de mensagens",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Credenciais",
"type": "main",
"index": 0
},
{
"node": "Envia os dados do webhook",
"type": "main",
"index": 1
}
]
]
}
},
"pinData": {
"Credenciais": [
{
"openai_token": "sk-proj-SPUV_MEeH5-
Z6A6c0h2l_sZ3bfL_tm5_84cJpEHllKv46P4s4J7YrMa5TlP4hpJCk5SojRFl32T3BlbkFJFASBEuBB_7wL
h_R6xSFilIVBfiBrNmN4-jVmCAV8vA0Uayf35Jag18jLgA01t9UBDz1uy0M6AA",
"base_leads_supabase": "leads_cliente_A",
"prompt_agent": "Detalhes da Barbearia Nome: Barbearia Estilo Endereço: Rua
Teste, 13, Centro, Cidade Exemplo, SP, 12345-678 Horário de Atendimento: 09:00 às
20:00 Serviços e Valores: Corte de Cabelo: R$ 40,00 Barba: R$ 25,00 Pintura de
Cabelo: R$ 50,00 Sobrancelha: R$ 15,00 Lavagem de Cabelo: R$ 20,00 Pacote Completo
(Corte + Barba): R$ 60,00 Ferramentas (Functions) 1. Ferramentas de Google Calendar
verEventos Descrição: Lista eventos (filtro de datas opcional). agendarEvento
Descrição: Cria evento (título, descrição, datas no formato ISO 8601, etc.).
Converta “amanhã” para data/hora exatas. Se não houver data de término, assuma 1
hora. Pode incluir Google Meet (peça Attendees). cancelarEvento Descrição: Cancela
evento pelo ID. atualizarEvento Descrição: Altera dados de um evento (ID, título,
descrição, datas etc.). Sempre ISO 8601; se sem término, 1 hora. obterEvento
Descrição: Obtém detalhes de evento (ID). Regras Fundamentais Corrente de Ações
(Chain of Actions) Você não tem memória de IDs/dados entre solicitações, portanto
sempre deve buscá-las antes de executar qualquer ação. Se o usuário pedir “buscar
empresas X e mandar email para cada uma”, chame search_google (ou buscarGoogle) e,
na mesma solicitação, parse e chame enviarEmail. Formato de Datas/Horas Sempre ISO
8601 (YYYY-MM-DDTHH:MM:SS-03:00). Se “amanhã”, converta. Sem término, 1 hora.
Chamadas de Função Ao chamar qualquer função, retorne apenas a saída necessária.
Preencha parâmetros obrigatórios (ID, query, datas etc.). Respostas ao Usuário Em
português, claro e objetivo. Não apresente dados sensíveis não solicitados. Cadeia
de Pensamentos para Evitar Erros Quando receber um pedido relacionado à barbearia,
siga estes passos: Interpretar a Solicitação Exemplo: O lead diz “Quero agendar
um corte de cabelo para às 20h.” Reconhecer que é um pedido de agendamento e que
20h é fora do horário. Checar Restrições Horário de funcionamento (09:00–20:00).
Se for um serviço inexistente (ex.: “Quero agendar uma cirurgia plástica”), deve
recusar ou redirecionar, pois não está no escopo. Converter Datas e Horas Se o
usuário falar “amanhã de manhã”, pergunte qual horário exato, ou assuma 09:00. Se
disser “amanhã às 15h”, converta para ISO 8601 (ex.: 2025-03-12T15:00:00-03:00).
Verificar Disponibilidade Se precisar ver eventos, use verEventos. Se houver
conflito, proponha outro horário. Executar Ação Agendar? Use agendarEvento.
Cancelar? Precisará do ID do evento → use verEventos para encontrá-lo → depois
cancelarEvento. Atualizar? Mesmo fluxo: obter ID → chamar atualizarEvento. Retornar
Resposta ao Usuário Sempre em português claro. Se o horário for inválido, explique
por que e sugira um horário dentro de 09:00–20:00. Caso precise de mais detalhes
(ex.: “Qual serviço você deseja?”), pergunte antes de prosseguir. Exemplos de
Aplicação Exemplo 1: Usuário: “Quero marcar corte de cabelo hoje às 19h.” Passo 1:
Interpretar → é um agendamento. Passo 2: Checar → 19h > 20h, fora do horário. Passo
3: Sugerir horário alternativo (ex.: 18h). Se o usuário aceitar 18h, converter para
ISO 8601 e usar agendarEvento. Retornar mensagem “Ok, marquei seu corte de cabelo
às 18h.” Exemplo 2: Usuário: “Quero ver meus horários para amanhã.” Passo 1:
Interpretar → ver eventos. Passo 2: Checar datas (amanhã = YYYY-MM-DD). Passo 3:
Use verEventos com data de amanhã. Passo 4: Retornar a lista ao usuário em texto de
WhatsApp (“Você tem corte de cabelo às 09:00, barba às 14:00, etc.”). Exemplo 3:
Usuário: “Qual o preço do corte de cabelo?” Resposta: “O corte de cabelo custa R$
40,00. Deseja agendar um horário?”",
"delay_mensagens_segundos": 20,
"model": "gpt-4.1-mini",
"temperature": 0.2
}
]
},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId":
"d8475ee4aa4a1b55072179c5ec9ee389431693d005fc105e0beacdf6e1334625"
}
}

Você também pode gostar