ما هي مشكلة الـ Infinite Loop في n8n؟
الـ Infinite Loop أو الحلقة اللانهائية هي واحدة من أكثر المشاكل شيوعاً عند بناء الـ workflows في n8n. تحدث عندما يستمر الـ workflow في التكرار بلا توقف، مما يستهلك كل الـ executions في n8n Cloud في غضون دقائق، أو يسبب امتلاء الـ memory على السيرفر الخاص وتعطل كل شيء.
ما السبب الجذري للمشكلة؟
السبب الأشيع هو أن متغير الـ counter يضيع بين الـ iterations. كل node في n8n يكتب بياناته فوق البيانات السابقة، فيرجع العداد إلى 1 في كل مرة ولا يصل أبداً إلى الـ max المحدد.
مشكلة أخرى شائعة جداً: case sensitivity في أسماء المتغيرات. إذا كتبت loopcounter بحرف صغير في node، والـ node الثاني يبحث عن loopCounter بحرف كبير، فالعداد لن يعمل وستقع في infinite loop بدون أن تعرف السبب.
الحل الأول: إصلاح أسماء المتغيرات
دائماً تحقق من أسماء المتغيرات في كل الـ nodes. n8n حساس لحالة الأحرف — حرف صغير أو كبير يكسر اللوب بالكامل. وحّد الاسم في كل مكان قبل ما تشغل الـ workflow.
الحل الثاني: استخدم $runIndex بدل Counter يدوي
n8n يوفر متغيراً مدمجاً اسمه $runIndex يبدأ من صفر ويزيد تلقائياً في كل iteration. لا يضيع، لا يُكتب فوقه، ولا تحتاج تمرره بين الـ nodes.
بدل ما تكتب:
{{ json.loopCounter + 1 $ }}
اكتب ببساطة:
{{ runIndex + 1 $ }}
بناء الـ Workflow الصحيح
- Set Node — يحدد loopCounter باستخدام
$runIndex + 1و maxIterations = 3 - HTTP Request Node — يمثل العملية التي تتكرر
- IF Node — يوجه التدفق للـ false branch دائماً لإبقاء اللوب يعمل
- Switch Node — يتحقق من الـ counter: إذا ≤ max يكمل، إذا > max يوقف
- Wait Node — انتظر ثانيتين بين كل iteration
- Stop and Error Node — يوقف الـ workflow برسالة واضحة
خلاصة — ثلاث قواعد لحماية workflows
- دائماً تحقق من أسماء المتغيرات — حرف صغير أو كبير يفرق
- استخدم
$runIndexبدل counter يدوي دائماً - حط دائماً Switch مع Stop and Error كـ exit condition
هذي الثلاث قواعد تحميك من أي infinite loop في n8n. اشترك في القناة عشان ما تفوتك الحلقات الجاية — كل أسبوع نحل مشكلة جديدة بالعربي. 🚀