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 |
|---|---|
| Plateforme | Supabase |
| Catégorie | Base de données et backend |
| Complexité d’installation | Facile |
| Intégration officielle | Oui |
| Données synchronisées | Utilisateurs, tables, stockage, événements |
| Skills disponibles | 11 |
| Type d’API | REST (PostgREST) + WebSocket Realtime |
| Docs officielle | supabase.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 :
- Un projet Supabase (app.supabase.com)
- L’URL de l’API et les clés d’API de votre projet (dans Settings → API)
- 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.
# 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_DATEMappage 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_itemsEndpoints 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/.
| Endpoint | Méthode | Description |
|---|---|---|
/rest/v1/{table} | GET | Interroger les lignes avec filtres, tri, pagination |
/rest/v1/{table} | POST | Insérer des lignes (bulk et upsert pris en charge) |
/rest/v1/{table} | PATCH | Mettre à jour les lignes correspondant aux filtres |
/rest/v1/{table} | DELETE | Supprimer les lignes correspondant aux filtres |
/rest/v1/rpc/{function} | POST | Appeler une fonction Postgres |
/auth/v1/signup | POST | Créer un nouvel utilisateur |
/auth/v1/token?grant_type=password | POST | Se connecter avec mot de passe |
/auth/v1/user | GET | Obtenir l’utilisateur courant |
/auth/v1/admin/users | GET | Lister tous les utilisateurs (service_role) |
/storage/v1/object/{bucket}/{path} | POST | Uploader un fichier |
/storage/v1/object/list/{bucket} | POST | Lister les fichiers d’un bucket |
/functions/v1/{function_name} | POST | Invoquer une Edge Function |
Opérateurs de filtrage
| Opérateur | Description | Exemple |
|---|---|---|
eq | Égal | ?status=eq.active |
neq | Non égal | ?status=neq.deleted |
gt, gte | Supérieur | ?amount=gt.100 |
lt, lte | Inférieur | ?created_at=lt.2024-01-01 |
like, ilike | Correspondance de motif | ?name=ilike.%john% |
in | Dans un tableau | ?status=in.(active,trial) |
is | Vérification null | ?deleted_at=is.null |
Événements
Événements Auth
| Événement | Déclencheur | Cas d’usage |
|---|---|---|
user.signed_up | Inscription d’un nouvel utilisateur | Série de bienvenue |
user.signed_in | Connexion utilisateur | Suivi d’activité |
user.updated | Changements de profil | Synchronisation de données |
user.deleted | Suppression de compte | Workflows de nettoyage |
Événements base de données (Realtime)
| Événement | Déclencheur | Cas d’usage |
|---|---|---|
INSERT | Nouvelle ligne ajoutée | Notifications nouvelle commande/client |
UPDATE | Ligne modifiée | Workflows de changement de statut |
DELETE | Ligne supprimée | Détection de churn |
Événements webhook
| Événement | Déclencheur | Cas d’usage |
|---|---|---|
auth.user.created | Inscription utilisateur via webhook | Déclencher l’onboarding |
storage.object.created | Fichier 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 Supabaseawait 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 contactsawait 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'engagementconst 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éesconst { 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 campagnesawait 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.
| Plan | Limite de débit | Connexions Realtime |
|---|---|---|
| Free | 500 req/min | 200 simultanées |
| Pro | 1 000 req/s | 500 simultanées |
| Team | 2 000 req/s | 1 000 simultanées |
| Enterprise | Personnalisé | Personnalisé |
Dépannage
Problèmes courants
| Problème | Cause | Solution |
|---|---|---|
| 401 Unauthorized | Clé API invalide ou expirée | Vérifiez les clés API dans Supabase Dashboard → Settings → API |
| 403 Forbidden | Politique RLS bloquant l’accès | Utilisez la clé service_role pour les opérations admin, ou vérifiez les politiques RLS |
| Aucun événement realtime | Realtime non activé pour la table | Activez-le dans Database → Replication → ajouter la table à la publication |
| Résultats de requête vides | RLS filtrant toutes les lignes | Vérifiez que les politiques RLS autorisent le rôle authentifié à lire |
| L’upload de stockage échoue | Politiques de bucket | Vé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: trueTester la connexion
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
- Utilisez la clé service_role uniquement côté serveur, Ne l’exposez jamais dans du code client
- Activez RLS sur toutes les tables, Même avec service_role, concevez avec RLS pour une défense en profondeur
- Utilisez Realtime pour la synchronisation événementielle, Plus efficace que le polling pour les changements
- Opérations par lots, Utilisez les inserts en masse et le filtre
inpour les opérations à fort volume - Mappez les métadonnées utilisateur, Stockez les champs pertinents pour l’engagement dans
user_metadataà l’inscription - 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