آموزش n8n یک مسیر سه‌فازی است، نه یک «یادگیری در 10 دقیقه». هفته اول با رابط کاربری و نودهای ساده کار می‌کنید، هفته دوم منطق شرطی را با Expression می‌سازید، و هفته سوم مدل زبانی وصل می‌کنید. آنچه پروژه‌ها را در هفته‌ی اول می‌کُشد، ندانستنِ سه الگوی شکست تکرارشونده است: نصب بدون پروکسی معکوس (reverse proxy)، ایجنت با ابزارهای بی‌شمار، و workflowهایی که در production می‌شکنند.

n8n چیست و چه فرقی با Zapier و Make دارد؟#

n8n ابزار اتوماسیون workflow با لایسنس Fair-code است که روی سرور شخصی نصب می‌شود و کد آن قابل‌دسترس است. تفاوت بنیادینش با Zapier و Make در مدل اجراست: آن دو فقط SaaS ابری‌اند و به کدشان دسترسی ندارید، اما n8n را خودتان مدیریت می‌کنید و خروجی هر Node مستقیماً ورودی Node بعدی می‌شود.

معماری زنجیره‌ای در برابر بوم بصری#

در n8n خروجی هر Node مستقیماً ورودی Node بعدی می‌شود. data در مسیر حرکت می‌کند و هر مرحله فقط با داده‌ی مرحله‌ی قبل سروکار دارد. در Make هم داده بین ماژول‌ها منتقل می‌شود، اما روی بوم مرکزی (canvas) چیده می‌شوند و یک قابلیت اختیاری به‌نام Data Store برای ذخیره‌ی ماندگار بین اجراها وجود دارد.

اثر عملی این تفاوت روی debugging: در n8n خطا را در همان Node و خروجی‌اش پیدا می‌کنید. در Make چون ماژول‌ها روی بوم پخش‌اند و ممکن است چند سناریو هم‌زمان از یک Data Store بخوانند، ردیابی جریان داده در workflowهای بزرگ‌تر گیج‌کننده می‌شود.

اما scaling: معماری chain n8n محدودتر است. هر workflow یک مسیر خطی دارد و اگر بخواهید چند شاخه‌ی موازی اجرا کنید، باید sub-workflow بسازید. Make با بوم چندسناریویی و Data Store مشترک انعطاف بیشتری برای workflowهای چندشاخه‌ای دارد.

جدول مقایسه: n8n، Zapier و Make#

معیارn8nZapierMake
مدل hostingSelf-hosted یا Cloudفقط SaaS ابریفقط SaaS ابری
دسترسی به کدبله (Fair-code)خیرخیر
رویکرد قیمت‌گذاریرایگان self-hosted، Cloud پلن‌دارماهانه بر اساس تعداد taskماهانه بر اساس تعداد operation
قابلیت AIنود AI Agent + LangChainAI Actions محدودنود AI با محدودیت context
نیاز به کدنویسیExpression و JavaScript optionalکمتر، فرمول‌محورکمتر، فرمول‌محور
انعطاف customبالا (Function Node، Code Node)محدودمحدود

چرا مقایسه بر اساس تعداد integration گمراه‌کننده است#

مقایسه‌ی n8n و Zapier بر اساس «400+ در برابر 6000+ integration» یک دروغ آماری است که در سایت‌های مقایسه‌ای مکرر تکرار می‌شود. در n8n هر integration با HTTP Request Node و یک API قابل‌ساخت است. تعداد integration واقعی n8n عملاً نامحدود است، چون هر API‌ای را می‌توانید با یک Node سفارشی وصل کنید.

معیار درست: آیا integration موردنظرتان در لیست رسمی هست؟ اگر بله، هر سه ابزار کارتان را راه می‌اندازند. اگر نیست، n8n با HTTP Request Node یا Code Node انعطاف بیشتری دارد.

پیش‌نیازهای واقعی که هیچ آموزش n8n به آن‌ها اشاره نمی‌کند#

پیش‌نیازهای واقعی n8n سه‌تا هستند، نه «مهارت فنی»: آشنایی مقدماتی با terminal و Linux، درک ساختار JSON و درخواست HTTP، و توانایی نوشتن منطق شرطی ساده. بدون این سه، نصب و عیب‌یابی عملاً غیرممکن می‌شود — نه سخت، غیرممکن.

دانش terminal و Linux: چرا Docker Compose به‌تنهایی کافی نیست#

وقتی n8n را با Docker Compose نصب می‌کنید، فایل YAML را می‌سازید و با دستور docker compose up -d بالا می‌آورید. اما وقتی workflow اجرا نمی‌شود، باید با docker logs n8n لاگ بخوانید، با docker exec -it n8n bash وارد container شوید، و فایل‌های محیطی را بررسی کنید.

بدون این مهارت‌ها، هر خطای Docker برایتان یک جعبه‌ی سیاه می‌شود. لازم نیست Linux expert باشید، اما باید بتوانید فایل بسازید، permission بررسی کنید، و خروجی دستور را بخوانید.

آشنایی با HTTP Request و JSON#

هر workflow در n8n داده‌ی JSON بین Nodeها رد و بدل می‌کند. وقتی از Webhook پیام می‌گیرید، payload یک آبجکت JSON است. وقتی به OpenAPI درخواست می‌فرستید، body شما JSON است. وقتی پاسخ می‌گیرید، باید فیلد موردنظر را از ساختار تودرتو استخراج کنید.

اگر نمی‌دانید response.data.choices[0].message.content یعنی چه، در Node بعدی گیر می‌کنید. این مهارت در هر آموزش n8n پیش‌فرض گرفته می‌شود، اما در عمل اولین نقطه‌ی توقف تازه‌کارهاست.

منطق شرطی IF/ELSE در Expression#

Expression در n8n جایگزین کدنویسی است. شما با {{ $json.status === 'active' }} شرط می‌نویسید و Node بعدی بر اساس نتیجه مسیر می‌گیرد. این دقیقاً همان IF/ELSE است که در هر زبان برنامه‌نویسی هست، فقط با سینتکس متفاوت.

اگر منطق شرطی برایتان غریب است، workflow شما تبدیل به یک خط صاف بی‌منطق می‌شود. هر workflow واقعی حداقل یک نقطه‌ی انشعاب دارد.

نصب n8n با Docker: مراحلی که بدون reverse proxy شکست می‌خورد#

نصب n8n با Docker Compose در چند دقیقه انجام می‌شود، اما بدون تنظیم پروکسی معکوس و گواهی SSL، workflowها روی سرور اجرا می‌شوند ولی از بیرون و از طریق HTTPS قابل‌دسترس نیستند. این رایج‌ترین نقطه‌ی شکست تازه‌کارهاست و در گفتگوهای اعضای کامیونیتی بارها تکرار شده.

گام‌های نصب با Docker Compose#

  1. یک VPS با حداقل 2 گیگابایت RAM و Ubuntu یا Debian تهیه کنید. Docker و Docker Compose را نصب کنید.
  2. فایل docker-compose.yml بسازید: service n8n با image n8nio/n8n، port mapping از 5678 داخلی به 5678 خارجی، volume برای persistence داده، و environment variables شامل N8N_BASIC_AUTH_ACTIVE و WEBHOOK_URL.
  3. دستور docker compose up -d را اجرا کنید. با docker ps مطمئن شوید container در حالت running است.
  4. مرورگر را باز کنید و به http://your-server-ip:5678 بروید. اگر صفحه‌ی login n8n آمد، نصب موفق بوده.
  5. حالا مشکل اصلی: Webhookها کار نمی‌کنند، چون از بیرون روی port 5678 HTTPS نیست و firewall معمولاً این port را باز نمی‌گذارد.

چرا Docker Compose تنها کافی نیست#

مشکل port mapping: n8n روی port 5678 اجرا می‌شود. اگر firewall سرور فقط portهای 80 و 443 را باز کرده باشد (که استاندارد است)، مرورگر بیرونی به 5678 دسترسی ندارد. حتی اگر port باز باشد، بدون SSL مرورگر خطا می‌دهد و بسیاری از سرویس‌های بیرونی (مثل Slack، Stripe) callback به آدرس HTTP را قبول نمی‌کنند.

نتیجه: workflow داخلی اجرا می‌شود، اما Webhook Node هیچ درخواستی از بیرون دریافت نمی‌کند. تازه‌کار فکر می‌کند n8n خراب است، در حالی که مشکل شبکه‌ای است.

تنظیم reverse proxy و SSL با Caddy#

Caddy ساده‌ترین گزینه برای این کار است. یک Caddyfile بسازید: domain را بنویسید، و با reverse_proxy localhost:5678 ترافیک را به n8n بفرستید. Caddy خودش SSL را از Let's Encrypt می‌گیرد و renew می‌کند.

تنظیمات n8n: environment variable WEBHOOK_URL را روی آدرس HTTPS دامنه‌تان تنظیم کنید. بدون این تنظیم، n8n آدرس Webhook را با localhost برمی‌گرداند و هیچ callback از بیرون کار نمی‌کند.

اگر Nginx را ترجیح می‌دهید، باید خودتان certbot اجرا کنید، config بلوک proxy_pass بنویسید، و renew خودکار تنظیم کنید. Caddy این کارها را یکجا انجام می‌دهد.

بررسی با log و health check#

بعد از نصب، سه چیز را چک کنید: با docker logs n8n --tail 50 ببینید هیچ خطای fatal نبوده. با curl -I https://your-domain/webhook/test مطمئن شوید endpoint پاسخ می‌دهد. در UI n8n یک workflow تستی با Webhook بسازید و از ابزارهای آنلاین مثل curl یا Postman درخواست بفرستید.

اگر هیچ‌کدام کار نکرد، اول firewall را چک کنید (sudo ufw status)، بعد DNS سرور را (dig your-domain)، و در نهایت config reverse proxy را.

ساخت اولین workflow گام‌به‌گام: از Webhook تا ارسال ایمیل#

یک workflow عملی در n8n با این ترتیب ساخته می‌شود: Webhook (دریافت درخواست) ← HTTP Request (فراخوانی API مدل زبانی) ← IF (بررسی شرط) ← Gmail (ارسال نتیجه). هر Node خروجی‌اش را به Node بعدی پاس می‌دهد و با Expression داده‌ی JSON استخراج می‌شود.

تنظیم Webhook Node و دریافت payload#

Node اول را Webhook بگذارید. Method را POST انتخاب کنید. Path را مثلاً /new-lead بنویسید. وقتی workflow فعال باشد، آدرس https://your-domain/webhook/new-lead آماده‌ی دریافت است.

هر درخواستی که به این آدرس بیاید، body JSON آن در $json ذخیره می‌شود. اگر فرم تماس وب‌سایت شما name و email را POST می‌کند، در Node بعدی به $json.body.name و $json.body.email دسترسی دارید.

HTTP Request Node: اتصال به OpenAI API#

Node دوم HTTP Request است. Method را POST، URL را https://api.openai.com/v1/chat/completions بگذارید. در headers، Authorization: Bearer {{OPENAI_API_KEY}} اضافه کنید.

در body، JSON درخواست را بسازید. مثلاً یک system prompt بدهید: «یک ایمیل کوتاه به این کاربر بنویس» و user message را از Webhook استخراج کنید: {{ $json.body.name }}. پاسخ OpenAI در $json.choices[0].message.content قرار می‌گیرد.

نوشتن Expression برای استخراج فیلد از پاسخ JSON#

Expression در n8n با {{ }} نوشته می‌شود. برای خواندن پاسخ OpenAI: {{ $json.choices[0].message.content }}. اگر ساختار تودرتو است، با نقطه و براکت حرکت کنید.

نکته‌ی عملی: در هر Node، پنل سمت چپ n8n تمام فیلدهای ورودی و خروجی را به‌صورت درختی نشان می‌دهد. به‌جای حدس زدن مسیر JSON، از autocomplete Expression استفاده کنید.

Node شرطی IF و تعریف مسیر بله/خیر#

Node سوم IF است. Condition را بنویسید: مثلاً طول پاسخ OpenAI بیشتر از 50 کاراکتر باشد ({{ $json.choices[0].message.content.length > 50 }}). اگر بله، ایمیل ارسال شود. اگر خیر، لاگ خطا بنویسید.

هر Node IF دو خروجی دارد: true و false. Nodeهای بعدی را به هر کدام وصل کنید. این همان منطق شرطی است که در هر زبان برنامه‌نویسی هست.

ارسال نتیجه با Gmail Node#

Node چهارم Gmail است. در مسیر true قرارش بدهید. Subject و Body را از پاسخ OpenAI استخراج کنید. To را از payload اولیه Webhook بخوانید: {{ $('Webhook').item.json.body.email }}.

نکته‌ی مهم: برای ارجاع به داده‌ی Node قبلی (نه Node بلافاصله قبل)، از $('NodeName') استفاده کنید. این الگو در workflowهای بلند ضروری است.

ایجنت هوش مصنوعی (AI Agent) در n8n با نود LangChain#

ایجنت هوش مصنوعی در n8n با ترکیب نود AI Agent و LangChain ساخته می‌شود: یک مدل زبانی انتخاب می‌کنید، ابزارها (Tools) را وصل می‌کنید و prompt سیستمی تنظیم می‌کنید. اما بدون مدیریت پنجره‌ی زمینه (context window) و محدود کردن تعداد Toolها، مدل گیج می‌شود و پاسخ‌های نامعتبر تولید می‌کند.

ایجنت هوشمند مرکزی با شاخه‌های workflow که ابزارها را هماهنگ می‌کند، نماد نود LangChain در n8n
نود LangChain در n8n نقش مغز متفکر ایجنت را بازی می‌کند و ابزارها را به‌صورت پویا انتخاب می‌کند.

تنظیم API Key و انتخاب مدل زبانی#

Node اول در بخش AI: Chat Model. اینجا OpenAI یا Anthropic را انتخاب می‌کنید. API Key را در Credentials n8n ذخیره کنید، نه در خود Node. مدل را بر اساس نیاز انتخاب کنید: GPT-4o برای دقت، GPT-4o-mini برای سرعت و هزینه‌ی کمتر.

اتصال ابزارها (Tools) به‌عنوان action#

Node AI Agent چند Tool می‌پذیرد: HTTP Request Tool برای فراخوانی API، Database Tool برای کوئری SQL، Code Tool برای منطق سفارشی، و Webhook Tool برای ارسال داده به بیرون.

هر Tool یک توضیح (description) دارد که مدل زبانی از آن برای تصمیم‌گیری استفاده می‌کند. اگر description مبهم باشد، مدل Tool را اشتباه صدا می‌زند یا اصلاً صدا نمی‌زند.

اشتباه رایج: اضافه کردن toolهای بی‌شمار بدون محدودیت context window#

این الگو در پروژه‌های اعضای کامیونیتی بارها مشاهده شده: یک نفر 10+ Tool به AI Agent وصل می‌کند، هیچ محدودیت context window تنظیم نمی‌کند، و مدل در هر iter تمام tool descriptions را در prompt می‌بیند. نتیجه: پاسخ‌های نامعتبر، فراخوانی Tool اشتباه، و هزینه‌ی API سر به فلک.

راه‌حل عملی: حداکثر 3 تا 5 Tool به هر AI Agent وصل کنید. اگر نیاز به Tool بیشتر دارید، چند Agent کوچک‌تر بسازید و با یک Router Node بین آن‌ها سوئیچ کنید.

مدیریت هزینه API: token counting و max iterations#

در Node AI Agent، فیلد Max Iterations را تنظیم کنید. مقدار پیش‌فرض نسبتاً بالاست و اگر Agent در حلقه می‌افتد (Tool صدا می‌زند، پاسخ ضعیف است، دوباره صدا می‌زند)، هر iter هزینه‌ی API دارد.

Max Iterations را روی 5 یا کمتر بگذارید. اگر Agent به جواب نرسید، workflow متوقف می‌شود و شما یک fallback Node برای مدیریت خطا دارید. بهتر از حلقه‌ی بی‌پایان با هزینه‌ی تصاعدی.

برای مقایسه‌ی LangChain با سایر فریمورک‌های ایجنت، ساختار Tool-calling در همه مشابه است، اما n8n مزیت بصری دارد: جریان تصمیم‌گیری Agent را در UI می‌بینید.

اگر می‌خواهید این مسیر ایجنت‌سازی را گام‌به‌گام و با پشتیبانی طی کنید، دورهٔ ساخت Ai Agent با N8N از نصب تا ایجنت‌های پیشرفته را پوشش می‌دهد.

مدل لایسنس و قیمت‌گذاری: n8n واقعاً رایگان است؟#

n8n تحت لایسنس Sustainable Use License منتشر شده، نه متن‌باز (open-source) واقعی مثل MIT یا Apache. یعنی کد را می‌خوانید، تغییر می‌دهید و روی سرور خود اجرا می‌کنید، اما نمی‌توانید سرویس SaaS تجاری مبتنی بر n8n بفروشید. نسخه‌ی Cloud یک پلن رایگان با محدودیت تعداد اجرا دارد.

تفاوت Fair-code با Open-source واقعی#

Fair-code یعنی کد public است، اما استفاده‌ی تجاری محدودیت دارد. شما می‌توانید n8n را self-host کنید، برای شرکت خودتان استفاده کنید، و workflowهای سفارشی بسازید. اما نمی‌توانید بگویید «من یک سرویس اتوماسیون با n8n راه‌اندازی کردم و به مشتریان می‌فروشم».

نقض لایسنس: ارائه‌ی n8n به‌عنوان سرویس managed به چند مشتری بدون agreement با n8n. استفاده‌ی مجاز: اجرای n8n روی سرور شخصی یا شرکتی، حتی اگر صدها workflow داشته باشید.

مقایسه‌ی هزینه: n8n self-hosted در برابر Zapier#

یک VPS با 2 گیگ RAM (در بازه‌ی 2024) حدود 5 تا 10 دلار ماهانه هزینه دارد. روی آن n8n رایگان اجرا می‌شود. Zapier برای workflowهای مشابه (مثلاً 2000 task ماهانه) هزینه‌ی ماهانه‌ی قابل‌توجهی دارد و هر task اضافه هزینه‌ی جداگانه.

اما هزینه‌ی پنهان self-hosted: زمان DevOps. اگر خودتان سرور را مدیریت کنید، وقت شما هم هزینه است. اگر این وقت را ندارید، n8n Cloud گزینه‌ی عملی‌تری است.

n8n Cloud: پلن رایگان و محدودیت executions#

n8n Cloud یک پلن رایگان دارد که تعداد executions ماهانه محدود است. برای تست و یادگیری کافی است. اگر workflow شما ماهانه چند صد اجرا دارد، پلن رایگان زود تمام می‌شود.

چه‌کسی واقعاً به Cloud نیاز دارد: کسی که نمی‌خواهد سرور مدیریت کند، workflowهایش حجم پایین دارند، و به پشتیبانی رسمی نیاز دارد. بقیه با self-hosted روی VPS ارزان‌تر تمام می‌شوند.

چه‌زمانی n8n گزینه‌ی اشتباه است؟#

n8n گزینه‌ی اشتباه است وقتی به محدودیت نرخ درخواست (rate limit) بسیار پایین، توافق سطح خدمات (SLA) سازمانی تضمین‌شده، یا تیمی بدون آشنایی با terminal و Docker نیاز دارید. در این موارد Make یا Zapier با زیرساخت ابری مدیریت‌شده گزینه‌ی عملی‌تری هستند.

مسئله‌ی rate limit و scaling#

اگر workflow شما روزانه ده‌ها هزار اجرا دارد، n8n self-hosted روی یک VPS کوچک به مشکل می‌خورد. در حالت پیش‌فرض n8n اجراها را به‌صورت sequential پردازش می‌کند و اگر صف پر شود، workflowها delay می‌خورند.

راه‌حل: queue mode با Redis و workerهای جداگانه. اما این یعنی معماری پیچیده‌تر، مدیریت Redis، و monitoring اضافه. اگر حجم بالایی دارید و نمی‌خواهید این پیچیدگی را مدیریت کنید، Zapier یا Make با infrastructure مدیریت‌شده ساده‌ترند.

تیم‌های بدون دانش DevOps#

اگر در تیم هیچ‌کس با terminal آشنایی ندارد، self-hosting n8n هزینه‌ی پنهان ایجاد می‌کند. هر آپدیت، هر crash، هر مشکل SSL روی دوش یک نفر می‌افتد. اگر این نفر نبود، workflowها بی‌صدا قطع می‌شوند.

توصیه عملی: اگر تیم فنی ندارید، n8n Cloud یا Make را انتخاب کنید. بعداً وقتی یک نفر با Docker آشنا شد، migrate کنید.

نیاز به SLA و uptime تضمین‌شده#

self-hosted n8n هیچ SLA ندارد. اگر سرور شما down شود، workflowها اجرا نمی‌شوند و هیچ‌کس مسئول نیست. n8n Cloud هم SLA سازمانی مثل 99.99% ندارد.

اگر برای کسب‌وکار حیاتی (مثل پرداخت، ارسال SMS سازمانی) نیاز به uptime تضمین‌شده دارید، هیچ‌کدام از گزینه‌های n8n کافی نیستند. در این موارد به سرویس‌های enterprise با SLA قراردادی فکر کنید.

مسیر یادگیری واقع‌بینانه#

مسیر یادگیری n8n سه فاز دارد و هر فاز نقطه‌ی توقف طبیعی خودش را دارد. هفته اول: UI، نودهای ساده (Webhook، Gmail، IF)، و execution log. هفته دوم: Expression، JSON path، و ارجاع بین Nodeها. هفته سوم: اتصال مدل زبانی، ساخت AI Agent، و مدیریت Toolها.

در هفته اول، اکثر مردم در Expression گیر می‌کنند. در هفته دوم، در debug کردن JSON. در هفته سوم، در هزینه‌ی API و حلقه‌ی بی‌پایان Agent. این‌ها طبیعی‌اند و نشانه‌ی ضعف شما نیستند.

اگر در هر مرحله از نصب یا ساخت workflow گیر کردید، در کامیونیتی اسکول سؤال بپرسید — الگوهای شکست واقعی همین‌جا مستند می‌شوند. برای یادگیری ساختاریافته، دوره‌ی «ساخت Ai Agent با N8N» در اسکول از نصب تا ایجنت، گام‌به‌گام طراحی شده است.