Neste fluxo, se eu receber uma URL de mídia, faço download da imagem da URL e a envio para o modelo de IA como dados.
Se não houver mídia, o outro ramo é acionado. Os dados não existem.
Como digo ao modelo para usar dados se existirem e ignorar se não existirem?
2 curtidas
Se a ramificação falsa não tiver dados, o nó de IA pode falhar. Você precisa de 2 mensagens diferentes. Ficará algo assim
Bem-vindo @Yash_Ganthe à nossa comunidade! Sou o Jay e sou um criador verificado do n8n.
A abordagem usando o nó Code é o caminho mais limpo aqui. No branch false, use um nó Code para remover dados binários antes de fazer merge:
return $input.all().map(item => ({
json: item.json,
binary: {}
}));
Depois faça merge dos dois branches e passe a saída combinada para um único nó AI - o modelo receberá apenas um objeto binário vazio no caminho sem mídia, o que ele processa bem sem gerar erros.
Fiz as alterações conforme mostrado acima. O Merge está configurado para Append (Anexar) os Inputs. Não há opção para escolher um input se o outro estiver ausente.
O nó Merge produz:
[
{
"text": "Test15",
"media_url": ""
}
]
Os valores binários aparecem vazios.
O nó LLM dá o erro:
The first argument must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object. Received undefined
O nó está configurado como:
O problema é que passar binary: {} ainda deixa a chave binary no item, e o nó LLM tenta ler o campo data dela - o qual é indefinido. A solução é remover a chave binary completamente quando não há arquivo:
return $input.all().map(item => {
const result = { json: item.json };
if (item.binary && Object.keys(item.binary).length > 0) {
result.binary = item.binary;
}
return result;
});
Dessa forma, itens sem arquivo não terão uma propriedade binary, então o nó LLM não tentará ler dela.
O LLM agora mostra um erro dizendo:
Esta operação espera que os dados de entrada do nó contenham um arquivo binário ‘data’, mas nenhum foi encontrado [item 0]
@Yash_Ganthe Tenta com esse workflow, funciona 100%.
Ainda o mesmo erro. Observe que dados devem ser binários. Não uma matriz.
Esta operação espera que os dados de entrada do nó contenham um arquivo binário ‘data’, mas nenhum foi encontrado [item 0]
@Yash_Ganthe o erro está vindo do node que ainda espera uma propriedade binária chamada data no item, mesmo quando você está no branch falso. Adicione um node Code no caminho falso (antes de chegar ao modelo de IA) com isto:
for (const item of $input.all()) {
item.binary = {};
}
return $input.all();
Isso define explicitamente binary como um objeto vazio, o que diz ao node downstream que não há dados binários disponíveis em vez de deixá-lo indefinido. A diferença é: undefined dispara o erro “binary not found”, enquanto um {} vazio passa perfeitamente.
The binary is expected to have a data property which is expected to be empty in the False branch.
item.binary = { data:{} };
Added this. Still the same error.
O item não possui um campo binário ‘data’ [item 0]
Verifique se o parâmetro onde você especificou o nome do campo binário de entrada está correto e se ele corresponde a um campo na entrada binária.
Eu recebo este erro quando deixo o binário vazio.
Tudo que preciso é de uma maneira de fazer com que a entrada para o modelo vá como um arquivo vazio se nenhuma imagem for enviada na entrada.
Por favor, use o JSON abaixo, ele funcionará corretamente. Apenas uma observação rápida de que sou um Criador n8n (n8n Creator) e já construí muitos workflows assim, então você pode aplicar essa abordagem com segurança.
Você precisa usar um AI Agent junto com o nó OpenAI Chat Model para que esse recurso se comporte corretamente (enviar arquivo quando disponível e tratá-lo como sem arquivo quando estiver faltando). Testei essa configuração e funciona perfeitamente no meu workflow.
The Aggregate node removes the binary data that has come from the Download node. Due to this, the Agent node does not receive the binary data.
If I remove the Aggregate node and connect the Merge to the Agent, the JSON data reaches the Agent twice as 2 items. Is there a way to retain the binary data?
Versão curta: não tente fazer um nó “opcionalmente” receber a imagem — essa é a parte que está te dando trabalho. Já que você já tem os dois fluxos, mantenha-os separados até o modelo:
• Se você está usando um nó de IA/modelo integrado: coloque um nó de modelo em cada fluxo — o fluxo de mídia configurado com entrada de imagem binária, o fluxo sem mídia apenas com texto — e Merge depois do modelo se precisar recombinar.
• Se você está chamando o modelo via nó HTTP Request: construa o corpo da requisição por fluxo — o fluxo de mídia inclui a parte da imagem (base64), o fluxo sem mídia envia um corpo apenas com texto. (Você pode fazer em um único nó com uma expressão que adiciona o bloco de imagem apenas quando o binário existe, mas dois nós é mais fácil de ler.)
O que você deve evitar é fazer merge dos dois fluxos antes do modelo — vai gerar erro nos itens com binário vazio, e Merge tende a descartar o binário mesmo assim. Bem-vindo à comunidade 
@Yash_Ganthe Desculpe, esqueci de ativar o modo Include Binary, já corrigi.
Você pode verificar novamente meu JSON. Fico feliz em ajudar! Espero que seja a solução para seu problema.
I did it in a simpler way. The image received from Whatsapp is successfully uploaded to Google drive. However, the Agent is not able to access it. I have kept the drive images in a public folder and have tried accessing them successfully from other browsers.