{
  "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": []
}