Conector de Airtable
Conecta tus bases de Airtable con Brevo para sincronizar datos del CRM, gestionar catálogos de productos y automatizar flujos de marketing impulsados por datos estructurados a través de Tajo.
Resumen
| Propiedad | Valor |
|---|---|
| Plataforma | Airtable |
| Categoría | Personalizada |
| Complejidad de configuración | Fácil |
| Integración oficial | No |
| Datos sincronizados | Registros, Tablas, Usuarios |
| Tipo de API | REST API |
| Autenticación | Personal Access Token / OAuth 2.0 |
| URL base | https://api.airtable.com/v0/ |
Funcionalidades
- Sincronización tabla a lista - Sincroniza los registros de una tabla de Airtable directamente con listas de contactos de Brevo
- Puente con catálogos de productos - Usa tablas de Airtable como catálogos de productos para recomendaciones por email
- Sincronización con CRM - Sincronización bidireccional entre el CRM de Airtable y los contactos de Brevo
- Eventos de envío de formularios - Reenvía los envíos de formularios de Airtable como eventos de Brevo
- Filtrado por vista - Sincroniza vistas específicas de Airtable con listas concretas de Brevo
- Automatización con webhooks - Activa campañas de Brevo cuando cambien los registros de Airtable
Requisitos previos
Antes de empezar, asegúrate de tener:
- Una cuenta de Airtable (plan Free o superior)
- Un Personal Access Token o una app OAuth configurada
- Acceso a las bases y tablas que quieres sincronizar
- Una cuenta de Brevo con acceso a la API
- Una cuenta de Tajo con suscripción activa
Autenticación
Airtable admite Personal Access Tokens y OAuth 2.0.
Opción 1: Personal Access Token (recomendado)
- Ve a airtable.com/create/tokens
- Haz clic en Create new token
- Ponle el nombre “Tajo Integration”
- Añade los scopes:
data.records:readdata.records:writedata.recordComments:readschema.bases:readwebhook:manage- Añade acceso a bases específicas o a todas las bases
- Haz clic en Create token
Opción 2: OAuth 2.0
Para integraciones multiusuario, usa el flujo OAuth 2.0:
- Registra tu integración en airtable.com/create/oauth
- Configura la URI de redirección:
https://app.tajo.io/callbacks/airtable - Solicita los mismos scopes que arriba
Alcance del token
Los Personal Access Tokens se pueden limitar a bases específicas. Por seguridad, concede acceso solo a las bases que necesita tu integración en lugar de seleccionar “All current and future bases”.
Conectar con Tajo
tajo connectors install airtable \ --token $AIRTABLE_TOKENConfiguración
Configuración básica
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"Asignación de campos
Asocia los campos de Airtable con los atributos de contacto de 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_DATESincronización basada en vistas
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: trueEndpoints de la API
Tajo se integra con los siguientes endpoints de la Web API de Airtable:
| Endpoint | Método | Propósito |
|---|---|---|
/v0/{baseId}/{tableIdOrName} | GET | Listar registros de una tabla |
/v0/{baseId}/{tableIdOrName} | POST | Crear registros |
/v0/{baseId}/{tableIdOrName} | PATCH | Actualizar registros |
/v0/{baseId}/{tableIdOrName} | DELETE | Eliminar registros |
/v0/{baseId}/{tableIdOrName}/{recordId} | GET | Obtener un registro concreto |
/v0/meta/bases | GET | Listar las bases accesibles |
/v0/meta/bases/{baseId}/tables | GET | Listar tablas de una base |
/v0/{baseId}/{tableIdOrName}/listRecordComments | GET | Listar comentarios de registros |
/v0/bases/{baseId}/webhooks | POST | Crear un webhook |
/v0/bases/{baseId}/webhooks | GET | Listar webhooks |
Ejemplos de código
Inicializar el conector
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});Sincronizar una tabla con 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// }Gestionar 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');});Crear un registro desde 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] } }); }});Límites de velocidad
Airtable aplica límites de velocidad por base:
| Tipo de límite | Valor |
|---|---|
| Límite de velocidad de la API | 5 peticiones por segundo por base |
| Registros por petición | 100 registros máx. (list), 10 registros máx. (create/update) |
| Payloads de webhook | 50 payloads por llamada a listWebhookPayloads |
| Tamaño de la petición | Payload máx. ~2 MB |
Operaciones en lote
Airtable permite crear o actualizar hasta 10 registros por petición. Tajo agrupa automáticamente las operaciones más grandes en varias peticiones respetando los límites de velocidad.
Resolución de problemas
Problemas habituales
| Problema | Causa | Solución |
|---|---|---|
| 401 Unauthorized | Token no válido o expirado | Regenera el Personal Access Token |
| 403 Forbidden | El token no tiene acceso a la base | Añade la base al alcance del token |
| 404 Not Found | ID de base o tabla no válido | Verifica el ID de la base y el nombre de la tabla |
| 422 Invalid Request | Tipos de campo incompatibles | Comprueba que los tipos de campo de Airtable coinciden con tus datos |
| Límite de velocidad superado | Más de 5 req/s por base | Reduce la frecuencia de sincronización o espacia las sincronizaciones entre bases |
Modo depuración
connectors: airtable: debug: true log_level: verbose log_api_calls: trueProbar la conexión
tajo connectors test airtable# ✓ API authentication successful# ✓ Base access verified# ✓ Table schema readable# ✓ Record listing operational# ✓ Webhook registration availableBuenas prácticas
- Limita los tokens a bases específicas - No concedas acceso a todas las bases salvo que sea necesario
- Usa vistas para sincronizaciones filtradas - Sincroniza vistas concretas en lugar de tablas completas para reducir el volumen de datos
- Agrupa las operaciones en lotes - Agrupa creaciones y actualizaciones en lotes de 10
- Gestiona la paginación - Airtable devuelve 100 registros por página; itera con
offset - Usa webhooks para tiempo real - Registra webhooks en lugar de consultar cambios por polling
- Asigna los tipos de campo con precisión - Haz coincidir los tipos de campo de Airtable (select, number, date) con los tipos de atributo de Brevo
Seguridad
- Personal Access Tokens - Limitados a bases y operaciones específicas
- OAuth 2.0 - Flujo de autorización seguro con refresh tokens
- Solo HTTPS - Toda la comunicación con la API se cifra vía TLS 1.2+
- Control de acceso por base - Tokens limitados a bases individuales
- Almacenamiento cifrado - Tokens cifrados en reposo en Tajo
- Verificación HMAC de webhooks - Valida la autenticidad de las notificaciones de webhook