This workflow follows the Agent → HTTP Request 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 →
{
"name": "Controle Nutricional - Nutri AI",
"nodes": [
{
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"typeVersion": 1.2,
"position": [
208,
624
],
"id": "2b7cadbb-2636-44da-ad7d-b90283e94dc1",
"name": "OpenAI Chat Model",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "getAll",
"tableId": "controle_nutricional",
"filterType": "string",
"filterString": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Filters__String_', `Para buscar informa\u00e7\u00f5es na descri\u00e7\u00e3o deve utilizar ILIKE e '%exemplo%'`, 'string') }}"
},
"type": "n8n-nodes-base.supabaseTool",
"typeVersion": 1,
"position": [
624,
624
],
"id": "991811e0-a7af-45ee-b012-b28760b82e70",
"name": "busca_informacoes_supabase",
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "update",
"tableId": "controle_nutricional",
"filters": {
"conditions": [
{
"keyName": "id",
"condition": "eq",
"keyValue": "={{ $fromAI('id') }}"
}
]
},
"fieldsUi": {
"fieldValues": [
{
"fieldId": "status",
"fieldValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Field_Value', `Nunca atualize os dados de uma refei\u00e7\u00e3o diretamente. Em vez disso, marque a linha antiga como status = 'deletado'`, 'string') }}"
}
]
}
},
"type": "n8n-nodes-base.supabaseTool",
"typeVersion": 1,
"position": [
784,
624
],
"id": "f3b64bfa-e39e-466a-9bc8-d7de784fe493",
"name": "atualiza_informacoes_supabase",
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"tableId": "controle_nutricional",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "descricao",
"fieldValue": "={{ $fromAI(\"descricao\") }}"
},
{
"fieldId": "total_kcal",
"fieldValue": "={{ $fromAI(\"total_kcal\") }}"
},
{
"fieldId": "total_proteina",
"fieldValue": "={{ $fromAI(\"total_proteina\") }}"
},
{
"fieldId": "total_carbo",
"fieldValue": "={{ $fromAI(\"total_carbo\") }}"
},
{
"fieldId": "total_gordura",
"fieldValue": "={{ $fromAI(\"total_gordura\") }}"
},
{
"fieldId": "origem_input",
"fieldValue": "=texto"
},
{
"fieldId": "usuario_id",
"fieldValue": "5518997165447"
}
]
}
},
"type": "n8n-nodes-base.supabaseTool",
"typeVersion": 1,
"position": [
448,
624
],
"id": "32ff257f-37c5-4c72-9312-4411a42ce325",
"name": "inserir_informacao_supabase",
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ud83c\udfaf **Entrada de mensagens do WhatsApp**\n\n1. **Webhook**: Ponto de entrada da mensagem recebida pelo WhatsApp via Evolution API.\n2. **Mensagem foi Recebida - FromMe**: Garante que a mensagem foi enviada pelo usu\u00e1rio e n\u00e3o pela pr\u00f3pria IA.\n3. **Tipo de Mensagem - Switch**: Direciona o fluxo conforme o tipo de mensagem:\n - `audioMessage`: encaminha para transcri\u00e7\u00e3o de \u00e1udio.\n - `imageMessage`: envia para interpreta\u00e7\u00e3o de imagem.\n - `textMessage`: vai direto para o agente Nutri AI.\n4. **Nenhuma opera\u00e7\u00e3o**: usado como fallback, quando a mensagem n\u00e3o \u00e9 trat\u00e1vel.\n",
"height": 580,
"width": 1200,
"color": 4
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-2272,
224
],
"id": "eaae98cf-7b94-4ef2-8e9a-f0d4142762c4",
"name": "Sticky Note"
},
{
"parameters": {
"promptType": "define",
"text": "={{ $json.mensagem }}",
"options": {
"systemMessage": "=--------------------------------------------------\n## PERSONALIDADE DO NUTRISCAN\n--------------------------------------------------\n\nVoc\u00ea \u00e9 o **NutriScan \ud83e\udd57**, um assistente nutricional inteligente, moderno e jovem.\n\nSeu jeito de falar deve ser:\n\n- mais natural;\n- menos formal;\n- amig\u00e1vel;\n- motivador;\n- educativo;\n- direto;\n- linguagem simples;\n- estilo conversa de WhatsApp.\n\nFale como algu\u00e9m explicando para um amigo ou estudante.\n\nEvite linguagem m\u00e9dica excessiva.\n\nExemplo:\nao inv\u00e9s de:\n\"Produto com elevado \u00edndice glic\u00eamico\"\n\nprefira:\n\"\u26a0\ufe0f Esse alimento pode subir seu a\u00e7\u00facar no sangue bem r\u00e1pido.\"\n\nAo inv\u00e9s de:\n\"Consumo moderado recomendado\"\n\nprefira:\n\"\ud83d\udc40 D\u00e1 pra comer, mas sem exagerar.\"\n\n--------------------------------------------------\n## RESPOSTAS MAIS VISUAIS\n--------------------------------------------------\n\nAs respostas devem ser muito visuais.\n\nUse:\n\n\u2705\n\u26a0\ufe0f\n\u274c\n\ud83d\udd25\n\ud83e\udd57\n\ud83c\udf5e\n\ud83c\udf6b\n\ud83e\udde0\n\ud83d\udcca\n\ud83d\udcaa\n\ud83e\uddea\n\ud83d\udca1\n\nSempre que poss\u00edvel, organize assim:\n\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\ud83e\udd57 NutriScan analisou:\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nProduto: X\n\n\ud83d\udcca Nutri\u00e7\u00e3o estimada:\n\ud83d\udd25 Calorias: X kcal\n\ud83c\udf5e Carbo: X g\n\ud83d\udcaa Prote\u00edna: X g\n\ud83e\udd51 Gordura: X g\n\nClassifica\u00e7\u00e3o:\n\ud83d\udfe2 saud\u00e1vel\nou\n\ud83d\udfe1 aten\u00e7\u00e3o\nou\n\ud83d\udd34 ultraprocessado\n\n\u26a0\ufe0f Pontos importantes:\n\u2022 ...\n\u2022 ...\n\u2022 ...\n\n\ud83e\uddea Ingrediente cr\u00edtico:\n...\n\n\ud83e\udde0 Impacto no corpo:\n...\n\n\ud83d\udca1 Melhor alternativa:\n...\n\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nTorne a leitura agrad\u00e1vel.\n\n--------------------------------------------------\n## LEITURA DE R\u00d3TULOS (MUITO IMPORTANTE)\n--------------------------------------------------\n\nSe receber imagem de r\u00f3tulo, embalagem ou tabela nutricional:\n\nanalise:\n\n1. calorias\n2. carboidratos\n3. a\u00e7\u00facares\n4. prote\u00ednas\n5. gorduras totais\n6. gorduras saturadas\n7. gorduras trans\n8. fibras\n9. s\u00f3dio\n10. lista de ingredientes\n\nIdentifique:\n\n- ingredientes em maior quantidade (ordem do r\u00f3tulo);\n- aditivos;\n- conservantes;\n- corantes;\n- a\u00e7\u00facares ocultos;\n- excesso de s\u00f3dio;\n- excesso de gordura;\n- baixo teor de fibras.\n\nSempre explique de forma simples.\n\nExemplo:\n\"Como o a\u00e7\u00facar aparece entre os primeiros ingredientes, isso indica que ele est\u00e1 em grande quantidade.\"\n\nExemplo:\n\"Esse s\u00f3dio est\u00e1 alto \u26a0\ufe0f \u2014 pode n\u00e3o ser ideal para quem tem press\u00e3o alta.\"\n\n--------------------------------------------------\n## QUANDO RECEBER IMAGEM\n--------------------------------------------------\n\nVoc\u00ea pode receber:\n\n- foto de comida\n- foto de prato\n- foto de embalagem\n- foto de r\u00f3tulo\n- foto de tabela nutricional\n\nSe for r\u00f3tulo:\npriorize leitura nutricional.\n\nSe for alimento:\npriorize estimativa da refei\u00e7\u00e3o.\n\n--------------------------------------------------\n## TOM FINAL\n--------------------------------------------------\n\nSempre encerre de forma amig\u00e1vel.\n\nExemplos:\n\n\"Boa escolha \ud83d\udc4f\"\n\n\"Essa d\u00e1 pra melhorar \ud83d\ude05\"\n\n\"N\u00e3o \u00e9 proibido comer \u2014 s\u00f3 n\u00e3o vale virar rotina \ud83d\udc40\"\n\n\"Seu corpo agradece escolhas melhores \ud83d\udc9a\""
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 1.8,
"position": [
320,
288
],
"id": "e69ebd72-59a1-457b-bd27-00b7e204d816",
"name": "Nutri AI"
},
{
"parameters": {
"method": "POST",
"url": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.server_url }}/chat/getBase64FromMediaMessage/{{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.instance }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "apikey",
"value": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.apikey }}"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "message.key.id",
"value": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.data.key.id }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-912,
592
],
"id": "853ff287-d822-4277-a747-9fd3a676da4f",
"name": "Audio Base64 - Evolution API"
},
{
"parameters": {
"operation": "toBinary",
"sourceProperty": "base64",
"binaryPropertyName": "audioFile",
"options": {
"fileName": "audioFile.mp3",
"mimeType": "audio/mpeg"
}
},
"type": "n8n-nodes-base.convertToFile",
"typeVersion": 1.1,
"position": [
-688,
592
],
"id": "180b4999-9daa-4541-b1fd-a7b2b38b0945",
"name": "Converte para File"
},
{
"parameters": {
"resource": "audio",
"operation": "transcribe",
"binaryPropertyName": "audioFile",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.openAi",
"typeVersion": 1.8,
"position": [
-448,
592
],
"id": "feb179b6-c853-4846-8273-ffb15e98b788",
"name": "Transcri\u00e7\u00e3o Audio para Texto - OpenAI",
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "set-mensagem-audio",
"name": "mensagem",
"value": "={{ $json.text }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-208,
592
],
"id": "f4bb6710-7ac7-4714-b12c-b86c67011e9c",
"name": "Normaliza Texto - Audio"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "set-mensagem-texto",
"name": "mensagem",
"value": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.data.message.conversation }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-1200,
288
],
"id": "7db9d220-0eb2-4445-a8c8-d1998b0afb7b",
"name": "Normaliza Texto - Conversa"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "set-mensagem-imagem",
"name": "mensagem",
"value": "={{ $json.choices[0].message.content }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-208,
1072
],
"id": "5e0ddacf-f154-465b-927c-3c2b97b7e1af",
"name": "Normaliza Texto - Imagem"
},
{
"parameters": {
"method": "POST",
"url": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.server_url }}/chat/getBase64FromMediaMessage/{{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.instance }}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "apikey",
"value": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.apikey }}"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "message.key.id",
"value": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.data.key.id }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-912,
1072
],
"id": "0c9b79f7-1be3-4c36-89e5-48f9982bec75",
"name": "Imagem Base64 - Evolution API"
},
{
"parameters": {
"method": "POST",
"url": "https://api.openai.com/v1/chat/completions",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer <sua chave API>"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"model\": \"gpt-4o\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"Analise a imagem com aten\u00e7\u00e3o.\\n\\nSe for uma FOTO DE COMIDA ou PRATO:\\nDescreva o que a pessoa est\u00e1 prestes a comer ou beber com simpatia. Diga o que \u00e9, como parece estar (sabor, textura) e estime a quantidade (ex: por\u00e7\u00e3o m\u00e9dia, copo grande, 2 fatias).\\n\\nSe for um R\u00d3TULO, EMBALAGEM ou TABELA NUTRICIONAL:\\nLeia e extraia TODOS os valores nutricionais vis\u00edveis com precis\u00e3o. Retorne exatamente neste formato:\\n\\nProduto: [nome]\\nPor\u00e7\u00e3o: [valor em g ou ml]\\nPor\u00e7\u00f5es na embalagem: [n\u00famero]\\n\ud83d\udd25 Calorias: [x] kcal\\n\ud83c\udf5e Carboidratos: [x] g\\n\ud83c\udf6c A\u00e7\u00facares totais: [x] g\\n\ud83c\udf6d A\u00e7\u00facares adicionados: [x] g\\n\ud83d\udcaa Prote\u00ednas: [x] g\\n\ud83e\udd51 Gorduras totais: [x] g\\n\ud83e\uddc8 Gorduras saturadas: [x] g\\n\ud83d\udeab Gorduras trans: [x] g\\n\ud83c\udf3e Fibras: [x] g\\n\ud83e\uddc2 S\u00f3dio: [x] mg\\nIngredientes: [lista completa]\\n. N\u00e3o omita nenhum campo da lista acima.\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"data:image/jpeg;base64,{{ $json.base64 }}\"\n }\n }\n ]\n }\n ],\n \"max_tokens\": 1000\n}\n",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
-560,
1072
],
"id": "8c79303b-b65d-4b85-98d2-0924411897ab",
"name": "Interpretar a Imagem - GPT Vision"
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"leftValue": "={{ $json.body.data.messageType }}",
"rightValue": "conversation",
"operator": {
"type": "string",
"operation": "equals"
},
"id": "3f98d07b-23a9-4f41-83e5-a0349a45236e"
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "conversation"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "420f6be3-417e-4760-8b7f-c0abc327c069",
"leftValue": "={{ $json.body.data.messageType }}",
"rightValue": "audioMessage",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "audioMessage"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "b1f1f6e8-1bf1-4835-a839-353a4f3c712e",
"leftValue": "={{ $json.body.data.messageType }}",
"rightValue": "imageMessage",
"operator": {
"type": "string",
"operation": "equals",
"name": "filter.operator.equals"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "imageMessage"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.2,
"position": [
-1488,
288
],
"id": "8e879529-65d0-4b73-b532-f67d00c94834",
"name": "Tipo de Mensagem - Switch"
},
{
"parameters": {},
"type": "n8n-nodes-base.noOp",
"typeVersion": 1,
"position": [
-1440,
592
],
"id": "3c4b2aec-4cce-4f6b-a4cb-84db0c9db117",
"name": "Nenhuma opera\u00e7\u00e3o, n\u00e3o fa\u00e7a nada"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "2474c3ef-3714-413c-8a5b-85bb0ed533eb",
"leftValue": "={{ $json.body.data.key.fromMe }}",
"rightValue": "",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.2,
"position": [
-1760,
304
],
"id": "5e5daa3e-99af-4d3c-aa80-09b5936515af",
"name": "Mensagem foi Recebida - FromMe"
},
{
"parameters": {
"resource": "messages-api",
"instanceName": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.instance }}",
"remoteJid": "={{ $('Entrada de Mensagem WhatsApp - Webhook').item.json.body.data.key.remoteJid.split('@')[0] }}",
"messageText": "={{ $json.output }}",
"options_message": {}
},
"type": "n8n-nodes-evolution-api.evolutionApi",
"typeVersion": 1,
"position": [
752,
288
],
"id": "bef26d61-efdc-4f0d-b171-67c48952f0d5",
"name": "Envia a Resposta - Evolution API",
"credentials": {
"evolutionApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"content": "\ud83e\udde0 **Nutri AI - Agente Principal**\n\n1. Recebe texto normalizado via campo `mensagem`.\n2. Executa o agente com contexto nutricional e regras.\n3. Usa ferramentas internas:\n - `inserir_informacoes_supabase`: cria novos registros.\n - `busca_informacoes_supabase`: busca refei\u00e7\u00f5es anteriores.\n - `atualiza_informacoes_supabase`: marca registros como \"deletado\".\n4. Resposta final \u00e9 enviada ao usu\u00e1rio via `Envia a Resposta - Evolution API`.\n",
"height": 960,
"width": 1060
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
0,
0
],
"id": "05bdb3db-8db2-4d5a-9160-ed4e0c728e9b",
"name": "Sticky Note1"
},
{
"parameters": {
"content": "\ud83c\udf99\ufe0f **Processamento de \u00c1udio (Transcri\u00e7\u00e3o)**\n\n1. **Audio Base64 - Evolution API**: Captura e decodifica o \u00e1udio da mensagem.\n2. **Converte para File**: Transforma a string Base64 em arquivo `.ogg` ou `.mp3`.\n3. **Transcri\u00e7\u00e3o \u00c1udio para Texto - OpenAI**: Usa o Whisper da OpenAI para transcrever o conte\u00fado de \u00e1udio em texto.\n4. **Normaliza Texto - Audio**: Padroniza o campo `mensagem` para o agente.\n",
"height": 400,
"width": 880,
"color": 3
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-960,
400
],
"id": "84be095f-de92-4ff8-a021-b702c38a958f",
"name": "Sticky Note2"
},
{
"parameters": {
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ud83d\uddbc\ufe0f **Interpreta\u00e7\u00e3o de Imagens (GPT Vision) \u2014 CORRIGIDO**\n\n1. **Imagem Base64 - Evolution API**: Busca a imagem real via Evolution API (igual ao fluxo de \u00e1udio). \u2705 NOVO\n2. **Interpretar a Imagem - GPT Vision**: Usa `gpt-4o` (modelo com vis\u00e3o completa) para analisar a imagem. \u2705 CORRIGIDO\n3. **Normaliza Texto - Imagem**: Padroniza o campo `mensagem` para o agente. \u2705 NOVO\n",
"height": 380,
"width": 1024,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-1056,
944
],
"id": "a8092b3a-45d4-4fe1-898a-19d5d2bd99a3",
"name": "Sticky Note3"
},
{
"parameters": {
"httpMethod": "POST",
"path": "39108d82-6694-4ed0-b550-92f2fb00c65e",
"options": {}
},
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [
-2224,
304
],
"id": "7a250bd0-2c6f-4516-b59b-ec90db3bdaa5",
"name": "Entrada de Mensagem WhatsApp - Webhook"
}
],
"connections": {
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Nutri AI",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"busca_informacoes_supabase": {
"ai_tool": [
[
{
"node": "Nutri AI",
"type": "ai_tool",
"index": 0
}
]
]
},
"atualiza_informacoes_supabase": {
"ai_tool": [
[
{
"node": "Nutri AI",
"type": "ai_tool",
"index": 0
}
]
]
},
"inserir_informacao_supabase": {
"ai_tool": [
[
{
"node": "Nutri AI",
"type": "ai_tool",
"index": 0
}
]
]
},
"Nutri AI": {
"main": [
[
{
"node": "Envia a Resposta - Evolution API",
"type": "main",
"index": 0
}
]
]
},
"Audio Base64 - Evolution API": {
"main": [
[
{
"node": "Converte para File",
"type": "main",
"index": 0
}
]
]
},
"Converte para File": {
"main": [
[
{
"node": "Transcri\u00e7\u00e3o Audio para Texto - OpenAI",
"type": "main",
"index": 0
}
]
]
},
"Transcri\u00e7\u00e3o Audio para Texto - OpenAI": {
"main": [
[
{
"node": "Normaliza Texto - Audio",
"type": "main",
"index": 0
}
]
]
},
"Normaliza Texto - Audio": {
"main": [
[
{
"node": "Nutri AI",
"type": "main",
"index": 0
}
]
]
},
"Imagem Base64 - Evolution API": {
"main": [
[
{
"node": "Interpretar a Imagem - GPT Vision",
"type": "main",
"index": 0
}
]
]
},
"Interpretar a Imagem - GPT Vision": {
"main": [
[
{
"node": "Normaliza Texto - Imagem",
"type": "main",
"index": 0
}
]
]
},
"Normaliza Texto - Imagem": {
"main": [
[
{
"node": "Nutri AI",
"type": "main",
"index": 0
}
]
]
},
"Normaliza Texto - Conversa": {
"main": [
[
{
"node": "Nutri AI",
"type": "main",
"index": 0
}
]
]
},
"Tipo de Mensagem - Switch": {
"main": [
[
{
"node": "Normaliza Texto - Conversa",
"type": "main",
"index": 0
}
],
[
{
"node": "Audio Base64 - Evolution API",
"type": "main",
"index": 0
}
],
[
{
"node": "Imagem Base64 - Evolution API",
"type": "main",
"index": 0
}
]
]
},
"Mensagem foi Recebida - FromMe": {
"main": [
[
{
"node": "Tipo de Mensagem - Switch",
"type": "main",
"index": 0
}
],
[
{
"node": "Nenhuma opera\u00e7\u00e3o, n\u00e3o fa\u00e7a nada",
"type": "main",
"index": 0
}
]
]
},
"Entrada de Mensagem WhatsApp - Webhook": {
"main": [
[
{
"node": "Mensagem foi Recebida - FromMe",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate"
},
"versionId": "e95ddbba-71d8-45b9-a573-599811526125",
"id": "lRtvCMjqDqT1XxqP",
"tags": []
}
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.
evolutionApiopenAiApisupabaseApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Controle Nutricional - Nutri AI. Uses lmChatOpenAi, supabaseTool, agent, httpRequest. Webhook trigger; 22 nodes.
Source: https://github.com/Kewyn-Hallex/nutriscan/blob/72fb2c456818170b636703bd1b5e9f0aa4217328/nutriscan_n8n.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Agent: IPTV (instance_e2165d22_1762376395079). Uses openAi, redis, supabase, httpRequest. Webhook trigger; 56 nodes.
Audio. Uses n8n-nodes-evolution-api, openAi, agent, memoryRedisChat. Webhook trigger; 41 nodes.
'Elena AI' is a powerful n8n workflow that transforms your automation platform into a full-fledged, multi-agent AI hub. 🤖✨ By combining Redis state management with specialized “tool” sub-workflows, yo
CLINICAINTEGRAL_secretary. Uses postgres, mcpClientTool, googleDriveTool, toolWorkflow. Webhook trigger; 89 nodes.
Remi 1.1. Uses lmChatOpenAi, memoryPostgresChat, openAi, postgres. Webhook trigger; 89 nodes.