Konektor Supabase
Propojte svůj projekt Supabase pro synchronizaci databázových záznamů, dat ověřování uživatelů, událostí úložiště souborů a změn v reálném čase pro automatizaci zapojení zákazníků.
Přehled
| Vlastnost | Hodnota |
|---|---|
| Platforma | Supabase |
| Kategorie | Databáze a backend |
| Složitost nastavení | Snadná |
| Oficiální integrace | Ano |
| Synchronizovaná data | Uživatelé, Tabulky, Úložiště, Události |
| Dostupné dovednosti | 11 |
| Typ API | REST (PostgREST) + WebSocket v reálném čase |
| Oficiální dokumentace | supabase.com/docs |
Funkce
- Automaticky generované REST API – CRUD operace na libovolné tabulce Postgres přes PostgREST, bez kódu
- Synchronizace uživatelů Auth – Synchronizujte uživatele Supabase Auth (e-mail, telefon, sociální přihlášení) do vaší platformy zapojení
- Odběry v reálném čase – Naslouchejte událostem INSERT, UPDATE, DELETE na libovolné tabulce v reálném čase
- Row Level Security – Veškerý přístup API respektuje politiky Postgres RLS pro bezpečná multi-tenantní data
- Integrace úložiště – Sledujte nahrávání souborů a spravujte prostředky napříč buckety Storage
- Edge Functions – Vyvolávejte serverless Deno funkce pro vlastní logiku a webhooky
- Fulltextové vyhledávání – Využívejte možnosti fulltextového vyhledávání Postgres přes API
Předpoklady
Než začnete, ujistěte se, že máte:
- Projekt Supabase (app.supabase.com)
- API URL a API klíče projektu (nalezené v Settings → API)
- Účet Tajo s přístupem k API
API klíče
Supabase poskytuje dva klíče: anon (veřejný, respektuje RLS) a service_role (obchází RLS, administrátorský přístup). Používejte service_role pro integrace na straně serveru a anon pro stranu klienta.
Ověření
Supabase používá ověřování API klíčem. Každý požadavek vyžaduje hlavičku apikey a volitelně bearer token Authorization pro přístup v rozsahu uživatele.
# Použití anonymního klíče (respektuje RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_ANON_KEY>" \ -H "Authorization: Bearer <SUPABASE_ANON_KEY>"
# Použití klíče service_role (obchází RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \ -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"Konfigurace
Základní nastavení
connectors: supabase: enabled: true project_url: "https://xyzcompany.supabase.co" api_key: "${SUPABASE_SERVICE_ROLE_KEY}"
# Možnosti synchronizace dat sync: users: true tables: - customers - orders - products storage: true realtime: true
# Mapování uživatelů Auth Supabase na kontakty user_mapping: email: email phone: SMS user_metadata.full_name: FIRSTNAME created_at: SIGNUP_DATEMapování polí
Mapujte sloupce tabulky Supabase na atributy platformy zapojení:
Výchozí mapování uživatelů
| Parameter | Type | Description |
|---|---|---|
email required | string | E-mail uživatele z Supabase Auth (jedinečný identifikátor) |
phone optional | string | Telefonní číslo pro zapojení přes SMS/WhatsApp |
user_metadata.full_name optional | string | Zobrazované jméno z metadat uživatele Auth |
user_metadata.avatar_url optional | string | URL profilového obrázku |
created_at optional | timestamp | Časové razítko vytvoření účtu |
last_sign_in_at optional | timestamp | Poslední přihlášení pro skórování zapojení |
app_metadata.provider optional | string | Poskytovatel Auth (email, google, github atd.) |
confirmed_at optional | timestamp | Časové razítko potvrzení e-mailu |
Mapování vlastní tabulky
table_mapping: customers: # Mapování sloupec → atribut email: email full_name: FIRSTNAME company: COMPANY plan: SUBSCRIPTION_PLAN mrr: MONTHLY_REVENUE created_at: SIGNUP_DATE
orders: # Sledovat jako události sync_as: events event_name: "order_placed" properties: total: amount status: order_status items: line_itemsKoncové body API
REST API Supabase je automaticky generováno ze schématu databáze na adrese https://<ref>.supabase.co/rest/v1/.
| Koncový bod | Metoda | Popis |
|---|---|---|
/rest/v1/{table} | GET | Dotaz na řádky s filtrováním, řazením, stránkováním |
/rest/v1/{table} | POST | Vložení řádků (podporuje hromadné vkládání a upsert) |
/rest/v1/{table} | PATCH | Aktualizace řádků odpovídajících filtrům |
/rest/v1/{table} | DELETE | Smazání řádků odpovídajících filtrům |
/rest/v1/rpc/{function} | POST | Volání funkce Postgres |
/auth/v1/signup | POST | Vytvoření nového uživatele |
/auth/v1/token?grant_type=password | POST | Přihlášení heslem |
/auth/v1/user | GET | Získání aktuálního uživatele |
/auth/v1/admin/users | GET | Výpis všech uživatelů (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Nahrání souboru |
/storage/v1/object/list/{bucket} | POST | Výpis souborů v bucketu |
/functions/v1/{function_name} | POST | Vyvolání Edge Function |
Operátory filtrování
| Operátor | Popis | Příklad |
|---|---|---|
eq | Rovná se | ?status=eq.active |
neq | Nerovná se | ?status=neq.deleted |
gt, gte | Větší než | ?amount=gt.100 |
lt, lte | Menší než | ?created_at=lt.2024-01-01 |
like, ilike | Vzorová shoda | ?name=ilike.%john% |
in | V poli | ?status=in.(active,trial) |
is | Kontrola null | ?deleted_at=is.null |
Události
Události Auth
| Událost | Spouštěč | Případ použití |
|---|---|---|
user.signed_up | Registrace nového uživatele | Uvítací série |
user.signed_in | Přihlášení uživatele | Sledování aktivity |
user.updated | Změny profilu | Synchronizace dat |
user.deleted | Smazání účtu | Pracovní toky úklidu |
Události databáze (Realtime)
| Událost | Spouštěč | Případ použití |
|---|---|---|
INSERT | Přidán nový řádek | Notifikace o nové objednávce/zákazníkovi |
UPDATE | Řádek upraven | Pracovní toky změny stavu |
DELETE | Řádek odstraněn | Detekce odchodu |
Webhookové události
| Událost | Spouštěč | Případ použití |
|---|---|---|
auth.user.created | Registrace uživatele přes webhook | Spuštění onboardingu |
storage.object.created | Nahraný soubor | Zpracování prostředků |
Příklady kódu
Inicializace konektoru
import { TajoClient } from '@tajo/sdk';import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY,});
// Připojení projektu Supabaseawait tajo.connectors.connect('supabase', { projectUrl: process.env.SUPABASE_URL, serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,});Synchronizace uživatelů do kontaktů
// Synchronizace všech uživatelů Supabase Auth jako kontaktůawait tajo.connectors.sync('supabase', { type: 'full', resources: ['users'],});
// Přírůstková synchronizace (pouze noví/změnění uživatelé)await tajo.connectors.sync('supabase', { type: 'incremental', resources: ['users'], since: '2024-01-01T00:00:00Z',});Naslouchání změnám v reálném čase
// Přihlášení k odběru nových objednávek pro spouštěče zapojení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) => { // Přepošlete do Tajo jako událost 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();Dotaz a segmentace
// Dotaz na zákazníky podle plánu pro cílené kampaněconst { data: proUsers } = await supabase .from('customers') .select('email, full_name, plan, mrr') .eq('plan', 'pro') .gt('mrr', 100) .order('mrr', { ascending: false });
// Synchronizace do seznamu Brevo pro cílení kampaníawait tajo.lists.addContacts(PRO_LIST_ID, proUsers);Omezení rychlosti
Limity rychlosti API
Limity rychlosti Supabase závisí na vašem plánu. Plán Free: 500 požadavků/minutu. Pro: 1 000 požadavků/sekundu. Kontaktujte Supabase pro limity Enterprise.
| Plán | Limit rychlosti | Připojení Realtime |
|---|---|---|
| Free | 500 požadavků/min | 200 souběžných |
| Pro | 1 000 požadavků/s | 500 souběžných |
| Team | 2 000 požadavků/s | 1 000 souběžných |
| Enterprise | Vlastní | Vlastní |
Řešení problémů
Časté problémy
| Problém | Příčina | Řešení |
|---|---|---|
| 401 Unauthorized | Neplatný nebo vypršelý API klíč | Zkontrolujte API klíče v Supabase Dashboard → Settings → API |
| 403 Forbidden | RLS politika blokuje přístup | Používejte klíč service_role pro admin operace nebo zkontrolujte RLS politiky |
| Žádné Realtime události | Realtime není povoleno pro tabulku | Povolte v Database → Replication → přidejte tabulku do publikace |
| Prázdné výsledky dotazu | RLS filtruje všechny řádky | Ověřte, zda RLS politiky umožňují ověřené roli čtení |
| Nahrávání do Storage selhává | Politiky bucketu | Zkontrolujte, zda je bucket Storage nastaven jako veřejný nebo má správné RLS politiky |
Režim ladění
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueTest připojení
tajo connectors test supabase# ✓ Připojení API úspěšné# ✓ Koncový bod Auth přístupný# ✓ Tabulky čitelné (nalezeno 12 tabulek)# ✓ Storage přístupný (3 buckety)# ✓ Připojení Realtime navázáno# ✓ Edge Functions dostupné (4 funkce)Osvědčené postupy
- Používejte klíč service_role pouze na straně serveru – Nikdy ho nezveřejňujte v klientském kódu
- Povolte RLS na všech tabulkách – I s service_role navrhujte s ohledem na RLS pro hloubkovou ochranu
- Používejte Realtime pro synchronizaci řízenou událostmi – Efektivnější než polling pro sledování změn
- Dávkové operace – Používejte hromadné vkládání a filtr
inpro operace s vysokým objemem - Mapujte metadata uživatelů – Ukládejte pole relevantní pro zapojení v
user_metadatapři registraci - Používejte Edge Functions pro webhooky – Zpracovávejte příchozí webhooky pomocí Supabase Edge Functions pro zpracování s nízkou latencí
Zabezpečení
- Ověřování API klíčem – Všechny požadavky vyžadují platné API klíče
- Row Level Security (RLS) – Řízení přístupu nativní v Postgres na úrovni řádků
- Ověřování JWT – Auth tokeny jsou podepsané JWT ověřované u každého požadavku
- SSL/TLS – Všechna spojení šifrovaná při přenosu
- SOC 2 Type II – Supabase splňuje SOC 2
- Síťová omezení – Volitelný whitelisting IP na placených plánech