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

قسمت قبل: ساخت Webhook و API در n8n برای اتصال سرویس‌ها

چرا Google Sheets برای اتوماسیون مناسب است؟

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

آماده‌سازی Google Sheets برای اتصال

قبل از ساخت Workflow باید چند مرحله ساده را انجام دهید تا Google Sheets آماده‌ی اتصال به n8n شود:

  1. وارد حساب Google خود شوید و یک فایل جدید Google Sheets ایجاد کنید.
  2. اولین ردیف را به عنوان عنوان ستون‌ها مشخص کنید؛ مثلاً: Name, Email, Date.
  3. به بخش Credentials در n8n بروید، از قسمت Google گزینه‌ی Google Sheets API را انتخاب کنید.
  4. وارد حساب گوگل شوید و مجوز دسترسی را تأیید کنید.

با انجام این مراحل، ارتباط n8n با حساب Google شما برقرار می‌شود.

گام ۱: ساخت Webhook برای دریافت داده

در n8n یک Node از نوع Webhook ایجاد کنید تا داده‌ها از بیرون (مثلاً فرم تماس یا سیستم دیگر) به n8n ارسال شوند.

تنظیمات Webhook:

  • HTTP Method: POST
  • Path: addUser
  • Response Mode: Last Node

آدرس Webhook شما چیزی شبیه زیر خواهد بود:

http://localhost:5678/webhook/addUser

اگر از نسخه Cloud استفاده می‌کنید، مسیر به دامنه اختصاصی n8n شما وابسته است.

گام ۲: بررسی و آماده‌سازی داده‌ها

یک Node از نوع Function اضافه کنید تا داده‌های ورودی بررسی و آماده ذخیره در شیت شوند.

// Ready for n8n v1.8+
const data = $json;

if (!data.name || !data.email) {
  return [{ json: { ok: false, error: "فیلد name یا email خالی است" } }];
}

return [
  {
    json: {
      Name: data.name.trim(),
      Email: data.email.trim(),
      Date: new Date().toISOString()
    }
  }
];

در این مرحله داده‌های ناقص حذف می‌شوند و مقادیر نهایی تمیز و آماده برای ذخیره خواهند شد.

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

گام ۳: ذخیره داده‌ها در Google Sheets

Node بعدی از نوع Google Sheets است. در تنظیمات آن گزینه Append را برای افزودن ردیف جدید انتخاب کنید.

پیکربندی اصلی:

  • Spreadsheet ID: شناسه فایل شیت (از URL کپی کنید بین /d/ و /edit)
  • Sheet Name: Users
  • Range: A:C
  • Value Input Mode: RAW
  • Data to Send: Auto Map Input Data

هر بار که داده‌ای از Webhook وارد شود، n8n آن را به‌صورت خودکار در شیت اضافه می‌کند.

گام ۴: ارسال پاسخ به کاربر

در انتهای فلو، یک Node از نوع Respond to Webhook اضافه کنید تا نتیجه اجرای فلو را بازگرداند.

{
  "ok": true,
  "message": "اطلاعات با موفقیت در Google Sheets ذخیره شد."
}

گام ۵: تست فلو

فلو را فعال کنید و در ترمینال دستور زیر را اجرا کنید:

curl -X POST http://localhost:5678/webhook/addUser \
  -H "Content-Type: application/json" \
  -d '{"name": "Ali Reza", "email": "ali@example.com"}'

اگر همه چیز درست باشد، داده در Google Sheets شما ظاهر می‌شود.

گام ۶: بروزرسانی و حذف داده‌ها

n8n فقط برای افزودن داده نیست؛ می‌توانید ردیف‌های قبلی را ویرایش یا حذف هم کنید.

  • برای بروزرسانی داده‌ها، در Node Google Sheets گزینه Operation: Update را انتخاب کنید. ستون کلیدی مثل Email را به عنوان شرط قرار دهید و مقدار جدید را مشخص کنید.
  • برای حذف ردیف‌ها، از Operation نوع Delete استفاده کنید. با تعیین مقدار دقیق شناسه یا ایمیل، n8n آن ردیف را از شیت حذف می‌کند.

این قابلیت به شما اجازه می‌دهد از Google Sheets مانند یک دیتابیس واقعی استفاده کنید.

گام ۷: ساخت گزارش خودکار

می‌توانید با اضافه کردن Nodeهایی مانند Cron یا Schedule Trigger، گزارش‌های خودکار بسازید. مثلاً:

  • هر روز ساعت ۹ صبح داده‌های فروش را جمع‌آوری کند و در شیت جدید ذخیره کند.
  • هر هفته لیست کاربران جدید را از سیستم ثبت‌نام بخواند و در یک تب جداگانه اضافه کند.

در کنار آن، Nodeهای Gmail یا Telegram هم می‌توانند خروجی گزارش را ارسال کنند تا نیاز به بررسی دستی شیت نداشته باشید.

گام ۸: نکات امنیتی

کار با Google Sheets به ظاهر ساده است اما رعایت امنیت اهمیت زیادی دارد:

  • فایل شیت را فقط با حساب n8n اختصاصی خود به اشتراک بگذارید.
  • از حالت «Anyone with link» استفاده نکنید مگر فقط برای نمایش.
  • در Webhook داده‌های حساس را رمزگذاری کنید.
  • برای جلوگیری از استفاده غیرمجاز، مسیر Webhook را طولانی و تصادفی انتخاب کنید.

گام ۹: نکات حرفه‌ای و بهینه‌سازی

برای بهبود سرعت و عملکرد فلوها نکات زیر را در نظر بگیرید:

  • داده‌ها را در دسته‌های کوچک (Batch) ارسال کنید تا از محدودیت API عبور نکنید.
  • اگر حجم داده زیاد است، از Node SplitInBatches استفاده کنید.
  • برای جلوگیری از تکرار داده‌ها، قبل از ذخیره از Node Google Sheets → Read استفاده کنید و بررسی کنید که رکورد قبلاً وجود دارد یا نه.
  • Workflowها را در بازه‌های زمانی مشخص بررسی کنید تا از خطاهای API گوگل جلوگیری شود.

اکسپورت کامل فلو (JSON)

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

{
  "name": "Codity - Google Sheets Append",
  "nodes": [
    {
      "parameters": {
        "path": "addUser",
        "httpMethod": "POST",
        "options": { "responseMode": "lastNode" }
      },
      "id": "Webhook_AddUser",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [300, 300]
    },
    {
      "parameters": {
        "functionCode": "const data=$json;if(!data.name||!data.email){return[{json:{ok:false,error:'فیلد name یا email خالی است'}}];}return[{json:{Name:data.name.trim(),Email:data.email.trim(),Date:new Date().toISOString()}}];"
      },
      "id": "Function_Normalize",
      "name": "Normalize Data",
      "type": "n8n-nodes-base.function",
      "typeVersion": 2,
      "position": [560, 300]
    },
    {
      "parameters": {
        "operation": "append",
        "options": {
          "valueInputMode": "RAW",
          "locationDefine": "define",
          "locationSheetName": "Users",
          "locationRange": "A:C",
          "dataToSend": "autoMapInputData"
        }
      },
      "id": "GoogleSheets_Append",
      "name": "Google Sheets - Append",
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4,
      "position": [820, 300],
      "credentials": {
        "googleApi": { "id": "", "name": "" }
      }
    },
    {
      "parameters": {
        "responseBody": "={{$json}}",
        "responseCode": 200
      },
      "id": "Respond_Result",
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [1080, 300]
    }
  ],
  "connections": {
    "Webhook": { "main": [ [ { "node": "Normalize Data", "type": "main", "index": 0 } ] ] },
    "Normalize Data": { "main": [ [ { "node": "Google Sheets - Append", "type": "main", "index": 0 } ] ] },
    "Google Sheets - Append": { "main": [ [ { "node": "Respond", "type": "main", "index": 0 } ] ] }
  },
  "settings": { "executionOrder": "v1" }
}

جمع‌ بندی

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