Connecteur Airtable
Connectez vos bases Airtable à Brevo pour la synchronisation CRM, la gestion de catalogue produits et des workflows marketing automatisés pilotés par des données structurées via Tajo.
Vue d’ensemble
| Propriété | Valeur |
|---|---|
| Plateforme | Airtable |
| Catégorie | Custom |
| Complexité d’installation | Facile |
| Intégration officielle | Non |
| Données synchronisées | Enregistrements, tables, utilisateurs |
| Type d’API | API REST |
| Authentification | Personal Access Token / OAuth 2.0 |
| URL de base | https://api.airtable.com/v0/ |
Fonctionnalités
- Synchronisation table-vers-liste, Synchronisez les enregistrements de tables Airtable directement vers des listes de contacts Brevo
- Pont catalogue produits, Utilisez les tables Airtable comme catalogues produits pour les recommandations par e-mail
- Synchronisation CRM, Synchronisation bidirectionnelle entre le CRM Airtable et les contacts Brevo
- Événements de soumission de formulaire, Transférez les soumissions de formulaires Airtable sous forme d’événements Brevo
- Filtrage par vue, Synchronisez des vues Airtable spécifiques vers des listes Brevo ciblées
- Automatisation par webhook, Déclenchez des campagnes Brevo lorsque les enregistrements Airtable changent
Prérequis
Avant de commencer, assurez-vous de disposer de :
- Un compte Airtable (plan Free ou supérieur)
- Un Personal Access Token ou une application OAuth configurée
- L’accès aux bases et tables que vous souhaitez synchroniser
- Un compte Brevo avec accès API
- Un compte Tajo avec un abonnement actif
Authentification
Airtable prend en charge les Personal Access Tokens et OAuth 2.0.
Option 1 : Personal Access Token (recommandé)
- Rendez-vous sur airtable.com/create/tokens
- Cliquez sur Create new token
- Nommez-le « Tajo Integration »
- Ajoutez les scopes :
data.records:readdata.records:writedata.recordComments:readschema.bases:readwebhook:manage- Accordez l’accès à des bases spécifiques ou à toutes les bases
- Cliquez sur Create token
Option 2 : OAuth 2.0
Pour les intégrations multi-utilisateurs, utilisez le flux OAuth 2.0 :
- Enregistrez votre intégration sur airtable.com/create/oauth
- Configurez l’URI de redirection :
https://app.tajo.io/callbacks/airtable - Demandez les mêmes scopes que ci-dessus
Portée des tokens
Les Personal Access Tokens peuvent être limités à des bases spécifiques. Pour des raisons de sécurité, n’accordez l’accès qu’aux bases dont votre intégration a besoin plutôt que de sélectionner « All current and future bases ».
Connexion à Tajo
tajo connectors install airtable \ --token $AIRTABLE_TOKENConfiguration
Configuration de base
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"Mappage des champs
Mappez les champs Airtable vers les attributs de contact Brevo :
field_mapping: # Champ Airtable -> Attribut Brevo 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_DATESynchronisation par vue
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 API
Tajo s’intègre avec les endpoints suivants de l’API Web Airtable :
| Endpoint | Méthode | Objet |
|---|---|---|
/v0/{baseId}/{tableIdOrName} | GET | Lister les enregistrements d’une table |
/v0/{baseId}/{tableIdOrName} | POST | Créer des enregistrements |
/v0/{baseId}/{tableIdOrName} | PATCH | Mettre à jour des enregistrements |
/v0/{baseId}/{tableIdOrName} | DELETE | Supprimer des enregistrements |
/v0/{baseId}/{tableIdOrName}/{recordId} | GET | Récupérer un enregistrement unique |
/v0/meta/bases | GET | Lister les bases accessibles |
/v0/meta/bases/{baseId}/tables | GET | Lister les tables d’une base |
/v0/{baseId}/{tableIdOrName}/listRecordComments | GET | Lister les commentaires d’un enregistrement |
/v0/bases/{baseId}/webhooks | POST | Créer un webhook |
/v0/bases/{baseId}/webhooks | GET | Lister les webhooks |
Exemples de code
Initialiser le connecteur
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});Synchroniser une table vers Brevo
// Synchroniser une table Airtable vers une liste Brevoawait 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// }Gérer les webhooks
// Les webhooks Airtable notifient les changements ; récupérez les détails avec un curseurapp.post('/webhooks/airtable', async (req, res) => { const { base, webhook, timestamp } = req.body;
// Récupérer les enregistrements modifiés via le curseur du webhook 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');});Créer un enregistrement depuis Brevo
// Créer un enregistrement Airtable lorsqu'un contact Brevo se convertittajo.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] } }); }});Limites de débit
Airtable impose des limites de débit par base :
| Type de limite | Valeur |
|---|---|
| Limite de débit API | 5 requêtes par seconde par base |
| Enregistrements par requête | 100 enregistrements max (liste), 10 enregistrements max (création/mise à jour) |
| Charges utiles webhook | 50 charges utiles par appel listWebhookPayloads |
| Taille de requête | Charge utile max ~2 Mo |
Opérations par lots
Airtable autorise la création ou la mise à jour de jusqu’à 10 enregistrements par requête. Tajo regroupe automatiquement les opérations plus volumineuses en plusieurs requêtes tout en respectant les limites de débit.
Dépannage
Problèmes courants
| Problème | Cause | Solution |
|---|---|---|
| 401 Unauthorized | Token invalide ou expiré | Régénérez le Personal Access Token |
| 403 Forbidden | Le token n’a pas accès à la base | Ajoutez la base au scope de votre token |
| 404 Not Found | ID de base ou de table invalide | Vérifiez l’ID de la base et le nom de la table |
| 422 Invalid Request | Incompatibilité de type de champ | Vérifiez que les types de champs Airtable correspondent à vos données |
| Limite de débit dépassée | Plus de 5 req/s par base | Réduisez la fréquence de synchronisation ou espacez les synchronisations |
Mode debug
connectors: airtable: debug: true log_level: verbose log_api_calls: trueTester la connexion
tajo connectors test airtable# ✓ API authentication successful# ✓ Base access verified# ✓ Table schema readable# ✓ Record listing operational# ✓ Webhook registration availableBonnes pratiques
- Limitez les tokens à des bases spécifiques, N’accordez pas l’accès à toutes les bases sauf si nécessaire
- Utilisez les vues pour un filtrage ciblé, Synchronisez des vues spécifiques plutôt que des tables complètes pour réduire le volume de données
- Regroupez les opérations sur les enregistrements, Regroupez les créations et mises à jour par lots de 10
- Gérez la pagination, Airtable renvoie 100 enregistrements par page ; itérez avec
offset - Utilisez les webhooks pour le temps réel, Enregistrez des webhooks plutôt que d’interroger les changements
- Mappez les types de champs précisément, Faites correspondre les types de champs Airtable (sélection, nombre, date) aux types d’attributs Brevo
Sécurité
- Personal Access Tokens, Limités à des bases et opérations spécifiques
- OAuth 2.0, Flux d’autorisation sécurisé avec tokens de rafraîchissement
- HTTPS uniquement, Toutes les communications API chiffrées via TLS 1.2+
- Contrôle d’accès au niveau de la base, Tokens limités à des bases individuelles
- Stockage chiffré, Tokens chiffrés au repos dans Tajo
- Vérification HMAC des webhooks, Vérifie l’authenticité des notifications webhook