Коннектор Airtable
Подключите ваши базы Airtable к Brevo для синхронизации CRM, управления каталогом товаров и автоматизации маркетинга на основе структурированных данных через Tajo.
Обзор
| Свойство | Значение |
|---|---|
| Платформа | Airtable |
| Категория | Custom |
| Сложность настройки | Лёгкая |
| Официальная интеграция | Нет |
| Синхронизируемые данные | Записи, таблицы, пользователи |
| Тип API | REST API |
| Аутентификация | Personal Access Token / OAuth 2.0 |
| Базовый URL | https://api.airtable.com/v0/ |
Возможности
- Синхронизация таблиц в списки, синхронизируйте записи таблиц Airtable напрямую в списки контактов Brevo
- Мост каталога товаров, используйте таблицы Airtable как каталоги товаров для email-рекомендаций
- Синхронизация CRM, двусторонняя синхронизация между Airtable CRM и контактами Brevo
- События отправки форм, пересылайте отправки форм Airtable как события Brevo
- Фильтрация по view, синхронизируйте конкретные view Airtable в целевые списки Brevo
- Автоматизация через вебхуки, запускайте кампании Brevo при изменении записей Airtable
Предварительные требования
Прежде чем начать, убедитесь, что у вас есть:
- Аккаунт Airtable (Free или выше)
- Настроенный Personal Access Token или OAuth-приложение
- Доступ к базам и таблицам, которые вы хотите синхронизировать
- Аккаунт Brevo с доступом к API
- Аккаунт Tajo с активной подпиской
Аутентификация
Airtable поддерживает Personal Access Token и OAuth 2.0.
Вариант 1: Personal Access Token (рекомендуется)
- Перейдите на airtable.com/create/tokens
- Нажмите Create new token
- Назовите токен “Tajo Integration”
- Добавьте scope:
data.records:readdata.records:writedata.recordComments:readschema.bases:readwebhook:manage- Добавьте доступ к конкретным базам или ко всем базам
- Нажмите Create token
Вариант 2: OAuth 2.0
Для мультипользовательских интеграций используйте OAuth 2.0 flow:
- Зарегистрируйте вашу интеграцию на airtable.com/create/oauth
- Настройте redirect URI:
https://app.tajo.io/callbacks/airtable - Запросите те же scope, что и выше
Ограничение области токена
Personal Access Token можно ограничить конкретными базами. Для безопасности предоставляйте доступ только к тем базам, которые нужны интеграции, вместо выбора “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: trueЭндпоинты API
Tajo интегрируется со следующими эндпоинтами Airtable Web API:
| Эндпоинт | Метод | Назначение |
|---|---|---|
/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 | Список доступных баз |
/v0/meta/bases/{baseId}/tables | GET | Список таблиц в базе |
/v0/{baseId}/{tableIdOrName}/listRecordComments | GET | Список комментариев к записи |
/v0/bases/{baseId}/webhooks | POST | Создать вебхук |
/v0/bases/{baseId}/webhooks | GET | Список вебхуков |
Примеры кода
Инициализация коннектора
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// }Обработка вебхуков
// 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 применяет ограничения по частоте запросов на базу:
| Тип лимита | Значение |
|---|---|
| Лимит запросов API | 5 запросов в секунду на базу |
| Записей на запрос | Максимум 100 записей (list), максимум 10 записей (create/update) |
| Payloads вебхуков | 50 payload на вызов listWebhookPayloads |
| Размер запроса | Максимум ~2MB payload |
Пакетные операции
Airtable позволяет создавать или обновлять до 10 записей за запрос. Tajo автоматически разбивает крупные операции на несколько запросов с соблюдением лимитов.
Устранение неполадок
Частые проблемы
| Проблема | Причина | Решение |
|---|---|---|
| 401 Unauthorized | Недействительный или истёкший токен | Перегенерируйте Personal Access Token |
| 403 Forbidden | У токена нет доступа к базе | Добавьте базу в область токена |
| 404 Not Found | Неверный ID базы или таблицы | Проверьте ID базы и название таблицы |
| 422 Invalid Request | Несоответствие типа поля | Проверьте, что типы полей Airtable соответствуют вашим данным |
| Превышен лимит запросов | Больше 5 запросов/сек на базу | Уменьшите частоту синхронизации или распределите синхронизацию баз по времени |
Режим отладки
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Лучшие практики
- Ограничивайте токены конкретными базами, не предоставляйте доступ ко всем базам без необходимости
- Используйте view для фильтрованной синхронизации, синхронизируйте конкретные view вместо полных таблиц, чтобы уменьшить объём данных
- Пакетируйте операции с записями, группируйте создания и обновления по 10 записей
- Обрабатывайте пагинацию, Airtable возвращает по 100 записей на страницу; итерируйте с
offset - Используйте вебхуки для реального времени, регистрируйте вебхуки вместо опроса для отслеживания изменений
- Точно сопоставляйте типы полей, соотносите типы полей Airtable (select, number, date) с типами атрибутов Brevo
Безопасность
- Personal Access Token, ограничены конкретными базами и операциями
- OAuth 2.0, безопасный flow авторизации с refresh-токенами
- Только HTTPS, все API-коммуникации зашифрованы через TLS 1.2+
- Контроль доступа на уровне базы, токены ограничены отдельными базами
- Зашифрованное хранилище, токены зашифрованы в покое в Tajo
- HMAC-проверка вебхуков, проверка подлинности уведомлений вебхуков