---
title: "Коннектор Airtable"
description: "Полное руководство по интеграции Airtable для синхронизации баз, таблиц и записей с контактами и списками Brevo через Tajo."
url: https://tajo.io/ru/docs/connectors/custom/airtable/
markdown: https://tajo.io/ru/docs/connectors/custom/airtable.md
lang: ru-RU
robots: noindex
---

Подайте заявку на ранний доступ

Укажите имя и рабочий адрес электронной почты. Мы отправим ссылку для подтверждения запроса на доступ к Tajo.

# Коннектор Airtable

Статус коннектора: Запланирован Ещё не создан. Сегодня Tajo не запускает этот коннектор.

| Поле источника | Поле назначения | Пример значения |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Подключите ваши базы 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

## Предварительные требования

Прежде чем начать, убедитесь, что у вас есть:

1. Аккаунт Airtable (Free или выше)
2. Настроенный Personal Access Token или OAuth-приложение
3. Доступ к базам и таблицам, которые вы хотите синхронизировать
4. Аккаунт Brevo с доступом к API
5. Аккаунт Tajo с активной подпиской

## Аутентификация

Airtable поддерживает Personal Access Token и OAuth 2.0.

### Вариант 1: Personal Access Token (рекомендуется)

1. Перейдите на [airtable.com/create/tokens](https://airtable.com/create/tokens)
2. Нажмите **Create new token**
3. Назовите токен “Tajo Integration”
4. Добавьте scope:

```
data.records:read
data.records:write
data.recordComments:read
schema.bases:read
webhook:manage
```

5. Добавьте доступ к конкретным базам или ко всем базам
6. Нажмите **Create token**

### Вариант 2: OAuth 2.0

Для мультипользовательских интеграций используйте OAuth 2.0 flow:

1. Зарегистрируйте вашу интеграцию на [airtable.com/create/oauth](https://airtable.com/create/oauth)
2. Настройте redirect URI: `https://app.tajo.io/callbacks/airtable`
3. Запросите те же scope, что и выше

Ограничение области токена

Personal Access Token можно ограничить конкретными базами. Для безопасности предоставляйте доступ только к тем базам, которые нужны интеграции, вместо выбора “All current and future bases”.

### Подключение к Tajo

```bash
tajo connectors install airtable \
  --token $AIRTABLE_TOKEN
```

## Конфигурация

### Базовая настройка

```yaml
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:

```yaml
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

```yaml
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 | Список вебхуков |

## Примеры кода

### Инициализация коннектора

```javascript
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

```javascript
// Sync an Airtable table to a Brevo list
await 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
// }
```

### Обработка вебхуков

```javascript
// Airtable webhooks notify of changes; fetch details with cursor
app.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

```javascript
// Create an Airtable record when a Brevo contact converts
tajo.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 запросов/сек на базу | Уменьшите частоту синхронизации или распределите синхронизацию баз по времени |

### Режим отладки

```yaml
connectors:
  airtable:
    debug: true
    log_level: verbose
    log_api_calls: true
```

### Проверка подключения

```bash
tajo connectors test airtable
# ✓ API authentication successful
# ✓ Base access verified
# ✓ Table schema readable
# ✓ Record listing operational
# ✓ Webhook registration available
```

## Лучшие практики

1. **Ограничивайте токены конкретными базами**, не предоставляйте доступ ко всем базам без необходимости
2. **Используйте view для фильтрованной синхронизации**, синхронизируйте конкретные view вместо полных таблиц, чтобы уменьшить объём данных
3. **Пакетируйте операции с записями**, группируйте создания и обновления по 10 записей
4. **Обрабатывайте пагинацию**, Airtable возвращает по 100 записей на страницу; итерируйте с `offset`
5. **Используйте вебхуки для реального времени**, регистрируйте вебхуки вместо опроса для отслеживания изменений
6. **Точно сопоставляйте типы полей**, соотносите типы полей Airtable (select, number, date) с типами атрибутов Brevo

## Безопасность

- **Personal Access Token**, ограничены конкретными базами и операциями
- **OAuth 2.0**, безопасный flow авторизации с refresh-токенами
- **Только HTTPS**, все API-коммуникации зашифрованы через TLS 1.2+
- **Контроль доступа на уровне базы**, токены ограничены отдельными базами
- **Зашифрованное хранилище**, токены зашифрованы в покое в Tajo
- **HMAC-проверка вебхуков**, проверка подлинности уведомлений вебхуков

## Связанные ресурсы

- [Коннектор Notion](https://tajo.io/ru/docs/connectors/custom/notion)
- [Коннектор GitHub](https://tajo.io/ru/docs/connectors/custom/github)
- [Навык синхронизации клиентов](https://tajo.io/ru/docs/skills/data-sync/customer-sync)
- [Brevo Contacts API](https://tajo.io/ru/docs/contact-management)
