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

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

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

# Коннектор Supabase

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

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

Подключите проект Supabase для синхронизации записей базы данных, данных аутентификации пользователей, событий файлового хранилища и изменений в реальном времени для автоматизации взаимодействия с клиентами.

## Обзор

| Свойство | Значение |
| --- | --- |
| **Платформа** | Supabase |
| **Категория** | Database & Backend |
| **Сложность настройки** | Простая |
| **Официальная интеграция** | Нет |
| **Синхронизируемые данные** | Пользователи, таблицы, хранилище, события |
| **Доступных скиллов** | 11 |
| **Тип API** | REST (PostgREST) + Realtime WebSocket |
| **Официальная документация** | [supabase.com/docs](https://supabase.com/docs) |

## Возможности

- **Автогенерируемый REST API**, CRUD-операции над любой таблицей Postgres через PostgREST без написания кода
- **Синхронизация пользователей Auth**, синхронизация пользователей Supabase Auth (email, телефон, социальные логины) с платформой вовлечения
- **Подписки реального времени**, прослушивание событий INSERT, UPDATE, DELETE в любой таблице в реальном времени
- **Row Level Security**, весь API-доступ соблюдает политики RLS Postgres для безопасной мультиарендной работы с данными
- **Интеграция хранилища**, отслеживание загрузки файлов и управление ресурсами в корзинах Storage
- **Edge Functions**, вызов бессерверных Deno-функций для пользовательской логики и вебхуков
- **Полнотекстовый поиск**, использование возможностей полнотекстового поиска Postgres через API

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

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

1. Проект Supabase ([app.supabase.com](https://app.supabase.com/))
2. **API URL** и **API-ключи** проекта (в Settings → API)
3. Аккаунт Tajo с доступом к API

API Keys

Supabase предоставляет два ключа: `anon` (публичный, соблюдает RLS) и `service_role` (обходит RLS, административный доступ). Используйте `service_role` для серверных интеграций и `anon` для клиентских.

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

Supabase использует аутентификацию по API-ключу. Каждый запрос требует заголовка `apikey` и опционально Bearer-токена `Authorization` для пользовательского доступа.

```bash
# Использование anon key (соблюдает RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
  -H "apikey: <SUPABASE_ANON_KEY>" \
  -H "Authorization: Bearer <SUPABASE_ANON_KEY>"

# Использование service_role key (обходит RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
  -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \
  -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"
```

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

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

```yaml
connectors:
  supabase:
    enabled: true
    project_url: "https://xyzcompany.supabase.co"
    api_key: "${SUPABASE_SERVICE_ROLE_KEY}"

    # Параметры синхронизации данных
    sync:
      users: true
      tables:
        - customers
        - orders
        - products
      storage: true
      realtime: true

    # Сопоставление пользователей Supabase Auth с контактами
    user_mapping:
      email: email
      phone: SMS
      user_metadata.full_name: FIRSTNAME
      created_at: SIGNUP_DATE
```

### Сопоставление полей

Сопоставьте столбцы таблиц Supabase с атрибутами платформы вовлечения:

#### Сопоставления пользователей по умолчанию

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | Email пользователя из Supabase Auth (уникальный идентификатор) |
| `phone` optional | string | Номер телефона для SMS/WhatsApp-вовлечения |
| `user_metadata.full_name` optional | string | Отображаемое имя из метаданных пользователя Auth |
| `user_metadata.avatar_url` optional | string | URL изображения профиля |
| `created_at` optional | timestamp | Временная метка создания аккаунта |
| `last_sign_in_at` optional | timestamp | Последний вход для оценки вовлечённости |
| `app_metadata.provider` optional | string | Провайдер аутентификации (email, google, github и др.) |
| `confirmed_at` optional | timestamp | Временная метка подтверждения email |

#### Сопоставление пользовательских таблиц

```yaml
table_mapping:
  customers:
    # Сопоставление столбцов с атрибутами
    email: email
    full_name: FIRSTNAME
    company: COMPANY
    plan: SUBSCRIPTION_PLAN
    mrr: MONTHLY_REVENUE
    created_at: SIGNUP_DATE

  orders:
    # Трекинг как события
    sync_as: events
    event_name: "order_placed"
    properties:
      total: amount
      status: order_status
      items: line_items
```

## Эндпоинты API

REST API Supabase автогенерируется из схемы базы данных по адресу `https://<ref>.supabase.co/rest/v1/`.

| Эндпоинт | Метод | Описание |
| --- | --- | --- |
| `/rest/v1/{table}` | `GET` | Запрос строк с фильтрацией, сортировкой, пагинацией |
| `/rest/v1/{table}` | `POST` | Вставка строк (поддерживает пакетную вставку и upsert) |
| `/rest/v1/{table}` | `PATCH` | Обновление строк по фильтрам |
| `/rest/v1/{table}` | `DELETE` | Удаление строк по фильтрам |
| `/rest/v1/rpc/{function}` | `POST` | Вызов функции Postgres |
| `/auth/v1/signup` | `POST` | Создание нового пользователя |
| `/auth/v1/token?grant_type=password` | `POST` | Вход по паролю |
| `/auth/v1/user` | `GET` | Получить текущего пользователя |
| `/auth/v1/admin/users` | `GET` | Список всех пользователей (service\_role) |
| `/storage/v1/object/{bucket}/{path}` | `POST` | Загрузка файла |
| `/storage/v1/object/list/{bucket}` | `POST` | Список файлов в корзине |
| `/functions/v1/{function_name}` | `POST` | Вызов Edge Function |

### Операторы фильтрации

| Оператор | Описание | Пример |
| --- | --- | --- |
| `eq` | Равно | `?status=eq.active` |
| `neq` | Не равно | `?status=neq.deleted` |
| `gt`, `gte` | Больше | `?amount=gt.100` |
| `lt`, `lte` | Меньше | `?created_at=lt.2024-01-01` |
| `like`, `ilike` | Совпадение по шаблону | `?name=ilike.%john%` |
| `in` | В массиве | `?status=in.(active,trial)` |
| `is` | Проверка на null | `?deleted_at=is.null` |

## События

### События Auth

| Событие | Триггер | Сценарий использования |
| --- | --- | --- |
| `user.signed_up` | Регистрация нового пользователя | Приветственная цепочка |
| `user.signed_in` | Вход пользователя | Отслеживание активности |
| `user.updated` | Изменение профиля | Синхронизация данных |
| `user.deleted` | Удаление аккаунта | Очищающие рабочие процессы |

### События базы данных (Realtime)

| Событие | Триггер | Сценарий использования |
| --- | --- | --- |
| `INSERT` | Добавлена новая строка | Уведомления о новых заказах/клиентах |
| `UPDATE` | Строка изменена | Рабочие процессы при изменении статуса |
| `DELETE` | Строка удалена | Обнаружение оттока |

### События вебхуков

| Событие | Триггер | Сценарий использования |
| --- | --- | --- |
| `auth.user.created` | Регистрация через вебхук | Запуск онбординга |
| `storage.object.created` | Загружен файл | Обработка ресурсов |

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

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

```javascript
import { TajoClient } from '@tajo/sdk';
import { createClient } from '@supabase/supabase-js';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
});

// Подключение проекта Supabase
await tajo.connectors.connect('supabase', {
  projectUrl: process.env.SUPABASE_URL,
  serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,
});
```

### Синхронизация пользователей с контактами

```javascript
// Синхронизация всех пользователей Supabase Auth как контактов
await tajo.connectors.sync('supabase', {
  type: 'full',
  resources: ['users'],
});

// Инкрементальная синхронизация (только новые/изменённые пользователи)
await tajo.connectors.sync('supabase', {
  type: 'incremental',
  resources: ['users'],
  since: '2024-01-01T00:00:00Z',
});
```

### Прослушивание изменений в реальном времени

```javascript
// Подписка на новые заказы для триггеров вовлечения
const supabase = createClient(
  process.env.SUPABASE_URL,
  process.env.SUPABASE_SERVICE_ROLE_KEY
);

supabase
  .channel('orders')
  .on('postgres_changes',
    { event: 'INSERT', schema: 'public', table: 'orders' },
    async (payload) => {
      // Пересылка в Tajo как событие
      await tajo.events.track({
        email: payload.new.customer_email,
        event: 'order_placed',
        properties: {
          order_id: payload.new.id,
          total: payload.new.total,
          items: payload.new.line_items,
        },
      });
    }
  )
  .subscribe();
```

### Запрос и сегментация

```javascript
// Запрос клиентов по плану для таргетированных кампаний
const { data: proUsers } = await supabase
  .from('customers')
  .select('email, full_name, plan, mrr')
  .eq('plan', 'pro')
  .gt('mrr', 100)
  .order('mrr', { ascending: false });

// Синхронизация в лист Brevo для таргетирования кампании
await tajo.lists.addContacts(PRO_LIST_ID, proUsers);
```

## Ограничения скорости

Ограничения скорости API

Ограничения скорости Supabase зависят от плана. Бесплатный тариф: 500 запросов/минуту. Pro: 1 000 запросов/секунду. Обратитесь в Supabase для уточнения лимитов Enterprise.

| План | Ограничение скорости | Realtime-соединения |
| --- | --- | --- |
| Free | 500 запросов/мин | 200 одновременных |
| Pro | 1 000 запросов/сек | 500 одновременных |
| Team | 2 000 запросов/сек | 1 000 одновременных |
| Enterprise | Индивидуально | Индивидуально |

## Устранение неполадок

### Частые проблемы

| Проблема | Причина | Решение |
| --- | --- | --- |
| 401 Unauthorized | Недействительный или истёкший API-ключ | Проверьте API-ключи в Supabase Dashboard → Settings → API |
| 403 Forbidden | Политика RLS блокирует доступ | Используйте ключ `service_role` для административных операций или проверьте политики RLS |
| Нет realtime-событий | Realtime не включён для таблицы | Включите в Database → Replication → добавьте таблицу в публикацию |
| Пустые результаты запроса | RLS фильтрует все строки | Проверьте, что политики RLS разрешают аутентифицированной роли читать данные |
| Ошибка загрузки в Storage | Политики корзины | Проверьте, что корзина Storage публична или имеет корректные политики RLS |

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

```yaml
connectors:
  supabase:
    debug: true
    log_level: verbose
    log_queries: true
    log_realtime: true
```

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

```bash
tajo connectors test supabase
# ✓ API connection successful
# ✓ Auth endpoint accessible
# ✓ Tables readable (12 tables found)
# ✓ Storage accessible (3 buckets)
# ✓ Realtime connection established
# ✓ Edge Functions available (4 functions)
```

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

1. **Используйте service\_role key только на стороне сервера**, никогда не раскрывайте его в клиентском коде
2. **Включайте RLS для всех таблиц**, даже с service\_role проектируйте с учётом RLS для эшелонированной защиты
3. **Используйте Realtime для синхронизации по событиям**, эффективнее опроса для отслеживания изменений
4. **Пакетные операции**, используйте массовые вставки и фильтр `in` для высокопроизводительных операций
5. **Сопоставляйте метаданные пользователей**, храните поля, значимые для вовлечения, в `user_metadata` при регистрации
6. **Используйте Edge Functions для вебхуков**, обрабатывайте входящие вебхуки с помощью Supabase Edge Functions для минимальной задержки

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

- **Аутентификация по API Key**, все запросы требуют действительных API-ключей
- **Row Level Security (RLS)**, нативный для Postgres контроль доступа на уровне строки
- **JWT-верификация**, токены Auth представляют собой подписанные JWT, проверяемые при каждом запросе
- **SSL/TLS**, все соединения зашифрованы при передаче
- **SOC 2 Type II**, Supabase соответствует SOC 2
- **Ограничения сети**, опциональное IP-разрешение на платных планах

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

- [Коннектор Shopify](https://tajo.io/ru/docs/connectors/ecommerce/shopify)
- [Коннектор Stripe](https://tajo.io/ru/docs/connectors/ecommerce/stripe)
- [Коннектор Auth0](https://tajo.io/ru/docs/connectors/custom/auth0)
- [Официальная документация Supabase](https://supabase.com/docs)
- [Руководство по Supabase REST API](https://supabase.com/docs/guides/api)
- [Руководство по Supabase Auth](https://supabase.com/docs/guides/auth)
