Σύνδεσμος Supabase
Συνδέστε το project Supabase για συγχρονισμό εγγραφών βάσης δεδομένων, δεδομένων πιστοποίησης χρηστών, εκδηλώσεων αποθήκευσης αρχείων και αλλαγών σε πραγματικό χρόνο για αυτοματοποίηση αφοσίωσης πελατών.
Επισκόπηση
| Ιδιότητα | Τιμή |
|---|---|
| Πλατφόρμα | Supabase |
| Κατηγορία | Βάση Δεδομένων & Backend |
| Πολυπλοκότητα Ρύθμισης | Εύκολη |
| Επίσημη Ενσωμάτωση | Ναι |
| Δεδομένα που Συγχρονίζονται | Χρήστες, Πίνακες, Αποθήκευση, Εκδηλώσεις |
| Διαθέσιμες Δεξιότητες | 11 |
| Τύπος API | REST (PostgREST) + Realtime WebSocket |
| Επίσημη Τεκμηρίωση | supabase.com/docs |
Χαρακτηριστικά
- Αυτόματα δημιουργούμενο REST API, λειτουργίες CRUD σε οποιονδήποτε πίνακα Postgres μέσω PostgREST, χωρίς κώδικα
- Συγχρονισμός χρηστών Auth, Συγχρονισμός χρηστών Supabase Auth (email, τηλέφωνο, κοινωνικές συνδέσεις) στην πλατφόρμα αφοσίωσης
- Εγγραφές σε πραγματικό χρόνο, Ακρόαση εκδηλώσεων INSERT, UPDATE, DELETE σε οποιονδήποτε πίνακα σε πραγματικό χρόνο
- Ασφάλεια Επιπέδου Γραμμής, Όλη η πρόσβαση API σέβεται τις πολιτικές RLS Postgres για ασφαλή πολυ-ενοικιαστή δεδομένα
- Ενσωμάτωση αποθήκευσης, Παρακολούθηση μεταφορτώσεων αρχείων και διαχείριση πόρων σε buckets αποθήκευσης
- Edge Functions, Κλήση serverless συναρτήσεων Deno για προσαρμοσμένη λογική και webhooks
- Αναζήτηση πλήρους κειμένου, Αξιοποίηση δυνατοτήτων αναζήτησης πλήρους κειμένου Postgres μέσω API
Προαπαιτούμενα
Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:
- Project Supabase (app.supabase.com)
- Το URL API και τα κλειδιά API του project σας (στις Ρυθμίσεις → API)
- Λογαριασμό Tajo με πρόσβαση API
Κλειδιά API
Το Supabase παρέχει δύο κλειδιά: anon (δημόσιο, σέβεται RLS) και service_role (παρακάμπτει RLS, πρόσβαση διαχειριστή). Χρησιμοποιήστε service_role για ενσωματώσεις πλευράς server και anon για πλευράς client.
Πιστοποίηση
Το Supabase χρησιμοποιεί πιστοποίηση με κλειδί API. Κάθε αίτημα απαιτεί header apikey και προαιρετικά Bearer token Authorization για πρόσβαση με εύρος χρήστη.
# 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>"Διαμόρφωση
Βασική Ρύθμιση
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Αντιστοίχιση Πεδίων
Αντιστοίχηση στηλών πίνακα Supabase σε χαρακτηριστικά πλατφόρμας αφοσίωσης:
Προεπιλεγμένες Αντιστοιχίσεις Χρήστη
| Parameter | Type | Description |
|---|---|---|
email required | string | Email χρήστη από Supabase Auth (μοναδικό αναγνωριστικό) |
phone optional | string | Αριθμός τηλεφώνου για αφοσίωση SMS/WhatsApp |
user_metadata.full_name optional | string | Εμφανιζόμενο όνομα από μεταδεδομένα χρήστη Auth |
user_metadata.avatar_url optional | string | URL εικόνας προφίλ |
created_at optional | timestamp | Χρονική σφραγίδα δημιουργίας λογαριασμού |
last_sign_in_at optional | timestamp | Πιο πρόσφατη σύνδεση για βαθμολόγηση αφοσίωσης |
app_metadata.provider optional | string | Πάροχος Auth (email, google, github, κ.λπ.) |
confirmed_at optional | timestamp | Χρονική σφραγίδα επιβεβαίωσης email |
Αντιστοίχιση Προσαρμοσμένου Πίνακα
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_itemsEndpoints API
Το REST API Supabase δημιουργείται αυτόματα από το σχήμα βάσης δεδομένων σας στο https://<ref>.supabase.co/rest/v1/.
| Endpoint | Μέθοδος | Περιγραφή |
|---|---|---|
/rest/v1/{table} | GET | Ερώτηση γραμμών με φιλτράρισμα, ταξινόμηση, σελιδοποίηση |
/rest/v1/{table} | POST | Εισαγωγή γραμμών (υποστηρίζει μαζική και upsert) |
/rest/v1/{table} | PATCH | Ενημέρωση γραμμών που ταιριάζουν με φίλτρα |
/rest/v1/{table} | DELETE | Διαγραφή γραμμών που ταιριάζουν με φίλτρα |
/rest/v1/rpc/{function} | POST | Κλήση συνάρτησης Postgres |
/auth/v1/signup | POST | Δημιουργία νέου χρήστη |
/auth/v1/token?grant_type=password | POST | Σύνδεση με κωδικό |
/auth/v1/user | GET | Λήψη τρέχοντος χρήστη |
/auth/v1/admin/users | GET | Λίστα όλων των χρηστών (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Μεταφόρτωση αρχείου |
/storage/v1/object/list/{bucket} | POST | Λίστα αρχείων σε bucket |
/functions/v1/{function_name} | POST | Κλήση Edge Function |
Τελεστές Φιλτραρίσματος
| Τελεστής | Περιγραφή | Παράδειγμα |
|---|---|---|
eq | Ίσο | ?status=eq.active |
neq | Διάφορο | ?status=neq.deleted |
gt, gte | Μεγαλύτερο από | ?amount=gt.100 |
lt, lte | Μικρότερο από | ?created_at=lt.2024-01-01 |
like, ilike | Αντιστοίχηση μοτίβου | ?name=ilike.%john% |
in | Σε πίνακα | ?status=in.(active,trial) |
is | Έλεγχος null | ?deleted_at=is.null |
Εκδηλώσεις
Εκδηλώσεις Auth
| Εκδήλωση | Ενεργοποιητής | Περίπτωση Χρήσης |
|---|---|---|
user.signed_up | Εγγραφή νέου χρήστη | Σειρά καλωσορίσματος |
user.signed_in | Σύνδεση χρήστη | Παρακολούθηση δραστηριότητας |
user.updated | Αλλαγές προφίλ | Συγχρονισμός δεδομένων |
user.deleted | Διαγραφή λογαριασμού | Ροές εργασίας καθαρισμού |
Εκδηλώσεις Βάσης Δεδομένων (Realtime)
| Εκδήλωση | Ενεργοποιητής | Περίπτωση Χρήσης |
|---|---|---|
INSERT | Προσθήκη νέας γραμμής | Ειδοποιήσεις νέας παραγγελίας/πελάτη |
UPDATE | Τροποποίηση γραμμής | Ροές εργασίας αλλαγής κατάστασης |
DELETE | Αφαίρεση γραμμής | Ανίχνευση αποχώρησης |
Εκδηλώσεις Webhook
| Εκδήλωση | Ενεργοποιητής | Περίπτωση Χρήσης |
|---|---|---|
auth.user.created | Εγγραφή χρήστη μέσω webhook | Ενεργοποίηση onboarding |
storage.object.created | Μεταφόρτωση αρχείου | Επεξεργασία πόρων |
Παραδείγματα Κώδικα
Αρχικοποίηση Συνδέσμου
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,});Συγχρονισμός Χρηστών σε Επαφές
// 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',});Ακρόαση Αλλαγών σε Πραγματικό Χρόνο
// 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();Ερώτηση και Τμηματοποίηση
// 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);Όρια Ρυθμού
Όρια Ρυθμού API
Τα όρια ρυθμού Supabase εξαρτώνται από το πλάνο σας. Δωρεάν επίπεδο: 500 αιτήματα/λεπτό. Pro: 1.000 αιτήματα/δευτερόλεπτο. Επικοινωνήστε με το Supabase για Enterprise όρια.
| Πλάνο | Όριο Ρυθμού | Συνδέσεις Realtime |
|---|---|---|
| Free | 500 αιτ./λεπτό | 200 ταυτόχρονες |
| Pro | 1.000 αιτ./δευτ. | 500 ταυτόχρονες |
| Team | 2.000 αιτ./δευτ. | 1.000 ταυτόχρονες |
| Enterprise | Προσαρμοσμένο | Προσαρμοσμένο |
Αντιμετώπιση Προβλημάτων
Συνήθη Προβλήματα
| Πρόβλημα | Αιτία | Λύση |
|---|---|---|
| 401 Unauthorized | Μη έγκυρο ή ληγμένο κλειδί API | Ελέγξτε κλειδιά API στο Supabase Dashboard → Ρυθμίσεις → API |
| 403 Forbidden | Η πολιτική RLS αποκλείει πρόσβαση | Χρησιμοποιήστε κλειδί service_role για λειτουργίες διαχειριστή ή ελέγξτε πολιτικές RLS |
| Δεν υπάρχουν εκδηλώσεις realtime | Το Realtime δεν είναι ενεργοποιημένο για τον πίνακα | Ενεργοποιήστε στη Βάση Δεδομένων → Replication → προσθέστε πίνακα στη δημοσίευση |
| Κενά αποτελέσματα ερωτήματος | Το RLS φιλτράρει όλες τις γραμμές | Επαληθεύστε ότι οι πολιτικές RLS επιτρέπουν στον πιστοποιημένο ρόλο να διαβάζει |
| Αποτυχία μεταφόρτωσης αποθήκευσης | Πολιτικές bucket | Ελέγξτε ότι το bucket αποθήκευσης είναι δημόσιο ή έχει σωστές πολιτικές RLS |
Λειτουργία Εντοπισμού Σφαλμάτων
connectors: supabase: debug: true log_level: verbose log_queries: true log_realtime: trueΔοκιμή Σύνδεσης
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)Βέλτιστες Πρακτικές
- Χρησιμοποιήστε κλειδί service_role μόνο πλευράς server, Μην το εκθέτετε ποτέ σε κώδικα client
- Ενεργοποιήστε RLS σε όλους τους πίνακες, Ακόμα και με service_role, σχεδιάστε με RLS για άμυνα σε βάθος
- Χρησιμοποιήστε Realtime για συγχρονισμό βάσει εκδηλώσεων, Πιο αποδοτικό από polling για αλλαγές
- Λειτουργίες batch, Χρησιμοποιήστε μαζικές εισαγωγές και φίλτρο
inγια λειτουργίες υψηλού όγκου - Αντιστοιχίστε μεταδεδομένα χρήστη, Αποθηκεύστε πεδία σχετικά με αφοσίωση στο
user_metadataκατά την εγγραφή - Χρησιμοποιήστε Edge Functions για webhooks, Επεξεργαστείτε εισερχόμενα webhooks με Supabase Edge Functions για χαμηλή καθυστέρηση
Ασφάλεια
- Πιστοποίηση Κλειδιού API, Όλα τα αιτήματα απαιτούν έγκυρα κλειδιά API
- Ασφάλεια Επιπέδου Γραμμής (RLS), Εγγενής στο Postgres έλεγχος πρόσβασης ανά γραμμή
- Επαλήθευση JWT, Τα tokens πιστοποίησης είναι υπογεγραμμένα JWT που επαληθεύονται σε κάθε αίτημα
- SSL/TLS, Όλες οι συνδέσεις κρυπτογραφούνται κατά τη μεταφορά
- SOC 2 Type II, Το Supabase είναι συμβατό με SOC 2
- Περιορισμοί Δικτύου, Προαιρετικό allowlisting IP σε πληρωμένα πλάνα