آنچه در این مقاله میخوانید [پنهانسازی]
برای مسیردهی شرطی در n8n، نود IF را برای تصمیم دوحالته و نود Switch را برای چند مسیر موازی تنظیم کنید. مثلا در سناریوی RSS به تلگرام، کافی است در نود IF فیلد hasImage را بررسی کنید؛ اگر true بود تصویر را دانلود و پردازش کنید، اگر false بود به مسیر ساخت تصویر با مدل هوش مصنوعی بروید و با یک IF دوم تشخیص دهید ساخت تصویر موفق بوده است یا پست بدون عکس منتشر شود. این دقیقا جایی است که نود IF در n8n ساده و مطمئن کار را جلو میبرد و Switch مسیرهای بیشتر را تمیز نگه میدارد.
چه زمانی از IF و چه زمانی از Switch استفاده کنیم؟
اگر تنها یک سوال بله/خیر دارید (مثل وجود تصویر)، IF بهترین گزینه است؛ خوانا و سریع. هر وقت تعداد شاخهها بیشتر از دو شد یا میخواهید بر اساس مقدار یک فیلد مسیرهای مختلفی بسازید (مثلا نوع محتوا، زبان، یا منبع)، Switch شفافتر و مقیاسپذیرتر است. قاعده عملی:
- تصمیم دوحالته یا چند شرط تو در تو اما ساده: IF های زنجیرهای.
- یک فیلد با مقادیر متفاوت و خروجیهای جدا: Switch با case های مشخص و یک مسیر پیشفرض.
- پس از شاخهبندی، برای تجمیع نتایج از Merge استفاده کنید تا خروجی منسجم بماند.
سناریوی واقعی: پالایش RSS و ارسال به تلگرام با دو IF
در ورکفلو تلگرام کدیتی، پس از خواندن فید RSS، یک نود IF بررسی میکند آیا آیتم تصویر دارد یا نه (hasImage). اگر تصویر موجود باشد، فایل اصلی دانلود و برای انتشار آماده میشود. اگر تصویر وجود نداشته باشد، مسیر دوم یک تصویر با OpenAI میسازد و یک IF دیگر بررسی میکند که ساخت تصویر موفق بوده یا باید پست بدون عکس ارسال شود. نمونه ساده از داده ورودی:
{
"title": "عنوان مطلب",
"link": "https://example.com/post",
"hasImage": false,
"imageUrl": null,
"summary": "چکیده مطلب"
}پیاده سازی گام به گام ورکفلو
راه اندازی تریگر
برای دریافت داده میتوانید از RSS Read یا Webhook استفاده کنید. اگر زمان بندی برای شما مهم است، برنامهریزی اجرای خودکار با Schedule Trigger یا Cron ضروری است. راهنمای کامل زمان بندی را در زمان بندی ورکفلو در n8n با Schedule Trigger و Cron ببینید.
استانداردسازی داده ورودی
اگر فید شما فیلد hasImage را ندارد، یک نود Set یا Function اضافه کنید تا این فیلد را بسازید. مثال:
// در نود Function: تعیین hasImage بر اساس وجود imageUrl item.hasImage = !!item.imageUrl; return item;نود IF: وجود تصویر را بررسی کنید
در IF یک شرط Boolean بسازید. برای Value از عبارت زیر استفاده کنید:
{{$json.hasImage}}اگر true: مسیر A. اگر false: مسیر B.
مسیر A (true): دانلود و آماده سازی تصویر
- یک HTTP Request برای دانلود imageUrl.
- در صورت نیاز تبدیل باینری و اعمال تغییرات (تغییر اندازه، واترمارک) با نودهای مناسب یا سرویس بیرونی.
- پست نهایی را به تلگرام ارسال کنید.
مسیر B (false): ساخت تصویر با مدل مولد
- یک نود تولید تصویر (مثلا سرویس OpenAI Image یا هر ارائه دهنده دیگر) بر اساس title یا summary.
- پس از دریافت خروجی، بررسی موفقیت ساخت تصویر. سادهترین و خواناترین راه این است که قبل از IF دوم یک نود Set بگذارید و یک بولین بسازید:
// نود Set با Expression: // generatedOk = آیا باینری image وجود دارد؟ {{$binary.image ? true : false}}- IF دوم: اگر generatedOk true بود، تصویر جدید را ضمیمه و ارسال کنید؛ اگر false، پست را بدون عکس بفرستید.
ادغام مسیرها
برای اینکه انتشار شما یک نقطه خروجی تمیز داشته باشد، بعد از دو شاخه A و B، خروجیها را با Merge (Mode: Pass-through) یکی کنید و سپس ارسال نهایی را انجام دهید.
پیکربندی نود Switch برای چند شاخه تمیز
Switch زمانی مفید است که بر اساس مقدار یک فیلد به چند مسیر بروید؛ مثلا نوع محتوای فید را به «خبر»، «آموزش»، «اطلاعیه» تقسیم کنید و برای هرکدام قالب کپشن جدا داشته باشید. تنظیمات نمونه:
- Value to Compare: از یک عبارت استفاده کنید، مثلا:
{{$json.category}} - Cases:
- آموزش
- خبر
- اطلاعیه
- خروجی پیش فرض: هر موردی که با هیچ case برابر نبود، به مسیر پیش فرض برود؛ آنجا لاگ بگیرید یا یک قالب عمومی اعمال کنید.
اگر به جای نام دسته بندی، شاخصهای کیفی دارید (مثلا طول متن)، قبل از Switch یک نود Set بگذارید و یک برچسب قابل سوئیچ بسازید:
// دسته بندی بر اساس طول چکیده
{{$json.summary && $json.summary.length > 240 ? 'long' : 'short'}}حالا در Switch روی مقدار short/long شاخه بندی کنید.
الگوی ترکیبی IF + Switch که در عمل جواب میدهد
ابتدا با یک IF تصمیم حیاتی را بگیرید (داشتن تصویر). سپس پس از تثبیت منبع تصویر (دانلود شده یا مولد)، با یک Switch قالب بندی کپشن، زبان یا کانال مقصد را تعیین کنید. این الگو دو مزیت دارد: تصمیم اصلی سریع گرفته میشود و پیچیدگیهای نمایشی در یک سوئیچ تمیز مدیریت میشوند.
روش اطمینان از درستی نتیجه و دیباگ
- Pin Data: روی نود ورودی داده نمونه پین کنید تا هر بار با همان داده تست بگیرید و شاخهها را قدم به قدم بررسی کنید.
- نمایش Item: در هر شاخه یک نود Set اضافه کنید و فیلدهای کلیدی مثل hasImage، generatedOk و مسیر انتخاب شده را خروجی بگیرید تا در Execution Data قابل مشاهده باشند.
- Fallback الزامی: برای Switch همیشه مسیر پیش فرض را به لاگ یا اعلان خطا وصل کنید تا آیتمهای غیرمنتظره گم نشوند.
- مدیریت خطا: برای خطاهای شبکه یا سرویسهای مولد، از Retry On Fail و Error Trigger استفاده کنید. راهنمای عملی در مدیریت خطا در n8n با Error Trigger و Retry On Fail آمده است.
اشتباهات رایج و راه حل آنها
- بررسی رشته “true” به جای بولین true: در IF نوع داده را درست نگه دارید. اگر تردید دارید، قبل از IF مقدار را با Set به بولین تبدیل کنید.
- ارجاع اشتباه به مسیر داده: از Expression Editor استفاده کنید و مسیر را با کلیک روی فیلدها بسازید تا خطای املایی در $json.path رخ ندهد.
- نداشتن خروجی پیش فرض در Switch: همیشه خروجی پیش فرض را به مانیتورینگ وصل کنید.
- تکیه به وجود باینری بدون بررسی: قبل از استفاده از $binary.image، با یک IF یا Set وجود آن را به generatedOk تبدیل کنید.
- شاخههای بدون ادغام: پس از چند مسیر موازی، خروجیها را با Merge متحد کنید تا گامهای بعدی ساده بمانند.
چک لیست اجرایی پیش از انتشار
- hasImage و generatedOk را در دو نمونه واقعی true/false تست کردهاید.
- برای Switch، همه case ها و مسیر پیش فرض پوشش داده شده است.
- Retry یا Error Trigger برای سرویسهای بیرونی فعال است.
- آیتمهای بدون تصویر مسیر ارسال بدون عکس را طی میکنند و متوقف نمیشوند.
- در خروجی نهایی، دقیقا یک مسیر به ارسال تلگرام ختم میشود.
گسترش سناریو: از اتوماسیون تا ایجنت
همین الگوی IF/Switch پایه ساخت یک ایجنت محتوامحور است؛ مثلا اگر سوال کاربر تشخیص داده شد، Switch بسته به نوع پرسش به مسیرهای تولید پاسخ، استخراج خلاصه یا پیوست تصویر میرود. برای نمونه کاربردی ایجنت در n8n، راهنمای آموزش ساخت ایجنت هوش مصنوعی با n8n برای پاسخ گویی خودکار مسیر بعدی خوبی است. اگر در نقطه شروع ابزارهای مولد هستید، گذر از یک دوره آموزش ابزارهای هوش مصنوعی میتواند کار شما را در طراحی شاخههای هوشمند سرعت دهد.
یک الگوی Switch بر اساس زبان یا کانال
اگر پستها را به چند کانال تلگرام یا شبکه اجتماعی میفرستید، قبل از Switch یک برچسب مقصد بسازید:
// مقصد بر اساس دسته بندی
{{$json.category === 'آموزش' ? 'telegram-edu' : 'telegram-news'}}حالا در Switch برای telegram-edu و telegram-news مسیرهای انتشار متفاوت و قالبهای کپشن اختصاصی تعریف کنید.
گام بعدی چیست؟
الگوی IF برای تصمیمهای حیاتی و Switch برای تنوع مسیرها را همین امروز روی یک فید واقعی پیاده کنید، مسیر پیش فرض را فراموش نکنید و با Pin Data اجرای قدم به قدم را چک کنید. اگر میخواهید اجرای خودکار را در بازههای زمانی مشخص پایدار کنید، از زمان بندی ورکفلو با Schedule Trigger و Cron کمک بگیرید و حتما مکانیزمهای بازیابی خطا را مطابق راهنمای مدیریت خطا در n8n اضافه کنید. با همین چند گام، مسیرهای شرطی شما هم خوانا میماند و هم مقاوم در برابر خطا.







