نود IF در N8N
نود IF یکی از مهمترین ابزارها برای ساختن منطق تصمیمگیری در n8n است. با IF میتوانید جریان ورکفلو را بر اساس یک شرط (مثلاً مبلغ خرید، وضعیت پرداخت، وجود یک فیلد، تاریخ، یا مقدار یک متغیر) به دو مسیر جدا تقسیم کنید: مسیر true و مسیر false.
معرفی نود در N8N
نود IF برای ارزیابی شرط روی دادههای ورودی استفاده میشود و بر اساس نتیجه، آیتمها را به یکی از خروجیها هدایت میکند.
- کارکرد اصلی: بررسی یک یا چند شرط و مسیردهی دادهها به true/false
- دستهبندی نود: Function (منطقی/کنترلی). این نود Trigger یا Integration نیست، بلکه جریان را کنترل میکند.
- اهمیت در ورکفلوها: تقریباً در هر اتوماسیون واقعی به تصمیمگیری نیاز است؛ IF به شما کمک میکند مسیرهای متفاوت (مثلاً ارسال پیام/عدم ارسال، ایجاد تسک/بایگانی، ادامه/توقف) بسازید.
موارد استفاده
۱) فیلتر کردن سفارشها بر اساس مبلغ
اگر مبلغ سفارش بیشتر از ۵۰۰ هزار تومان باشد، به تیم فروش پیام بده؛ در غیر این صورت، فقط در CRM ثبت کن.
- ورودی: سفارشها از WooCommerce/Shopify/Webhook
- IF: amount > 500000
- true: Slack/Telegram پیام
- false: فقط ذخیره در Google Sheets/CRM
۲) بررسی وجود یک فیلد (مثلاً ایمیل)
اگر ایمیل کاربر وجود دارد، ایمیل خوشآمدگویی ارسال شود؛ اگر نیست، یک تسک برای پیگیری ایجاد شود.
- IF: email is not empty
- true: Email node
- false: Trello/Asana task
۳) مسیر متفاوت برای وضعیت پرداخت
اگر status برابر paid بود، فاکتور صادر شود؛ اگر unpaid بود، یادآوری پرداخت ارسال شود.
- IF: status equals “paid”
- true: Generate PDF → Send Email
- false: Send SMS/Email reminder
۴) ترکیب IF با نودهای دیگر برای ورکفلوهای عملی
- IF + Set: قبل از شرط، فیلدها را تمیز/استاندارد کنید (مثلاً تبدیل رشته به عدد) تا شرطها دقیقتر شوند.
- IF + Switch: اگر فقط دو حالت ندارید و چندین حالت دارید، میتوانید اول IF برای یک شرط اصلی بگذارید و بعد در یکی از مسیرها Switch برای چند مسیر.
- IF + Merge: بعد از انجام کار در مسیر true/false، خروجیها را با Merge یکی کنید و ادامه بدهید.
- IF + Error Trigger/Continue On Fail: تصمیمگیری روی خروجی خطا/موفقیت یا وجود دادههای ناقص.
پارامترها و تنظیمات
در n8n، نود IF معمولاً با مفهوم Conditions (شرطها) کار میکند. بسته به نسخه n8n، نام دقیق گزینهها ممکن است کمی متفاوت باشد، اما منطق یکسان است: شما یک یا چند شرط تعریف میکنید و تعیین میکنید نتیجه چگونه ارزیابی شود.
۱) Conditions (شرطها)
مهمترین بخش IF است. هر شرط معمولاً شامل انتخاب نوع مقایسه و مقدارهاست.
- نام پارامتر: Conditions
نوع داده: Array (لیست شرطها)
توضیح کاربرد: تعریف قوانین تصمیمگیری. هر قانون روی فیلدهای آیتم ورودی اعمال میشود.
مثال عملی: بررسی اینکه
amountبزرگتر از 500000 باشد.
۲) Value 1 / Left Value (مقدار اول)
- نام پارامتر: Value 1 (یا Left Value)
نوع داده: Expression/String/Number/Boolean (بسته به شرط)
توضیح کاربرد: فیلدی که از ورودی میخوانید یا یک مقدار ثابت.
مثال عملی:
{{ $json.amount }}یا{{ $json.customer.email }}
۳) Operation / Comparator (عملگر مقایسه)
- نام پارامتر: Operation (Comparator)
نوع داده: Enum (انتخاب از لیست)
توضیح کاربرد: تعیین نوع مقایسه (برابر، بزرگتر، شامل، خالی بودن و…)
مثال عملی:
greater than،equals،contains،is empty
۴) Value 2 / Right Value (مقدار دوم)
- نام پارامتر: Value 2 (یا Right Value)
نوع داده: String/Number/Boolean
توضیح کاربرد: مقدار مقایسه (آستانه، متن هدف، مقدار ثابت)
مثال عملی: عدد
500000یا متنpaid
۵) Combine Conditions (ترکیب شرطها: AND/OR)
- نام پارامتر: Combine Conditions
نوع داده: Enum (AND / OR)
توضیح کاربرد: اگر چند شرط دارید، تعیین میکند همه باید درست باشند (AND) یا درست بودن یکی کافی است (OR).
مثال عملی: AND برای «مبلغ بالا و وضعیت paid»، OR برای «کشور ایران یا امارات»
۶) نکات مهم هنگام پیکربندی
- نوع داده را جدی بگیرید: اگر مبلغ به صورت رشته وارد شده باشد (مثلاً “500000”)، مقایسه عددی ممکن است درست عمل نکند. قبل از IF با Set/Code آن را به Number تبدیل کنید.
- مسیر فیلدها را دقیق بزنید: اگر فیلد داخل آبجکت تو در تو است از مسیر کامل استفاده کنید:
{{ $json.customer.email }} - آیتمها جداگانه ارزیابی میشوند: IF روی هر آیتم ورودی مستقل تصمیم میگیرد و آن آیتم را به خروجی true یا false میفرستد.
- مراقب null/undefined باشید: اگر فیلدی وجود ندارد، از عملگرهای «is empty / is not empty» یا چکهای امن استفاده کنید.
ورودیها و خروجیها
ورودی (Input)
ورودی IF همان آیتمهایی است که از نود قبلی میآیند. هر آیتم معمولاً یک ساختار JSON دارد.
نمونه ورودی:
{ "orderId": 1234, "amount": 650000, "status": "paid", "customer": { "email": "user@example.com", "country": "IR" }}خروجی (Output)
نود IF دو خروجی دارد:
- Output 1 (true): آیتمهایی که شرط را پاس کردهاند.
- Output 2 (false): آیتمهایی که شرط را پاس نکردهاند.
ساختار آیتمها در خروجی تغییر نمیکند؛ فقط مسیرشان عوض میشود.
نمونه: اگر شرط amount > 500000 باشد، آیتم بالا به مسیر true میرود.
نمایش خروجی به شکل خلاصه
- true: [{ “orderId”: 1234, “amount”: 650000, … }]
- false: []
نکات پیشرفته و ترفندها
۱) ساخت شرطهای مقاوم با Expression
اگر احتمال دارد فیلدی وجود نداشته باشد، از عبارتهای امن استفاده کنید. مثال برای چک کردن ایمیل:
{{ ($json.customer?.email || "").trim() }}سپس شرط را روی «is not empty» بگذارید.
۲) تبدیل نوع داده قبل از IF
اگر amount به شکل رشته است:
- با نود Set یک فیلد جدید بسازید:
amountNumber - مقدار:
{{ Number($json.amount) }} - شرط IF را روی
amountNumberاعمال کنید.
۳) پیادهسازی چند مرحلهای تصمیمگیری
برای سناریوهای پیچیده، به جای یک IF بزرگ، چند IF پشتسرهم بسازید:
- IF اول: داده کامل هست یا نه؟ (وجود ایمیل/موبایل)
- IF دوم: مشتری VIP هست یا نه؟
- IF سوم: بازه زمانی (ساعات کاری) درست هست یا نه؟
این کار دیباگ و نگهداری ورکفلو را سادهتر میکند.
۴) اتصال دوباره مسیرها با Merge
اگر در هر مسیر عملیات متفاوتی انجام میدهید اما بعداً باید به یک نقطه مشترک برسید، از Merge استفاده کنید. در بسیاری از سناریوها حالت Merge = Append کمک میکند خروجی هر دو مسیر در یک جریان جمع شود.
۵) استفاده از IF برای کنترل هزینه و تعداد درخواستها
قبل از اجرای نودهای سنگین (مثل APIهای پولی یا پردازشهای طولانی)، با IF بررسی کنید آیا واقعاً لازم است آن مرحله اجرا شود یا نه (مثلاً اگر قبلاً در دیتابیس ثبت شده، ادامه ندهد).
محدودیتها و خطاها
محدودیتها
- دو خروجی بیشتر ندارد: IF فقط true/false دارد. برای چند شاخه، از Switch یا چند IF استفاده کنید.
- منطق پیچیده بسیار طولانی میشود: شرطهای زیاد در یک IF ممکن است خوانایی را پایین بیاورد. بهتر است مرحلهای یا با کمک Set/Code سادهسازی شود.
- وابستگی به ساختار داده: اگر ساختار JSON ورودی تغییر کند (مثلاً نام فیلدها عوض شود)، شرطها نیاز به بهروزرسانی دارند.
خطاهای رایج و راهحلها
- مشکل: شرط همیشه false میشود
علتهای رایج: مسیر اشتباه فیلد، وجود null، یا مقایسه رشته به جای عدد
راهحل: در پنل اجرای نود (Execution) مقدار واقعی
$jsonرا ببینید، مسیر را اصلاح کنید، و در صورت نیاز تبدیل نوع داده انجام دهید. - مشکل: مقایسه عددی درست نیست
علت: مقدار به صورت string است (مثلاً “100” و “2” در مقایسه رشتهای)
راهحل: استفاده از
Number(...)و ساخت فیلد عددی قبل از IF - مشکل: شرط روی فیلد تو در تو کار نمیکند
علت: مسیر اشتباه یا آبجکت/آرایه متفاوت از تصور شما
راهحل: خروجی نود قبلی را بررسی کنید و دقیقاً همان مسیر را در Expression وارد کنید.
- مشکل: فقط بعضی آیتمها عبور میکنند
علت: IF روی هر آیتم جدا اعمال میشود و طبیعی است برخی true و برخی false باشند.
راهحل: اگر میخواهید بر اساس مجموع/میانگین تصمیم بگیرید، ابتدا با Item Lists/Code دادهها را تجمیع کنید و بعد IF بگذارید.
ایده ها
- سیستم هوشمند پشتیبانی: اگر تیکت شامل کلمات «فوری/urgent» بود به کانال ویژه ارسال شود، وگرنه در صف معمولی ثبت شود.
- کنترل کیفیت داده: اگر شماره موبایل معتبر است پیامک ارسال شود، در غیر این صورت رکورد برای اصلاح به Google Sheet منتقل شود.
- مدیریت موجودی: اگر موجودی کالا کمتر از حداقل بود، هشدار به Slack و ایجاد تسک خرید ثبت شود.
- اتوماسیون مالی: اگر وضعیت پرداخت موفق و مبلغ بالاتر از سقف تعیینشده بود، درخواست تایید مدیر ایجاد شود.
- تقسیمبندی لیدها: اگر کشور/منبع ورودی خاص است به تیم مرتبط اختصاص داده شود، در غیر این صورت به تیم عمومی.
