خطأ OpenAI node: "يجب أن تكون الرسائل مصفوفة غير فارغة، حصلت على null" رغم وجود المدخلات

صِف المشكلة/الخطأ/السؤال

مرحبا بالجميع،
أواجه مشكلة في عقدة OpenAI (باستخدام عملية “Message a Model”) وأود الحصول على أي رؤى حول كيفية إصلاحها.
قمت بإعداد العقدة لإرسال رسالة نصية بسيطة. كما ترى في لقطة الشاشة المرفقة، تم ملء المعاملات:
Type: Text
Role: User
Prompt: Hi
ومع ذلك، عندما أنقر على “Execute step”، فإنها تفشل مع هذا الناتج:
Bad request - please check your parameters
messages must be a non-empty array, got null
يبدو أن العقدة ترسل حمولة فارغة (null) بدلاً من مصفوفة الرسائل التي أعددتها في واجهة المستخدم.
سياق إضافي:
أنا أستخدم اسم نموذج مخصص (CSU/PRO/GLM-5.1) عبر عنوان URL أساسي مخصص.
هل واجه أحد هذا الخلل في واجهة المستخدم أو مشكلة في تنسيق الحمولة من قبل؟ هل هناك حل بديل لضمان قيام العقدة بتعبئة الرسائل بشكل صحيح في مصفوفة JSON؟
شكراً مقدماً على مساعدتك!

ما هي رسالة الخطأ (إن وجدت)؟

يرجى مشاركة سير العمل الخاص بك

(حدد العقد على لوحتك واستخدم اختصارات لوحة المفاتيح CMD+C/CTRL+C و CMD+V/CTRL+V لنسخ ولصق سير العمل.)

شارك الناتج الذي أرجعته العقدة الأخيرة

معلومات عن إعداد n8n الخاص بك

  • إصدار n8n:
  • قاعدة البيانات (الافتراضي: SQLite):
  • إعداد n8n EXECUTIONS_PROCESS (الافتراضي: own, main):
  • تشغيل n8n عبر (Docker, npm, n8n cloud, تطبيق سطح المكتب):
  • نظام التشغيل:

راجع ردي أدناه، لقد بحثت أكثر ووجدت حلاً أفضل!

@CuO أعتقد أنني يمكنني تثبيتها الآن. لقد بحثت عن الموضوع أكثر، رسالة n8ns v2 تستهدف واجهة برمجة التطبيقات الأحدث من OpenAI، والتي ترسل الموجه في حقل إدخال وليس في مصفوفة الرسائل. بوابتك المخصصة في الغالب تتحدث فقط واجهة برمجة التطبيقات chat/completions الأقدم، لذا فهي تستقبل متن بدون مفتاح messages وتعيده بالضبط كما هو، حصلت على null، لذا الأمر ليس حقاً في إعدادك. هناك طريقتان للتجاوز، استخدم عقدة OpenAI القديمة (1.4، فهي تصل إلى chat/completions) إذا كان يمكنك اختيار إصدار العقدة، أو عقدة طلب HTTP مباشرة إلى /chat/completions لبوابتك مع مصفوفة الرسائل. نفس جذر المشكلة v2 responses-api كما في هذا الموضوع المحلول

مرحباً @CuO

هذا سلوك معروف يظهر من حين لآخر عند استخدام عناوين URL أساسية مخصصة وأسماء نماذج مخصصة (مثل CSU/PRO/GLM-5.1)، حيث قد تفشل منطق التحقق الداخلي للعقدة في التعرف على النموذج المخصص، مما يؤدي إلى إرسال حمل عمل غير مكتمل أو فارغ:

1)في إصدارات n8n الحديثة، تم نقل عنوان URL الأساسي من معاملات العقدة إلى إعدادات بيانات الاعتماد.

  • انتقل إلى بيانات الاعتماد →→ حدد بيانات اعتماد OpenAI الخاصة بك.
  • تأكد من إدخال عنوان URL الأساسي هناك (مثل https://your-proxy-url.com/v1).
  • حاسم: تأكد من تضمين لاحقة /v1 إذا كان مزودك يتطلب ذلك، حيث قد تفشل بعض البوابات في توجيه الطلبات بشكل صحيح بدونها.

2)اسم النموذج CSU/PRO/GLM-5.1 يحتوي على شرطات مائلة. تحاول بعض إصدارات عقدة OpenAI التحقق من اسم النموذج مقابل قائمة معروفة أو نقطة نهاية /models. إذا فشل التحقق أو تسبب الاسم المخصص في خطأ في التحليل، قد تتوقف العقدة عن محاولة إنشاء حمل العمل.

  • حاول وضع اسم النموذج في تعبير (انقر على أيقونة الترس →→ تعبير) وأدخله كسلسلة نصية: {{ "CSU/PRO/GLM-5.1" }}. هذا يتجاوز أحياناً مشاكل التحقق على مستوى واجهة المستخدم.

3)إذا استمرت عقدة OpenAI الأصلية في إرسال حمل عمل فارغ، فإن الإصلاح الأكثر موثوقية هو استخدام عقدة طلب HTTP. هذا يتجاوز غلاف n8n الداخلي لـ OpenAI ويسمح لك بإرسال JSON بالضبط الذي يتوقعه API.

قم بتكوين عقدة طلب HTTP كما يلي:

  • الطريقة: POST
  • عنوان URL: [عنوان URL الأساسي المخصص الخاص بك]/chat/completions
  • المصادقة: مصادقة الرأس (الاسم: Authorization، القيمة: Bearer YOUR_API_KEY)
  • إرسال نص الطلب: تشغيل
  • نوع محتوى نص الطلب: JSON
  • تحديد نص الطلب: استخدام الحقول الثابتة (أو JSON للتحكم الكامل)

4)إذا كنت تستخدم وضع “JSON”، استخدم هذا الحمل بالضبط:

{
  "model": "CSU/PRO/GLM-5.1",
  "messages": [
    {
      "role": "user",
      "content": "Hi"
    }
  ],
  "temperature": 0.7
}