---
title: "Airtable Connector"
description: "คู่มือการผสานรวม Airtable ฉบับสมบูรณ์สำหรับการซิงค์ bases ตาราง และบันทึกกับผู้ติดต่อและรายการ Brevo ผ่าน Tajo"
url: https://tajo.io/th/docs/connectors/custom/airtable/
markdown: https://tajo.io/th/docs/connectors/custom/airtable.md
lang: th-TH
robots: noindex
---

ขอสิทธิ์ใช้งานล่วงหน้า

กรอกชื่อและที่อยู่อีเมลที่ทำงานของคุณ เราจะส่งลิงก์เพื่อยืนยันคำขอเข้าใช้งาน Tajo ทางอีเมล

# Airtable Connector

สถานะตัวเชื่อม: วางแผนไว้ ยังไม่ได้สร้าง ปัจจุบัน Tajo ยังไม่ได้ใช้งานตัวเชื่อมนี้

| ฟิลด์ต้นทาง | ฟิลด์ปลายทาง | ค่าตัวอย่าง |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

เชื่อมต่อ Airtable bases กับ Brevo สำหรับการซิงค์ CRM การจัดการแคตาล็อกสินค้า และเวิร์กโฟลว์การตลาดอัตโนมัติที่ขับเคลื่อนด้วยข้อมูลที่มีโครงสร้างผ่าน Tajo

## ภาพรวม

| คุณสมบัติ | ค่า |
| --- | --- |
| **แพลตฟอร์ม** | Airtable |
| **หมวดหมู่** | แบบกำหนดเอง |
| **ความซับซ้อนในการตั้งค่า** | ง่าย |
| **การผสานรวมอย่างเป็นทางการ** | ไม่ |
| **ข้อมูลที่ซิงค์** | บันทึก ตาราง ผู้ใช้ |
| **ประเภท API** | REST API |
| **การยืนยันตัวตน** | Personal Access Token / OAuth 2.0 |
| **Base URL** | `https://api.airtable.com/v0/` |

## ฟีเจอร์

- **การซิงค์ตารางกับรายการ** - ซิงค์บันทึกตาราง Airtable โดยตรงกับรายการผู้ติดต่อ Brevo
- **สะพาน product catalog** - ใช้ตาราง Airtable เป็น product catalog สำหรับการแนะนำอีเมล
- **การซิงค์ CRM** - การซิงค์แบบสองทิศทางระหว่าง Airtable CRM และผู้ติดต่อ Brevo
- **เหตุการณ์การส่งฟอร์ม** - ส่งต่อการส่งฟอร์ม Airtable เป็นเหตุการณ์ Brevo
- **การกรองตาม View** - ซิงค์ views Airtable เฉพาะกับรายการ Brevo ที่กำหนดเป้าหมาย
- **ระบบอัตโนมัติ Webhook** - ทริกเกอร์แคมเปญ Brevo เมื่อบันทึก Airtable เปลี่ยนแปลง

## ข้อกำหนดเบื้องต้น

ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:

1. บัญชี Airtable (แผน Free ขึ้นไป)
2. Personal Access Token หรือ OAuth app ที่กำหนดค่าแล้ว
3. การเข้าถึง bases และตารางที่คุณต้องการซิงค์
4. บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
5. บัญชี Tajo ที่มีการสมัครสมาชิกที่ใช้งานอยู่

## การยืนยันตัวตน

Airtable รองรับ Personal Access Tokens และ OAuth 2.0

### ตัวเลือกที่ 1: Personal Access Token (แนะนำ)

1. ไปที่ [airtable.com/create/tokens](https://airtable.com/create/tokens)
2. คลิก **Create new token**
3. ตั้งชื่อว่า “Tajo Integration”
4. เพิ่ม scopes:

```
data.records:read
data.records:write
data.recordComments:read
schema.bases:read
webhook:manage
```

5. เพิ่มการเข้าถึง bases เฉพาะหรือ bases ทั้งหมด
6. คลิก **Create token**

### ตัวเลือกที่ 2: OAuth 2.0

สำหรับการผสานรวมหลายผู้ใช้ ใช้ OAuth 2.0 flow:

1. ลงทะเบียนการผสานรวมของคุณที่ [airtable.com/create/oauth](https://airtable.com/create/oauth)
2. กำหนดค่า redirect URI: `https://app.tajo.io/callbacks/airtable`
3. ขอ scopes เดียวกับด้านบน

การกำหนดขอบเขต Token

Personal Access Tokens สามารถกำหนดขอบเขตกับ bases เฉพาะได้ เพื่อความปลอดภัย ให้สิทธิ์เข้าถึงเฉพาะ bases ที่การผสานรวมของคุณต้องการแทนที่จะเลือก “All current and future bases”

### เชื่อมต่อกับ Tajo

```bash
tajo connectors install airtable \
  --token $AIRTABLE_TOKEN
```

## การกำหนดค่า

### การตั้งค่าพื้นฐาน

```yaml
connectors:
  airtable:
    enabled: true

    sync:
      records: true
      comments: false

    tables:
      - base_id: "appXXXXXXXXXXXXXX"
        table_name: "Customers"
        view: "Active Customers"
        sync_to_list: 28
      - base_id: "appXXXXXXXXXXXXXX"
        table_name: "Products"
        sync_as: "catalog"
```

### การแมปฟิลด์

แมปฟิลด์ Airtable กับแอตทริบิวต์ผู้ติดต่อ Brevo:

```yaml
field_mapping:
  # Airtable field -> Brevo attribute
  Name: FIRSTNAME
  Email: email
  Phone: SMS
  Company: COMPANY
  Status: LEAD_STATUS
  Revenue: TOTAL_REVENUE
  "Last Contact": LAST_CONTACT_DATE
  Tags: TAGS
  Notes: NOTES
  "Created Time": SIGNUP_DATE
```

### การซิงค์ตาม View

```yaml
views:
  - base_id: "appXXXXXXXXXXXXXX"
    table_name: "Customers"
    view: "High Value"
    sync_to_list: 29
    filter_by_view: true

  - base_id: "appXXXXXXXXXXXXXX"
    table_name: "Customers"
    view: "Churned"
    sync_to_list: 30
    filter_by_view: true
```

## API Endpoints

Tajo ผสานรวมกับ Airtable Web API endpoints ต่อไปนี้:

| Endpoint | เมธอด | จุดประสงค์ |
| --- | --- | --- |
| `/v0/{baseId}/{tableIdOrName}` | GET | แสดงรายการบันทึกในตาราง |
| `/v0/{baseId}/{tableIdOrName}` | POST | สร้างบันทึก |
| `/v0/{baseId}/{tableIdOrName}` | PATCH | อัปเดตบันทึก |
| `/v0/{baseId}/{tableIdOrName}` | DELETE | ลบบันทึก |
| `/v0/{baseId}/{tableIdOrName}/{recordId}` | GET | ดึงบันทึกเดี่ยว |
| `/v0/meta/bases` | GET | แสดงรายการ bases ที่เข้าถึงได้ |
| `/v0/meta/bases/{baseId}/tables` | GET | แสดงรายการตารางใน base |
| `/v0/{baseId}/{tableIdOrName}/listRecordComments` | GET | แสดงรายการความคิดเห็นบันทึก |
| `/v0/bases/{baseId}/webhooks` | POST | สร้าง webhook |
| `/v0/bases/{baseId}/webhooks` | GET | แสดงรายการ webhooks |

## ตัวอย่างโค้ด

### เริ่มต้น Connector

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

await tajo.connectors.connect('airtable', {
  token: process.env.AIRTABLE_TOKEN
});
```

### ซิงค์ตารางกับ Brevo

```javascript
// Sync an Airtable table to a Brevo list
await tajo.connectors.sync('airtable', {
  type: 'full',
  resources: ['records'],
  baseId: 'appXXXXXXXXXXXXXX',
  tableName: 'Customers',
  view: 'Active Customers',
  targetList: 28
});

const status = await tajo.connectors.status('airtable');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-03-15T15:00:00Z',
//   recordsSynced: 2340,
//   tablesMonitored: 2,
//   basesConnected: 1
// }
```

### จัดการ Webhooks

```javascript
// Airtable webhooks notify of changes; fetch details with cursor
app.post('/webhooks/airtable', async (req, res) => {
  const { base, webhook, timestamp } = req.body;

  // Fetch changed records using webhook cursor
  const changes = await tajo.connectors.getWebhookPayloads('airtable', {
    baseId: base.id,
    webhookId: webhook.id,
    cursor: timestamp
  });

  for (const change of changes) {
    await tajo.connectors.handleEvent('airtable', {
      type: change.actionType,
      payload: change
    });
  }

  res.status(200).send('OK');
});
```

### สร้างบันทึกจาก Brevo

```javascript
// Create an Airtable record when a Brevo contact converts
tajo.events.on('contact.attribute_updated', async (event) => {
  if (event.attribute === 'LIFECYCLE_STAGE' && event.value === 'customer') {
    await tajo.connectors.create('airtable', {
      baseId: 'appXXXXXXXXXXXXXX',
      tableName: 'Customers',
      fields: {
        Name: event.contact.name,
        Email: event.contact.email,
        Status: 'Customer',
        'Converted Date': new Date().toISOString().split('T')[0]
      }
    });
  }
});
```

## ขีดจำกัดอัตรา

Airtable ใช้ขีดจำกัดอัตราต่อ base:

| ประเภทขีดจำกัด | ค่า |
| --- | --- |
| **ขีดจำกัดอัตรา API** | 5 คำขอต่อวินาทีต่อ base |
| **บันทึกต่อคำขอ** | สูงสุด 100 บันทึก (list) สูงสุด 10 บันทึก (create/update) |
| **Webhook payloads** | 50 payloads ต่อการเรียก `listWebhookPayloads` |
| **ขนาดคำขอ** | Payload สูงสุด ~2MB |

การดำเนินการแบบ Batch

Airtable อนุญาตให้สร้างหรืออัปเดตได้สูงสุด 10 บันทึกต่อคำขอ Tajo จัดกลุ่มการดำเนินการขนาดใหญ่โดยอัตโนมัติเป็นคำขอหลายรายการโดยเคารพขีดจำกัดอัตรา

## การแก้ไขปัญหา

### ปัญหาทั่วไป

| ปัญหา | สาเหตุ | วิธีแก้ |
| --- | --- | --- |
| 401 Unauthorized | Token ไม่ถูกต้องหรือหมดอายุ | สร้าง Personal Access Token ใหม่ |
| 403 Forbidden | Token ขาดการเข้าถึง base | เพิ่ม base ใน scope ของ token ของคุณ |
| 404 Not Found | รหัส base หรือตารางไม่ถูกต้อง | ตรวจสอบรหัส base และชื่อตาราง |
| 422 Invalid Request | ประเภทฟิลด์ไม่ตรงกัน | ตรวจสอบว่าประเภทฟิลด์ Airtable ตรงกับข้อมูลของคุณ |
| เกินขีดจำกัดอัตรา | มากกว่า 5 req/s ต่อ base | ลดความถี่ในการซิงค์หรือสลับการซิงค์ base |

### โหมด Debug

```yaml
connectors:
  airtable:
    debug: true
    log_level: verbose
    log_api_calls: true
```

### ทดสอบการเชื่อมต่อ

```bash
tajo connectors test airtable
# ✓ API authentication successful
# ✓ Base access verified
# ✓ Table schema readable
# ✓ Record listing operational
# ✓ Webhook registration available
```

## แนวทางปฏิบัติที่ดีที่สุด

1. **กำหนดขอบเขต tokens กับ bases เฉพาะ** - อย่าให้สิทธิ์เข้าถึง bases ทั้งหมดหากไม่จำเป็น
2. **ใช้ views สำหรับการซิงค์แบบกรอง** - ซิงค์ views เฉพาะแทนตารางทั้งหมดเพื่อลดปริมาณข้อมูล
3. **การดำเนินการบันทึกแบบ Batch** - จัดกลุ่มการสร้างและอัปเดตในกลุ่มละ 10
4. **จัดการ pagination** - Airtable ส่งคืน 100 บันทึกต่อหน้า วนซ้ำด้วย `offset`
5. **ใช้ webhooks สำหรับแบบเรียลไทม์** - ลงทะเบียน webhooks แทนการ polling สำหรับการเปลี่ยนแปลง
6. **แมปประเภทฟิลด์อย่างแม่นยำ** - จับคู่ประเภทฟิลด์ Airtable (select, number, date) กับประเภทแอตทริบิวต์ Brevo

## ความปลอดภัย

- **Personal Access Tokens** - กำหนดขอบเขตกับ bases และการดำเนินการเฉพาะ
- **OAuth 2.0** - โฟลว์การอนุญาตที่ปลอดภัยพร้อม refresh tokens
- **HTTPS เท่านั้น** - การสื่อสาร API ทั้งหมดเข้ารหัสผ่าน TLS 1.2+
- **การควบคุมการเข้าถึงระดับ Base** - Tokens กำหนดขอบเขตกับ bases แต่ละรายการ
- **การจัดเก็บที่เข้ารหัส** - Tokens เข้ารหัสที่เก็บใน Tajo
- **การตรวจสอบ Webhook HMAC** - ตรวจสอบความถูกต้องของการแจ้งเตือน webhook

## แหล่งข้อมูลที่เกี่ยวข้อง

- [Notion Connector](https://tajo.io/th/docs/connectors/custom/notion)
- [GitHub Connector](https://tajo.io/th/docs/connectors/custom/github)
- [Customer Sync Skill](https://tajo.io/th/docs/skills/data-sync/customer-sync)
- [Brevo Contacts API](https://tajo.io/th/docs/contact-management)
