در این قسمت از مجموعه آموزش n8n در کدیتی، یاد می‌گیریم چطور با Nodeها کار کنیم، داده‌ها را بین آن‌ها منتقل کنیم و خروجی‌های پویا بسازیم. آموزش Node در n8n اساس درک فلوهای پیچیده‌تر است، چون هر کاری در n8n با نودها انجام می‌شود. این قسمت تمرینی است تا بفهمیم داده‌ها چگونه از یک نود به نود بعدی منتقل می‌شوند و چطور می‌توانیم با استفاده از شرط‌ها و محاسبات، فلوهای هوشمند طراحی کنیم.

قسمت قبل: آشنایی با n8n و قدرت اتوماسیون بدون کد

Node در n8n چیست؟

هر Node در n8n یک واحد مستقل از عملکرد است که وظیفه خاصی را انجام می‌دهد، مانند دریافت داده، پردازش، شرط‌گذاری یا ارسال اطلاعات به یک سرویس خارجی. شما می‌توانید ده‌ها Node مختلف را ترکیب کنید تا فرآیندهای پیچیده‌ای بسازید بدون آن‌که یک خط کد بنویسید.

 

 

معرفی سناریو

در این آموزش می‌خواهیم با استفاده از چند Node ساده، یک سبد خرید شبیه‌سازی کنیم. در ابتدا داده‌ها را تنظیم می‌کنیم، سپس جمع کل مبلغ خرید را محاسبه می‌کنیم، و در نهایت با یک شرط بررسی می‌کنیم آیا مبلغ کل از حد مشخصی بیشتر است یا نه. اگر بله، پیام موفقیت برگردانده می‌شود، در غیر این صورت پیام هشدار ارسال می‌شود.

گام‌های ساخت

گام ۱: افزودن Manual Trigger

ابتدا از منوی بالا گزینه + Add Node را بزنید و Node از نوع Manual Trigger اضافه کنید تا بتوانید هر بار به‌صورت دستی فلو را اجرا کنید.

گام ۲: افزودن داده نمونه با Set Node

یک Node از نوع Set اضافه کنید و داده‌ی نمونه سبد خرید را به‌صورت زیر تنظیم کنید:

{
  "cart": {
    "items": [
      { "name": "کتاب", "qty": 2, "price": 120000 },
      { "name": "خودکار", "qty": 3, "price": 15000 }
    ]
  }
}

گام ۳: محاسبه مجموع با Function Node

یک Node از نوع Function اضافه کنید و کد زیر را در قسمت Function Code قرار دهید. این کد داده‌ها را می‌خواند، مجموع تعداد و مبلغ را محاسبه می‌کند و خروجی استاندارد برمی‌گرداند:

// Ready-to-run for n8n v1.8+
// محاسبه مجموع تعداد و مبلغ آیتم‌ها در سبد خرید
const cart = typeof $json.cart === 'string' ? JSON.parse($json.cart) : ($json.cart || {});
const items = Array.isArray(cart.items) ? cart.items : [];
let totalQty = 0;
let totalAmount = 0;
for (const it of items) {
  const q = Number(it.qty || 0);
  const p = Number(it.price || 0);
  totalQty += q;
  totalAmount += q * p;
}
return [
  {
    json: {
      ok: true,
      items,
      totalQty,
      totalAmount
    }
  }
];

گام ۴: شرط‌گذاری با If Node

در این مرحله یک Node از نوع If اضافه کنید. در قسمت Conditions → Number تنظیم کنید:

  • Value 1 برابر {{$json[“totalAmount”]}}
  • Operation برابر larger or equal
  • Value 2 برابر 100000
    اگر شرط برقرار بود، مسیر True اجرا می‌شود، در غیر این صورت مسیر False.

آموزش ابزارهای هوش مصنوعی

گام ۵: پاسخ نهایی

برای هر مسیر True و False یک Node از نوع Respond to Webhook اضافه کنید.
در مسیر True پیام زیر را برگردانید:

{ "ok": true, "message": "مبلغ خرید بالاتر از 100 هزار تومان است." }

در مسیر False پیام زیر را برگردانید:

{ "ok": false, "message": "مبلغ خرید کمتر از 100 هزار تومان است." }

اکسپورت آماده برای وارد کردن در n8n

برای سهولت، کد زیر را کپی کرده و از طریق Import from Clipboard در محیط n8n وارد کنید:

{
  "name": "Codity - Cart Calculation Flow",
  "nodes": [
    {
      "parameters": {},
      "id": "Manual_Start",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "keepOnlySet": true,
        "values": {
          "object": [
            {
              "name": "cart",
              "value": "{\"items\":[{\"name\":\"کتاب\",\"qty\":2,\"price\":120000},{\"name\":\"خودکار\",\"qty\":3,\"price\":15000}]}"
            }
          ]
        }
      },
      "id": "Set_Input",
      "name": "Set Cart Data",
      "type": "n8n-nodes-base.set",
      "typeVersion": 2,
      "position": [480, 300]
    },
    {
      "parameters": {
        "functionCode": "const cart = typeof $json.cart === 'string' ? JSON.parse($json.cart) : ($json.cart||{});\nconst items = Array.isArray(cart.items) ? cart.items : [];\nlet totalQty=0,totalAmount=0;\nfor(const it of items){const q=Number(it.qty||0),p=Number(it.price||0);totalQty+=q;totalAmount+=q*p;}\nreturn [{ json: { ok:true, items, totalQty, totalAmount } }];"
      },
      "id": "Function_Sum",
      "name": "Calculate Totals",
      "type": "n8n-nodes-base.function",
      "typeVersion": 2,
      "position": [740, 300]
    },
    {
      "parameters": {
        "conditions": {
          "number": [
            { "value1": "={{$json[\"totalAmount\"]}}", "operation": "largerOrEqual", "value2": 100000 }
          ]
        }
      },
      "id": "If_Check",
      "name": "If Total >= 100000",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [1000, 300]
    },
    {
      "parameters": { "responseBody": "{\"ok\":true,\"message\":\"مبلغ خرید بالاتر از 100 هزار تومان است.\"}", "responseCode": 200 },
      "id": "Respond_OK",
      "name": "Respond OK",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [1260, 240]
    },
    {
      "parameters": { "responseBody": "{\"ok\":false,\"message\":\"مبلغ خرید کمتر از 100 هزار تومان است.\"}", "responseCode": 200 },
      "id": "Respond_LOW",
      "name": "Respond LOW",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [1260, 400]
    }
  ],
  "connections": {
    "Manual Trigger": { "main": [ [ { "node": "Set Cart Data", "type": "main", "index": 0 } ] ] },
    "Set Cart Data": { "main": [ [ { "node": "Calculate Totals", "type": "main", "index": 0 } ] ] },
    "Calculate Totals": { "main": [ [ { "node": "If Total >= 100000", "type": "main", "index": 0 } ] ] },
    "If Total >= 100000": {
      "main": [
        [ { "node": "Respond OK", "type": "main", "index": 0 } ],
        [ { "node": "Respond LOW", "type": "main", "index": 0 } ]
      ]
    }
  ],
  "settings": { "executionOrder": "v1" }
}

جمع‌ بندی

در این قسمت از آموزش n8n یاد گرفتیم چگونه با چند Node ساده داده‌ها را تنظیم، پردازش و ارزیابی کنیم. کار با Nodeها اساس ساخت هر فلو در n8n است و تسلط بر آن‌ها کمک می‌کند در پروژه‌های بزرگ‌تر، اتوماسیون‌های هوشمند و دقیق‌تری بسازید. در قسمت بعد، وارد دنیای Webhookها می‌شویم و یاد می‌گیریم چگونه API اختصاصی خود را در n8n بسازیم.