Supabase-kobling
Koble Supabase-prosjektet ditt for å synkronisere databaseposter, brukerautentiseringsdata, fillagringshendelser og sanntidsendringer for automatisering av kundeengasjement.
Oversikt
| Egenskap | Verdi |
|---|---|
| Plattform | Supabase |
| Kategori | Database og backend |
| Oppsettskompleksitet | Enkel |
| Offisiell integrasjon | Ja |
| Synkroniserte data | Brukere, tabeller, lagring, hendelser |
| Tilgjengelige ferdigheter | 11 |
| API-type | REST (PostgREST) + Realtime WebSocket |
| Offisiell dokumentasjon | supabase.com/docs |
Funksjoner
- Autogenerert REST API, CRUD-operasjoner på enhver Postgres-tabell via PostgREST, ingen kode kreves
- Synkronisering av Auth-brukere, Synkroniser Supabase Auth-brukere (e-post, telefon, sosial innlogging) til engasjementsplattformen din
- Sanntidsabonnementer, Lytt på INSERT-, UPDATE- og DELETE-hendelser på enhver tabell i sanntid
- Row Level Security, All API-tilgang respekterer Postgres RLS-policyer for sikre data med flere tenanter
- Lagringsintegrasjon, Spor filopplastinger og administrer ressurser på tvers av Storage-bøtter
- Edge Functions, Kall serverløse Deno-funksjoner for egendefinert logikk og webhooks
- Fulltekstsøk, Utnytt Postgres’ fulltekstsøkfunksjoner gjennom API-et
Forutsetninger
Før du begynner, sørg for at du har:
- Et Supabase-prosjekt (app.supabase.com)
- Prosjektets API URL og API-nøkler (finnes i Settings → API)
- En Tajo-konto med API-tilgang
API-nøkler
Supabase tilbyr to nøkler: anon (offentlig, respekterer RLS) og service_role (omgår RLS, administratortilgang). Bruk service_role for tjensersideintegrasjoner og anon for klientside.
Autentisering
Supabase bruker API-nøkkelautentisering. Hver forespørsel krever apikey-headeren og valgfritt et Authorization-bearer-token for brukeravgrenset tilgang.
# Bruk av anon-nøkkel (respekterer RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_ANON_KEY>" \ -H "Authorization: Bearer <SUPABASE_ANON_KEY>"
# Bruk av service_role-nøkkel (omgår RLS)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \ -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"Konfigurasjon
Grunnleggende oppsett
connectors: supabase: enabled: true project_url: "https://xyzcompany.supabase.co" api_key: "${SUPABASE_SERVICE_ROLE_KEY}"
# Synkroniseringsalternativer sync: users: true tables: - customers - orders - products storage: true realtime: true
# Mapp Supabase Auth-brukere til kontakter user_mapping: email: email phone: SMS user_metadata.full_name: FIRSTNAME created_at: SIGNUP_DATEFeltmapping
Mapp Supabase-tabellkolonner til engasjementsplattformattributter:
Standard brukermappinger
| Parameter | Type | Description |
|---|---|---|
email required | string | Brukerens e-post fra Supabase Auth (unik identifikator) |
phone optional | string | Telefonnummer for SMS/WhatsApp-engasjement |
user_metadata.full_name optional | string | Visningsnavn fra Auth-brukermetadata |
user_metadata.avatar_url optional | string | Profilbilde-URL |
created_at optional | timestamp | Tidsstempel for kontooppretting |
last_sign_in_at optional | timestamp | Siste innlogging for engasjementsscoring |
app_metadata.provider optional | string | Auth-leverandør (email, google, github osv.) |
confirmed_at optional | timestamp | Tidsstempel for e-postbekreftelse |
Egendefinert tabellmapping
table_mapping: customers: # Kolonne → attributt-mapping email: email full_name: FIRSTNAME company: COMPANY plan: SUBSCRIPTION_PLAN mrr: MONTHLY_REVENUE created_at: SIGNUP_DATE
orders: # Spor som hendelser sync_as: events event_name: "order_placed" properties: total: amount status: order_status items: line_itemsAPI-endepunkter
Supabases REST API genereres automatisk fra databaseskjemaet ditt på https://<ref>.supabase.co/rest/v1/.
| Endepunkt | Metode | Beskrivelse |
|---|---|---|
/rest/v1/{table} | GET | Spør rader med filtrering, sortering, paginering |
/rest/v1/{table} | POST | Sett inn rader (støtter bulk og upsert) |
/rest/v1/{table} | PATCH | Oppdater rader som matcher filtre |
/rest/v1/{table} | DELETE | Slett rader som matcher filtre |
/rest/v1/rpc/{function} | POST | Kall en Postgres-funksjon |
/auth/v1/signup | POST | Opprett en ny bruker |
/auth/v1/token?grant_type=password | POST | Logg inn med passord |
/auth/v1/user | GET | Hent gjeldende bruker |
/auth/v1/admin/users | GET | List alle brukere (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Last opp fil |
/storage/v1/object/list/{bucket} | POST | List filer i bøtte |
/functions/v1/{function_name} | POST | Kall Edge Function |
Filteroperatorer
| Operator | Beskrivelse | Eksempel |
|---|---|---|
eq | Lik | ?status=eq.active |
neq | Ikke lik | ?status=neq.deleted |
gt, gte | Større enn | ?amount=gt.100 |
lt, lte | Mindre enn | ?created_at=lt.2024-01-01 |
like, ilike | Mønstertreff | ?name=ilike.%john% |
in | I array | ?status=in.(active,trial) |
is | Null-sjekk | ?deleted_at=is.null |
Hendelser
Auth-hendelser
| Hendelse | Utløser | Bruksområde |
|---|---|---|
user.signed_up | Ny brukerregistrering | Velkomstserie |
user.signed_in | Brukerinnlogging | Aktivitetssporing |
user.updated | Profilendringer | Datasynkronisering |
user.deleted | Kontosletting | Opprydningsarbeidsflyter |
Databasehendelser (Realtime)
| Hendelse | Utløser | Bruksområde |
|---|---|---|
INSERT | Ny rad lagt til | Varsler om ny ordre/kunde |
UPDATE | Rad endret | Arbeidsflyter for statusendring |
DELETE | Rad fjernet | Churn-deteksjon |
Webhook-hendelser
| Hendelse | Utløser | Bruksområde |
|---|---|---|
auth.user.created | Brukerregistrering via webhook | Utløs onboarding |
storage.object.created | Fil opplastet | Ressursbehandling |
Kodeeksempler
Initialiser kobling
import { TajoClient } from '@tajo/sdk';import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY,});
// Koble til Supabase-prosjektawait tajo.connectors.connect('supabase', { projectUrl: process.env.SUPABASE_URL, serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,});Synkroniser brukere til kontakter
// Synkroniser alle Supabase Auth-brukere som kontakterawait tajo.connectors.sync('supabase', { type: 'full', resources: ['users'],});
// Inkrementell synkronisering (kun nye/endrede brukere)await tajo.connectors.sync('supabase', { type: 'incremental', resources: ['users'], since: '2024-01-01T00:00:00Z',});Lytt til sanntidsendringer
// Abonner på nye bestillinger for engasjementsutløsereconst 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) => { // Videresend til Tajo som en hendelse 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();Spør og segmenter
// Spør kunder etter plan for målrettede kampanjerconst { data: proUsers } = await supabase .from('customers') .select('email, full_name, plan, mrr') .eq('plan', 'pro') .gt('mrr', 100) .order('mrr', { ascending: false });
// Synkroniser til en Brevo-liste for kampanjemålrettingawait tajo.lists.addContacts(PRO_LIST_ID, proUsers);Ratebegrensninger
API-ratebegrensninger
Supabases ratebegrensninger avhenger av planen din. Free-nivå: 500 forespørsler/minutt. Pro: 1 000 forespørsler/sekund. Kontakt Supabase for Enterprise-grenser.
| Plan | Ratebegrensning | Realtime-tilkoblinger |
|---|---|---|
| Free | 500 forespørsler/min | 200 samtidige |
| Pro | 1 000 forespørsler/s | 500 samtidige |
| Team | 2 000 forespørsler/s | 1 000 samtidige |
| Enterprise | Tilpasset | Tilpasset |
Feilsøking
Vanlige problemer
| Problem | Årsak | Løsning |
|---|---|---|
| 401 Unauthorized | Ugyldig eller utløpt API-nøkkel | Sjekk API-nøkler i Supabase Dashboard → Settings → API |
| 403 Forbidden | RLS-policy blokkerer tilgang | Bruk service_role-nøkkel for administratoroperasjoner, eller sjekk RLS-policyer |
| Ingen sanntidshendelser | Realtime ikke aktivert for tabell | Aktiver i Database → Replication → legg tabell til i publisering |
| Tomme spørringsresultater | RLS filtrerer alle rader | Verifiser at RLS-policyer tillater den autentiserte rollen å lese |
| Lagringsopplasting mislykkes | Bøttepolicyer | Sjekk at Storage-bøtta er satt til offentlig eller har riktige RLS-policyer |
Feilsøkingsmodus
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueTest tilkobling
tajo connectors test supabase# ✓ API-tilkobling vellykket# ✓ Auth-endepunkt tilgjengelig# ✓ Tabeller lesbare (12 tabeller funnet)# ✓ Lagring tilgjengelig (3 bøtter)# ✓ Realtime-tilkobling etablert# ✓ Edge Functions tilgjengelig (4 funksjoner)Beste praksis
- Bruk service_role-nøkkel kun på tjenersiden, Eksponer den aldri i klientkode
- Aktiver RLS på alle tabeller, Selv med service_role, design med RLS for dybdeforsvar
- Bruk Realtime for hendelsesdrevet synkronisering, Mer effektivt enn polling for endringer
- Batch-operasjoner, Bruk bulk-innsettinger og
in-filter for operasjoner med stort volum - Mapp brukermetadata, Lagre engasjementsrelevante felt i
user_metadataved registrering - Bruk Edge Functions for webhooks, Behandle innkommende webhooks med Supabase Edge Functions for lav-latens-håndtering
Sikkerhet
- API-nøkkelautentisering, Alle forespørsler krever gyldige API-nøkler
- Row Level Security (RLS), Postgres-nativ tilgangskontroll per rad
- JWT-verifisering, Auth-tokens er signerte JWT-er verifisert på hver forespørsel
- SSL/TLS, Alle tilkoblinger er kryptert under transport
- SOC 2 Type II, Supabase er SOC 2-kompatibel
- Nettverksrestriksjoner, Valgfri IP-hviteliste på betalte planer