Airtable-connector
Verbind je Airtable-bases met Brevo voor CRM-synchronisatie, productcatalogusbeheer en geautomatiseerde marketingworkflows, aangestuurd door gestructureerde data via Tajo.
Overzicht
| Eigenschap | Waarde |
|---|---|
| Platform | Airtable |
| Categorie | Custom |
| Setupcomplexiteit | Eenvoudig |
| Officiële integratie | Nee |
| Gesynchroniseerde data | Records, Tabellen, Gebruikers |
| API-type | REST API |
| Authenticatie | Personal Access Token / OAuth 2.0 |
| Base URL | https://api.airtable.com/v0/ |
Functies
- Tabel-naar-lijst-sync - Synchroniseer Airtable-tabelrecords rechtstreeks naar Brevo-contactlijsten
- Productcatalogusbrug - Gebruik Airtable-tabellen als productcatalogi voor e-mailaanbevelingen
- CRM-synchronisatie - Bidirectionele sync tussen Airtable CRM en Brevo-contacten
- Formulierinzending-events - Stuur Airtable-formulierinzendingen door als Brevo-events
- Viewgebaseerde filtering - Synchroniseer specifieke Airtable-views naar gerichte Brevo-lijsten
- Webhook-automatisering - Trigger Brevo-campagnes wanneer Airtable-records wijzigen
Vereisten
Voordat je begint, zorg dat je beschikt over:
- Een Airtable-account (Free-plan of hoger)
- Een Personal Access Token of geconfigureerde OAuth-app
- Toegang tot de bases en tabellen die je wilt synchroniseren
- Een Brevo-account met API-toegang
- Een Tajo-account met een actief abonnement
Authenticatie
Airtable ondersteunt Personal Access Tokens en OAuth 2.0.
Optie 1: Personal Access Token (aanbevolen)
- Ga naar airtable.com/create/tokens
- Klik op Create new token
- Noem het “Tajo Integration”
- Voeg scopes toe:
data.records:readdata.records:writedata.recordComments:readschema.bases:readwebhook:manage- Voeg toegang toe tot specifieke bases of alle bases
- Klik op Create token
Optie 2: OAuth 2.0
Gebruik voor multi-user-integraties de OAuth 2.0-flow:
- Registreer je integratie op airtable.com/create/oauth
- Configureer de redirect URI:
https://app.tajo.io/callbacks/airtable - Vraag dezelfde scopes aan als hierboven
Token-scoping
Personal Access Tokens kunnen worden beperkt tot specifieke bases. Geef voor de veiligheid alleen toegang tot de bases die je integratie nodig heeft, en selecteer niet “All current and future bases”.
Verbinden met Tajo
tajo connectors install airtable \ --token $AIRTABLE_TOKENConfiguratie
Basisinstelling
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"Veldmapping
Map Airtable-velden naar Brevo-contactattributen:
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_DATEViewgebaseerde sync
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 integreert met de volgende Airtable Web API-endpoints:
| Endpoint | Method | Doel |
|---|---|---|
/v0/{baseId}/{tableIdOrName} | GET | Lijst records in een tabel |
/v0/{baseId}/{tableIdOrName} | POST | Records aanmaken |
/v0/{baseId}/{tableIdOrName} | PATCH | Records bijwerken |
/v0/{baseId}/{tableIdOrName} | DELETE | Records verwijderen |
/v0/{baseId}/{tableIdOrName}/{recordId} | GET | Haal één record op |
/v0/meta/bases | GET | Lijst toegankelijke bases |
/v0/meta/bases/{baseId}/tables | GET | Lijst tabellen in een base |
/v0/{baseId}/{tableIdOrName}/listRecordComments | GET | Lijst recordreacties |
/v0/bases/{baseId}/webhooks | POST | Maak een webhook aan |
/v0/bases/{baseId}/webhooks | GET | Lijst webhooks |
Codevoorbeelden
Connector initialiseren
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});Tabel synchroniseren naar 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 afhandelen
// 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');});Record aanmaken vanuit 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] } }); }});Rate limits
Airtable hanteert rate limits per base:
| Type limiet | Waarde |
|---|---|
| API rate limit | 5 requests per seconde per base |
| Records per request | Max. 100 records (list), max. 10 records (create/update) |
| Webhook-payloads | 50 payloads per listWebhookPayloads-call |
| Requestgrootte | Payload max. ~2MB |
Batch-operaties
Airtable staat toe dat je tot 10 records per request aanmaakt of bijwerkt. Tajo batcht grotere operaties automatisch in meerdere requests en respecteert daarbij de rate limits.
Probleemoplossing
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| 401 Unauthorized | Ongeldig of verlopen token | Regenereer Personal Access Token |
| 403 Forbidden | Token mist base-toegang | Voeg de base toe aan de scope van je token |
| 404 Not Found | Ongeldig base- of tabel-ID | Controleer base-ID en tabelnaam |
| 422 Invalid Request | Mismatch in veldtype | Controleer of Airtable-veldtypes overeenkomen met je data |
| Rate limit exceeded | Meer dan 5 req/s per base | Verlaag de syncfrequentie of spreid base-syncs |
Debugmodus
connectors: airtable: debug: true log_level: verbose log_api_calls: trueVerbinding testen
tajo connectors test airtable# ✓ API authentication successful# ✓ Base access verified# ✓ Table schema readable# ✓ Record listing operational# ✓ Webhook registration availableBest practices
- Scope tokens tot specifieke bases - Geef geen toegang tot alle bases tenzij nodig
- Gebruik views voor gefilterde sync - Synchroniseer specifieke views in plaats van volledige tabellen om datavolume te beperken
- Batch record-operaties - Groepeer creates en updates in batches van 10
- Handel paginering af - Airtable retourneert 100 records per pagina; itereer met
offset - Gebruik webhooks voor realtime - Registreer webhooks in plaats van te pollen op wijzigingen
- Map veldtypes nauwkeurig - Laat Airtable-veldtypes (select, number, date) overeenkomen met Brevo-attribuuttypes
Beveiliging
- Personal Access Tokens - Gescoped tot specifieke bases en operaties
- OAuth 2.0 - Veilige autorisatieflow met refresh tokens
- Alleen HTTPS - Alle API-communicatie versleuteld via TLS 1.2+
- Base-level toegangscontrole - Tokens gescoped tot individuele bases
- Encrypted storage - Tokens versleuteld opgeslagen bij Tajo
- Webhook-HMAC-verificatie - Verifieer de echtheid van webhook-notificaties