نود Merge در N8N
نود Merge یکی از مهمترین ابزارهای n8n برای ترکیب کردن دادهها از چند مسیر مختلف در یک خروجی واحد است. وقتی در یک ورکفلو چند شاخه (Branch) دارید و میخواهید نتایج را کنار هم قرار دهید، همردیف کنید، یا یکی را به دیگری اضافه کنید، Merge دقیقاً همان نودی است که کنترل این نقطه اتصال را به شما میدهد.
معرفی نود در N8N
کارکرد اصلی نود
Merge دادههای دو ورودی (Input 1 و Input 2) را با روشهای مختلف ادغام میکند. بسته به حالت انتخابی، میتواند:
- آیتمهای دو طرف را بهصورت ردیفی با هم ترکیب کند (Pair/By Index)
- دادهها را بر اساس یک کلید مشترک همسانسازی کند (Join/Merge by Key)
- خروجی دو شاخه را پشت سر هم قرار دهد (Append/Concatenate)
- صرفاً برای همگامسازی دو مسیر استفاده شود (Wait/Pass-through بسته به سناریو)
دستهبندی نود
Merge در دسته Function (یا نودهای Core برای پردازش داده) قرار میگیرد؛ یعنی یک Integration با سرویس خارجی نیست و هدفش مدیریت و تبدیل جریان داده داخل n8n است.
اهمیت در ورکفلوها
در بسیاری از اتوماسیونها داده از چند منبع میآید: یک شاخه اطلاعات کاربر را از دیتابیس میگیرد، شاخه دیگر وضعیت پرداخت را از درگاه پرداخت، و شاخه سوم اطلاعات ارسال را از سیستم لجستیک. Merge نقطهای است که این دادهها را به یک خروجی قابل استفاده برای ادامه ورکفلو (ارسال ایمیل، ساخت فاکتور، آپدیت CRM و…) تبدیل میکند.
موارد استفاده
۱) ساخت پروفایل کامل مشتری از چند منبع
سناریو: از یک شاخه اطلاعات پایه مشتری از Google Sheets میآید و از شاخه دیگر اطلاعات سفارش از WooCommerce. با Merge میتوانید خروجی را به یک JSON واحد تبدیل کنید و سپس به CRM ارسال کنید.
۲) Join کردن دادهها بر اساس کلید مشترک (مثل email یا id)
سناریو: لیست کاربران (email) را دارید و میخواهید برای هر email، اطلاعات تکمیلی از جدول دیگری یا API دیگری را اضافه کنید. Merge با حالت join بر اساس فیلد مشترک، دو لیست را همسان میکند.
۳) Append کردن خروجی چند شاخه برای ساخت یک لیست بزرگ
سناریو: از یک API چند صفحه داده میگیرید یا چند منبع مختلف لیست محصولات میدهند. خروجیها را با Merge (Append) به یک لیست واحد تبدیل میکنید و سپس روی کل لیست پردازش انجام میدهید (مثلاً فیلتر، تبدیل، ارسال به دیتابیس).
۴) همگامسازی دو مسیر قبل از ادامه
سناریو: یک شاخه فایل را تولید میکند و شاخه دیگر لینک دانلود را آماده میکند. تا هر دو آماده نشوند، نباید ایمیل ارسال شود. Merge میتواند بهعنوان نقطه اتصال برای ادامه مسیر عمل کند.
ترکیب با نودهای دیگر برای ورکفلوهای عملی
- IF + Merge: دو مسیر (True/False) را بعد از تصمیمگیری به یک مسیر برگردانید.
- HTTP Request + Merge: یک پاسخ API را با داده داخلی (مثلاً از Set) ترکیب کنید.
- Split In Batches + Merge: نتایج پردازششدهی دستهای را در نهایت کنار هم قرار دهید (بسته به استراتژی).
- Code + Merge: قبل از Merge دادهها را نرمالسازی کنید (یکسانسازی نام فیلدها و نوع دادهها).
پارامترها و تنظیمات
Merge همیشه دو ورودی دارد و مهمترین تنظیم آن، انتخاب Mode (حالت ادغام) است. نام دقیق برخی گزینهها ممکن است با نسخه n8n کمی تفاوت داشته باشد، اما مفهوم و رفتار کلی ثابت است.
فهرست پارامترها (کلیدیترین گزینهها)
- Mode (حالت ادغام) / نوع داده: String (گزینهای) / توضیح: تعیین میکند ادغام چگونه انجام شود / مثال: Append یا Merge By Key
- Join Keys (کلیدهای اتصال) / نوع داده: String / توضیح: در حالت join مشخص میکند روی کدام فیلدها دو ورودی با هم همسان شوند / مثال: key1=email و key2=email
- Output Type / Behavior (رفتار خروجی) / نوع داده: Option / توضیح: تعیین میکند اگر آیتمی در یک طرف نبود چه شود (بسته به حالت) / مثال: نگهداشتن فقط matchها یا نگهداشتن همه
- Merge Strategy (استراتژی ادغام فیلدها) / نوع داده: Option / توضیح: اگر یک فیلد در هر دو ورودی وجود داشت، کدام اولویت داشته باشد / مثال: ترجیح Input 2 برای overwrite
توضیح عملی حالتهای رایج
۱) Append (چسباندن دو لیست)
کاربرد: وقتی میخواهید آیتمهای ورودی 2 را به انتهای آیتمهای ورودی 1 اضافه کنید.
- ورودی لازم: هر دو ورودی میتوانند لیستی از آیتمها باشند.
- خروجی: یک لیست شامل همه آیتمها.
- نکته: در این حالت آیتمها با هم ترکیب نمیشوند، فقط کنار هم قرار میگیرند.
۲) Merge by Index / Pair Items (ادغام ردیفی)
کاربرد: وقتی مطمئن هستید آیتم اول ورودی 1 مربوط به آیتم اول ورودی 2 است (بهترتیب).
- مزیت: سریع و ساده.
- ریسک: اگر تعداد آیتمها یا ترتیب متفاوت باشد، خروجی اشتباه میشود.
- مثال عملی: یک شاخه قیمتها را میآورد و شاخه دیگر موجودیها را، هر دو به ترتیب محصول.
۳) Merge by Key / Join (ادغام بر اساس کلید)
کاربرد: وقتی دو ورودی را باید بر اساس یک فیلد مشترک مانند id یا email به هم وصل کنید.
- تنظیم مهم: تعیین Join Key برای هر ورودی (مثلاً Input1: userId و Input2: id)
- نکته: اگر در یک سمت چند آیتم با یک کلید تکراری وجود داشته باشد، نتیجه میتواند چند-به-چند شود یا صرفاً اولین match لحاظ شود (بسته به رفتار نسخه/تنظیمات). بهتر است قبل از Join داده را یکتا کنید.
نکات مهم هنگام پیکربندی
- همنوع بودن کلیدها: اگر در یک سمت
idعدد و در سمت دیگر رشته باشد، ممکن است join انجام نشود. در صورت نیاز با Set یا Code نوع داده را یکسان کنید. - کنترل تداخل فیلدها: اگر هر دو ورودی فیلدی با نام یکسان دارند (مثل
status)، مشخص کنید کدام سمت overwrite کند، یا قبل از Merge نام فیلدها را تغییر دهید. - تعداد آیتمها در ادغام ردیفی: در Merge by Index اگر تعداد آیتمها متفاوت باشد، برخی آیتمها بیجفت میمانند یا حذف/نادیده گرفته میشوند (وابسته به حالت).
ورودیها و خروجیها
ورودی (Input)
Merge دو ورودی دارد:
- Input 1: خروجی شاخه/نود اول
- Input 2: خروجی شاخه/نود دوم
هر ورودی معمولاً یک آرایه از آیتمهاست و هر آیتم یک شیء با کلید json دارد.
نمونه ورودیها
Input 1:
[ { "json": { "email": "a@example.com", "name": "Ali" } }, { "json": { "email": "b@example.com", "name": "Sara" } }]
Input 2:
[ { "json": { "email": "a@example.com", "plan": "pro" } }, { "json": { "email": "b@example.com", "plan": "free" } }]
خروجی (Output)
خروجی بسته به Mode متفاوت است:
- Append: یک لیست شامل آیتمهای هر دو ورودی پشت سر هم
- Merge by Index: آیتم i از ورودی 1 با آیتم i از ورودی 2 در یک آیتم ادغام میشود
- Merge by Key: آیتمها بر اساس کلید مشترک join میشوند و آیتمهای match شده ادغام میگردند
نمونه خروجی در حالت Merge by Key (با email)
[ { "json": { "email": "a@example.com", "name": "Ali", "plan": "pro" } }, { "json": { "email": "b@example.com", "name": "Sara", "plan": "free" } }]
نمونه خروجی در حالت Append
[ { "json": { "email": "a@example.com", "name": "Ali" } }, { "json": { "email": "b@example.com", "name": "Sara" } }, { "json": { "email": "a@example.com", "plan": "pro" } }, { "json": { "email": "b@example.com", "plan": "free" } }]
نکات پیشرفته و ترفندها
۱) جلوگیری از تداخل نام فیلدها (Field Collision)
اگر هر دو ورودی فیلدهایی با نام مشابه دارند، قبل از Merge از نود Set استفاده کنید و فیلدهای یک سمت را با پیشوند تغییر نام دهید. مثال:
- در Input 1:
statusرا بهuser_statusتغییر دهید - در Input 2:
statusرا بهpayment_statusتغییر دهید
۲) نرمالسازی کلید Join با Code یا Set
برای join مطمئن، کلیدها را یکسان کنید. مثالهای رایج:
- Trim کردن ایمیل: حذف فاصلههای ابتدا/انتها
- Lowercase کردن ایمیل برای جلوگیری از mismatch
- تبدیل عدد به رشته یا برعکس
۳) الگوی «Fan-out → Fan-in»
یک الگوی کلاسیک در n8n این است که داده را به چند شاخه تقسیم کنید (Fan-out) و بعد دوباره جمع کنید (Fan-in). Merge نود اصلی برای Fan-in است. مثال:
- شاخه 1: دریافت اطلاعات مشتری از DB
- شاخه 2: محاسبه امتیاز/Score با Code
- شاخه 3: گرفتن آخرین خرید از API
- Merge: ادغام همه برای ساخت یک payload نهایی
۴) بهینهسازی: کاهش حجم قبل از Merge
اگر خروجیها بزرگ هستند، قبل از Merge فقط فیلدهای موردنیاز را نگه دارید (با Set و فعال کردن Keep Only Set). این کار هم سرعت را بهتر میکند و هم ریسک تداخل و مصرف حافظه را کاهش میدهد.
۵) مدیریت آیتمهای بدون Match در Join
در بسیاری از پروژهها، همه آیتمها match نمیشوند. رویکرد عملی:
- اگر فقط matchها مهم هستند، رفتار خروجی را روی حالت inner-like تنظیم کنید (فقط موارد مشترک)
- اگر میخواهید موارد بدون match هم بمانند، حالت نگهداری همه (left/right/full-like) را انتخاب کنید و سپس با IF آیتمهای ناقص را جداگانه مدیریت کنید
محدودیتها و خطاها
محدودیتها
- محدود به دو ورودی: Merge بهصورت مستقیم دو ورودی را میگیرد. برای ادغام بیش از دو شاخه، باید چند Merge پشت سر هم قرار دهید.
- وابستگی به کیفیت داده: در join، اگر کلیدها تمیز و یکتا نباشند، خروجی میتواند ناقص یا چندگانه شود.
- ابهام در تکراریها: اگر یک کلید در یک سمت چند بار تکرار شود، نتیجه ممکن است تکثیر آیتمها یا انتخاب اولین مورد باشد (وابسته به حالت/نسخه). بهتر است داده را قبل از merge یکتا کنید.
خطاهای رایج و راهحلها
- Join انجام نمیشود و خروجی خالی است: کلیدهای join را بررسی کنید (نام فیلد، نوع داده، فاصلهها، حروف بزرگ/کوچک). با Set یا Code نرمالسازی انجام دهید.
- فیلدها overwrite میشوند: استراتژی overwrite را تغییر دهید یا قبل از Merge نام فیلدهای یک سمت را تغییر دهید.
- در Merge by Index دادهها قاطی میشوند: اگر ترتیب دو لیست یکی نیست، به جای index از merge by key استفاده کنید.
- تعداد آیتمهای خروجی غیرمنتظره است: بررسی کنید در join کلید تکراری وجود نداشته باشد. در صورت نیاز قبل از Merge با Code گروهبندی/unique انجام دهید.
ایده ها
- ساخت گزارش روزانه فروش: ادغام داده سفارشها (API فروشگاه) با داده هزینه تبلیغات (Google Ads) و خروجی یک گزارش واحد برای ارسال در Slack
- بهروزرسانی CRM: ادغام اطلاعات کاربر از فرم ثبتنام با نتیجه اعتبارسنجی شماره تلفن از یک API و سپس ساخت/آپدیت Contact
- سیستم هشدار موجودی: ادغام لیست محصولات کمموجودی با لیست تأمینکنندگان مرتبط و ارسال ایمیل به تأمینکننده درست
- پاکسازی داده مشتریان: ادغام خروجی دو منبع (مثلاً Airtable و Sheets) بر اساس email و شناسایی رکوردهای تکراری برای اصلاح
- تولید فاکتور خودکار: ادغام اطلاعات مشتری، آیتمهای سفارش، و نرخ مالیات/ارسال برای ساخت payload نهایی PDF
