Dans ce flux, si je reçois une URL de média, je télécharge l’image depuis l’URL et l’envoie au modèle d’IA en tant que données.
S’il n’y a pas de média, l’autre branche s’active. Les données n’existent pas.
Comment puis-je dire au modèle d’utiliser les données si elles existent et de les ignorer si elles n’existent pas?
2 « J'aime »
Si la branche false n’a pas de données, le nœud IA peut échouer. Vous avez besoin de 2 messages différents. Cela ressemblera à quelque chose comme ceci
Bienvenue @Yash_Ganthe dans notre communauté ! Je m’appelle Jay et je suis un créateur certifié n8n.
L’approche avec un nœud Code est le chemin plus propre ici. Dans la branche false, utilisez un nœud Code pour supprimer les données binaires avant de fusionner :
return $input.all().map(item => ({
json: item.json,
binary: {}
}));
Ensuite, fusionnez les deux branches et transmettez la sortie combinée à un seul nœud IA - le modèle recevra simplement un objet binaire vide sur le chemin sans média, ce qu’il gère parfaitement sans générer d’erreur.
J’ai effectué les modifications comme indiqué ci-dessus. La fusion est configurée pour ajouter les entrées. Il n’y a pas d’option pour en choisir une si l’autre est manquante.
Le nœud Merge produit :
[
{
"text": "Test15",
"media_url": ""
}
]
Les valeurs binaires semblent vides.
Le nœud LLM donne l’erreur :
Le premier argument doit être de type string ou une instance de Buffer, ArrayBuffer ou Array ou un objet de type Array. Reçu undefined
Le nœud est configuré comme :
Le problème est que passer binary: {} laisse quand même la clé binary sur l’élément, et le nœud LLM essaie de lire le champ data à partir de celui-ci, ce qui est undefined. La solution est de supprimer complètement la clé binary quand il n’y a pas de fichier :
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;
});
De cette façon, les éléments sans fichier n’auront pas de propriété binary du tout, donc le nœud LLM n’essaiera pas de lire à partir de celle-ci.
Le modèle de langage donne maintenant une erreur indiquant :
Cette opération s’attend à ce que les données d’entrée du nœud contiennent un fichier binaire ‘data’, mais aucun n’a été trouvé [élément 0]
@Yash_Ganthe Essaie avec ce flux de travail, ça marche à 100%.
Toujours la même erreur. Notez que les données doivent être binaires. Pas un tableau.
Cette opération s’attend à ce que les données d’entrée du nœud contiennent un fichier binaire « data », mais aucun n’a été trouvé [item 0]
@Yash_Ganthe l’erreur provient du fait que le nœud s’attend toujours à une propriété binaire appelée data sur l’élément, même quand tu es sur la branche false. Ajoute un nœud Code sur le chemin false (avant qu’il n’atteigne le modèle IA) avec ceci :
for (const item of $input.all()) {
item.binary = {};
}
return $input.all();
Cela définit explicitement binary à un objet vide, ce qui indique au nœud en aval qu’il n’y a pas de données binaires disponibles plutôt que de le laisser undefined. La différence est : undefined déclenche l’erreur « binary not found », tandis qu’un {} vide passe sans problème.
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.
L’élément n’a pas de champ binaire ‘data’ [item 0]
Vérifiez que le paramètre dans lequel vous avez spécifié le nom du champ binaire d’entrée est correct et qu’il correspond à un champ de l’entrée binaire.
J’obtiens cette erreur quand je rends le champ binaire vide.
Tout ce dont j’ai besoin, c’est un moyen de faire en sorte que l’entrée du modèle soit un fichier vide s’il n’y a pas d’image envoyée dans l’entrée.
Veuillez utiliser le JSON ci-dessous, cela fonctionnera correctement. Juste une petite note : je suis un n8n Creator et j’ai déjà construit de nombreux workflows comme celui-ci, vous pouvez donc appliquer cette approche en toute confiance.
Vous devez utiliser un AI Agent avec le nœud OpenAI Chat Model pour que cette fonctionnalité se comporte correctement (envoyer le fichier lorsqu’il est disponible, et le traiter comme absent lorsqu’il manque). J’ai testé cette configuration et elle fonctionne parfaitement dans mon 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?
Version courte : n’essayez pas de faire en sorte qu’un nœud prenne « optionnellement » l’image — c’est ce qui vous pose problème. Puisque vous avez déjà les deux branches, gardez-les séparées jusqu’au modèle :
• Si vous utilisez un nœud IA/modèle intégré : placez un nœud de modèle sur chaque branche — la branche média configurée avec l’entrée d’image binaire, la branche sans média en texte uniquement — et fusionnez après le modèle si vous devez recombiner.
• Si vous appelez le modèle via le nœud HTTP Request : construisez le corps de la requête par branche — la branche média inclut la partie image (base64), la branche sans média envoie un corps en texte uniquement. (Vous pouvez le faire dans un seul nœud avec une expression qui ajoute le bloc image uniquement quand le binaire existe, mais deux nœuds c’est plus facile à lire.)
Ce qu’il faut éviter, c’est de fusionner les deux branches avant le modèle — ça plantera sur les éléments avec binaire vide, et Merge tend à perdre le binaire de toute façon. Bienvenue dans la communauté 
@Yash_Ganthe Désolé, j’ai oublié d’activer le mode Include Binary, je l’ai corrigé.
Vous pouvez vérifier à nouveau mon JSON. Ravi de vous aider ! J’espère que c’est la solution à votre problème.
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.