Supabase Connector
Forbind dit Supabase-projekt for at synkronisere databaseposter, autentifikationsdata, fillagringshændelser og realtidsændringer til automatisering af kundeengagement.
Oversigt
| Egenskab | Værdi |
|---|---|
| Platform | Supabase |
| Kategori | Database og backend |
| Opsætningskompleksitet | Let |
| Officiel integration | Ja |
| Synkroniserede data | Brugere, tabeller, lagring, hændelser |
| Tilgængelige skills | 11 |
| API-type | REST (PostgREST) + Realtime WebSocket |
| Officiel dokumentation | supabase.com/docs |
Funktioner
- Auto-genereret REST API, CRUD-operationer på enhver Postgres-tabel via PostgREST, uden kode
- Auth-brugersynkronisering, Synkronisér Supabase Auth-brugere (e-mail, telefon, sociale logins) til din engagementplatform
- Realtidsabonnementer, Lyt til INSERT-, UPDATE-, DELETE-hændelser på enhver tabel i realtid
- Row Level Security, Al API-adgang respekterer Postgres RLS-politikker for sikre multi-tenant-data
- Lagrings-integration, Spor filuploads og administrér assets på tværs af Storage-buckets
- Edge Functions, Aktivér serverløse Deno-funktioner til brugerdefineret logik og webhooks
- Fuldtekstsøgning, Udnyt Postgres’ fuldtekstsøgningsfunktioner via API’et
Forudsætninger
Før du begynder, skal du sikre dig, at du har:
- Et Supabase-projekt (app.supabase.com)
- Dit projekts API-URL og API-nøgler (findes under Settings → API)
- En Tajo-konto med API-adgang
API-nøgler
Supabase leverer to nøgler: anon (offentlig, respekterer RLS) og service_role (omgår RLS, administratoradgang). Brug service_role til serverside-integrationer og anon til klientside.
Autentifikation
Supabase bruger API-nøgle-autentifikation. Hver forespørgsel kræver headeren apikey og valgfrit en Authorization-bearer-token til brugerscoped adgang.
# 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>"Konfiguration
Grundlæggende opsætning
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_DATEFeltmapping
Knyt Supabase-tabelkolonner til engagementplatformens attributter:
Standardmappings for brugere
| Parameter | Type | Description |
|---|---|---|
email required | string | Bruger-e-mail fra Supabase Auth (unik identifikator) |
phone optional | string | Telefonnummer til SMS-/WhatsApp-engagement |
user_metadata.full_name optional | string | Visningsnavn fra Auth-brugermetadata |
user_metadata.avatar_url optional | string | URL til profilbillede |
created_at optional | timestamp | Tidsstempel for kontooprettelse |
last_sign_in_at optional | timestamp | Seneste login til engagementscoring |
app_metadata.provider optional | string | Autentifikationsudbyder (email, google, github m.fl.) |
confirmed_at optional | timestamp | Tidsstempel for e-mailbekræftelse |
Brugerdefineret tabelmapping
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_itemsAPI-endpoints
Supabase REST API genereres automatisk fra dit databaseskema på https://<ref>.supabase.co/rest/v1/.
| Endpoint | Metode | Beskrivelse |
|---|---|---|
/rest/v1/{table} | GET | Forespørg rækker med filtrering, sortering, paginering |
/rest/v1/{table} | POST | Indsæt rækker (understøtter bulk og upsert) |
/rest/v1/{table} | PATCH | Opdatér rækker, der matcher filtre |
/rest/v1/{table} | DELETE | Slet rækker, der matcher filtre |
/rest/v1/rpc/{function} | POST | Kald en Postgres-funktion |
/auth/v1/signup | POST | Opret en ny bruger |
/auth/v1/token?grant_type=password | POST | Log ind med adgangskode |
/auth/v1/user | GET | Hent aktuel bruger |
/auth/v1/admin/users | GET | Vis alle brugere (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Upload fil |
/storage/v1/object/list/{bucket} | POST | Vis filer i bucket |
/functions/v1/{function_name} | POST | Aktivér Edge Function |
Filtreringsoperatorer
| Operator | Beskrivelse | Eksempel |
|---|---|---|
eq | Lig med | ?status=eq.active |
neq | Ikke lig med | ?status=neq.deleted |
gt, gte | Større end | ?amount=gt.100 |
lt, lte | Mindre end | ?created_at=lt.2024-01-01 |
like, ilike | Mønstermatch | ?name=ilike.%john% |
in | I array | ?status=in.(active,trial) |
is | Null-tjek | ?deleted_at=is.null |
Hændelser
Auth-hændelser
| Hændelse | Trigger | Anvendelse |
|---|---|---|
user.signed_up | Ny brugerregistrering | Velkomstserie |
user.signed_in | Brugerlogin | Aktivitetstracking |
user.updated | Profilændringer | Datasynkronisering |
user.deleted | Kontosletning | Oprydnings-workflows |
Databasehændelser (Realtime)
| Hændelse | Trigger | Anvendelse |
|---|---|---|
INSERT | Ny række tilføjet | Notifikationer om ny ordre/kunde |
UPDATE | Række ændret | Workflows ved statusændring |
DELETE | Række fjernet | Churn-detektion |
Webhook-hændelser
| Hændelse | Trigger | Anvendelse |
|---|---|---|
auth.user.created | Brugertilmelding via webhook | Udløs onboarding |
storage.object.created | Fil uploadet | Asset-behandling |
Kodeeksempler
Initialisér konnektor
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,});Synkronisér brugere til kontakter
// 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',});Lyt til realtidsændringer
// 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();Forespørg og segmentér
// 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);Ratebegrænsninger
API-ratebegrænsninger
Supabase-ratebegrænsninger afhænger af din plan. Free tier: 500 forespørgsler/minut. Pro: 1.000 forespørgsler/sekund. Kontakt Supabase for Enterprise-grænser.
| Plan | Ratebegrænsning | Realtime-forbindelser |
|---|---|---|
| Free | 500 req/min | 200 samtidige |
| Pro | 1.000 req/sek | 500 samtidige |
| Team | 2.000 req/sek | 1.000 samtidige |
| Enterprise | Tilpasset | Tilpasset |
Fejlfinding
Almindelige problemer
| Problem | Årsag | Løsning |
|---|---|---|
| 401 Unauthorized | Ugyldig eller udløbet API-nøgle | Tjek API-nøgler i Supabase Dashboard → Settings → API |
| 403 Forbidden | RLS-politik blokerer adgang | Brug service_role-nøgle til administratoroperationer, eller tjek RLS-politikker |
| Ingen realtime-hændelser | Realtime ikke aktiveret for tabel | Aktivér i Database → Replication → tilføj tabel til publication |
| Tomme query-resultater | RLS filtrerer alle rækker | Verificér, at RLS-politikker tillader den autentificerede rolle at læse |
| Storage-upload fejler | Bucket-politikker | Tjek, at Storage-bucket er sat til offentlig eller har korrekte RLS-politikker |
Fejlfindingstilstand
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueTest forbindelse
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)Best practices
- Brug kun service_role-nøglen på serverside, Eksponér den aldrig i klientkode
- Aktivér RLS på alle tabeller, Selv med service_role bør du designe med RLS for defense in depth
- Brug Realtime til hændelsesdrevet synkronisering, Mere effektivt end polling for ændringer
- Batch-operationer, Brug bulk-inserts og
in-filteret til operationer med højt volumen - Map brugermetadata, Gem engagementrelevante felter i
user_metadataunder tilmelding - Brug Edge Functions til webhooks, Behandl indgående webhooks med Supabase Edge Functions for lav latens
Sikkerhed
- API-nøgle-autentifikation, Alle forespørgsler kræver gyldige API-nøgler
- Row Level Security (RLS), Postgres-native adgangskontrol per række
- JWT-verifikation, Auth-tokens er signerede JWT’er, der verificeres ved hver forespørgsel
- SSL/TLS, Alle forbindelser krypteres under overførsel
- SOC 2 Type II, Supabase er SOC 2-compliant
- Netværksrestriktioner, Valgfri IP-allowlisting på betalte planer