Supabase конектор

Свържи своя проект в Supabase, за да синхронизираш записи от базата данни, данни за потребителска автентикация, събития от file storage и промени в реално време за автоматизация на ангажирането на клиентите.

Преглед

СвойствоСтойност
ПлатформаSupabase
КатегорияDatabase & Backend
Сложност на настройкаЛесна
Официална интеграцияДа
Синхронизирани данниПотребители, таблици, Storage, събития
Налични скилове11
Тип на APIREST (PostgREST) + Realtime WebSocket
Официална документацияsupabase.com/docs

Функции

  • Автоматично генериран REST API, CRUD операции върху всяка Postgres таблица чрез PostgREST, без код
  • Синхронизация на Auth потребители, Синхронизирай Supabase Auth потребителите (имейл, телефон, social logins) към твоята ангажираща платформа
  • Абонаменти в реално време, Слушай INSERT, UPDATE, DELETE събития върху всяка таблица в реално време
  • Row Level Security, Целият API достъп спазва Postgres RLS политиките за сигурни multi-tenant данни
  • Интеграция със Storage, Проследявай качвания на файлове и управлявай активи в Storage bucket-ите
  • Edge Functions, Извиквай serverless Deno функции за персонализирана логика и уебхуци
  • Full-text search, Използвай възможностите за full-text търсене на Postgres през API

Предварителни условия

Преди да започнеш, увери се, че имаш:

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

API ключове

Supabase предоставя два ключа: anon (публичен, спазва RLS) и service_role (заобикаля RLS, администраторски достъп). Използвай service_role за server-side интеграции и anon за client-side.

Автентикация

Supabase използва автентикация с API ключ. Всяка заявка изисква хедъра apikey и опционално Authorization bearer token за достъп на ниво потребител.

Terminal window
# Using anon key (respects RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
-H "apikey: <SUPABASE_ANON_KEY>" \
-H "Authorization: Bearer <SUPABASE_ANON_KEY>"
# Using service_role key (bypasses RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
-H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \
-H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"

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

Основна настройка

connectors:
supabase:
enabled: true
project_url: "https://xyzcompany.supabase.co"
api_key: "${SUPABASE_SERVICE_ROLE_KEY}"
# Data sync options
sync:
users: true
tables:
- customers
- orders
- products
storage: true
realtime: true
# Map Supabase Auth users to contacts
user_mapping:
email: email
phone: SMS
user_metadata.full_name: FIRSTNAME
created_at: SIGNUP_DATE

Мапване на полета

Мапвай колони от Supabase таблици към атрибути на ангажиращата платформа:

Мапвания по подразбиране за потребители

Parameter Type Description
email required
string

Имейл на потребителя от Supabase Auth (уникален идентификатор)

phone optional
string

Телефонен номер за SMS/WhatsApp ангажиране

user_metadata.full_name optional
string

Display име от Auth user metadata

user_metadata.avatar_url optional
string

URL на профилното изображение

created_at optional
timestamp

Timestamp на създаване на акаунта

last_sign_in_at optional
timestamp

Последен login за engagement scoring

app_metadata.provider optional
string

Auth доставчик (email, google, github и др.)

confirmed_at optional
timestamp

Timestamp на потвърждение на имейла

Мапване на персонализирани таблици

table_mapping:
customers:
# Column → Attribute mapping
email: email
full_name: FIRSTNAME
company: COMPANY
plan: SUBSCRIPTION_PLAN
mrr: MONTHLY_REVENUE
created_at: SIGNUP_DATE
orders:
# Track as events
sync_as: events
event_name: "order_placed"
properties:
total: amount
status: order_status
items: line_items

API крайни точки

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

Крайна точкаМетодОписание
/rest/v1/{table}GETЗаявка за редове с филтриране, сортиране, пагинация
/rest/v1/{table}POSTВмъкване на редове (поддържа bulk и upsert)
/rest/v1/{table}PATCHОбновяване на редове, съвпадащи с филтрите
/rest/v1/{table}DELETEИзтриване на редове, съвпадащи с филтрите
/rest/v1/rpc/{function}POSTИзвикване на Postgres функция
/auth/v1/signupPOSTСъздаване на нов потребител
/auth/v1/token?grant_type=passwordPOSTВлизане с парола
/auth/v1/userGETПолучаване на текущия потребител
/auth/v1/admin/usersGETСписък с всички потребители (service_role)
/storage/v1/object/{bucket}/{path}POSTКачване на файл
/storage/v1/object/list/{bucket}POSTСписък с файлове в bucket
/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Регистрация на нов потребителWelcome серия
user.signed_inПотребителски loginПроследяване на активност
user.updatedПромени в профилаСинхронизация на данни
user.deletedИзтриване на акаунтCleanup работни потоци

Събития от базата данни (Realtime)

СъбитиеТригерСлучай на употреба
INSERTДобавен нов редИзвестия за нова поръчка/клиент
UPDATEМодифициран редРаботни потоци при промяна на статус
DELETEПремахнат редОткриване на churn

Уебхук събития

СъбитиеТригерСлучай на употреба
auth.user.createdПотребителска регистрация чрез уебхукТригер на onboarding
storage.object.createdКачен файлОбработка на актив

Примери с код

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

import { TajoClient } from '@tajo/sdk';
import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
});
// Connect Supabase project
await tajo.connectors.connect('supabase', {
projectUrl: process.env.SUPABASE_URL,
serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,
});

Синхронизация на потребители към контакти

// Sync all Supabase Auth users as contacts
await tajo.connectors.sync('supabase', {
type: 'full',
resources: ['users'],
});
// Incremental sync (new/changed users only)
await tajo.connectors.sync('supabase', {
type: 'incremental',
resources: ['users'],
since: '2024-01-01T00:00:00Z',
});

Слушане на промени в реално време

// Subscribe to new orders for engagement triggers
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) => {
// Forward to Tajo as an event
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();

Заявка и сегментиране

// Query customers by plan for targeted campaigns
const { data: proUsers } = await supabase
.from('customers')
.select('email, full_name, plan, mrr')
.eq('plan', 'pro')
.gt('mrr', 100)
.order('mrr', { ascending: false });
// Sync to a Brevo list for campaign targeting
await tajo.lists.addContacts(PRO_LIST_ID, proUsers);

Ограничения на заявките

API rate limits

Supabase rate limits зависят от плана. Free tier: 500 заявки/минута. Pro: 1 000 заявки/секунда. Свържи се със Supabase за Enterprise лимити.

ПланRate limitRealtime връзки
Free500 заявки/мин200 едновременни
Pro1 000 заявки/сек500 едновременни
Team2 000 заявки/сек1 000 едновременни
EnterpriseПерсонализиранПерсонализиран

Отстраняване на проблеми

Чести проблеми

ПроблемПричинаРешение
401 UnauthorizedНевалиден или изтекъл API ключПровери API ключовете в Supabase Dashboard → Settings → API
403 ForbiddenRLS политика блокира достъпаИзползвай service_role ключ за администраторски операции или провери RLS политиките
Няма realtime събитияRealtime не е активиран за таблицатаАктивирай от Database → Replication → добави таблицата към publication
Празни резултати от заявкаRLS филтрира всички редовеПровери дали RLS политиките позволяват на автентикираната роля да чете
Неуспешно качване в StorageПолитики на bucket-аПровери дали Storage bucket е публичен или има правилни RLS политики

Режим за дебъг

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

Тест на връзката

Terminal window
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 ключа само на сървъра, Никога не го излагай в client код
  2. Активирай RLS на всички таблици, Дори със service_role, проектирай с RLS за защита в дълбочина
  3. Използвай Realtime за event-driven синхронизация, По-ефективно от polling за промени
  4. Пакетирай операциите, Използвай bulk inserts и филтъра in за операции с голям обем
  5. Мапвай user metadata, Съхранявай поле, релевантни за ангажиране, в user_metadata при регистрация
  6. Използвай Edge Functions за уебхуци, Обработвай входящи уебхуци с Supabase Edge Functions за обработка с ниска латентност

Сигурност

  • Автентикация с API ключ, Всички заявки изискват валидни API ключове
  • Row Level Security (RLS), Postgres-нативен контрол на достъпа на ниво ред
  • Верификация на JWT, Auth tokens са подписани JWT-и, верифицирани при всяка заявка
  • SSL/TLS, Всички връзки са криптирани при пренос
  • SOC 2 Type II, Supabase е SOC 2 съвместим
  • Мрежови ограничения, Опционално IP allowlisting на платените планове

Свързани ресурси

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI асистент

Здравейте! Попитайте ме за документацията.