Konektor Supabase

Połącz Supabase z Brevo przez Tajo, aby synchronizować zarejestrowanych użytkowników, zdarzenia uwierzytelniania i dane profilu do Brevo, umożliwiając targetowane kampanie marketingowe oparte na zachowaniu użytkowników w aplikacji i zdarzeniach cyklu życia.

Przegląd

WłaściwośćWartość
PlatformaSupabase
KategoriaBackend jako usługa (Niestandardowa)
Poziom konfiguracjiŚredni
Integracja oficjalnaNie
Synchronizowane daneUżytkownicy, Zdarzenia, Profile, Dane w czasie rzeczywistym
Metoda uwierzytelnianiaKlucz API usługi / JWT

Funkcje

  • Synchronizacja użytkowników auth - Synchronizuj użytkowników Supabase Auth z kontaktami Brevo
  • Wyzwalacze zdarzeń - Wyzwalaj automatyzacje Brevo ze zdarzeń bazy danych Supabase
  • Synchronizacja profili - Mapuj niestandardowe tabele profili na atrybuty kontaktów Brevo
  • Dane w czasie rzeczywistym - Subskrybuj kanały Supabase Realtime dla aktualizacji natychmiastowych
  • Hooks bazodanowe - Używaj webhooków bazodanowych Supabase do obsługi zdarzeń wierszy
  • Zapytania PostgREST - Pobieraj i filtruj dane przez automatycznie generowane API REST

Wymagania wstępne

Zanim zaczniesz, upewnij się, że masz:

  1. Projekt Supabase z włączonymi usługami Auth i Database
  2. Klucz API usługi (service_role) z ustawień projektu Supabase
  3. URL projektu Supabase
  4. Konto Brevo z dostępem do API
  5. Konto Tajo z uprawnieniami konektora

Uwierzytelnianie

Klucz API usługi

Terminal window
# Available in Supabase Dashboard > Settings > API
export SUPABASE_URL=https://your-project.supabase.co
export SUPABASE_SERVICE_KEY=your-service-role-key
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
import { createClient } from '@supabase/supabase-js';
// Use service role key for server-side operations
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_SERVICE_KEY
);

Bezpieczeństwo klucza usługi

Klucz service_role omija Row Level Security. Nigdy nie ujawniaj go w kodzie po stronie klienta. Używaj tylko w zaufanych środowiskach po stronie serwera.

Konfiguracja

Podstawowa konfiguracja

connectors:
supabase:
enabled: true
url: "${SUPABASE_URL}"
service_key: "${SUPABASE_SERVICE_KEY}"
sync:
users: true
profiles: true
events: true
schedule: "0 */2 * * *" # Every 2 hours
tables:
profiles: "public.profiles"
orders: "public.orders"
lists:
all_users: 10
active_users: 11
premium_users: 12

Mapowanie pól

field_mapping:
# Auth user fields
email: email
created_at: SIGNUP_DATE
last_sign_in_at: LAST_LOGIN_DATE
email_confirmed_at: EMAIL_VERIFIED_DATE
# Profile table fields
first_name: FIRSTNAME
last_name: LASTNAME
phone: SMS
plan: SUBSCRIPTION_PLAN
company: COMPANY
avatar_url: AVATAR_URL

Endpointy API

EndpointMetodaOpis
{url}/auth/v1/admin/usersGETLista użytkowników auth
{url}/auth/v1/admin/users/{id}GETPobierz użytkownika auth
{url}/rest/v1/{table}GETZapytanie do tabeli przez PostgREST
{url}/rest/v1/{table}POSTWstaw wiersze do tabeli
{url}/rest/v1/{table}?id=eq.{id}PATCHAktualizuj wiersz
{url}/rest/v1/rpc/{function}POSTWywołaj funkcję bazy danych
{url}/realtime/v1/websocketWSKanały Realtime

Przykłady kodu

Inicjalizacja konektora

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('supabase', {
url: process.env.SUPABASE_URL,
serviceKey: process.env.SUPABASE_SERVICE_KEY
});

Synchronizuj użytkowników Auth z Brevo

import { createClient } from '@supabase/supabase-js';
const supabase = createClient(
process.env.SUPABASE_URL,
process.env.SUPABASE_SERVICE_KEY
);
// Paginate through all auth users
let page = 1;
const perPage = 1000;
while (true) {
const { data: { users }, error } = await supabase.auth.admin.listUsers({
page,
perPage
});
if (error || !users.length) break;
for (const user of users) {
await tajo.contacts.sync({
email: user.email,
attributes: {
SIGNUP_DATE: user.created_at,
LAST_LOGIN_DATE: user.last_sign_in_at,
EMAIL_VERIFIED_DATE: user.email_confirmed_at
},
listIds: [10]
});
}
if (users.length < perPage) break;
page++;
}

Subskrybuj zmiany w czasie rzeczywistym

// Listen for new user signups via Supabase Realtime
const channel = supabase
.channel('auth-changes')
.on(
'postgres_changes',
{
event: 'INSERT',
schema: 'auth',
table: 'users'
},
async (payload) => {
const newUser = payload.new;
await tajo.contacts.sync({
email: newUser.email,
attributes: {
SIGNUP_DATE: newUser.created_at
},
listIds: [10]
});
}
)
.subscribe();

Używaj webhooków bazodanowych

// Supabase Database Webhooks forward row events to your endpoint
app.post('/webhooks/supabase', async (req, res) => {
const { type, table, record, old_record } = req.body;
if (table === 'profiles' && type === 'UPDATE') {
await tajo.contacts.update(record.email, {
attributes: {
FIRSTNAME: record.first_name,
LASTNAME: record.last_name,
SUBSCRIPTION_PLAN: record.plan
}
});
}
res.status(200).send('OK');
});

Limity API

KategoriaLimitUwagi
Admin Auth API30 żądań/minListowanie i zarządzanie użytkownikami
PostgREST REST APIZależy od planuBazuje na planie Supabase
Kanały Realtime200 jednoczesnychNa projekt (plan Pro)
Rozmiar odpowiedzi1 000 wierszy domyślnieUżyj Range dla paginacji

Paginacja PostgREST

Używaj nagłówka Range lub parametrów limit/offset dla paginacji dużych zestawów wyników. Domyślnie PostgREST zwraca maksymalnie 1 000 wierszy.

Rozwiązywanie problemów

ProblemPrzyczynaRozwiązanie
401 UnauthorizedNieprawidłowy klucz usługiZweryfikuj service_role key w ustawieniach projektu
Puste wynikiRLS blokuje dostępUżywaj klucza service_role, nie anon
Brakujące profileTabela profilu nie istniejeUtwórz tabelę profili ze wyzwalaczem auth
Realtime nie łączy sięRealtime nie włączonyWłącz Realtime dla swojej tabeli w Supabase
Opóźnione zdarzeniaDuże obciążenie kolejkiSprawdź logi Supabase pod kątem opóźnień webhooków

Tryb debug

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

Najlepsze praktyki

  1. Twórz tabele profili - Przechowuj dodatkowe dane użytkownika w tabeli public.profiles połączonej z auth.users
  2. Używaj wyzwalaczy bazy danych - Automatycznie wypełniaj profile przy rejestracji użytkownika
  3. Synchronizacja przyrostowa - Używaj kolumn updated_at do synchronizowania tylko zmienionych rekordów
  4. Subskrybuj zmiany w czasie rzeczywistym - Używaj Realtime dla natychmiastowych aktualizacji zamiast odpytywania
  5. Obsługuj usunięcia - Śledź zdarzenia soft delete i aktualizuj statusy kontaktów Brevo
  6. Waliduj e-maile - Synchronizuj tylko użytkowników z potwierdzonymi adresami e-mail

Bezpieczeństwo

  • Klucz API usługi - Poświadczenia serwerowe z pełnym dostępem do bazy danych
  • JWT - Uwierzytelnianie użytkownika po stronie klienta z wbudowaną obsługą RBAC
  • Row Level Security - Wymuszaj polityki dostępu do danych na poziomie bazy danych
  • Tylko HTTPS - Wszystkie endpointy wymagają szyfrowania TLS
  • Izolacja projektu - Każdy projekt Supabase ma odizolowane zasoby i credentials

Powiązane zasoby

Subscribe to updates

developer-docs

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

auto-detect
Asystent AI

Cześć! Zapytaj mnie o dokumentację.