Connecteur Supabase

Connectez votre projet Supabase pour synchroniser les enregistrements de base de données, les données d’authentification utilisateur, les événements de stockage de fichiers et les changements en temps réel pour l’automatisation de l’engagement client.

Vue d’ensemble

PropriétéValeur
PlateformeSupabase
CatégorieBase de données et backend
Complexité d’installationFacile
Intégration officielleOui
Données synchroniséesUtilisateurs, tables, stockage, événements
Skills disponibles11
Type d’APIREST (PostgREST) + WebSocket Realtime
Docs officiellesupabase.com/docs

Fonctionnalités

  • API REST auto-générée, Opérations CRUD sur toute table Postgres via PostgREST, sans code
  • Synchronisation des utilisateurs Auth, Synchronisez les utilisateurs Supabase Auth (e-mail, téléphone, logins sociaux) vers votre plateforme d’engagement
  • Abonnements temps réel, Écoutez les événements INSERT, UPDATE, DELETE sur toute table en temps réel
  • Row Level Security, Tout accès à l’API respecte les politiques RLS Postgres pour des données multi-tenants sécurisées
  • Intégration de stockage, Suivez les uploads de fichiers et gérez les assets entre les buckets Storage
  • Edge Functions, Invoquez des fonctions Deno serverless pour la logique personnalisée et les webhooks
  • Recherche plein texte, Exploitez les capacités de recherche plein texte Postgres via l’API

Prérequis

Avant de commencer, assurez-vous de disposer de :

  1. Un projet Supabase (app.supabase.com)
  2. L’URL de l’API et les clés d’API de votre projet (dans Settings → API)
  3. Un compte Tajo avec accès API

Clés API

Supabase fournit deux clés : anon (publique, respecte RLS) et service_role (contourne RLS, accès admin). Utilisez service_role pour les intégrations côté serveur et anon côté client.

Authentification

Supabase utilise une authentification par clé API. Chaque requête nécessite l’en-tête apikey et éventuellement un bearer token Authorization pour un accès scoped à l’utilisateur.

Terminal window
# Avec la clé anon (respecte RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
-H "apikey: <SUPABASE_ANON_KEY>" \
-H "Authorization: Bearer <SUPABASE_ANON_KEY>"
# Avec la clé service_role (contourne RLS)
curl 'https://<project_ref>.supabase.co/rest/v1/customers' \
-H "apikey: <SUPABASE_SERVICE_ROLE_KEY>" \
-H "Authorization: Bearer <SUPABASE_SERVICE_ROLE_KEY>"

Configuration

Configuration de base

connectors:
supabase:
enabled: true
project_url: "https://xyzcompany.supabase.co"
api_key: "${SUPABASE_SERVICE_ROLE_KEY}"
# Options de synchronisation des données
sync:
users: true
tables:
- customers
- orders
- products
storage: true
realtime: true
# Mapper les utilisateurs Supabase Auth vers les contacts
user_mapping:
email: email
phone: SMS
user_metadata.full_name: FIRSTNAME
created_at: SIGNUP_DATE

Mappage des champs

Mappez les colonnes des tables Supabase vers les attributs de la plateforme d’engagement :

Default User Mappings

Parameter Type Description
email required
string

E-mail utilisateur depuis Supabase Auth (identifiant unique)

phone optional
string

Numéro de téléphone pour l'engagement SMS/WhatsApp

user_metadata.full_name optional
string

Nom affiché depuis les métadonnées utilisateur Auth

user_metadata.avatar_url optional
string

URL de l'image de profil

created_at optional
timestamp

Horodatage de création du compte

last_sign_in_at optional
timestamp

Dernière connexion pour le scoring d'engagement

app_metadata.provider optional
string

Fournisseur d'auth (email, google, github, etc.)

confirmed_at optional
timestamp

Horodatage de confirmation de l'e-mail

Mappage de table personnalisé

table_mapping:
customers:
# Mappage Colonne → Attribut
email: email
full_name: FIRSTNAME
company: COMPANY
plan: SUBSCRIPTION_PLAN
mrr: MONTHLY_REVENUE
created_at: SIGNUP_DATE
orders:
# Suivre en tant qu'événements
sync_as: events
event_name: "order_placed"
properties:
total: amount
status: order_status
items: line_items

Endpoints API

L’API REST Supabase est auto-générée à partir du schéma de votre base de données sur https://<ref>.supabase.co/rest/v1/.

EndpointMéthodeDescription
/rest/v1/{table}GETInterroger les lignes avec filtres, tri, pagination
/rest/v1/{table}POSTInsérer des lignes (bulk et upsert pris en charge)
/rest/v1/{table}PATCHMettre à jour les lignes correspondant aux filtres
/rest/v1/{table}DELETESupprimer les lignes correspondant aux filtres
/rest/v1/rpc/{function}POSTAppeler une fonction Postgres
/auth/v1/signupPOSTCréer un nouvel utilisateur
/auth/v1/token?grant_type=passwordPOSTSe connecter avec mot de passe
/auth/v1/userGETObtenir l’utilisateur courant
/auth/v1/admin/usersGETLister tous les utilisateurs (service_role)
/storage/v1/object/{bucket}/{path}POSTUploader un fichier
/storage/v1/object/list/{bucket}POSTLister les fichiers d’un bucket
/functions/v1/{function_name}POSTInvoquer une Edge Function

Opérateurs de filtrage

OpérateurDescriptionExemple
eqÉgal?status=eq.active
neqNon égal?status=neq.deleted
gt, gteSupérieur?amount=gt.100
lt, lteInférieur?created_at=lt.2024-01-01
like, ilikeCorrespondance de motif?name=ilike.%john%
inDans un tableau?status=in.(active,trial)
isVérification null?deleted_at=is.null

Événements

Événements Auth

ÉvénementDéclencheurCas d’usage
user.signed_upInscription d’un nouvel utilisateurSérie de bienvenue
user.signed_inConnexion utilisateurSuivi d’activité
user.updatedChangements de profilSynchronisation de données
user.deletedSuppression de compteWorkflows de nettoyage

Événements base de données (Realtime)

ÉvénementDéclencheurCas d’usage
INSERTNouvelle ligne ajoutéeNotifications nouvelle commande/client
UPDATELigne modifiéeWorkflows de changement de statut
DELETELigne suppriméeDétection de churn

Événements webhook

ÉvénementDéclencheurCas d’usage
auth.user.createdInscription utilisateur via webhookDéclencher l’onboarding
storage.object.createdFichier uploadéTraitement d’assets

Exemples de code

Initialiser le connecteur

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

Synchroniser les utilisateurs vers des contacts

// Synchroniser tous les utilisateurs Supabase Auth en tant que contacts
await tajo.connectors.sync('supabase', {
type: 'full',
resources: ['users'],
});
// Synchronisation incrémentale (uniquement utilisateurs nouveaux/modifiés)
await tajo.connectors.sync('supabase', {
type: 'incremental',
resources: ['users'],
since: '2024-01-01T00:00:00Z',
});

Écouter les changements en temps réel

// S'abonner aux nouvelles commandes pour déclencher l'engagement
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) => {
// Transférer à Tajo en tant qu'événement
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();

Requête et segmentation

// Interroger les clients par plan pour des campagnes ciblées
const { data: proUsers } = await supabase
.from('customers')
.select('email, full_name, plan, mrr')
.eq('plan', 'pro')
.gt('mrr', 100)
.order('mrr', { ascending: false });
// Synchroniser vers une liste Brevo pour cibler des campagnes
await tajo.lists.addContacts(PRO_LIST_ID, proUsers);

Limites de débit

Limites de débit API

Les limites de débit Supabase dépendent de votre plan. Tier Free : 500 requêtes/minute. Pro : 1 000 requêtes/seconde. Contactez Supabase pour les limites Enterprise.

PlanLimite de débitConnexions Realtime
Free500 req/min200 simultanées
Pro1 000 req/s500 simultanées
Team2 000 req/s1 000 simultanées
EnterprisePersonnaliséPersonnalisé

Dépannage

Problèmes courants

ProblèmeCauseSolution
401 UnauthorizedClé API invalide ou expiréeVérifiez les clés API dans Supabase Dashboard → Settings → API
403 ForbiddenPolitique RLS bloquant l’accèsUtilisez la clé service_role pour les opérations admin, ou vérifiez les politiques RLS
Aucun événement realtimeRealtime non activé pour la tableActivez-le dans Database → Replication → ajouter la table à la publication
Résultats de requête videsRLS filtrant toutes les lignesVérifiez que les politiques RLS autorisent le rôle authentifié à lire
L’upload de stockage échouePolitiques de bucketVérifiez que le bucket Storage est public ou a les bonnes politiques RLS

Mode debug

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

Tester la connexion

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)

Bonnes pratiques

  1. Utilisez la clé service_role uniquement côté serveur, Ne l’exposez jamais dans du code client
  2. Activez RLS sur toutes les tables, Même avec service_role, concevez avec RLS pour une défense en profondeur
  3. Utilisez Realtime pour la synchronisation événementielle, Plus efficace que le polling pour les changements
  4. Opérations par lots, Utilisez les inserts en masse et le filtre in pour les opérations à fort volume
  5. Mappez les métadonnées utilisateur, Stockez les champs pertinents pour l’engagement dans user_metadata à l’inscription
  6. Utilisez les Edge Functions pour les webhooks, Traitez les webhooks entrants avec les Supabase Edge Functions pour une gestion à faible latence

Sécurité

  • Authentification par clé API, Toutes les requêtes nécessitent des clés API valides
  • Row Level Security (RLS), Contrôle d’accès natif Postgres par ligne
  • Vérification JWT, Les tokens d’auth sont des JWT signés vérifiés à chaque requête
  • SSL/TLS, Toutes les connexions chiffrées en transit
  • SOC 2 Type II, Supabase est conforme SOC 2
  • Restrictions réseau, Allowlist d’IP en option sur les plans payants

Ressources associées

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
Assistant AI

Bonjour ! Posez-moi vos questions sur la documentation.