ایرتیبل
Airtable
ترکیب قدرتمند Spreadsheet و Database با API کامل برای خودکارسازی
نمای کلی
نود 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به [airtable.com/create/tokens](https://airtable.com/create/tokens) بروید
- 2Create new token کلیک کنید
- 3نام token را وارد کنید (مثلاً: n8n-automation)
- 4Scopes (دسترسیها) را انتخاب کنید:
data.records:read- خواندن رکوردهاdata.records:write- نوشتن رکوردهاdata.recordComments:read- خواندن کامنتهاdata.recordComments:write- نوشتن کامنتهاschema.bases:read- خواندن ساختار Baseschema.bases:write- تغییر ساختار Base
- 1Access را تنظیم کنید: دسترسی به کدام Baseها
- 2Create token بزنید و token را کپی کنید
#### تنظیم در n8n:
- 1Credentials > Airtable API
- 2Token: مقدار کپیشده (
pat...)
روش ۲: OAuth2
- 1به [airtable.com/create/oauth](https://airtable.com/create/oauth) بروید
- 2یک OAuth integration بسازید
- 3Client ID و Client Secret را دریافت کنید
- 4Redirect URL را از n8n وارد کنید
- 5Scopes مورد نیاز را انتخاب کنید
- 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
عملیاتهای موجود
create
ایجاد یک رکورد جدید در جدول Airtable
get
دریافت یک رکورد با شناسه (Record ID)
update
ویرایش فیلدهای یک رکورد موجود (Partial Update)
delete
حذف یک رکورد از جدول
list
دریافت لیست رکوردها با فیلتر، مرتبسازی و صفحهبندی
search
جستجو بر اساس فیلد و مقدار با استفاده از filterByFormula
upsert
ایجاد رکورد جدید یا ویرایش در صورت وجود (بر اساس فیلد منحصربهفرد)
createMultiple
ایجاد تا ۱۰ رکورد در یک درخواست (Batch Create)
updateMultiple
ویرایش تا ۱۰ رکورد در یک درخواست (Batch Update)
deleteMultiple
حذف تا ۱۰ رکورد در یک درخواست (Batch Delete)
listBases
دریافت لیست تمام Baseهای قابل دسترسی
listTables
دریافت لیست جداول یک Base همراه با اطلاعات فیلدها
کاربردهای متداول
کاربردهای رایج
۱. CRM خودکار (مدیریت ارتباط با مشتری)
لیدها از فرمها و منابع مختلف خودکار وارد Airtable شوند.
Webhook (فرم تماس سایت)
→ Airtable (search: آیا مشتری قبلاً وجود دارد؟)
→ IF (وجود ندارد)
→ Airtable (create record در Leads)
→ Email (تأیید دریافت به مشتری)
→ Telegram (alert تیم فروش)
→ Else
→ Airtable (update: افزودن یادداشت جدید)۲. تقویم محتوایی (Content Calendar)
مدیریت تولید و انتشار محتوا در شبکههای اجتماعی.
Schedule (هر روز ساعت ۹)
→ Airtable (list: filterByFormula = AND({Publish Date}=TODAY(), {Status}="Approved"))
→ Loop هر پست
→ Telegram Channel (ارسال)
→ Airtable (update: Status = "Published")۳. مدیریت موجودی و انبار (Inventory Management)
هشدار خودکار کمبود موجودی و ردیابی سفارشات.
Schedule (هر ساعت)
→ Airtable (list: filterByFormula = {Stock} < {Reorder Level})
→ IF (نتیجه وجود دارد)
→ Email (هشدار به تیم تدارکات)
→ Airtable (update: Reorder Status = "Pending")
→ Telegram (alert مدیر)۴. سیستم استخدام و منابع انسانی (HR Recruitment)
ردیابی رزومهها و فرآیند مصاحبه.
Email Trigger (رزومه جدید)
→ Airtable (create: نام، ایمیل، لینک رزومه، Status = "New")
→ Email (تأیید دریافت به متقاضی)
→ Wait (3 روز)
→ Airtable (get: بررسی status)
→ IF (status هنوز New)
→ Telegram (یادآوری به HR)۵. مدیریت رویدادها (Event Management)
ثبتنام شرکتکنندگان و ارسال اطلاعیهها.
Webhook (فرم ثبتنام)
→ Airtable (create: اطلاعات شرکتکننده)
→ Email (بلیط و جزئیات رویداد)
→ Schedule (۱ روز قبل رویداد)
→ Airtable (list: شرکتکنندگان)
→ Email (یادآوری)۶. پردازش سفارشات (Order Processing)
مدیریت خودکار سفارشات از فروشگاه آنلاین.
Webhook (سفارش جدید WooCommerce/Shopify)
→ Airtable (create: جزئیات سفارش)
→ Airtable (update: Inventory table - کاهش موجودی)
→ Email (فاکتور به مشتری)
→ Telegram (alert انبار برای آمادهسازی)۷. جمعآوری بازخورد مشتریان (Customer Feedback)
ذخیره و تحلیل خودکار نظرات مشتریان.
Airtable Form (نظرسنجی)
→ Code (تحلیل sentiment)
→ Airtable (update: Score و Sentiment)
→ IF (امتیاز < 3)
→ Telegram (alert پشتیبانی)
→ Email (پیگیری از مشتری)۸. همگامسازی با Jira/Trello (Project Management Sync)
ارتباط دوطرفه بین Airtable و ابزارهای مدیریت پروژه.
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)
ساخت و مدیریت لیست مخاطبین بازاریابی ایمیلی.
Webhook (فرم عضویت)
→ Airtable (search: آیا ایمیل تکراری است؟)
→ IF (جدید)
→ Airtable (create: subscriber)
→ Mailchimp (add to list)
→ Email (خوشآمد)
→ Else
→ Airtable (update: re-subscribed)۱۰. داشبورد گزارشگیری (Reporting Dashboard)
جمعآوری داده از منابع مختلف و ذخیره در Airtable برای گزارشگیری.
Schedule (هر شب ساعت ۲۳)
→ MySQL (آمار فروش روز)
→ Google Analytics (ترافیک)
→ Airtable (create: گزارش روزانه)
→ Telegram (ارسال خلاصه به مدیران)نکات حرفهای
نکات حرفهای
۱. Rate Limit: از Wait Node استفاده کنید
Airtable محدودیت ۵ درخواست در ثانیه دارد. بین درخواستها Wait Node (200-250ms) اضافه کنید.
Split In Batches (10) → Airtable (create) → Wait (250ms) → Loop۲. filterByFormula: سینتکس فیلتر
فیلترهای قدرتمند با فرمولهای Airtable:
// برابری
{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
[
{"field": "Priority", "direction": "desc"},
{"field": "Created", "direction": "asc"}
]۴. محدودسازی با maxRecords
برای دریافت فقط N رکورد اول: maxRecords: 10. مناسب برای "آخرین سفارشات" یا "Top 10".
۵. Pagination با pageSize و offset
Airtable حداکثر ۱۰۰ رکورد در هر صفحه برمیگرداند. پاسخ شامل offset است که باید در درخواست بعدی ارسال شود.
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در Airtable: Automations > When record matches conditions
- 2Action: Send webhook → URL n8n Webhook node
- 3Body: اطلاعات رکورد
۱۰. Batch Operations: تا ۱۰ رکورد
هر درخواست batch حداکثر ۱۰ رکورد پشتیبانی میکند. برای تعداد بیشتر:
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:
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 فایل را دانلود و ذخیره میکند:
[
{"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 استفاده کنید
