نود Edit Fields (Set) در N8N
نود Edit Fields (Set) یکی از کاربردیترین ابزارها در n8n برای ساختن، تغییر دادن، پاک کردن و استانداردسازی دادهها قبل از ارسال به نودهای بعدی است. هر وقت لازم دارید نام فیلدها را عوض کنید، چند مقدار جدید بسازید، دادهها را تمیز کنید یا خروجی یک API را به فرمت دلخواه تبدیل کنید، Set اولین انتخاب حرفهای و سریع است.
معرفی نود در N8N
این نود چه کاری انجام میدهد؟
نود Set (در نسخههای جدید با عنوان Edit Fields نمایش داده میشود) روی آیتمهای ورودی کار میکند و برای هر آیتم میتواند:
- فیلد جدید اضافه کند
- فیلدهای موجود را ویرایش یا بازنویسی کند
- فیلدها را حذف کند
- ساختار خروجی را ساده و استاندارد کند (مثلاً فقط چند فیلد منتخب را نگه دارد)
- با Expressionها مقادیر پویا تولید کند
دستهبندی نود
این نود معمولاً در دسته Function / Data Transformation قرار میگیرد (نود یکپارچهسازی با سرویس خارجی نیست و نقش اصلیاش تبدیل داده است).
اهمیت در ورکفلوها
در اکثر ورکفلوها دادهها از منابع مختلف (Webhook، Google Sheets، CRM، APIها) با ساختارهای متفاوت وارد میشوند. Set کمک میکند قبل از مرحلههای مهم مثل ارسال به API، ذخیره در دیتابیس، یا ساخت پیام، دادهها را یکدست و قابل اتکا کنید. این کار هم خطاها را کم میکند و هم خوانایی ورکفلو را بالا میبرد.
موارد استفاده
۱) آمادهسازی داده قبل از ارسال به API
فرض کنید از یک فرم وب داده میگیرید و میخواهید به یک API بفرستید که فیلدهای خاصی میخواهد. با Set میتوانید دقیقاً همان ساختار را بسازید:
- ترکیب نام و نام خانوادگی در یک فیلد
- تبدیل شماره تلفن به فرمت استاندارد
- ساخت فیلدهای اجباری مثل source یا createdAt
۲) تغییر نام فیلدها (Mapping)
اگر خروجی یک سرویس فیلدی مثل first_name دارد ولی مقصد شما firstName میخواهد، Set بهترین ابزار برای نگاشت است.
۳) حذف دادههای اضافی برای امنیت و کارایی
اگر ورودی شامل اطلاعات حساس یا فیلدهای حجیم است، با Set میتوانید فقط فیلدهای لازم را نگه دارید تا هم سرعت بالاتر برود و هم ریسک افشای داده کم شود.
۴) ساخت خروجی تمیز برای گزارش یا نوتیفیکیشن
قبل از ارسال پیام به Slack/Telegram یا ساخت ایمیل، با Set متنها و فیلدهای نهایی را بسازید تا مراحل بعدی ساده شوند.
ترکیبهای متداول با نودهای دیگر
- Webhook / Forms + Set + HTTP Request برای ارسال داده استاندارد به API
- Google Sheets + Set + IF برای پاکسازی داده و سپس تصمیمگیری
- HTTP Request (دریافت JSON) + Set + Item Lists برای آمادهسازی لیستها و فیلترها
- Set + Merge برای ساخت یک آبجکت نهایی از چند مسیر
پارامترها و تنظیمات
نام گزینهها ممکن است با توجه به نسخه n8n کمی متفاوت نمایش داده شوند، اما مفهوم و کاربرد ثابت است.
Fields to Set / Add Field (فیلدهای قابل تنظیم)
این بخش مهمترین قسمت نود است؛ جایی که مشخص میکنید چه فیلدهایی ساخته یا تغییر داده شوند.
- نام پارامتر: Field Name
نوع داده: String (نام کلید JSON)
توضیح: نام فیلدی که میخواهید بسازید یا بازنویسی کنید. از نامهای معنیدار استفاده کنید و از فاصله در نام کلیدها پرهیز کنید.
مثال عملی: customerId
- نام پارامتر: Value
نوع داده: Any (متن، عدد، بولین، آبجکت، آرایه)
توضیح: مقدار فیلد. میتواند ثابت باشد یا با Expression از داده ورودی ساخته شود.
مثال عملی (Expression): {{$json.id}}
Keep Only Set Fields (نگه داشتن فقط فیلدهای تنظیمشده)
- نام پارامتر: Keep Only Set Fields
نوع داده: Boolean
توضیح: اگر فعال باشد، خروجی فقط شامل فیلدهایی میشود که در Set تعریف کردهاید و بقیه فیلدهای ورودی حذف میشوند. برای ساخت خروجی تمیز و جلوگیری از ارسال داده اضافی بسیار مفید است.
مثال عملی: وقتی میخواهید به یک API فقط body مشخصی ارسال کنید و نمیخواهید دادههای دیگر وارد payload شوند.
Remove Fields (حذف فیلدها)
- نام پارامتر: Remove Fields
نوع داده: String / Array (بسته به UI نسخه)
توضیح: فیلدهایی که باید از خروجی حذف شوند. زمانی مفید است که میخواهید اکثر دادهها را نگه دارید اما چند کلید اضافه یا حساس را حذف کنید.
مثال عملی: حذف password، token، rawResponse
Include in Output (حفظ بخشهای مختلف داده)
در n8n هر آیتم علاوه بر json ممکن است دادههای دیگری مثل binary هم داشته باشد.
- نام پارامتر: Include Binary Data
نوع داده: Boolean
توضیح: اگر آیتم ورودی فایل یا داده باینری دارد (مثلاً PDF یا تصویر)، با این گزینه میتوانید تعیین کنید در خروجی باقی بماند یا نه.
مثال عملی: اگر بعد از Set میخواهید فایل را به Email node ارسال کنید، باید binary حفظ شود.
Expressionها و نوع دادهها (نکات مهم در مقداردهی)
- استفاده از Expression: برای مقداردهی پویا، Value را Expression کنید و از متغیرهایی مثل $json استفاده کنید.
مثال: ساخت نام کامل: {{$json.firstName + ” ” + $json.lastName}}
- عدد و بولین واقعی: اگر مقدار را به شکل متن وارد کنید ممکن است به String تبدیل شود. برای تولید عدد/بولین درست، از Expression یا مقداردهی با نوع صحیح استفاده کنید.
مثال: {{$json.amount}} یا {{Number($json.amount)}}
- ساخت آبجکت و آرایه: میتوانید خروجیهای ساختاری بسازید تا مستقیم به API ارسال شوند.
مثال: { “tags”: [“new”,”vip”], “meta”: { “source”: “web” } }
ورودیها و خروجیها
ورودی (Input)
Set روی هر item ورودی به صورت مستقل اعمال میشود. ساختار معمول آیتمها در n8n شامل بخش json است:
نمونه ورودی:
{ "id": 124, "first_name": "Ali", "last_name": "Ahmadi", "phone": "09120000000", "created_at": "2026-02-01T10:12:00Z", "extra": { "campaign": "winter" }}خروجی (Output)
خروجی شامل آیتمهایی است که فیلدهای جدید/ویرایششده روی آنها اعمال شده است. اگر Keep Only Set Fields روشن باشد، فقط فیلدهای ساختهشده در خروجی دیده میشوند.
نمونه خروجی (وقتی Keep Only Set Fields روشن است و این فیلدها ساخته شدهاند):
{ "customerId": 124, "fullName": "Ali Ahmadi", "phoneE164": "+989120000000", "source": "website", "createdAt": "2026-02-01T10:12:00Z"}نمونه Mapping واقعی با Expression
- customerId = {{$json.id}}
- fullName = {{$json.first_name + ” ” + $json.last_name}}
- phoneE164 = {{ $json.phone.startsWith(“0”) ? “+98” + $json.phone.slice(1) : $json.phone }}
- source = website
- createdAt = {{$json.created_at}}
نکات پیشرفته و ترفندها
۱) ساخت payload نهایی برای HTTP Request
به جای اینکه در نود HTTP Request مقدارهای متعدد را تکهتکه وارد کنید، در Set یک فیلد مثل payload بسازید و کل ساختار را آنجا آماده کنید:
{ "payload": { "name": "{{$json.first_name + ' ' + $json.last_name}}", "phone": "{{$json.phone}}", "meta": { "campaign": "{{$json.extra?.campaign}}" } }}سپس در HTTP Request، Body را برابر {{$json.payload}} قرار دهید.
۲) جلوگیری از خطا با مقدار پیشفرض
اگر ممکن است فیلدی وجود نداشته باشد، مقدار پیشفرض تعیین کنید:
- city = {{ $json.city ?? “Tehran” }}
- campaign = {{ $json.extra?.campaign ?? “unknown” }}
۳) پاکسازی رشتهها (Trim/Lowercase)
- email = {{ ($json.email || “”).trim().toLowerCase() }}
- username = {{ ($json.username || “”).trim() }}
۴) مدیریت تاریخها برای یکپارچگی
اگر تاریخها از منابع مختلف میآیند، آنها را قبل از ذخیره یا ارسال استاندارد کنید. در بسیاری از سناریوها ISO بهترین انتخاب است. اگر مقدار ورودی قابل تبدیل باشد:
- createdAt = {{ new Date($json.created_at).toISOString() }}
اگر داده ورودی نامعتبر باشد، Date ممکن است Invalid شود؛ در این حالت بهتر است با IF یا مقدار پیشفرض مدیریت شود.
۵) بهینهسازی: سبک کردن آیتمها قبل از پردازش سنگین
اگر قرار است در مراحل بعدی روی دادهها پردازش سنگین انجام دهید (مثل Code node، AI node، یا چندین HTTP Request)، ابتدا با Keep Only Set Fields فقط دادههای لازم را نگه دارید تا مصرف حافظه و زمان کم شود.
محدودیتها و خطاها
محدودیتها
- Set برای تبدیلهای خیلی پیچیده (حلقههای چندمرحلهای، منطق سنگین، الگوریتمها) مناسب نیست؛ در این موارد Code node انتخاب بهتر است.
- Set به تنهایی آیتمها را فیلتر نمیکند؛ برای حذف/نگهداشتن آیتمها باید از IF، Filter یا نودهای لیستی استفاده شود.
- اگر نوع داده را اشتباه بسازید (مثلاً عدد را به شکل متن)، مقصدهایی مثل API ممکن است خطای اعتبارسنجی بدهند.
خطاهای رایج و راهحلها
- مشکل: خروجی مقدار درست نیست چون Expression اشتباه نوشته شده است.
راهحل: از پنل Expression، پیشنمایش مقدار را بررسی کنید و مطمئن شوید مسیرها درست هستند (مثلاً $json.first_name نه $json.firstName).
- مشکل: بعد از فعال کردن Keep Only Set Fields، برخی دادههای لازم (مثلاً binary) از بین میرود.
راهحل: گزینههای مربوط به حفظ binary را بررسی کنید یا فیلدهای موردنیاز را دوباره در خروجی بسازید/نگه دارید.
- مشکل: خطا در تبدیل تاریخ یا Number به خاطر مقدار نامعتبر.
راهحل: از مقدار پیشفرض و چک کردن نوع داده استفاده کنید: {{ $json.amount ? Number($json.amount) : 0 }}
- مشکل: مقداردهی به یک آبجکت بزرگ باعث پیچیدگی و سختی دیباگ میشود.
راهحل: آبجکت را مرحلهای بسازید (چند Set پشت سر هم) یا بخش پیچیده را به Code node منتقل کنید.
ایده ها
- ساخت یک لایه استانداردسازی داده (Data Normalization) برای ورودیهای چند کاناله (Webhook، ایمیل، فرم) و تبدیل همه به یک schema ثابت قبل از ذخیره در دیتابیس.
- تولید متن پیام پویا برای ارسال اعلانها: ساخت فیلد message با ترکیب چند مقدار و سپس ارسال به Telegram/Slack.
- آمادهسازی payload برای CRM: نگاشت فیلدهای فرم به ساختار موردنیاز HubSpot/Salesforce و حذف فیلدهای اضافی.
- ماسک کردن داده حساس قبل از لاگ یا ذخیرهسازی: نمایش فقط 4 رقم آخر کارت/تلفن و حذف token.
- ساخت ساختار یکپارچه برای گزارشگیری: تولید فیلدهای محاسباتی مثل totalWithTax، margin و statusText قبل از نوشتن در Google Sheets.
