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

قسمت قبل: آموزش Node در n8n و درک جریان داده‌ها

آشنایی با مفهوم Webhook

Webhook در واقع یک URL یا آدرس وب است که وقتی از بیرون (مثلاً از یک فرم، اپلیکیشن یا درخواست HTTP) به آن داده ارسال شود، به‌طور خودکار فلو در n8n اجرا می‌شود. هر Webhook می‌تواند برای دریافت اطلاعات از سرویس‌ها یا ارسال داده‌ها به دیگر سیستم‌ها استفاده شود. به زبان ساده، Webhook پل ارتباطی بین n8n و دنیای بیرون است.

فرض کنید می‌خواهید وقتی کاربری فرم ثبت سفارش را پر می‌کند، داده‌های او به n8n ارسال شود تا ذخیره شود یا به سرویس دیگری برود. در چنین حالتی، Webhook بهترین گزینه است.

 

 

ساخت اولین Webhook برای دریافت داده‌ها

در این آموزش، هدف ما ساخت یک Webhook است که اطلاعات مربوط به محصول را بر اساس شناسه (id) دریافت کند و در پاسخ، مشخصات آن را به‌صورت JSON برگرداند.

گام ۱: ایجاد Webhook Node

ابتدا در محیط n8n یک Node از نوع Webhook اضافه کنید.
در قسمت تنظیمات، گزینه‌های زیر را وارد کنید:

  • HTTP Method: GET
  • Path: product
  • Response Mode: Last Node

با این تنظیمات، هر بار که درخواستی به آدرس http://localhost:5678/webhook/product ارسال شود، گردش کار شما اجرا می‌شود.

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

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

گام ۲: پردازش داده‌ها با Function Node

در این مرحله داده‌ی ورودی را تحلیل می‌کنیم. مثلاً اگر کاربر در Query String مقدار id را ارسال کند، می‌خواهیم بر اساس آن اطلاعات محصول را برگردانیم.

یک Node از نوع Function اضافه کنید و کد زیر را در قسمت Function Code قرار دهید:

// Ready-to-run for n8n v1.8+
// دریافت id و بازگرداندن اطلاعات محصول از دیتاست نمونه

const query = $json.query || {};
const id = query.id || "x12";

// دیتای نمونه برای تست
const products = {
  x12: { id: "x12", name: "Laptop X12", price: 18500000, stock: 42 },
  k50: { id: "k50", name: "Keyboard K50", price: 850000, stock: 120 },
  m10: { id: "m10", name: "Mouse M10", price: 490000, stock: 65 }
};

// بررسی اینکه محصول وجود دارد یا نه
if (!products[id]) {
  return [{ json: { ok: false, error: "محصول یافت نشد" } }];
}

// اگر وجود داشت، آن را در پاسخ برمی‌گردانیم
return [
  {
    json: {
      ok: true,
      product: products[id]
    }
  }
];

در اینجا ما با استفاده از یک دیتای نمونه، شبیه‌سازی کردیم که API از پایگاه داده واقعی خوانده می‌شود. شما در پروژه‌های واقعی می‌توانید این مرحله را به یک API خارجی یا پایگاه داده واقعی متصل کنید.

گام ۳: تست Webhook و بررسی پاسخ

وقتی فلو را اجرا کردید، کافی است در ترمینال یا Postman دستور زیر را ارسال کنید:

curl "http://localhost:5678/webhook/product?id=k50"

در پاسخ باید داده‌ی محصول Keyboard K50 را دریافت کنید:

{
  "ok": true,
  "product": {
    "id": "k50",
    "name": "Keyboard K50",
    "price": 850000,
    "stock": 120
  }
}

اگر مقدار id اشتباه وارد شود، پاسخ خطا دریافت می‌کنید. این دقیقاً همان رفتاری است که از یک API واقعی انتظار دارید.

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

برای راحتی، می‌توانید کل گردش کار را از JSON زیر در n8n ایمپورت کنید. این فلو کاملاً تست‌شده است و بلافاصله بعد از ایمپورت کار می‌کند.

{
  "name": "Codity - Product API",
  "nodes": [
    {
      "parameters": {
        "path": "product",
        "httpMethod": "GET",
        "options": { "responseMode": "lastNode" }
      },
      "id": "Webhook_Product",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [300, 300]
    },
    {
      "parameters": {
        "functionCode": "const query = $json.query || {}; const id = query.id || 'x12'; const products = { x12: { id: 'x12', name: 'Laptop X12', price: 18500000, stock: 42 }, k50: { id: 'k50', name: 'Keyboard K50', price: 850000, stock: 120 }, m10: { id: 'm10', name: 'Mouse M10', price: 490000, stock: 65 } }; if (!products[id]) { return [{ json: { ok: false, error: 'محصول یافت نشد' } }]; } return [{ json: { ok: true, product: products[id] } }];"
      },
      "id": "Function_Product",
      "name": "Find Product",
      "type": "n8n-nodes-base.function",
      "typeVersion": 2,
      "position": [560, 300]
    }
  ],
  "connections": {
    "Webhook": { "main": [ [ { "node": "Find Product", "type": "main", "index": 0 } ] ] }
  },
  "settings": { "executionOrder": "v1" }
}

توسعه بیشتر فلو

تا اینجا شما یک API ساده ساختید. اما n8n فقط به همین محدود نیست. می‌توانید Nodeهای دیگری مثل HTTP Request برای دریافت داده از سرور خارجی یا Google Sheets برای ذخیره اطلاعات اضافه کنید. مثلاً می‌توانید هر بار که کاربر محصولی را درخواست کرد، اطلاعات آن را در شیت گوگل ذخیره کنید تا سابقه درخواست‌ها را داشته باشید.

جمع‌ بندی

در این قسمت از آموزش n8n یاد گرفتیم چگونه با استفاده از Webhook، یک API ساده برای اتصال سرویس‌ها بسازیم. با این روش می‌توانید بین سیستم‌های داخلی و خارجی ارتباط مستقیم ایجاد کنید. در قسمت بعد یاد می‌گیریم چگونه داده‌های این API را در Google Sheets ذخیره کنیم و گزارش خودکار بسازیم.