نود Summarize در N8N
نود Summarize در n8n برای این طراحی شده است که از بین چندین آیتم ورودی (Items) یک خروجی خلاصه و تجمیعشده بسازد. اگر در یک مرحله از ورکفلو تعداد زیادی رکورد، رویداد یا پیام دارید و میخواهید آنها را به یک گزارش یکپارچه، یک متن خلاصه، یا یک ساختار دادهای جمعبندیشده تبدیل کنید، Summarize یکی از کاربردیترین انتخابها است.
معرفی نود در N8N
نود Summarize دادههای چند آیتم را دریافت میکند و با قواعدی که مشخص میکنید، آنها را خلاصه میکند؛ مثلاً:
- شمارش تعداد آیتمها
- جمع/میانگین/حداقل/حداکثر روی یک فیلد عددی
- ساخت خروجی گروهبندیشده بر اساس یک کلید (مثل category یا status)
- ایجاد لیست یکتا (distinct) از مقادیر یک فیلد
- ساخت یک متن یا آبجکت نهایی برای گزارشدهی
دستهبندی نود: Function (پردازش و تبدیل داده)
اهمیت در ورکفلوها: بسیاری از APIها و نودها خروجی را به صورت چند آیتم برمیگردانند. Summarize کمک میکند خروجی نهایی را برای مرحلههای بعدی (ارسال پیام، ذخیره در دیتابیس، ساخت گزارش) قابلاستفاده و کمحجم کنید و از تکرار عملیات در آیتمهای متعدد جلوگیری شود.
موارد استفاده
1) ساخت گزارش روزانه از سفارشها
فرض کنید از یک نود مثل HTTP Request یا Database چندین سفارش روز را گرفتهاید. با Summarize میتوانید:
- تعداد کل سفارشها را بشمارید
- جمع مبلغ کل را محاسبه کنید
- میانگین مبلغ سفارش را بهدست آورید
- سفارشها را بر اساس status گروهبندی کنید (paid / pending / canceled)
2) خلاصهسازی لاگها و خطاها برای ارسال در Slack/Telegram
اگر در یک بازه زمانی چند خطا ثبت شده باشد، بهجای ارسال دهها پیام، Summarize یک خروجی واحد میسازد؛ مثلاً تعداد خطاها، رایجترین errorCode، و لیست 10 خطای آخر.
3) تجمیع نتایج وباسکرپینگ
بعد از استخراج چندین آیتم (محصولات، قیمتها، موجودی)، میتوانید min/max قیمت، تعداد کالاهای موجود، و لیست کالاهای ناموجود را یکجا تولید کنید.
4) ترکیب با نودهای دیگر برای ورکفلوهای عملی
- Schedule Trigger → دریافت دادهها روزانه → Summarize → Email (ارسال گزارش)
- Webhook → دریافت رویدادها → Summarize → Google Sheets (ثبت خلاصه روزانه)
- HTTP Request (لیست تیکتها) → Summarize → Slack (ارسال آمار و دستهبندی)
پارامترها و تنظیمات
در n8n ممکن است نام دقیق برخی گزینهها با توجه به نسخه تغییرات جزئی داشته باشد، اما منطق Summarize ثابت است: شما یک یا چند عملیات خلاصهسازی تعریف میکنید و مشخص میکنید خروجی چگونه ساخته شود.
1) Group By (گروهبندی)
- نام پارامتر: Group By
- نوع داده: String (مسیر/نام فیلد)
- کاربرد: آیتمها را بر اساس مقدار یک فیلد دستهبندی میکند. خروجی به ازای هر گروه یک آیتم میشود.
- مثال عملی: گروهبندی سفارشها بر اساس
statusیاcustomerId
نکته: اگر Group By را خالی بگذارید، معمولاً Summarize کل آیتمها را در یک خلاصه کلی تجمیع میکند.
2) Aggregations / Fields to Summarize (تعریف عملیات خلاصهسازی)
در این بخش برای هر خروجی مورد نیاز، یک تعریف اضافه میکنید (Add Field / Add Aggregation). هر تعریف معمولاً شامل موارد زیر است:
- Field (فیلد ورودی): نام یا مسیر فیلد در آیتمها (مثلاً
amountیاmeta.duration) - Operation (عملیات): نوع خلاصهسازی
- Output Name (نام خروجی): نام فیلدی که در خروجی ساخته میشود
عملیاتهای رایج (Operation) و مثال عملی
- Count
- نوع داده: عددی (خروجی Number)
- کاربرد: تعداد آیتمها یا تعداد مقدارهای معتبر یک فیلد
- مثال: خروجی
totalOrders= تعداد سفارشهای ورودی
- Sum
- نوع داده: Number
- کاربرد: جمع مقادیر یک فیلد عددی
- مثال: روی
amountخروجیtotalAmount
- Average (Mean)
- نوع داده: Number
- کاربرد: میانگین مقادیر عددی
- مثال: میانگین
amountبه عنوانavgOrderAmount
- Min / Max
- نوع داده: Number / Date (بسته به فیلد)
- کاربرد: کمینه/بیشینه مقدار
- مثال: کمترین قیمت
minPriceو بیشترین قیمتmaxPrice
- Unique (Distinct)
- نوع داده: Array
- کاربرد: لیست یکتا از مقادیر یک فیلد
- مثال:
uniqueCustomersازcustomerId
- Collect / List
- نوع داده: Array
- کاربرد: جمعآوری همه مقادیر یک فیلد به صورت لیست (حتی با تکرار)
- مثال: لیست همه
errorMessageها برای گزارش
3) Output Structure (ساختار خروجی)
- نام پارامتر: Output / Result Format (ممکن است نام دقیق متفاوت باشد)
- نوع داده: گزینهای (Options)
- کاربرد: تعیین میکند خروجی به ازای کل دادهها یک آیتم باشد یا به ازای هر گروه (در صورت Group By) یک آیتم تولید شود.
- مثال عملی: اگر Group By = status باشد، خروجی چند آیتم دارد (برای هر status یک آیتم).
نکات مهم هنگام پیکربندی
- نوع داده را جدی بگیرید: اگر فیلد عددی به صورت رشته باشد (مثلاً “120000”) ممکن است Sum/Average نتیجه اشتباه بدهد یا خطا ایجاد شود. قبل از Summarize با Set یا Code آن را به Number تبدیل کنید.
- مقادیر Null/Undefined: برای فیلدهای ناقص، ابتدا با IF یا Set مقدار پیشفرض قرار دهید تا تجمیع پایدار شود.
- مسیر فیلدها: اگر داده تو در تو است (nested)، مسیر درست مثل
meta.durationرا استفاده کنید. - گروهبندی روی کلیدهای پرتنوع: اگر Group By روی فیلدی با مقدارهای بسیار زیاد باشد (مثل timestamp)، خروجی بسیار بزرگ میشود و کارایی افت میکند.
ورودیها و خروجیها
ورودی (Input)
Summarize یک یا چند آیتم ورودی دریافت میکند. هر آیتم معمولاً یک JSON object است. مثال ورودی (سه سفارش):
نمونه JSON:
{ "items": [ { "orderId": 101, "status": "paid", "amount": 250000, "customerId": "C01" }, { "orderId": 102, "status": "pending", "amount": 180000, "customerId": "C02" }, { "orderId": 103, "status": "paid", "amount": 320000, "customerId": "C01" } ]}
خروجی (Output)
خروجی به تنظیمات شما بستگی دارد:
- اگر Group By نداشته باشید، معمولاً یک آیتم خلاصه تولید میشود.
- اگر Group By داشته باشید، به تعداد گروهها آیتم خروجی خواهید داشت.
نمونه خروجی بدون Group By
فرض کنید عملیاتها: Count (نام: totalOrders)، Sum(amount) (نام: totalAmount)، Unique(customerId) (نام: uniqueCustomers)
{ "totalOrders": 3, "totalAmount": 750000, "uniqueCustomers": ["C01", "C02"]}
نمونه خروجی با Group By = status
عملیاتها: Count (totalOrders)، Sum(amount) (totalAmount)
{ "items": [ { "status": "paid", "totalOrders": 2, "totalAmount": 570000 }, { "status": "pending", "totalOrders": 1, "totalAmount": 180000 } ]}
نکات پیشرفته و ترفندها
1) آمادهسازی داده قبل از Summarize (بهترین روش)
اگر دادهها از منابع مختلف میآیند، قبل از Summarize یک مرحله استانداردسازی انجام دهید:
- Set برای ساخت فیلدهای یکسان (مثل amount, status)
- Date & Time برای تبدیل تاریخها به فرمت واحد
- Code برای پاکسازی (trim) و تبدیل نوع داده
2) ساخت خروجی قابلارسال به پیامرسانها
بعد از Summarize، با یک نود Set یک فیلد متنی مثل reportText بسازید و با Expression آن را قالببندی کنید. مثال قالب متنی:
{ "reportText": "Orders: {{$json.totalOrders}}nTotal Amount: {{$json.totalAmount}}"}
سپس آن را به Slack یا Telegram ارسال کنید.
3) ترکیب با Split In Batches برای کنترل حجم
اگر تعداد آیتمها بسیار زیاد است، ابتدا با Split In Batches پردازش مرحلهای انجام دهید، اما توجه کنید Summarize ذاتاً برای تجمیع کلی است. در سناریوهای حجیم، الگوی بهتر این است:
- پردازش batchها و ذخیره نتیجههای میانی در DB/Redis/Sheet
- در پایان، یک مرحله Summarize نهایی روی نتایج میانی
4) ساخت KPIهای چندگانه با یک Summarize
بهجای چندین نود جدا، چندین Aggregation تعریف کنید تا یک آیتم خروجی شامل همه KPIها تولید شود (count، sum، avg، min/max، unique).
محدودیتها و خطاها
محدودیتها
- وابستگی به کیفیت داده: اگر فیلدها ناهمگون یا نوع دادهها ناسازگار باشد، خروجی قابل اعتماد نیست.
- حجم داده بسیار بالا: تجمیع روی دهها/صدها هزار آیتم میتواند مصرف RAM را بالا ببرد؛ مخصوصاً در حالت Collect/Unique که آرایه بزرگ میسازد.
- گروهبندی پرجزئیات: Group By روی کلیدهای بسیار متنوع باعث تعداد زیاد گروهها و افت کارایی میشود.
خطاهای رایج و راهحلها
- Sum/Average نتیجه اشتباه میدهد
علت: فیلد عددی به صورت String یا شامل کاراکترهای اضافی است. راهحل: قبل از Summarize با Set/Code تبدیل نوع انجام دهید (Number()).
- گروهبندی کار نمیکند یا گروههای غیرمنتظره میسازد
علت: وجود فاصله، حروف بزرگ/کوچک متفاوت، یا مقدارهای null. راهحل: نرمالسازی فیلد Group By (trim, toLowerCase) و تعیین مقدار پیشفرض.
- خروجی بسیار بزرگ میشود
علت: استفاده از Collect روی فیلدهای بزرگ یا Unique روی دادههای بسیار متنوع. راهحل: محدودسازی داده قبل از Summarize (فیلتر با IF)، یا فقط KPIهای ضروری را تولید کنید.
ایده ها
- ساخت گزارش روزانه فروش: مجموع فروش، تعداد سفارش، میانگین سبد خرید، و مشتریهای یکتا
- داشبورد ساده SLA پشتیبانی: تعداد تیکتها به تفکیک وضعیت و میانگین زمان پاسخ
- پایش خطاهای سرویس: شمارش خطاها به تفکیک errorCode و استخراج 5 پیام خطای پرتکرار
- کنترل کیفیت داده: شمارش رکوردهای ناقص (null) در فیلدهای کلیدی و تولید آمار پاکیزگی داده
- تحلیل کمپین مارکتینگ: گروهبندی لیدها بر اساس source و محاسبه نرخ تبدیل در هر کانال
