مرحباً بالجميع،
واجهت هذه المشكلة مؤخراً وأصلحتها يدوياً. أنشر نتائجي هنا في حالة عدم كون هذا السلوك مقصوداً — أو في حالة احتياج مساعد الذكاء الاصطناعي للتحسين.
المشكلة
طلبت من مساعد n8n بالذكاء الاصطناعي إعادة تسمية عدة عقد في أحد سير عملي. أجرى التعديل وكل شيء بدا جيداً على لوحة الرسم. لكن بعد ذلك مباشرة، أصبح سير العمل غير قابل للحفظ تماماً — كل تعديل أجريته بعد ذلك فشل مع:
مشكلة في حفظ سير العمل
فشل الحفظ التلقائي: لا يمكن تحويل غير محدد أو فارغ إلى كائن
عرض وحدة تحكم المتصفح نفس الخطأ يطلق بشكل متكرر من محرر لوحة الرسم ومعالج الحفظ:
الأعراض (الذكاء الاصطناعي)
- إعادة التسمية كانت الشيء الوحيد الذي طلبته من مساعد الذكاء الاصطناعي، لكن بعد تعديله، عاد JSON سير العمل مع عدة حقول على مستوى العقدة تم تعيينها بشكل صريح إلى
null— أشياء مثلcredentials،webhookId،notes،notesInFlow،executeOnce،retryOnFail،alwaysOutputData، وonError. - أي عقدة لا تحتاج إلى تلك الخصائص عادة ما تحذف المفتاح بالكامل في تصدير n8n القياسي. بدلاً من ذلك، كتب مساعد الذكاء الاصطناعي رحلة التعديل الدائرية بـ
null. - بمجرد أن وصل هذا الشكل إلى لوحة الرسم، انهارت كل إجراء لاحق (نقل عقدة، حفظ، حفظ تلقائي) مع نفس خطأ
Object.keysTypeError، لأنnodeTransforms.tsيحاول تطبيع تلك الحقول ولا يتوقعnullحرفي.
السبب الجذري (الذكاء الاصطناعي)
nodeTransforms.ts (المستخدم في منطق مقارنة لوحة الرسم وفي useWorkflowSaving.ts) يستدعي Object.keys(...) على خصائص معينة للعقدة (مثل credentials) عند حساب الفرق للحفظ. Object.keys(null) يرمي استثناء، لذا بمجرد أن تحتوي عقدة واحدة في سير العمل على null بدلاً من مفتاح محذوف، ينقطع الحفظ/الحفظ التلقائي لسير العمل بأكمله — وليس فقط تلك العقدة.
يبدو أن مسار تعديل العقدة الخاص بمساعد الذكاء الاصطناعي يقوم بتسلسل كائن العقدة دون إسقاط المفاتيح التي تم حلها إلى null، مما ينتج عنه شكل عقدة صحيح من حيث JSON من الناحية الفنية ولكنه غير آمن للواجهة الأمامية.
الحل (يدوياً)
صدّر JSON سير العمل، وأزل أي مفتاح على أي عقدة قيمته null (بدلاً من تعيينها إلى null)، وأعد الاستيراد. على سبيل المثال، على العقد المتأثرة، أزل المفاتيح مثل:
"credentials": null,
"webhookId": null,
"notes": null,
"notesInFlow": null,
"executeOnce": null,
"retryOnFail": null,
"alwaysOutputData": null,
"onError": null
بحيث يكون كائن العقدة ببساطة بدون تلك المفاتيح إذا لم تستخدمها. بعد تجريد حقول null وإعادة الاستيراد (الاستيراد من ملف إلى سير عمل جديد، وليس اللصق في لوحة الرسم)، عاد سير العمل للحفظ والحفظ التلقائي بشكل طبيعي.
آمل أن يوفر هذا لشخص ما عدة ساعات من تصحيح الأخطاء!
يبدو أن هذا خطأ في كيفية قيام مساعد الذكاء الاصطناعي بتسلسل تعديلات العقدة — سأقدر التأكيد من فريق n8n، حيث قد يواجه أي شخص يقوم بتعديل العقد بشكل مجموعة باستخدامه نفس العائق.

