مستندات n8n
74+ نود
📋

ایرتیبل

Airtable

ترکیب قدرتمند Spreadsheet و Database با API کامل برای خودکارسازی

ابزارهای کاری
مقدماتی
۰ بازدید
n8n 1.0+

نمای کلی

نود Airtable چیست؟

نود Airtable امکان مدیریت خودکار داده‌ها در پلتفرم Airtable را از طریق n8n فراهم می‌کند. Airtable یک پلتفرم cloud-based است که قدرت یک database رابطه‌ای را با سادگی یک spreadsheet ترکیب می‌کند.

ساختار Airtable:

  • Workspace: فضای کاری تیمی
  • Base: معادل یک دیتابیس (شامل چندین Table)
  • Table: جدول داده (مانند Sheet در Excel اما با روابط)
  • View: نمای نمایش داده (فیلتر و مرتب‌سازی ذخیره‌شده)
  • Field: ستون با نوع مشخص
  • Record: ردیف داده

انواع فیلدها:

  • متنی: Single line text, Long text, Rich text, Email, URL, Phone
  • عددی: Number, Currency, Percent, Duration, Rating
  • انتخابی: Single select, Multiple select, Checkbox
  • تاریخ: Date, Date & time, Created time, Last modified time
  • رابطه‌ای: Linked record, Lookup, Rollup, Count
  • فایل: Attachment (تصاویر، PDF، ویدیو)
  • محاسباتی: Formula, Autonumber
  • کاربری: Created by, Last modified by, Collaborator

انواع نماها (Views):

  • Grid View: جدولی (پیش‌فرض)
  • Kanban View: کارت‌های دسته‌بندی‌شده
  • Calendar View: تقویمی
  • Gallery View: کارت‌های تصویری
  • Form View: فرم ورود داده عمومی
  • Gantt View: نمودار زمان‌بندی پروژه
  • Timeline View: خط زمانی

محدودیت‌های API:

  • Rate Limit: ۵ درخواست در ثانیه برای هر Base
  • Records per request: حداکثر ۱۰ رکورد در عملیات batch
  • Payload size: حداکثر 100 رکورد در هر list
  • Attachment size: حداکثر 20MB فایل

جایگزین‌ها (Open Source):

اگر self-hosting و مالکیت داده مهم است: Baserow (بهترین جایگزین)، NocoDB (روی دیتابیس موجود)، یا AppSheet (Google).

احراز هویت

احراز هویت Airtable

روش ۱: Personal Access Token (توصیه شده)

  1. 1به [airtable.com/create/tokens](https://airtable.com/create/tokens) بروید
  2. 2Create new token کلیک کنید
  3. 3نام token را وارد کنید (مثلاً: n8n-automation)
  4. 4Scopes (دسترسی‌ها) را انتخاب کنید:
  • data.records:read - خواندن رکوردها
  • data.records:write - نوشتن رکوردها
  • data.recordComments:read - خواندن کامنت‌ها
  • data.recordComments:write - نوشتن کامنت‌ها
  • schema.bases:read - خواندن ساختار Base
  • schema.bases:write - تغییر ساختار Base
  1. 1Access را تنظیم کنید: دسترسی به کدام Baseها
  2. 2Create token بزنید و token را کپی کنید

#### تنظیم در n8n:

  1. 1Credentials > Airtable API
  2. 2Token: مقدار کپی‌شده (pat...)

روش ۲: OAuth2

  1. 1به [airtable.com/create/oauth](https://airtable.com/create/oauth) بروید
  2. 2یک OAuth integration بسازید
  3. 3Client ID و Client Secret را دریافت کنید
  4. 4Redirect URL را از n8n وارد کنید
  5. 5Scopes مورد نیاز را انتخاب کنید
  6. 6در n8n: Credentials > Airtable OAuth2 API > Connect

پیدا کردن Base ID و Table ID:

  • **Base ID**: از URL: https://airtable.com/appXXXXXXXXXXXXXX/...appXXXXXXXXXXXXXX
  • **Table ID**: از URL: .../tblXXXXXXXXXXXXXX/...tblXXXXXXXXXXXXXX
  • یا از API documentation: در Help > API documentation

عملیات‌های موجود

1

create

ایجاد یک رکورد جدید در جدول Airtable

2

get

دریافت یک رکورد با شناسه (Record ID)

3

update

ویرایش فیلدهای یک رکورد موجود (Partial Update)

4

delete

حذف یک رکورد از جدول

5

list

دریافت لیست رکوردها با فیلتر، مرتب‌سازی و صفحه‌بندی

6

search

جستجو بر اساس فیلد و مقدار با استفاده از filterByFormula

7

upsert

ایجاد رکورد جدید یا ویرایش در صورت وجود (بر اساس فیلد منحصربه‌فرد)

8

createMultiple

ایجاد تا ۱۰ رکورد در یک درخواست (Batch Create)

9

updateMultiple

ویرایش تا ۱۰ رکورد در یک درخواست (Batch Update)

10

deleteMultiple

حذف تا ۱۰ رکورد در یک درخواست (Batch Delete)

11

listBases

دریافت لیست تمام Baseهای قابل دسترسی

12

listTables

دریافت لیست جداول یک Base همراه با اطلاعات فیلدها

کاربردهای متداول

کاربردهای رایج

۱. CRM خودکار (مدیریت ارتباط با مشتری)

لیدها از فرم‌ها و منابع مختلف خودکار وارد Airtable شوند.

code
Webhook (فرم تماس سایت)
  → Airtable (search: آیا مشتری قبلاً وجود دارد؟)
  → IF (وجود ندارد)
    → Airtable (create record در Leads)
    → Email (تأیید دریافت به مشتری)
    → Telegram (alert تیم فروش)
  → Else
    → Airtable (update: افزودن یادداشت جدید)

۲. تقویم محتوایی (Content Calendar)

مدیریت تولید و انتشار محتوا در شبکه‌های اجتماعی.

code
Schedule (هر روز ساعت ۹)
  → Airtable (list: filterByFormula = AND({Publish Date}=TODAY(), {Status}="Approved"))
  → Loop هر پست
    → Telegram Channel (ارسال)
    → Airtable (update: Status = "Published")

۳. مدیریت موجودی و انبار (Inventory Management)

هشدار خودکار کمبود موجودی و ردیابی سفارشات.

code
Schedule (هر ساعت)
  → Airtable (list: filterByFormula = {Stock} < {Reorder Level})
  → IF (نتیجه وجود دارد)
    → Email (هشدار به تیم تدارکات)
    → Airtable (update: Reorder Status = "Pending")
    → Telegram (alert مدیر)

۴. سیستم استخدام و منابع انسانی (HR Recruitment)

ردیابی رزومه‌ها و فرآیند مصاحبه.

code
Email Trigger (رزومه جدید)
  → Airtable (create: نام، ایمیل، لینک رزومه، Status = "New")
  → Email (تأیید دریافت به متقاضی)
  → Wait (3 روز)
  → Airtable (get: بررسی status)
  → IF (status هنوز New)
    → Telegram (یادآوری به HR)

۵. مدیریت رویدادها (Event Management)

ثبت‌نام شرکت‌کنندگان و ارسال اطلاعیه‌ها.

code
Webhook (فرم ثبت‌نام)
  → Airtable (create: اطلاعات شرکت‌کننده)
  → Email (بلیط و جزئیات رویداد)
  → Schedule (۱ روز قبل رویداد)
    → Airtable (list: شرکت‌کنندگان)
    → Email (یادآوری)

۶. پردازش سفارشات (Order Processing)

مدیریت خودکار سفارشات از فروشگاه آنلاین.

code
Webhook (سفارش جدید WooCommerce/Shopify)
  → Airtable (create: جزئیات سفارش)
  → Airtable (update: Inventory table - کاهش موجودی)
  → Email (فاکتور به مشتری)
  → Telegram (alert انبار برای آماده‌سازی)

۷. جمع‌آوری بازخورد مشتریان (Customer Feedback)

ذخیره و تحلیل خودکار نظرات مشتریان.

code
Airtable Form (نظرسنجی)
  → Code (تحلیل sentiment)
  → Airtable (update: Score و Sentiment)
  → IF (امتیاز < 3)
    → Telegram (alert پشتیبانی)
    → Email (پیگیری از مشتری)

۸. همگام‌سازی با Jira/Trello (Project Management Sync)

ارتباط دوطرفه بین Airtable و ابزارهای مدیریت پروژه.

code
Airtable Webhook (رکورد تغییر کرد)
  → IF (Status changed to "In Progress")
    → Jira (create issue)
    → Airtable (update: Jira Link)

Jira Trigger (Issue resolved)
  → Airtable (search: Jira ID)
  → Airtable (update: Status = "Done")

۹. مدیریت لیست ایمیل مارکتینگ (Email Marketing)

ساخت و مدیریت لیست مخاطبین بازاریابی ایمیلی.

code
Webhook (فرم عضویت)
  → Airtable (search: آیا ایمیل تکراری است؟)
  → IF (جدید)
    → Airtable (create: subscriber)
    → Mailchimp (add to list)
    → Email (خوش‌آمد)
  → Else
    → Airtable (update: re-subscribed)

۱۰. داشبورد گزارش‌گیری (Reporting Dashboard)

جمع‌آوری داده از منابع مختلف و ذخیره در Airtable برای گزارش‌گیری.

code
Schedule (هر شب ساعت ۲۳)
  → MySQL (آمار فروش روز)
  → Google Analytics (ترافیک)
  → Airtable (create: گزارش روزانه)
  → Telegram (ارسال خلاصه به مدیران)

نکات حرفه‌ای

نکات حرفه‌ای

۱. Rate Limit: از Wait Node استفاده کنید

Airtable محدودیت ۵ درخواست در ثانیه دارد. بین درخواست‌ها Wait Node (200-250ms) اضافه کنید.

code
Split In Batches (10) → Airtable (create) → Wait (250ms) → Loop

۲. filterByFormula: سینتکس فیلتر

فیلترهای قدرتمند با فرمول‌های Airtable:

code
// برابری
{Status} = "Active"

// ترکیبی AND/OR
AND({Status} = "Active", {Priority} = "High")
OR({Type} = "Bug", {Type} = "Feature")

// جستجوی متنی
FIND("کلمه", {Description}) > 0

// تاریخ
IS_AFTER({Due Date}, TODAY())
IS_SAME({Created}, TODAY(), 'day')

// خالی/پر
{Email} != BLANK()
{Assignee} = BLANK()

۳. مرتب‌سازی با sort parameter

json
[
  {"field": "Priority", "direction": "desc"},
  {"field": "Created", "direction": "asc"}
]

۴. محدودسازی با maxRecords

برای دریافت فقط N رکورد اول: maxRecords: 10. مناسب برای "آخرین سفارشات" یا "Top 10".

۵. Pagination با pageSize و offset

Airtable حداکثر ۱۰۰ رکورد در هر صفحه برمی‌گرداند. پاسخ شامل offset است که باید در درخواست بعدی ارسال شود.

code
Airtable (list, pageSize: 100) → IF (offset exists) → Airtable (list, offset: {{$json.offset}}) → Merge

۶. انواع فیلدها: فرمت صحیح

  • **Attachment**: آرایه URL: [{"url": "https://example.com/photo.jpg"}]
  • **Linked Record**: آرایه ID: ["recXXX", "recYYY"]
  • **Single Select**: رشته دقیق: "Option Name"
  • **Multiple Select**: آرایه رشته: ["Tag1", "Tag2"]
  • **Checkbox**: boolean: true یا false
  • **Date**: ISO string: "2024-06-15"
  • **Number**: عدد: 42 (نه "42")
  • **Collaborator**: آبجکت email: {"email": "user@example.com"}

۷. Base ID از URL

URL در مرورگر: https://airtable.com/appABC123/tblDEF456/viwGHI789

  • Base ID: appABC123
  • Table ID: tblDEF456
  • View ID: viwGHI789

۸. از Views برای داده‌های پیش‌فیلتر استفاده کنید

بجای نوشتن فیلتر پیچیده، یک View در Airtable بسازید و نام آن را در پارامتر view وارد کنید. فیلتر و مرتب‌سازی View خودکار اعمال می‌شود.

۹. Webhook Trigger

Airtable Automations می‌تواند Webhook به n8n ارسال کند:

  1. 1در Airtable: Automations > When record matches conditions
  2. 2Action: Send webhook → URL n8n Webhook node
  3. 3Body: اطلاعات رکورد

۱۰. Batch Operations: تا ۱۰ رکورد

هر درخواست batch حداکثر ۱۰ رکورد پشتیبانی می‌کند. برای تعداد بیشتر:

code
Split In Batches (size: 10) → Airtable (create multiple) → Wait (250ms) → Loop

۱۱. فیلدهای Formula فقط خواندنی هستند

نمی‌توانید مقدار فیلدهای Formula, Rollup, Lookup, Count, Autonumber و Created/Last Modified time را تغییر دهید. این فیلدها خودکار محاسبه می‌شوند.

۱۲. Typecast Option

با فعال کردن typecast: true، Airtable تلاش می‌کند مقادیر را خودکار تبدیل کند. مثلاً اگر "Yes" ارسال کنید برای Checkbox، به true تبدیل می‌شود. برای Single Select، option جدید خودکار ساخته می‌شود.

۱۳. Created Time و Last Modified Time

از این فیلدها برای ردیابی تغییرات استفاده کنید. در filterByFormula:

code
IS_AFTER(LAST_MODIFIED_TIME(), '2024-01-01')
IS_AFTER({Created}, DATEADD(TODAY(), -7, 'days'))

۱۴. Airtable Automations در مقابل n8n

  • Airtable Automations: ساده، محدود به Airtable، بدون کدنویسی
  • n8n: قدرتمند، اتصال به هر سرویسی، منطق پیچیده، self-hosted
  • بهترین ترکیب: Airtable Automations برای trigger → n8n Webhook برای پردازش

۱۵. فیلد Attachment: آپلود با URL

برای افزودن فایل به فیلد Attachment، یک آرایه از URLها ارسال کنید. Airtable فایل را دانلود و ذخیره می‌کند:

json
[
  {"url": "https://example.com/image.jpg", "filename": "my-image.jpg"},
  {"url": "https://example.com/doc.pdf"}
]

رفع مشکلات

رفع مشکلات رایج

❌ خطای 401 - AUTHENTICATION_REQUIRED

علت: API Key یا Personal Access Token نامعتبر

راه‌حل

  • Token را مجدداً بررسی و کپی کنید
  • مطمئن شوید token با pat شروع می‌شود (Personal Access Token)
  • اگر از API Key قدیمی استفاده می‌کنید، به Personal Access Token مهاجرت کنید
  • Token را در n8n Credentials بروزرسانی کنید

❌ خطای 403 - NOT_AUTHORIZED

علت: Token دسترسی کافی به Base یا Table ندارد

راه‌حل

  • Scopes توکن را بررسی کنید (data.records:read, data.records:write)
  • مطمئن شوید token به Base مورد نظر دسترسی دارد
  • در تنظیمات token، Access بخش را بررسی کنید
  • اگر از OAuth2 هستید، scopes را هنگام authorize دوباره بررسی کنید

❌ خطای 404 - NOT_FOUND

علت: Base ID، Table ID یا Record ID اشتباه است

راه‌حل

  • Base ID با app شروع می‌شود: appXXXXXXXXXXXXXX
  • Table ID با tbl شروع می‌شود: tblXXXXXXXXXXXXXX
  • Record ID با rec شروع می‌شود: recXXXXXXXXXXXXXX
  • نام Table به جای ID هم قابل استفاده است (case-sensitive)
  • مطمئن شوید Base/Table حذف نشده باشد

❌ خطای 422 - INVALID_REQUEST

علت: داده ارسالی با نوع فیلد مطابقت ندارد

راه‌حل

  • Number field: عدد ارسال کنید نه string
  • Single Select: مقدار دقیقاً یکی از optionها باشد
  • **Multiple Select**: آرایه‌ای از مقادیر: ["Option1", "Option2"]
  • **Date field**: فرمت ISO: 2024-01-15 یا 2024-01-15T10:30:00.000Z
  • **Linked Record**: آرایه‌ای از Record IDها: ["recXXX", "recYYY"]
  • **Attachment**: آرایه‌ای از آبجکت‌های URL: [{"url": "https://..."}]
  • از گزینه typecast: true برای تبدیل خودکار استفاده کنید

❌ خطای 429 - RATE_LIMIT_REACHED

علت: بیش از ۵ درخواست در ثانیه برای یک Base

راه‌حل

  • Wait Node (حداقل ۲۰۰ms) بین درخواست‌ها اضافه کنید
  • از Batch operations استفاده کنید (تا ۱۰ رکورد در هر درخواست)
  • از Split In Batches node استفاده کنید
  • header Retry-After را بررسی و رعایت کنید
  • Retry on Fail را فعال کنید

❌ خطای INVALID_PERMISSIONS_OR_MODEL_NOT_FOUND

علت: ترکیبی از مشکل دسترسی یا شناسه نادرست

راه‌حل

  • Base ID و Table ID را از URL مرورگر استخراج کنید
  • Token permissions را بررسی کنید
  • مطمئن شوید Base به workspace فعال تعلق دارد

❌ خطای "Unknown field name"

علت: نام فیلد در درخواست با نام واقعی مطابقت ندارد

راه‌حل

  • نام فیلد case-sensitive است (حروف بزرگ/کوچک مهم)
  • فاصله‌ها و کاراکترهای خاص را دقیقاً رعایت کنید
  • از API documentation خودکار Airtable استفاده کنید
  • فیلدهای محاسباتی (Formula, Rollup, Lookup) قابل نوشتن نیستند

❌ مشکل Linked Record

علت: فرمت نادرست برای فیلد Linked Record

راه‌حل

  • مقدار باید آرایه‌ای از Record IDها باشد: ["recABC", "recDEF"]
  • نه نام رکورد، بلکه ID رکورد لازم است
  • ابتدا رکورد مقصد را جستجو کنید و ID را بگیرید
  • از Airtable search/list برای پیدا کردن Record ID استفاده کنید
اشتراک‌گذاری:

آیا این مستندات مفید بود؟