یکی از مهمترین قابلیتهای n8n، امکان استفاده از اطلاعات تولیدشده در نودهای قبلی برای ساخت درخواستها، پردازش دادهها و اجرای عملیات خودکار است. برای مثال، ممکن است یک Webhook شماره سفارش را دریافت کند، نود بعدی اطلاعات مشتری را از یک API بگیرد و نود دیگری بر اساس نام مشتری، پیام شخصیسازیشدهای ارسال کند.
برای انجام چنین کارهایی، لازم نیست مقادیر را همیشه بهصورت ثابت وارد کنید. در n8n میتوانید از Expressions استفاده کنید تا مقدار فیلدها هنگام اجرای Workflow بهصورت پویا تعیین شود.
در این مقاله یاد میگیرید Expression چیست، چطور از دادههای نودهای قبلی استفاده کنید، چه تفاوتی با متن ثابت دارد و چگونه با مثالهای عملی از آن در ساخت Workflowهای حرفهای بهره ببرید.
Expression در n8n چیست؟
Expression عبارتی است که n8n هنگام اجرای Workflow آن را ارزیابی میکند و نتیجه را در اختیار نود قرار میدهد.
فرض کنید یک نود اطلاعات زیر را دریافت کرده است:
{
"name": "علی",
"email": "ali@example.com",
"orderId": 1258,
"price": 750000
}
اگر بخواهید در نود بعدی پیامی شامل نام مشتری ارسال کنید، میتوانید بهجای وارد کردن دستی نام، از یک Expression استفاده کنید:
{{ $json.name }}
در زمان اجرای Workflow، این عبارت با مقدار فیلد name جایگزین میشود؛ بنابراین نتیجه برابر با «علی» خواهد بود.
به همین شکل، برای استفاده از شماره سفارش میتوانید بنویسید:
{{ $json.orderId }}
و برای استفاده از قیمت:
{{ $json.price }}
مزیت اصلی Expression این است که مقدار آن به دادههای واقعی Workflow وابسته است. اگر مشتری دیگری وارد سیستم شود، همان Expression نام مشتری جدید را برمیگرداند و نیازی به تغییر دستی Workflow نیست.
تفاوت مقدار ثابت و Expression در n8n
برای درک بهتر، فرض کنید میخواهید پیام زیر را برای مشتری ارسال کنید:
«سلام علی، سفارش شما ثبت شد.»
اگر نام علی را مستقیماً در متن وارد کنید، پیام همیشه با همین نام ارسال میشود؛ حتی اگر سفارش متعلق به مشتری دیگری باشد.
اما با استفاده از Expression میتوانید پیام را به شکل زیر بسازید:
سلام {{ $json.name }}، سفارش شما ثبت شد.
اکنون n8n هنگام اجرای Workflow نام واقعی مشتری را در متن قرار میدهد.
| روش | نمونه | نتیجه |
|---|---|---|
| مقدار ثابت | علی | همیشه علی |
| Expression | {{ $json.name }} | نام موجود در داده ورودی |
| Expression عددی | {{ $json.price * 2 }} | دو برابر قیمت ورودی |
البته پشتیبانی از Expression به فیلد و نود مورد استفاده نیز بستگی دارد. در رابط n8n، معمولاً میتوانید از گزینه تغییر حالت فیلد به Expression استفاده کنید.
چگونه در n8n یک Expression بنویسیم؟
برای ساخت یک Expression ساده، مراحل زیر را انجام دهید:
- وارد Workflow خود شوید.
- نودی را انتخاب کنید که قرار است مقدار پویا دریافت کند.
- فیلد موردنظر را پیدا کنید؛ برای مثال، یک فیلد متنی در نود ارسال پیام.
- حالت Expression را برای فیلد فعال کنید. در رابط کاربری، این گزینه معمولاً با علامت
fxیا انتخاب حالت Expression مشخص میشود. - عبارت موردنظر را وارد کنید.
- در صورت امکان، پیشنمایش مقدار را بررسی کنید.
- Workflow را اجرا کنید و نتیجه را ببینید.
برای مثال، اگر داده ورودی شامل name باشد، عبارت زیر نام را برمیگرداند:
{{ $json.name }}
در Expressionهای n8n، بخش داخل آکولادهای دوتایی ارزیابی میشود. اگر یک Expression را در یک فیلد متنی قرار دهید، میتوانید آن را با متن ثابت ترکیب کنید.
نکته: شکل دقیق رابط کاربری ممکن است در نسخههای مختلف n8n کمی متفاوت باشد.
آشنایی با $json در n8n
یکی از پرکاربردترین متغیرها در Expressionهای n8n، $json است.
این متغیر به داده JSON آیتم جاری در زمینه اجرای نود اشاره میکند. اگر نود ورودی اطلاعات زیر را داشته باشد:
{
"firstName": "مریم",
"lastName": "احمدی",
"age": 28
}
میتوانید نام را با عبارت زیر دریافت کنید:
{{ $json.firstName }}
برای نام خانوادگی:
{{ $json.lastName }}
و برای سن:
{{ $json.age }}
همچنین میتوانید چند فیلد را با هم ترکیب کنید:
{{ $json.firstName + " " + $json.lastName }}
خروجی این عبارت برابر با «مریم احمدی» خواهد بود.
محاسبات با $json
Expressionها فقط برای خواندن فیلدها نیستند. میتوانید عملیات ریاضی نیز انجام دهید.
برای مثال، اگر قیمت محصول در فیلد price قرار داشته باشد، برای محاسبه قیمت با ۹ درصد افزایش میتوانید بنویسید:
{{ $json.price * 1.09 }}
یا اگر تعداد محصول در فیلد quantity باشد، مبلغ کل را محاسبه کنید:
{{ $json.price * $json.quantity }}
این روش برای محاسبه مبلغ سفارش، تعداد اقلام، امتیاز کاربران و بسیاری از عملیات مشابه کاربرد دارد.
در محاسبات مالی واقعی، نوع داده، واحد پول، قواعد گرد کردن و اعتبارسنجی ورودیها را نیز در نظر بگیرید.
استفاده از خروجی نودهای دیگر
گاهی اطلاعات موردنیاز در آیتم جاری وجود ندارد و در نود دیگری تولید شده است. برای مثال:
- نود اول اطلاعات سفارش را دریافت میکند.
- نود دوم اطلاعات مشتری را از یک API میگیرد.
- نود سوم پیام سفارش را ارسال میکند.
در این شرایط، ممکن است بخواهید از خروجی نود مشخصی استفاده کنید.
در نسخههای جدید n8n، برای ارجاع به خروجی یک نود میتوانید از الگوی زیر استفاده کنید:
{{ $('نام نود').item.json.name }}
عبارت نام نود باید با نام واقعی نود موردنظر در Workflow جایگزین شود.
برای مثال، اگر نام نود Get Customer باشد:
{{ $('Get Customer').item.json.email }}
این عبارت برای دریافت ایمیل از آیتم مرتبط نود Get Customer به کار میرود.
نکته مهم: ارجاع به آیتم مرتبط به ساختار Workflow و ارتباط آیتمها وابسته است. اگر چند آیتم وجود داشته باشد یا ارتباط بین خروجیها مشخص نباشد، ممکن است لازم باشد نحوه انتخاب آیتم را دقیقتر بررسی کنید. در بعضی سناریوها نیز میتوان از روشهای دیگری مانند first() یا all() استفاده کرد؛ البته انتخاب روش درست به نیاز Workflow بستگی دارد.
استفاده از خروجی نود با نام مشخص
برای مثال، اگر نود Get Order اطلاعات سفارش را برگرداند، میتوانید شماره سفارش را به این شکل بخوانید:
{{ $('Get Order').item.json.orderId }}
و اگر نود Get Customer ایمیل مشتری را تولید کند:
{{ $('Get Customer').item.json.email }}
با این روش، میتوانید اطلاعات تولیدشده در مراحل مختلف Workflow را در فیلدهای نودهای بعدی به کار ببرید.
استفاده از مقدار پیشفرض در Expression
یکی از مشکلات رایج در اتوماسیون این است که بعضی فیلدها همیشه مقدار ندارند. برای مثال، ممکن است یک مشتری نام خانوادگی خود را وارد نکرده باشد.
اگر مستقیم از عبارت زیر استفاده کنید:
{{ $json.lastName }}
ممکن است مقدار خالی یا تعریفنشده دریافت کنید.
برای تعیین مقدار پیشفرض، میتوانید از عملگر ?? استفاده کنید:
{{ $json.lastName ?? "ثبت نشده" }}
اگر lastName برابر با null یا undefined باشد، عبارت «ثبت نشده» برگردانده میشود.
تفاوت این روش با عملگر || این است که || برای مقادیر دیگری مانند رشته خالی، صفر و false نیز مقدار جایگزین انتخاب میکند.
برای مثال:
{{ $json.quantity ?? 1 }}
اگر مقدار quantity وجود نداشته باشد یا null باشد، عدد ۱ انتخاب میشود؛ اما اگر مقدار آن صفر باشد، همان صفر حفظ خواهد شد.
این تفاوت در پردازش اطلاعات سفارش، موجودی محصولات و دادههای فرمها اهمیت دارد.
استفاده از شرط در Expression
در برخی موارد لازم است مقدار خروجی بر اساس یک شرط تغییر کند.
فرض کنید مبلغ سفارش در فیلد price قرار دارد و میخواهید برای سفارشهای بیشتر از یک میلیون تومان، پیام ویژهای نمایش دهید.
میتوانید از عملگر شرطی استفاده کنید:
{{ $json.price > 1000000 ? "سفارش ویژه" : "سفارش عادی" }}
اگر مبلغ سفارش بیشتر از یک میلیون باشد، عبارت «سفارش ویژه» و در غیر این صورت «سفارش عادی» نمایش داده میشود.
مثال دیگر، تعیین وضعیت موجودی محصول است:
{{ $json.stock > 0 ? "موجود" : "ناموجود" }}
این روش برای تولید متنهای پویا، تعیین برچسب، ساخت مقادیر قابل ارسال به API و بسیاری از عملیات ساده مناسب است.
اگر قرار است بر اساس شرط، مسیر اجرای Workflow تغییر کند، معمولاً استفاده از نود IF یا Switch انتخاب روشنتر و قابلنگهداریتری است.
کار با آرایهها و فیلدهای تودرتو
دادههای API همیشه ساده نیستند. گاهی اطلاعات داخل اشیای تودرتو یا آرایهها قرار دارند.
برای مثال، داده زیر را در نظر بگیرید:
{
"customer": {
"name": "رضا",
"email": "reza@example.com"
},
"order": {
"id": 2540,
"total": 1200000
}
}
برای دسترسی به نام مشتری:
{{ $json.customer.name }}
برای ایمیل:
{{ $json.customer.email }}
و برای مبلغ سفارش:
{{ $json.order.total }}
اگر داده شامل آرایهای از محصولات باشد، میتوانید به یکی از اعضای آن با استفاده از اندیس دسترسی پیدا کنید. برای مثال:
{{ $json.products[0].name }}
این عبارت نام اولین محصول آرایه products را برمیگرداند؛ البته به شرطی که آرایه وجود داشته باشد و عضو اول آن تعریف شده باشد.
اگر ممکن است آرایه خالی یا فیلدهای تودرتو ناموجود باشند، باید پیش از استفاده از داده، ساختار ورودی را بررسی کنید تا Workflow با خطا مواجه نشود.
تفاوت Expression و Code Node در n8n
هر دو قابلیت برای کار با دادهها استفاده میشوند، اما کاربردشان متفاوت است.
Expression برای تعیین مقدار یک فیلد، ساخت متن پویا، انجام محاسبات ساده و استفاده از خروجی نودها بسیار مناسب است.
Code Node برای زمانی کاربرد دارد که به پردازش پیچیدهتر دادهها، حلقهها، فیلتر کردن مجموعهای از آیتمها یا اجرای منطق اختصاصی نیاز دارید.
| نیاز | انتخاب پیشنهادی |
|---|---|
| نمایش نام مشتری در پیام | Expression |
| محاسبه مبلغ کل یک سفارش | Expression |
| تعیین متن بر اساس یک شرط ساده | Expression |
| پردازش چندین آیتم با منطق پیچیده | Code Node |
| تبدیل ساختار یک آرایه بزرگ | Code Node |
| اجرای الگوریتم اختصاصی | Code Node |
برای مثال، اگر فقط میخواهید نام مشتری را در پیام قرار دهید، استفاده از Code Node ضرورتی ندارد. اما اگر قرار است صدها رکورد را بر اساس چند شرط پردازش کنید و خروجی جدیدی بسازید، Code Node ممکن است مناسبتر باشد.
برای یادگیری پردازش پیشرفته دادهها، مقاله «آموزش Code Node در n8n؛ اجرای کد JavaScript و پردازش دادهها» را نیز مطالعه کنید.
اشتباهات رایج هنگام استفاده از Expressions
۱. استفاده از نام اشتباه فیلد
اگر داده ورودی شامل customerName باشد اما عبارت زیر را بنویسید:
{{ $json.name }}
ممکن است خروجی خالی یا تعریفنشده دریافت کنید.
همیشه ساختار واقعی JSON ورودی را بررسی کنید و نام فیلدها را دقیقاً مطابق آن بنویسید.
۲. استفاده از Expression در فیلد نامناسب
برخی فیلدها ممکن است در حالت متنی یا حالت ثابت باشند. اگر عبارت را بهعنوان متن معمولی وارد کنید، ممکن است بهجای ارزیابی شدن، همان متن نمایش داده شود.
حالت Expression را در رابط نود بررسی کنید.
۳. فرض اینکه تمام نودها یک آیتم دریافت میکنند
اگر یک نود چند آیتم ورودی داشته باشد، نتیجه Expression میتواند به آیتم جاری و نحوه ارتباط دادهها وابسته باشد. در ارجاع به نودهای دیگر، انتخاب آیتم مرتبط اهمیت دارد.
۴. نادیده گرفتن مقادیر خالی
اگر فیلدی اختیاری باشد، بهتر است برای نبودن مقدار آن راهکار مشخصی داشته باشید؛ مانند استفاده از ?? یا بررسی شرطی.
۵. استفاده از Code Node برای هر عملیات ساده
برای ساخت یک متن پویا یا محاسبه ساده، Expression اغلب کافی است. استفاده غیرضروری از کد، Workflow را پیچیدهتر و نگهداری آن را دشوارتر میکند.
مثال عملی: ساخت پیام سفارش با Expressions
فرض کنید یک Workflow اطلاعات سفارش زیر را دریافت میکند:
{
"customerName": "نگار",
"orderId": 7845,
"totalPrice": 1850000,
"status": "paid"
}
میخواهید پیامی با مشخصات سفارش بسازید.
در فیلد پیام نود ارسال پیام، حالت Expression را فعال کنید و عبارت زیر را وارد کنید:
{{
"سلام " + $json.customerName +
"، سفارش شماره " + $json.orderId +
" به مبلغ " + $json.totalPrice +
" با موفقیت ثبت شد."
}}
خروجی:
سلام نگار، سفارش شماره 7845 به مبلغ 1850000 با موفقیت ثبت شد.
میتوانید وضعیت سفارش را نیز در متن وارد کنید:
{{
"شماره سفارش: " + $json.orderId +
" | وضعیت: " + $json.status
}}
در این مثال، پیام با توجه به اطلاعات واقعی سفارش ساخته میشود و برای سفارشهای دیگر نیز بهصورت خودکار تغییر میکند.
اگر این پیام برای استفاده واقعی در فروشگاه است، بهتر است مبلغ را با قالب مناسب واحد پول نمایش دهید و قبل از ارسال، وجود فیلدهای موردنیاز را بررسی کنید.
جمعبندی
Expressions یکی از قابلیتهای اساسی n8n برای ساخت Workflowهای پویا هستند. با استفاده از آنها میتوانید خروجی نودها را بخوانید، مقادیر را به یکدیگر متصل کنید، محاسبات ساده انجام دهید، شرطهای کوتاه بنویسید و متنهای شخصیسازیشده تولید کنید.
مهمترین نکته این است که برای هر نیاز، ابزار مناسب را انتخاب کنید: Expression برای تعیین مقدارهای پویا و عملیات ساده مناسب است؛ Code Node برای پردازش پیچیدهتر دادهها کاربرد دارد؛ و نودهایی مانند IF و Switch برای مدیریت مسیر اجرای Workflow انتخابهای مناسبی هستند.
اگر این قابلیتها را بهدرستی یاد بگیرید، میتوانید Workflowهایی بسازید که بهجای استفاده از مقادیر ثابت، به دادههای واقعی و شرایط هر اجرا واکنش نشان میدهند.
سوالات متداول
Expression در n8n چیست؟
Expression عبارتی است که هنگام اجرای Workflow ارزیابی میشود و مقدار آن میتواند به دادههای ورودی، خروجی نودها یا محاسبات وابسته باشد.
$json در n8n چه کاری انجام میدهد؟
$json برای دسترسی به داده JSON آیتم جاری استفاده میشود؛ برای مثال، {{ $json.email }} مقدار فیلد ایمیل را برمیگرداند.
آیا میتوان از خروجی نودهای قبلی در Expression استفاده کرد؟
بله. میتوانید با ارجاع به نود موردنظر، به دادههای خروجی آن دسترسی پیدا کنید. روش دقیق ارجاع به ساختار Workflow و ارتباط آیتمها وابسته است.
آیا Expressions جایگزین Code Node هستند؟
خیر. Expression برای مقداردهی پویا و عملیات ساده مناسب است؛ Code Node برای پردازشهای پیچیدهتر و منطق اختصاصی کاربرد دارد.
چگونه مقدار پیشفرض برای یک فیلد تعیین کنیم؟
میتوانید از عملگر ?? استفاده کنید؛ برای مثال {{ $json.name ?? "بدون نام" }} در صورت نبودن مقدار name، عبارت «بدون نام» را برمیگرداند.





