Supabase Connector
Poveži svoj projekt Supabase za sinhronizacijo zapisov baze podatkov, podatkov avtentikacije uporabnikov, dogodkov shranjevanja datotek in sprememb v realnem času za avtomatizacijo angažiranja strank.
Pregled
| Lastnost | Vrednost |
|---|---|
| Platforma | Supabase |
| Kategorija | Podatkovna baza in ozadje |
| Zahtevnost nastavitve | Enostavna |
| Uradna integracija | Da |
| Sinhronizirani podatki | Uporabniki, tabele, shranjevanje, dogodki |
| Razpoložljivi Skills | 11 |
| Vrsta API | REST (PostgREST) + Realtime WebSocket |
| Uradna dokumentacija | supabase.com/docs |
Funkcionalnosti
- Samodejno ustvarjen REST API, CRUD operacije na kateri koli tabeli Postgres prek PostgREST, brez kode
- Sinhronizacija uporabnikov Auth, sinhroniziraj uporabnike Supabase Auth (e-mail, telefon, socialne prijave) s platformo za angažiranje
- Naročnine v realnem času, poslušaj dogodke INSERT, UPDATE, DELETE na kateri koli tabeli v realnem času
- Varnost na ravni vrstice, ves dostop API spoštuje politike RLS Postgres za varno večnajemniško upravljanje podatkov
- Integracija shranjevanja, sledi nalaganju datotek in upravljaj sredstva po skupinah Storage
- Edge Functions, pokliči brezstrežniške funkcije Deno za logiko po meri in webhooks
- Iskanje po celotnem besedilu, izkoristi zmogljivosti iskanja po celotnem besedilu Postgres prek API
Predpogoji
Preden začneš, se prepričaj, da imaš:
- Projekt Supabase (app.supabase.com)
- API URL in API ključe projekta (najdeš jih v Settings → API)
- Tajo račun z dostopom do API
API ključi
Supabase ponuja dva ključa: anon (javen, spoštuje RLS) in service_role (zaobide RLS, administratorski dostop). Uporabi service_role za integracije na strani strežnika in anon za odjemalčevo stran.
Avtentikacija
Supabase uporablja avtentikacijo z API ključem. Vsak zahtevek zahteva glavo apikey in po izbiri žeton prinosnika Authorization za dostop z obsegom uporabnika.
# 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>"Konfiguracija
Osnovna nastavitev
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_DATEPreslikava polj
Preslikaj stolpce tabel Supabase v atribute platforme za angažiranje:
Privzete preslikave uporabnikov
| Parameter | Type | Description |
|---|---|---|
email required | string | E-mail uporabnika iz Supabase Auth (enolični identifikator) |
phone optional | string | Telefonska številka za SMS/WhatsApp angažiranje |
user_metadata.full_name optional | string | Prikazno ime iz metapodatkov uporabnika Auth |
user_metadata.avatar_url optional | string | URL profilne slike |
created_at optional | timestamp | Časovni žig ustvaritve računa |
last_sign_in_at optional | timestamp | Zadnja prijava za ocenjevanje angažiranosti |
app_metadata.provider optional | string | Ponudnik avtentikacije (email, google, github itd.) |
confirmed_at optional | timestamp | Časovni žig potrditve e-maila |
Preslikava tabel po meri
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_itemsKončne točke API
REST API Supabase se samodejno ustvari iz sheme baze podatkov na https://<ref>.supabase.co/rest/v1/.
| Končna točka | Metoda | Opis |
|---|---|---|
/rest/v1/{table} | GET | Poizvedba po vrsticah s filtriranjem, urejanjem, paginacijo |
/rest/v1/{table} | POST | Vstavljanje vrstic (podpira množično in upsert) |
/rest/v1/{table} | PATCH | Posodabljanje vrstic, ki ustrezajo filtrom |
/rest/v1/{table} | DELETE | Brisanje vrstic, ki ustrezajo filtrom |
/rest/v1/rpc/{function} | POST | Klic funkcije Postgres |
/auth/v1/signup | POST | Ustvarjanje novega uporabnika |
/auth/v1/token?grant_type=password | POST | Prijava z geslom |
/auth/v1/user | GET | Pridobi trenutnega uporabnika |
/auth/v1/admin/users | GET | Seznam vseh uporabnikov (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Nalaganje datoteke |
/storage/v1/object/list/{bucket} | POST | Seznam datotek v skupini |
/functions/v1/{function_name} | POST | Klic Edge Function |
Operatorji filtriranja
| Operator | Opis | Primer |
|---|---|---|
eq | Enako | ?status=eq.active |
neq | Ni enako | ?status=neq.deleted |
gt, gte | Večje kot | ?amount=gt.100 |
lt, lte | Manjše kot | ?created_at=lt.2024-01-01 |
like, ilike | Vzorčno ujemanje | ?name=ilike.%john% |
in | V polju | ?status=in.(active,trial) |
is | Preverjanje null | ?deleted_at=is.null |
Dogodki
Dogodki Auth
| Dogodek | Sprožilec | Primer uporabe |
|---|---|---|
user.signed_up | Registracija novega uporabnika | Pozdravna serija |
user.signed_in | Prijava uporabnika | Sledenje dejavnosti |
user.updated | Spremembe profila | Sinhronizacija podatkov |
user.deleted | Brisanje računa | Čiščenje delovnih tokov |
Dogodki baze podatkov (Realtime)
| Dogodek | Sprožilec | Primer uporabe |
|---|---|---|
INSERT | Dodana nova vrstica | Obvestila o novih naročilih/strankah |
UPDATE | Spremenjena vrstica | Delovni tokovi spremembe statusa |
DELETE | Odstranjena vrstica | Zaznavanje odliva |
Dogodki webhooks
| Dogodek | Sprožilec | Primer uporabe |
|---|---|---|
auth.user.created | Registracija prek webhookov | Sprožitev uvajanja |
storage.object.created | Naložena datoteka | Obdelava sredstev |
Primeri kode
Inicializacija konektorja
import { TajoClient } from '@tajo/sdk';import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY,});
// Connect Supabase projectawait tajo.connectors.connect('supabase', { projectUrl: process.env.SUPABASE_URL, serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,});Sinhronizacija uporabnikov v stike
// Sync all Supabase Auth users as contactsawait 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',});Poslušanje sprememb v realnem času
// Subscribe to new orders for engagement triggersconst 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();Poizvedba in segmentacija
// Query customers by plan for targeted campaignsconst { 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 targetingawait tajo.lists.addContacts(PRO_LIST_ID, proUsers);Omejitve hitrosti
Omejitve hitrosti API
Omejitve hitrosti Supabase so odvisne od plana. Brezplačni plan: 500 zahtevkov/minuto. Pro: 1.000 zahtevkov/sekundo. Za Enterprise omejitve kontaktiraj Supabase.
| Plan | Omejitev hitrosti | Vzporedne povezave Realtime |
|---|---|---|
| Free | 500 zahtevkov/min | 200 vzporedno |
| Pro | 1.000 zahtevkov/s | 500 vzporedno |
| Team | 2.000 zahtevkov/s | 1.000 vzporedno |
| Enterprise | Po meri | Po meri |
Odpravljanje težav
Pogoste težave
| Težava | Vzrok | Rešitev |
|---|---|---|
| 401 Unauthorized | Neveljaven ali potekel API ključ | Preveri API ključe v nadzorni plošči Supabase → Settings → API |
| 403 Forbidden | Politika RLS blokira dostop | Uporabi ključ service_role za administratorske operacije ali preveri politike RLS |
| Brez dogodkov Realtime | Realtime ni omogočen za tabelo | Omogoči v Database → Replication → dodaj tabelo v publikacijo |
| Prazni rezultati poizvedbe | RLS filtrira vse vrstice | Preveri, ali politike RLS dovoljujejo branje avtenticirani vlogi |
| Nalaganje v Storage neuspešno | Politike skupin | Preveri, ali je skupino Storage nastavljeno na javno ali ima pravilne politike RLS |
Način odpravljanja napak
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: truePreizkus povezave
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)Najboljše prakse
- Ključ service_role uporablaj samo na strani strežnika, nikoli ga ne izpostavljaj v kodi odjemalca
- Omogoči RLS na vseh tabelah, tudi s service_role oblikuj z mislijo na RLS za globinsko obrambo
- Za sinhronizacijo na osnovi dogodkov uporabi Realtime, učinkovitejše od anketiranja za spremembe
- Paketne operacije, za operacije z velikim obsegom uporabi množična vstavljanja in filter
in - Preslikaj metapodatke uporabnika, med registracijo shrani polja, relevantna za angažiranje, v
user_metadata - Webhooks obdeluj z Edge Functions, za obdelavo dohodnih webhooks z nizko zakasnitvijo uporabi Supabase Edge Functions
Varnost
- Avtentikacija z API ključem, vsi zahtevki zahtevajo veljavne API ključe
- Varnost na ravni vrstice (RLS), nadzor dostopa izvoren za Postgres po vrstici
- Preverjanje JWT, žetoni Auth so podpisani JWT-ji, preverjeni pri vsakem zahtevku
- SSL/TLS, vse povezave šifrirane med prenosom
- SOC 2 Type II, Supabase je certificiran po SOC 2
- Omejitve omrežja, neobvezno dodajanje IP na seznam dovoljenih na plačljivih planih