Supabase-koppling
Anslut ditt Supabase-projekt för att synka databasposter, data för användarautentisering, fillagringshändelser och realtidsändringar för automation av kundengagemang.
Översikt
| Egenskap | Värde |
|---|---|
| Plattform | Supabase |
| Kategori | Databas & Backend |
| Installationskomplexitet | Enkel |
| Officiell integration | Ja |
| Data som synkas | Användare, tabeller, lagring, händelser |
| Tillgängliga skills | 11 |
| API-typ | REST (PostgREST) + Realtime WebSocket |
| Officiella dokument | supabase.com/docs |
Funktioner
- Autogenererat REST API, CRUD-operationer på vilken Postgres-tabell som helst via PostgREST, ingen kod krävs
- Synk av Auth-användare, Synka Supabase Auth-användare (e-post, telefon, sociala inloggningar) till din engagemangsplattform
- Realtidsprenumerationer, Lyssna på INSERT, UPDATE, DELETE-händelser på vilken tabell som helst i realtid
- Row Level Security, All API-åtkomst respekterar Postgres RLS-policyer för säker data med flera tenants
- Lagringsintegration, Spåra filuppladdningar och hantera tillgångar över Storage-buckets
- Edge Functions, Anropa serverlösa Deno-funktioner för anpassad logik och webhooks
- Fulltextsökning, Utnyttja Postgres fulltextsökningsfunktioner via API:et
Förutsättningar
Innan du börjar, se till att du har:
- Ett Supabase-projekt (app.supabase.com)
- Ditt projekts API-URL och API-nycklar (finns i Settings → API)
- Ett Tajo-konto med API-åtkomst
API-nycklar
Supabase tillhandahåller två nycklar: anon (publik, respekterar RLS) och service_role (kringgår RLS, adminåtkomst). Använd service_role för serversideintegrationer och anon för klientsida.
Autentisering
Supabase använder API-nyckelautentisering. Varje förfrågan kräver apikey-headern och valfritt en Authorization-bearer-token för användarscoped åtkomst.
# 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
Grundinställning
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_DATEFältmappning
Mappa Supabase-tabellkolumner till engagemangsplattformsattribut:
Standardmappningar för användare
| Parameter | Type | Description |
|---|---|---|
email required | string | Användarens e-post från Supabase Auth (unik identifierare) |
phone optional | string | Telefonnummer för SMS/WhatsApp-engagemang |
user_metadata.full_name optional | string | Visningsnamn från Auth-användarens metadata |
user_metadata.avatar_url optional | string | URL till profilbild |
created_at optional | timestamp | Tidsstämpel för kontoskapande |
last_sign_in_at optional | timestamp | Senaste inloggning för engagemangspoäng |
app_metadata.provider optional | string | Auth-leverantör (email, google, github, etc.) |
confirmed_at optional | timestamp | Tidsstämpel för e-postbekräftelse |
Mappning av anpassade tabeller
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 genereras automatiskt från ditt databasschema på https://<ref>.supabase.co/rest/v1/.
| Endpoint | Metod | Beskrivning |
|---|---|---|
/rest/v1/{table} | GET | Fråga rader med filtrering, sortering, sidindelning |
/rest/v1/{table} | POST | Infoga rader (stöder bulk och upsert) |
/rest/v1/{table} | PATCH | Uppdatera rader som matchar filter |
/rest/v1/{table} | DELETE | Radera rader som matchar filter |
/rest/v1/rpc/{function} | POST | Anropa en Postgres-funktion |
/auth/v1/signup | POST | Skapa en ny användare |
/auth/v1/token?grant_type=password | POST | Logga in med lösenord |
/auth/v1/user | GET | Hämta aktuell användare |
/auth/v1/admin/users | GET | Lista alla användare (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Ladda upp fil |
/storage/v1/object/list/{bucket} | POST | Lista filer i bucket |
/functions/v1/{function_name} | POST | Anropa Edge Function |
Filtreringsoperatorer
| Operator | Beskrivning | Exempel |
|---|---|---|
eq | Lika med | ?status=eq.active |
neq | Inte lika med | ?status=neq.deleted |
gt, gte | Större än | ?amount=gt.100 |
lt, lte | Mindre än | ?created_at=lt.2024-01-01 |
like, ilike | Mönstermatchning | ?name=ilike.%john% |
in | I array | ?status=in.(active,trial) |
is | Null-kontroll | ?deleted_at=is.null |
Händelser
Auth-händelser
| Händelse | Utlösare | Användningsfall |
|---|---|---|
user.signed_up | Ny användarregistrering | Välkomstserie |
user.signed_in | Användarinloggning | Aktivitetsspårning |
user.updated | Profiländringar | Datasynk |
user.deleted | Kontoradering | Rensningsarbetsflöden |
Databashändelser (Realtime)
| Händelse | Utlösare | Användningsfall |
|---|---|---|
INSERT | Ny rad tillagd | Notifieringar för ny beställning/kund |
UPDATE | Rad ändrad | Arbetsflöden för statusändring |
DELETE | Rad borttagen | Churnupptäckt |
Webhook-händelser
| Händelse | Utlösare | Användningsfall |
|---|---|---|
auth.user.created | Användarregistrering via webhook | Utlös onboarding |
storage.object.created | Fil uppladdad | Tillgångsbearbetning |
Kodexempel
Initiera kopplingen
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,});Synka användare till 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',});Lyssna på realtidsändringar
// 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();Fråga och segmentera
// 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);Hastighetsbegränsningar
API-hastighetsbegränsningar
Supabases hastighetsbegränsningar beror på din plan. Free tier: 500 förfrågningar/minut. Pro: 1 000 förfrågningar/sekund. Kontakta Supabase för Enterprise-gränser.
| Plan | Hastighetsbegränsning | Realtidsanslutningar |
|---|---|---|
| Free | 500 förfrågningar/min | 200 samtidiga |
| Pro | 1 000 förfrågningar/sek | 500 samtidiga |
| Team | 2 000 förfrågningar/sek | 1 000 samtidiga |
| Enterprise | Anpassad | Anpassad |
Felsökning
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
| 401 Unauthorized | Ogiltig eller utgången API-nyckel | Kontrollera API-nycklar i Supabase Dashboard → Settings → API |
| 403 Forbidden | RLS-policy blockerar åtkomst | Använd service_role-nyckel för adminoperationer, eller kontrollera RLS-policyer |
| Inga realtidshändelser | Realtime ej aktiverat för tabell | Aktivera i Database → Replication → lägg till tabell i publikation |
| Tomma frågeresultat | RLS filtrerar bort alla rader | Verifiera att RLS-policyer tillåter den autentiserade rollen att läsa |
| Lagringsuppladdning misslyckas | Bucket-policyer | Kontrollera att Storage-bucket är satt till publik eller har korrekta RLS-policyer |
Felsökningsläge
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueTesta anslutning
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)Bästa praxis
- Använd service_role-nyckel endast på serversidan, Exponera den aldrig i klientkod
- Aktivera RLS på alla tabeller, Även med service_role, designa med RLS för djupförsvar
- Använd Realtime för händelsedriven synk, Mer effektivt än polling efter ändringar
- Batcha operationer, Använd bulk-insättningar och
in-filtret för operationer med stor volym - Mappa användarmetadata, Lagra engagemangsrelevanta fält i
user_metadatavid registrering - Använd Edge Functions för webhooks, Behandla inkommande webhooks med Supabase Edge Functions för låg latens
Säkerhet
- API-nyckelautentisering, Alla förfrågningar kräver giltiga API-nycklar
- Row Level Security (RLS), Postgres-nativ åtkomstkontroll per rad
- JWT-verifiering, Auth-tokens är signerade JWT:er som verifieras vid varje förfrågan
- SSL/TLS, Alla anslutningar krypterade i transit
- SOC 2 Type II, Supabase är SOC 2-kompatibel
- Nätverksbegränsningar, Valfri IP-allowlisting på betalplaner