Ajukan akses awal

Masukkan nama depan serta email atau nomor telepon Anda. Kami akan menghubungi Anda dengan detail akses Tajo.

Konektor Supabase

Hubungkan proyek Supabase Anda untuk menyinkronkan record database, data autentikasi pengguna, event penyimpanan file, dan perubahan real-time untuk otomatisasi customer engagement.

Ikhtisar

PropertiNilai
PlatformSupabase
KategoriDatabase & Backend
Kompleksitas setupMudah
Integrasi resmiYa
Data yang disinkronkanPengguna, tabel, storage, event
Skill yang tersedia11
Tipe APIREST (PostgREST) + Realtime WebSocket
Dokumentasi resmisupabase.com/docs

Fitur

  • REST API yang dibuat otomatis, operasi CRUD pada tabel Postgres mana pun via PostgREST, tanpa perlu kode
  • Sinkronisasi pengguna Auth, sinkronkan pengguna Supabase Auth (email, telepon, login sosial) ke platform engagement Anda
  • Langganan real-time, dengarkan event INSERT, UPDATE, DELETE pada tabel mana pun secara real-time
  • Row Level Security, seluruh akses API menghormati kebijakan RLS Postgres untuk data multi-tenant yang aman
  • Integrasi Storage, lacak unggahan file dan kelola aset di seluruh bucket Storage
  • Edge Functions, panggil fungsi serverless Deno untuk logika kustom dan webhook
  • Pencarian teks penuh, manfaatkan kemampuan full-text search Postgres melalui API

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  1. Sebuah proyek Supabase (app.supabase.com)
  2. API URL dan API key proyek Anda (tersedia di Settings → API)
  3. Akun Tajo dengan akses API

API key

Supabase menyediakan dua key: anon (publik, menghormati RLS) dan service_role (melewati RLS, akses admin). Gunakan service_role untuk integrasi sisi server dan anon untuk sisi klien.

Autentikasi

Supabase menggunakan autentikasi API key. Setiap permintaan memerlukan header apikey dan secara opsional token bearer Authorization untuk akses yang dicakup per pengguna.

Terminal window
# 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>"

Konfigurasi

Setup dasar

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_DATE

Pemetaan field

Petakan kolom tabel Supabase ke atribut platform engagement:

Pemetaan pengguna default

Parameter Type Description
email required
string

Email pengguna dari Supabase Auth (identifier unik)

phone optional
string

Nomor telepon untuk engagement SMS/WhatsApp

user_metadata.full_name optional
string

Nama tampilan dari metadata pengguna Auth

user_metadata.avatar_url optional
string

URL gambar profil

created_at optional
timestamp

Timestamp pembuatan akun

last_sign_in_at optional
timestamp

Login terakhir untuk penilaian engagement

app_metadata.provider optional
string

Penyedia Auth (email, google, github, dll.)

confirmed_at optional
timestamp

Timestamp konfirmasi email

Pemetaan tabel kustom

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_items

Endpoint API

REST API Supabase dibuat otomatis dari skema database Anda di https://<ref>.supabase.co/rest/v1/.

EndpointMetodeDeskripsi
/rest/v1/{table}GETMengueri baris dengan filter, pengurutan, dan paginasi
/rest/v1/{table}POSTMenyisipkan baris (mendukung bulk dan upsert)
/rest/v1/{table}PATCHMemperbarui baris yang cocok dengan filter
/rest/v1/{table}DELETEMenghapus baris yang cocok dengan filter
/rest/v1/rpc/{function}POSTMemanggil fungsi Postgres
/auth/v1/signupPOSTMembuat pengguna baru
/auth/v1/token?grant_type=passwordPOSTMasuk dengan password
/auth/v1/userGETMengambil pengguna saat ini
/auth/v1/admin/usersGETMenampilkan semua pengguna (service_role)
/storage/v1/object/{bucket}/{path}POSTMengunggah file
/storage/v1/object/list/{bucket}POSTMenampilkan file dalam bucket
/functions/v1/{function_name}POSTMemanggil Edge Function

Operator filter

OperatorDeskripsiContoh
eqSama dengan?status=eq.active
neqTidak sama dengan?status=neq.deleted
gt, gteLebih besar dari?amount=gt.100
lt, lteLebih kecil dari?created_at=lt.2024-01-01
like, ilikePencocokan pola?name=ilike.%john%
inAda dalam array?status=in.(active,trial)
isPemeriksaan null?deleted_at=is.null

Event

Event Auth

EventPemicuKasus penggunaan
user.signed_upRegistrasi pengguna baruRangkaian sambutan
user.signed_inLogin penggunaPelacakan aktivitas
user.updatedPerubahan profilSinkronisasi data
user.deletedPenghapusan akunAlur kerja pembersihan

Event database (Realtime)

EventPemicuKasus penggunaan
INSERTBaris baru ditambahkanNotifikasi pesanan/pelanggan baru
UPDATEBaris diubahAlur kerja perubahan status
DELETEBaris dihapusDeteksi churn

Event webhook

EventPemicuKasus penggunaan
auth.user.createdPendaftaran pengguna via webhookMemicu onboarding
storage.object.createdFile diunggahPemrosesan aset

Contoh kode

Inisialisasi konektor

import { TajoClient } from '@tajo/sdk';
import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({
apiKey: process.env.TAJO_API_KEY,
});
// Connect Supabase project
await tajo.connectors.connect('supabase', {
projectUrl: process.env.SUPABASE_URL,
serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,
});

Menyinkronkan pengguna ke kontak

// Sync all Supabase Auth users as contacts
await 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',
});

Mendengarkan perubahan real-time

// Subscribe to new orders for engagement triggers
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) => {
// 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();

Kueri dan segmentasi

// Query customers by plan for targeted campaigns
const { 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 targeting
await tajo.lists.addContacts(PRO_LIST_ID, proUsers);

Batas rate

Batas rate API

Batas rate Supabase bergantung pada paket Anda. Paket Free: 500 permintaan/menit. Pro: 1.000 permintaan/detik. Hubungi Supabase untuk batas Enterprise.

PaketBatas rateKoneksi Realtime
Free500 req/menit200 bersamaan
Pro1.000 req/detik500 bersamaan
Team2.000 req/detik1.000 bersamaan
EnterpriseKustomKustom

Pemecahan masalah

Masalah umum

MasalahPenyebabSolusi
401 UnauthorizedAPI key tidak valid atau kedaluwarsaPeriksa API key di Supabase Dashboard → Settings → API
403 ForbiddenKebijakan RLS memblokir aksesGunakan key service_role untuk operasi admin, atau periksa kebijakan RLS
Tidak ada event realtimeRealtime belum aktif untuk tabelAktifkan di Database → Replication → tambahkan tabel ke publication
Hasil kueri kosongRLS menyaring seluruh barisPastikan kebijakan RLS mengizinkan role terautentikasi untuk membaca
Unggahan Storage gagalKebijakan bucketPastikan bucket Storage disetel publik atau memiliki kebijakan RLS yang benar

Mode debug

connectors:
supabase:
debug: true
log_level: verbose
log_queries: true
log_realtime: true

Menguji koneksi

Terminal window
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)

Praktik terbaik

  1. Gunakan key service_role hanya di sisi server, jangan pernah mengeksposnya dalam kode klien
  2. Aktifkan RLS pada semua tabel, bahkan dengan service_role, rancanglah dengan RLS untuk defense in depth
  3. Gunakan Realtime untuk sinkronisasi berbasis event, lebih efisien daripada polling untuk perubahan
  4. Kelompokkan operasi, gunakan bulk insert dan filter in untuk operasi bervolume tinggi
  5. Petakan metadata pengguna, simpan field yang relevan untuk engagement di user_metadata saat pendaftaran
  6. Gunakan Edge Functions untuk webhook, proses webhook masuk dengan Supabase Edge Functions untuk penanganan berlatensi rendah

Keamanan

  • Autentikasi API key, seluruh permintaan memerlukan API key yang valid
  • Row Level Security (RLS), kontrol akses native Postgres per baris
  • Verifikasi JWT, token Auth berupa JWT bertanda tangan yang diverifikasi pada setiap permintaan
  • SSL/TLS, seluruh koneksi dienkripsi saat transit
  • SOC 2 Type II, Supabase telah memenuhi kepatuhan SOC 2
  • Network Restrictions, allowlist IP opsional pada paket berbayar

Sumber daya terkait

Ajukan akses awal

Masukkan nama depan serta email atau nomor telepon Anda. Kami akan menghubungi Anda dengan detail akses Tajo.

deteksi otomatis
Asisten AI

Halo! Tanyakan apa saja tentang dokumentasi.