Supabase Bağlayıcısı
Müşteri etkileşim otomasyonu için veritabanı kayıtlarını, kullanıcı kimlik doğrulama verilerini, dosya depolama olaylarını ve gerçek zamanlı değişiklikleri senkronize etmek üzere Supabase projenizi bağlayın.
Genel Bakış
| Özellik | Değer |
|---|---|
| Platform | Supabase |
| Kategori | Veritabanı ve Arka Uç |
| Kurulum Karmaşıklığı | Kolay |
| Resmi Entegrasyon | Evet |
| Senkronize Edilen Veri | Kullanıcılar, Tablolar, Depolama, Olaylar |
| Kullanılabilir Yetenekler | 11 |
| API Türü | REST (PostgREST) + Gerçek Zamanlı WebSocket |
| Resmi Belgeler | supabase.com/docs |
Özellikler
- Otomatik oluşturulan REST API, PostgREST aracılığıyla herhangi bir Postgres tablosunda CRUD işlemleri, kod gerektirmez
- Kimlik doğrulama kullanıcı senkronizasyonu, Supabase Auth kullanıcılarını (e-posta, telefon, sosyal oturumlar) etkileşim platformunuza senkronize edin
- Gerçek zamanlı abonelikler, Herhangi bir tablodaki INSERT, UPDATE, DELETE olaylarını gerçek zamanlı olarak dinleyin
- Satır Düzeyi Güvenlik, Tüm API erişimi, güvenli çok kiracılı veri için Postgres RLS politikalarına uyar
- Depolama entegrasyonu, Dosya yüklemelerini izleyin ve Depolama kovaları arasında varlıkları yönetin
- Edge Functions, Özel mantık ve webhook’lar için sunucusuz Deno işlevleri çağırın
- Tam metin arama, API aracılığıyla Postgres tam metin arama özelliklerinden yararlanın
Ön Koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
- Bir Supabase projesi (app.supabase.com)
- Projenizin API URL’si ve API anahtarları (Settings → API bölümünde bulunur)
- API erişimi olan bir Tajo hesabı
API Anahtarları
Supabase iki anahtar sağlar: anon (herkese açık, RLS’ye uyar) ve service_role (RLS’yi atlar, yönetici erişimi). Sunucu tarafı entegrasyonlar için service_role, istemci tarafı için anon kullanın.
Kimlik Doğrulama
Supabase API anahtarı kimlik doğrulaması kullanır. Her istek apikey başlığını gerektirir ve kullanıcı kapsamlı erişim için isteğe bağlı olarak Authorization bearer belirteci gerektirir.
# anon anahtarı kullanma (RLS'ye uyar)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_ANON_KEY>" \ -H "Authorization: Bearer <SUPABASE_ANON_KEY>"
# service_role anahtarı kullanma (RLS'yi atlar)curl 'https://<project_ref>.supabase.co/rest/v1/customers' \ -H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \ -H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"Yapılandırma
Temel Kurulum
connectors: supabase: enabled: true project_url: "https://xyzcompany.supabase.co" api_key: "${SUPABASE_SERVICE_ROLE_KEY}"
# Veri senkronizasyon seçenekleri sync: users: true tables: - customers - orders - products storage: true realtime: true
# Supabase Auth kullanıcılarını kişilere eşle user_mapping: email: email phone: SMS user_metadata.full_name: FIRSTNAME created_at: SIGNUP_DATEAlan Eşleştirme
Supabase tablo sütunlarını etkileşim platformu özniteliklerine eşleyin:
Varsayılan Kullanıcı Eşleştirmeleri
| Parameter | Type | Description |
|---|---|---|
email required | string | Supabase Auth'tan kullanıcı e-postası (benzersiz tanımlayıcı) |
phone optional | string | SMS/WhatsApp etkileşimi için telefon numarası |
user_metadata.full_name optional | string | Auth kullanıcı meta verilerinden görünen ad |
user_metadata.avatar_url optional | string | Profil resmi URL'si |
created_at optional | timestamp | Hesap oluşturma zaman damgası |
last_sign_in_at optional | timestamp | Etkileşim puanlaması için en son oturum açma |
app_metadata.provider optional | string | Kimlik doğrulama sağlayıcısı (email, google, github vb.) |
confirmed_at optional | timestamp | E-posta onay zaman damgası |
Özel Tablo Eşleştirme
table_mapping: customers: # Sütun → Öznitelik eşleştirmesi email: email full_name: FIRSTNAME company: COMPANY plan: SUBSCRIPTION_PLAN mrr: MONTHLY_REVENUE created_at: SIGNUP_DATE
orders: # Olay olarak izle sync_as: events event_name: "order_placed" properties: total: amount status: order_status items: line_itemsAPI Uç Noktaları
Supabase REST API’si, veritabanı şemanızdan https://<ref>.supabase.co/rest/v1/ adresinde otomatik olarak oluşturulur.
| Uç Nokta | Yöntem | Açıklama |
|---|---|---|
/rest/v1/{table} | GET | Filtreleme, sıralama, sayfalama ile satırları sorgula |
/rest/v1/{table} | POST | Satır ekle (toplu ve upsert destekler) |
/rest/v1/{table} | PATCH | Filtrelerle eşleşen satırları güncelle |
/rest/v1/{table} | DELETE | Filtrelerle eşleşen satırları sil |
/rest/v1/rpc/{function} | POST | Bir Postgres fonksiyonu çağır |
/auth/v1/signup | POST | Yeni kullanıcı oluştur |
/auth/v1/token?grant_type=password | POST | Parolayla oturum aç |
/auth/v1/user | GET | Mevcut kullanıcıyı al |
/auth/v1/admin/users | GET | Tüm kullanıcıları listele (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Dosya yükle |
/storage/v1/object/list/{bucket} | POST | Kovadaki dosyaları listele |
/functions/v1/{function_name} | POST | Edge Function çağır |
Filtreleme Operatörleri
| Operatör | Açıklama | Örnek |
|---|---|---|
eq | Eşittir | ?status=eq.active |
neq | Eşit değildir | ?status=neq.deleted |
gt, gte | Büyüktür | ?amount=gt.100 |
lt, lte | Küçüktür | ?created_at=lt.2024-01-01 |
like, ilike | Desen eşleştirme | ?name=ilike.%john% |
in | Dizide | ?status=in.(active,trial) |
is | Null kontrolü | ?deleted_at=is.null |
Olaylar
Kimlik Doğrulama Olayları
| Olay | Tetikleyici | Kullanım Durumu |
|---|---|---|
user.signed_up | Yeni kullanıcı kaydı | Hoş geldiniz serisi |
user.signed_in | Kullanıcı oturumu | Aktivite takibi |
user.updated | Profil değişiklikleri | Veri senkronizasyonu |
user.deleted | Hesap silme | Temizleme iş akışları |
Veritabanı Olayları (Gerçek Zamanlı)
| Olay | Tetikleyici | Kullanım Durumu |
|---|---|---|
INSERT | Yeni satır eklendi | Yeni sipariş/müşteri bildirimleri |
UPDATE | Satır değiştirildi | Durum değişiklik iş akışları |
DELETE | Satır kaldırıldı | Kayıp tespiti |
Webhook Olayları
| Olay | Tetikleyici | Kullanım Durumu |
|---|---|---|
auth.user.created | Webhook aracılığıyla kullanıcı kaydı | Onboarding tetikleme |
storage.object.created | Dosya yüklendi | Varlık işleme |
Kod Örnekleri
Bağlayıcıyı Başlatma
import { TajoClient } from '@tajo/sdk';import { createClient } from '@supabase/supabase-js';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY,});
// Supabase projesini bağlaawait tajo.connectors.connect('supabase', { projectUrl: process.env.SUPABASE_URL, serviceRoleKey: process.env.SUPABASE_SERVICE_ROLE_KEY,});Kullanıcıları Kişilere Senkronize Etme
// Tüm Supabase Auth kullanıcılarını kişi olarak senkronize etawait tajo.connectors.sync('supabase', { type: 'full', resources: ['users'],});
// Artımlı senkronizasyon (yalnızca yeni/değişen kullanıcılar)await tajo.connectors.sync('supabase', { type: 'incremental', resources: ['users'], since: '2024-01-01T00:00:00Z',});Gerçek Zamanlı Değişiklikleri Dinleme
// Etkileşim tetikleyicileri için yeni siparişlere abone olconst 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) => { // Tajo'ya olay olarak ilet 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();Sorgulama ve Segmentleme
// Hedefli kampanyalar için müşterileri plana göre sorgulaconst { data: proUsers } = await supabase .from('customers') .select('email, full_name, plan, mrr') .eq('plan', 'pro') .gt('mrr', 100) .order('mrr', { ascending: false });
// Kampanya hedefleme için bir Brevo listesine senkronize etawait tajo.lists.addContacts(PRO_LIST_ID, proUsers);Hız Sınırları
API Hız Sınırları
Supabase hız sınırları planınıza bağlıdır. Ücretsiz katman: dakikada 500 istek. Pro: saniyede 1.000 istek. Kurumsal sınırlar için Supabase ile iletişime geçin.
| Plan | Hız Sınırı | Gerçek Zamanlı Bağlantılar |
|---|---|---|
| Ücretsiz | 500 istek/dk | 200 eşzamanlı |
| Pro | 1.000 istek/sn | 500 eşzamanlı |
| Team | 2.000 istek/sn | 1.000 eşzamanlı |
| Enterprise | Özel | Özel |
Sorun Giderme
Yaygın Sorunlar
| Sorun | Neden | Çözüm |
|---|---|---|
| 401 Unauthorized | Geçersiz veya süresi dolmuş API anahtarı | Supabase Dashboard → Settings → API bölümünden API anahtarlarını kontrol edin |
| 403 Forbidden | RLS politikası erişimi engelliyor | Yönetici işlemleri için service_role anahtarını kullanın veya RLS politikalarını kontrol edin |
| Gerçek zamanlı olay yok | Tablo için Realtime etkin değil | Database → Replication → tabloyu yayına ekleyin |
| Boş sorgu sonuçları | RLS tüm satırları filtreliyor | RLS politikalarının kimliği doğrulanmış rolün okumasına izin verdiğini doğrulayın |
| Depolama yüklemesi başarısız | Kova politikaları | Depolama kovasının herkese açık veya doğru RLS politikalarına sahip olduğunu kontrol edin |
Hata Ayıklama Modu
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueBağlantı Testi
tajo connectors test supabase# ✓ API bağlantısı başarılı# ✓ Kimlik doğrulama uç noktası erişilebilir# ✓ Tablolar okunabilir (12 tablo bulundu)# ✓ Depolama erişilebilir (3 kova)# ✓ Gerçek zamanlı bağlantı kuruldu# ✓ Edge Functions mevcut (4 işlev)En İyi Uygulamalar
- service_role anahtarını yalnızca sunucu tarafında kullanın, Asla istemci kodunda ifşa etmeyin
- Tüm tablolarda RLS’yi etkinleştirin, service_role ile bile, derinlemesine savunma için RLS ile tasarlayın
- Olay odaklı senkronizasyon için Realtime kullanın, Değişiklikleri yoklamaktan daha verimlidir
- Toplu işlemler, Yüksek hacimli işlemler için toplu eklemeler ve
infiltresini kullanın - Kullanıcı meta verilerini eşleyin, Kayıt sırasında etkileşimle ilgili alanları
user_metadataiçinde saklayın - Webhook’lar için Edge Functions kullanın, Düşük gecikmeli işleme için gelen webhook’ları Supabase Edge Functions ile işleyin
Güvenlik
- API Anahtarı Kimlik Doğrulaması, Tüm istekler geçerli API anahtarları gerektirir
- Satır Düzeyi Güvenlik (RLS), Satır başına Postgres yerel erişim kontrolü
- JWT Doğrulaması, Kimlik doğrulama belirteçleri her istekte doğrulanan imzalı JWT’lerdir
- SSL/TLS, Tüm bağlantılar aktarımda şifrelenir
- SOC 2 Type II, Supabase SOC 2 uyumludur
- Ağ Kısıtlamaları, Ücretli planlarda isteğe bağlı IP izin verme