Erreur OpenAI node : "messages must be a non-empty array, got null" malgré la présence d'entrées

Décrivez le problème/l’erreur/la question

Bonjour à tous,

J’éprouve des difficultés avec le nœud OpenAI (en utilisant l’opération « Envoyer un message à un modèle ») et j’apprécierais vos conseils pour résoudre ce problème.
J’ai configuré le nœud pour envoyer un simple message texte. Comme vous pouvez le voir dans la capture d’écran ci-jointe, les paramètres sont remplis :
Type : Text
Rôle : User
Message : Bonjour
Cependant, quand je clique sur « Exécuter l’étape », cela échoue avec ce résultat :
Mauvaise requête - veuillez vérifier vos paramètres
messages doit être un tableau non vide, reçu null
Il semble que le nœud envoie une charge utile null au lieu du tableau de messages que j’ai configuré dans l’interface utilisateur.
Contexte supplémentaire :
J’utilise un nom de modèle personnalisé (CSU/PRO/GLM-5.1) via une URL de base personnalisée.
Quelqu’un a-t-il rencontré ce problème d’interface utilisateur ou ce problème de formatage de charge utile auparavant ? Y a-t-il une solution pour s’assurer que le nœud empaquète correctement les messages dans le tableau JSON ?
Merci d’avance de votre aide !

Quel est le message d’erreur (le cas échéant) ?

Veuillez partager votre flux de travail

(Sélectionnez les nœuds de votre canevas et utilisez les raccourcis clavier CMD+C/CTRL+C et CMD+V/CTRL+V pour copier et coller le flux de travail.)

Partagez la sortie retournée par le dernier nœud

Informations sur votre configuration n8n

  • Version d’n8n :
  • Base de données (par défaut : SQLite) :
  • Paramètre n8n EXECUTIONS_PROCESS (par défaut : own, main) :
  • Exécution d’n8n via (Docker, npm, n8n cloud, application de bureau) :
  • Système d’exploitation :

Consultez ma réponse ci-dessous, j’ai fait plus de recherches et j’ai trouvé une meilleure solution !

@CuO je pense que je peux maintenant l’épingler. J’ai creusé un peu plus et j’ai découvert que n8ns v2 message a model cible la nouvelle API Responses d’OpenAI, qui envoie le prompt dans un champ input, pas dans un tableau messages. Votre passerelle personnalisée ne parle presque certainement que l’ancienne API chat/completions, donc elle reçoit un body sans clé messages et retourne exactement ça, d’où le null. Ce n’est donc pas vraiment votre config. Deux solutions : utiliser le nœud OpenAI legacy (1.4, il frappe toujours chat/completions) si vous pouvez choisir la version du nœud, ou le nœud HTTP request directement vers /chat/completions de votre passerelle avec le tableau messages. Même root cause de v2 responses-api que ce fil résolu

Salut @CuO

C’est un comportement connu qui survient occasionnellement lors de l’utilisation de Base URLs personnalisées et de noms de modèles personnalisés (comme CSU/PRO/GLM-5.1), car la logique de validation interne du nœud peut ne pas reconnaître le modèle personnalisé, ce qui la conduit à envoyer une charge utile incomplète ou nulle :

  1. Dans les versions récentes de n8n, la Base URL a été déplacée des paramètres du nœud vers les paramètres de Credentials.
  • Allez à Credentials →→ Sélectionnez votre credential OpenAI.
  • Assurez-vous que la Base URL y est entrée (par exemple, https://your-proxy-url.com/v1).
  • Crucial : Assurez-vous d’inclure le suffixe /v1 si votre fournisseur l’exige, car certaines passerelles ne routent pas correctement les requêtes sans lui.
  1. Le nom de modèle CSU/PRO/GLM-5.1 contient des barres obliques. Certaines versions du nœud OpenAI tentent de valider le nom du modèle par rapport à une liste connue ou à un endpoint /models. Si la validation échoue ou si le nom personnalisé déclenche une erreur d’analyse, le nœud peut « abandonner » la construction de la charge utile.
  • Essayez d’envelopper le nom du modèle dans une expression (cliquez sur l’icône d’engrenage →→ Expression) et entrez-le en tant que chaîne : {{ "CSU/PRO/GLM-5.1" }}. Cela contourne parfois les dysfonctionnements de validation au niveau de l’interface.
  1. Si le nœud OpenAI natif continue d’envoyer une charge utile nulle, la solution la plus fiable est d’utiliser le nœud HTTP Request. Cela contourne le wrapper OpenAI interne de n8n et vous permet d’envoyer le JSON exact que l’API attend.

Configurez le nœud HTTP Request comme suit :

  • Method: POST
  • URL: [Votre Base URL personnalisée]/chat/completions
  • Authentication: Header Auth (Name: Authorization, Value: Bearer YOUR_API_KEY)
  • Send Body: ON
  • Body Content Type: JSON
  • Specify Body: Using Fixed Fields (ou JSON pour un contrôle total)
  1. Si vous utilisez le mode « JSON », utilisez cette charge utile exacte :
{
  "model": "CSU/PRO/GLM-5.1",
  "messages": [
    {
      "role": "user",
      "content": "Hi"
    }
  ],
  "temperature": 0.7
}