Airtable Connector
เชื่อมต่อ 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 เปลี่ยนแปลง
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:
- บัญชี Airtable (แผน Free ขึ้นไป)
- Personal Access Token หรือ OAuth app ที่กำหนดค่าแล้ว
- การเข้าถึง bases และตารางที่คุณต้องการซิงค์
- บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
- บัญชี Tajo ที่มีการสมัครสมาชิกที่ใช้งานอยู่
การยืนยันตัวตน
Airtable รองรับ Personal Access Tokens และ OAuth 2.0
ตัวเลือกที่ 1: Personal Access Token (แนะนำ)
- ไปที่ airtable.com/create/tokens
- คลิก Create new token
- ตั้งชื่อว่า “Tajo Integration”
- เพิ่ม scopes:
data.records:readdata.records:writedata.recordComments:readschema.bases:readwebhook:manage- เพิ่มการเข้าถึง bases เฉพาะหรือ bases ทั้งหมด
- คลิก Create token
ตัวเลือกที่ 2: OAuth 2.0
สำหรับการผสานรวมหลายผู้ใช้ ใช้ OAuth 2.0 flow:
- ลงทะเบียนการผสานรวมของคุณที่ airtable.com/create/oauth
- กำหนดค่า redirect URI:
https://app.tajo.io/callbacks/airtable - ขอ scopes เดียวกับด้านบน
การกำหนดขอบเขต Token
Personal Access Tokens สามารถกำหนดขอบเขตกับ bases เฉพาะได้ เพื่อความปลอดภัย ให้สิทธิ์เข้าถึงเฉพาะ bases ที่การผสานรวมของคุณต้องการแทนที่จะเลือก “All current and future bases”
เชื่อมต่อกับ Tajo
tajo connectors install airtable \ --token $AIRTABLE_TOKENการกำหนดค่า
การตั้งค่าพื้นฐาน
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:
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
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: trueAPI 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
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
// Sync an Airtable table to a Brevo listawait 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
// Airtable webhooks notify of changes; fetch details with cursorapp.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
// Create an Airtable record when a Brevo contact convertstajo.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
connectors: airtable: debug: true log_level: verbose log_api_calls: trueทดสอบการเชื่อมต่อ
tajo connectors test airtable# ✓ API authentication successful# ✓ Base access verified# ✓ Table schema readable# ✓ Record listing operational# ✓ Webhook registration availableแนวทางปฏิบัติที่ดีที่สุด
- กำหนดขอบเขต tokens กับ bases เฉพาะ - อย่าให้สิทธิ์เข้าถึง bases ทั้งหมดหากไม่จำเป็น
- ใช้ views สำหรับการซิงค์แบบกรอง - ซิงค์ views เฉพาะแทนตารางทั้งหมดเพื่อลดปริมาณข้อมูล
- การดำเนินการบันทึกแบบ Batch - จัดกลุ่มการสร้างและอัปเดตในกลุ่มละ 10
- จัดการ pagination - Airtable ส่งคืน 100 บันทึกต่อหน้า วนซ้ำด้วย
offset - ใช้ webhooks สำหรับแบบเรียลไทม์ - ลงทะเบียน webhooks แทนการ polling สำหรับการเปลี่ยนแปลง
- แมปประเภทฟิลด์อย่างแม่นยำ - จับคู่ประเภทฟิลด์ 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