هنگام ساخت Workflow در n8n، ممکن است بارها به اطلاعات یکسانی نیاز داشته باشید؛ برای مثال، آدرس یک API، نام یک محیط اجرایی، شناسه یک فروشگاه یا مقداری که در چند مرحله از اتوماسیون استفاده میشود. اگر این اطلاعات را در بخشهای مختلف بهصورت دستی وارد کنید، نگهداری و تغییر Workflow دشوارتر خواهد شد.
در چنین شرایطی، آشنایی با مفهوم متغیرها (Variables) و روشهای مدیریت دادهها در n8n اهمیت پیدا میکند.
در این مقاله یاد میگیریم متغیر چیست، چه تفاوتی با دادههای ورودی و Expressions دارد، چگونه میتوان اطلاعات را در بخشهای مختلف Workflow استفاده کرد و چه زمانی باید سراغ تنظیمات محیطی یا روشهای ذخیرهسازی پایدار رفت.
نکته مهم: در n8n عبارت Variables ممکن است به مفهوم عمومی متغیرها یا قابلیت مشخصی در نسخهای خاص اشاره داشته باشد. روش تعریف و دسترسی به متغیرها به نسخه n8n و نوع دادهای که میخواهید نگهداری کنید بستگی دارد. بنابراین در ادامه، روشهای کاربردی را از یکدیگر تفکیک میکنیم.
Variables در n8n چیست؟
Variable یا متغیر، نامی است که برای اشاره به یک مقدار در برنامهنویسی استفاده میشود. این مقدار میتواند یک رشته متنی، عدد، مقدار منطقی یا ساختار دادهای باشد.
برای مثال، فرض کنید در یک Workflow باید نام فروشگاه را در چند پیام نمایش دهید. میتوانید مقدار زیر را در نظر بگیرید:
const shopName = "فروشگاه نمونه";
در این مثال، shopName نام متغیر و "فروشگاه نمونه" مقدار آن است.
در برنامهنویسی JavaScript، متغیرها با کلماتی مانند const و let تعریف میشوند. اما در n8n باید توجه کنید که تعریف متغیر در کد JavaScript با تعریف یک مقدار قابل دسترسی در سراسر Workflow یکسان نیست.
برای مثال، متغیری که داخل Code Node تعریف میکنید، بهطور خودکار در نودهای دیگر قابل دسترسی نخواهد بود. اگر قرار است مقداری بین چند مرحله جابهجا شود، باید از ساختار داده خروجی، قابلیتهای مناسب n8n یا یک محل ذخیرهسازی مشترک استفاده کنید.
تفاوت متغیر، داده ورودی و Expression چیست؟
این سه مفهوم به هم مرتبط هستند، اما کاربرد یکسانی ندارند.
| مفهوم | کاربرد | مثال |
|---|---|---|
| داده ورودی | اطلاعاتی که یک نود دریافت میکند | $json.email |
| Expression | عبارتی برای محاسبه یا خواندن یک مقدار پویا | {{ $json.email }} |
| متغیر JavaScript | نامی برای نگهداری مقدار در محدوده اجرای کد | const email = $json.email |
| داده قابل استفاده مجدد | اطلاعاتی که برای مراحل مختلف در دسترس قرار میگیرد | فیلدی در خروجی نود یا داده ذخیرهشده |
برای مثال، فرض کنید یک Webhook اطلاعات زیر را دریافت میکند:
{
"customerName": "مریم",
"orderId": 2458,
"totalPrice": 850000
}
برای دسترسی به نام مشتری در یک فیلد پشتیبانیشده از Expression، میتوانید از این عبارت استفاده کنید:
{{ $json.customerName }}
اگر بخواهید همین مقدار را در Code Node داخل یک متغیر محلی قرار دهید، میتوانید بنویسید:
const customerName = $json.customerName;
در حالت دوم، customerName فقط متغیری در محدوده اجرای همان کد است. اگر میخواهید مقدار در نود بعدی نیز در دسترس باشد، باید آن را در خروجی مناسب برگردانید یا از روش دیگری برای اشتراکگذاری داده استفاده کنید.
روش اول: استفاده از دادههای خروجی نودها
در بسیاری از Workflowها، نیازی به تعریف متغیر جداگانه ندارید. میتوانید اطلاعات را در خروجی یک نود قرار دهید و در نودهای بعدی از آن استفاده کنید.
برای مثال، فرض کنید نود قبلی اطلاعات زیر را تولید کرده است:
{
"apiBaseUrl": "https://api.example.com",
"orderId": 2458,
"customerName": "مریم"
}
در نود بعدی میتوانید از مقدار orderId استفاده کنید:
{{ $json.orderId }}
یا نام مشتری را در پیام قرار دهید:
سلام {{ $json.customerName }}، سفارش شما ثبت شد.
مزیت این روش آن است که داده همراه آیتمهای Workflow حرکت میکند و میتوان آن را در مراحل بعدی پردازش کرد.
این روش برای اطلاعاتی مانند شناسه سفارش، مشخصات مشتری، پاسخ API و مقادیری که مختص هر اجرای Workflow هستند، مناسب است.
توجه: دادههای ورودی و خروجی نودها لزوماً جایگزین یک محل ذخیرهسازی پایدار نیستند. اگر به اطلاعاتی نیاز دارید که باید بین اجراهای مستقل Workflow باقی بمانند، باید راهکار مناسبتری انتخاب کنید.
روش دوم: تعریف متغیر در Code Node
اگر در یک بخش از Workflow به محاسبات یا پردازش اختصاصی نیاز دارید، میتوانید از متغیرهای JavaScript در Code Node استفاده کنید.
برای مثال، اطلاعات سفارش به شکل زیر است:
{
"price": 500000,
"quantity": 3
}
میخواهید مبلغ کل را محاسبه کنید و همراه اطلاعات قبلی در خروجی قرار دهید.
در Code Node با حالت مناسب برای پردازش هر آیتم میتوانید از کد زیر استفاده کنید:
const price = Number($json.price ?? 0);
const quantity = Number($json.quantity ?? 0);
const totalPrice = price * quantity;
return {
...$json,
totalPrice,
};
در این کد:
priceمتغیری برای نگهداری قیمت است.quantityتعداد کالا را نگه میدارد.totalPriceحاصلضرب قیمت در تعداد است.returnاطلاعات قبلی و مقدار محاسبهشده را به خروجی برمیگرداند.
خروجی به شکل زیر خواهد بود:
{
"price": 500000,
"quantity": 3,
"totalPrice": 1500000
}
اکنون نود بعدی میتواند از فیلد totalPrice استفاده کند.
این مثال نشان میدهد که متغیر محلی برای سادهتر کردن کد مناسب است، اما برای انتقال نتیجه به نود بعدی باید مقدار موردنظر را در خروجی قرار دهید.
روش سوم: استفاده از متغیرهای محیطی
گاهی اطلاعاتی مانند آدرس سرویس، نام محیط اجرا یا تنظیمات اتصال، بخشی از پیکربندی زیرساخت هستند و نباید در چند Workflow بهصورت دستی تکرار شوند.
در چنین شرایطی، متغیرهای محیطی (Environment Variables) میتوانند مفید باشند.
برای مثال، در محیط سرور ممکن است مقدار زیر تعریف شده باشد:
API_BASE_URL=https://api.example.com
نام و مقدار متغیر محیطی در پیکربندی محیط اجرا تعریف میشوند. اما این به معنی آن نیست که هر Workflow یا Code Node الزاماً اجازه دسترسی به آن را دارد.
در n8n، دسترسی به متغیرهای محیطی میتواند به نسخه، تنظیمات امنیتی و پیکربندی سرویس وابسته باشد. بعضی دسترسیها نیز ممکن است برای Code Node محدود شده باشند.
بنابراین قبل از استفاده از یک متغیر محیطی:
- بررسی کنید متغیر در محیطی که n8n اجرا میشود تعریف شده باشد.
- مستندات نسخه مورد استفاده را برای روش دسترسی بررسی کنید.
- محدودیتهای امنیتی مربوط به متغیرهای محیطی را در نظر بگیرید.
- از قرار دادن اطلاعات محرمانه در خروجی نودها یا لاگها خودداری کنید.
چه اطلاعاتی را در متغیر محیطی قرار دهیم؟
متغیر محیطی میتواند برای تنظیمات محیط اجرا مناسب باشد؛ برای مثال:
- آدرس پایه یک سرویس
- نام محیط مانند development یا production
- شماره پورت یک سرویس داخلی
- تنظیمات غیرمحرمانه مربوط به اجرای برنامه
برای رمز عبور، توکن API و اطلاعات حساس، بهتر است در صورت امکان از قابلیت Credentials در n8n استفاده کنید. مدیریت متمرکز اطلاعات محرمانه معمولاً از قرار دادن آنها در کد یا دادههای عادی Workflow مناسبتر است.
همچنین اگر چند سرویس یا کانتینر دارید، مطمئن شوید متغیر محیطی در همان سرویسی تعریف شده که n8n از آن استفاده میکند.
روش چهارم: استفاده از قابلیتهای Variables در نسخههای پشتیبانیشده
برخی نسخهها یا امکانات n8n ممکن است قابلیت مشخصی با عنوان Variables برای نگهداری مقادیر قابل استفاده در بخشهای مختلف Workflow ارائه دهند.
اگر این قابلیت در نسخه شما موجود است، پیش از استفاده بررسی کنید:
- متغیر در چه محدودهای قابل دسترسی است؟
- آیا برای همه Workflowها در دسترس است یا به محیط یا پروژه خاصی محدود میشود؟
- چه نوع دادههایی را پشتیبانی میکند؟
- آیا مقدار آن بین اجراها باقی میماند؟
- آیا برای خواندن مقدار به Expression خاصی نیاز دارد؟
- آیا این قابلیت محدودیت نسخه یا پلن دارد؟
این موارد مهماند، زیرا قابلیت Variables را نباید با متغیرهای محلی JavaScript یا متغیرهای محیطی سیستمعامل یکی دانست.
روش دسترسی دقیق به این قابلیت ممکن است بین نسخهها متفاوت باشد. بنابراین بهتر است نام گزینهها و نحو Expression را بر اساس مستندات نسخه نصبشده خود بررسی کنید، نه اینکه یک نمونه کد را بدون بررسی در تمام نسخهها به کار ببرید.
اگر بخواهیم یک مقدار را در چند نود استفاده کنیم چه کنیم؟
فرض کنید در چند مرحله از Workflow به نام یک فروشگاه نیاز دارید.
یک راه ساده این است که نام فروشگاه را در داده ورودی یا خروجی یکی از نودها قرار دهید و آن را در مراحل بعدی به کار ببرید.
برای مثال، یک نود Edit Fields میتواند دادهای مانند این بسازد:
{
"shopName": "فروشگاه نمونه",
"orderId": 2458
}
سپس در فیلد پیام نود بعدی بنویسید:
سفارش {{ $json.orderId }} در {{ $json.shopName }} ثبت شد.
اگر مقدار در آیتم جاری وجود داشته باشد، Expression میتواند آن را هنگام اجرا جایگزین کند.
اما اگر نام فروشگاه باید در تعداد زیادی Workflow و بدون وابستگی به داده هر سفارش استفاده شود، تکرار آن در تمام ورودیها روش مناسبی نیست. در این حالت بهتر است از قابلیت پیکربندی مشترک یا راهکار ذخیرهسازی متناسب با نیاز استفاده کنید.
انتخاب روش صحیح به این بستگی دارد که مقدار شما مختص یک آیتم است، مختص یک اجرای Workflow است یا باید بین چند Workflow و اجرای مستقل باقی بماند.
تفاوت متغیر موقت و داده پایدار
یکی از اشتباهات رایج این است که تصور کنیم هر متغیری که در Workflow تعریف میکنیم، برای همیشه ذخیره خواهد شد.
در عمل، روشهای مختلف نگهداری داده رفتار متفاوتی دارند.
| روش | کاربرد اصلی | ماندگاری |
|---|---|---|
| متغیر محلی JavaScript | سادهسازی کد در همان اجرا | محدود به محدوده اجرای کد |
| داده خروجی نود | انتقال اطلاعات بین مراحل Workflow | وابسته به اجرای Workflow و نحوه استفاده از داده |
| متغیر محیطی | تنظیمات محیط اجرا | تا زمان تغییر پیکربندی محیط |
| دیتابیس | نگهداری دادههای موردنیاز بین اجراها | تا زمانی که داده حذف یا تغییر کند |
| سرویس ذخیرهسازی مناسب | نگهداری اطلاعات مشترک یا وضعیت پردازش | وابسته به سرویس و تنظیمات آن |
برای مثال، اگر میخواهید شماره آخرین سفارشی را که پردازش کردهاید نگهداری کنید، یک متغیر محلی در Code Node راهکار مناسبی نیست؛ زیرا در اجرای بعدی نباید فرض کنید همان متغیر همچنان موجود است.
برای چنین نیازی، ذخیرهسازی در دیتابیس یا یک راهکار پایدار متناسب با طراحی سیستم قابلاعتمادتر است.
اشتباهات رایج در کار با Variables در n8n
۱. فرض اینکه متغیر Code Node در همه نودها قابل استفاده است
تعریف متغیری مانند زیر:
const orderId = 2458;
آن را به یک متغیر سراسری در Workflow تبدیل نمیکند. برای انتقال مقدار به مرحله بعد، آن را در خروجی قرار دهید یا از روش اشتراکگذاری داده متناسب استفاده کنید.
۲. استفاده از متغیر برای نگهداری دائمی اطلاعات
متغیرهای محلی برای نگهداری دائمی اطلاعات طراحی نشدهاند. اگر به داده بین اجراهای مستقل نیاز دارید، باید از ذخیرهسازی پایدار استفاده کنید.
۳. قرار دادن اطلاعات محرمانه در دادههای عادی
قرار دادن توکن یا رمز عبور در فیلدهای خروجی ممکن است باعث شود اطلاعات در دادههای اجرای Workflow ذخیره شوند. برای اطلاعات حساس از Credentials یا راهکار امن متناسب با محیط استفاده کنید.
۴. فرض اینکه متغیر محیطی همیشه در دسترس است
وجود یک متغیر در سیستمعامل یا کانتینر به معنی دسترسی خودکار همه بخشهای n8n به آن نیست. محدودیتهای دسترسی و تنظیمات امنیتی را بررسی کنید.
۵. استفاده از روشهای قدیمی بدون بررسی نسخه
قابلیتها و روشهای دسترسی ممکن است در نسخههای مختلف تغییر کنند. اگر یک نمونه Expression یا روش دسترسی در محیط شما کار نمیکند، ابتدا مستندات همان نسخه را بررسی کنید.
جمعبندی
Variables در n8n را باید با توجه به نوع و محدوده داده درک کرد. متغیرهای JavaScript برای نگهداری موقت مقادیر در کد مناسباند؛ دادههای خروجی نودها اطلاعات را بین مراحل Workflow منتقل میکنند؛ متغیرهای محیطی برای پیکربندی محیط اجرا کاربرد دارند؛ و دیتابیس برای نگهداری پایدار اطلاعات مناسب است.
مهمترین نکته این است که قبل از انتخاب روش، مشخص کنید مقدار موردنظر باید کجا قابل دسترسی باشد و تا چه زمانی باقی بماند. با این کار، Workflowهای شما قابلنگهداریتر، امنتر و قابلاعتمادتر خواهند شد.
سوالات متداول
Variables در n8n چیست؟
Variables به مفهوم متغیرها و مقادیر قابل استفاده در پردازش Workflow اشاره دارد. روش تعریف و دسترسی به آنها به نوع متغیر و قابلیت مورد استفاده بستگی دارد.
آیا متغیری که در Code Node تعریف میکنیم در نود بعدی قابل استفاده است؟
خیر، نباید چنین فرضی داشته باشید. متغیر محلی JavaScript به محدوده اجرای همان کد تعلق دارد. برای انتقال مقدار به نود بعدی، آن را در خروجی برگردانید یا از روش مناسب اشتراکگذاری داده استفاده کنید.
تفاوت Variables و Expressions چیست؟
Variable برای نامگذاری و نگهداری یک مقدار استفاده میشود؛ Expression عبارتی است که هنگام اجرای Workflow ارزیابی میشود و میتواند از دادهها یا محاسبات برای تولید مقدار استفاده کند.
آیا متغیرهای محیطی برای ذخیره رمز عبور مناسب هستند؟
میتوان از متغیرهای محیطی برای بعضی تنظیمات حساس استفاده کرد، اما باید دسترسی و مدیریت امنیتی آنها درست پیکربندی شده باشد. در n8n، برای اطلاعات اتصال و محرمانه، قابلیت Credentials را نیز بررسی کنید.
برای نگهداری اطلاعات بین چند اجرای Workflow چه راهکاری مناسب است؟
اگر اطلاعات باید بین اجراهای مستقل باقی بمانند، از دیتابیس یا یک راهکار ذخیرهسازی پایدار استفاده کنید. متغیر محلی JavaScript برای این هدف مناسب نیست.





