SocialHub.AI
Espace développeurs · REST API

Personnalisation : Champs et modules

Flash est personnalisé pour chaque marque de deux manières, les deux sur une base de code partagée — jamais de fork. Champs personnalisés ajoutent vos propres données à l'enregistrement du membre et sont définis via la v2 REST API. Modules sont des fonctionnalités optionnelles activées par espace de travail et appliquées par le serveur. Ce guide couvre les deux.

Étape 1 : définir le champ (dans l'application)

Les champs sont déclarés avant d'être définis.

Un propriétaire ou un administrateur crée des champs dans Paramètres → Champs personnalisés . Chaque champ possède une clé (son nom machine, par exemple cf_membership_no), un type et, pour les types de sélection, une liste d'options. La clé et le type sont fixes après la création du champ. La fonction API ne crée jamais de champs ; elle définit uniquement les valeurs des champs existants et rejette les clés inconnues – la table de définition fait office de liste blanche.

Étape 2 — Définir les valeurs via API

Transmettre customAttributes lors de la création ou de la mise à jour

Les actions POST /api/v2/members (création) et PATCH /api/v2/members/{id} (mise à jour) acceptent toutes deux une clé customAttributes object définie par vos clés de champ. Authentifiez-vous avec une clé Bearer fl_live_ disposant de l'étendue members:write.

curl -X POST https://flash.socialhub.ai/api/v2/members \
  -H "Authorization: Bearer fl_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "email": "ada@example.com",
    "fullName": "Ada Lovelace",
    "customAttributes": {
      "cf_membership_no": "A-10023",
      "cf_preferred_store": "flagship",
      "cf_child_birthday": "2018-05-01"
    }
  }'

Lors de la mise à jour, envoyez uniquement les clés que vous souhaitez modifier. Définir une clé sur null efface le problème.

curl -X PATCH https://flash.socialhub.ai/api/v2/members/{id} \
  -H "Authorization: Bearer fl_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "customAttributes": { "cf_preferred_store": "airport" } }'
Valeur par type

Ce que chaque type de champ accepte

SaisirExemple de valeur JSONAccepte
text"A-10023"chaîne
number42number (ou numérique string)
date"2018-05-01"Date ISO (AAAA-MM-JJ)
booleantruevrai / faux
enum"flagship"une des options du champ
list["running","tennis"]Sous-ensemble des options du champ

La validation est stricte : une valeur doit correspondre au type de son champ, une valeur enum/list doit faire partie des options définies, et les clés inconnues sont rejetées avec 400. Les champs de données personnelles sensibles (PII) ne sont pas encore acceptés : conservez les attributs personnalisés pour les valeurs commerciales non sensibles.

Conséquences en aval

Une seule valeur, utilisée sur toute la plateforme.

Segments

Filtre les membres selon n'importe quel champ personnalisé avec les opérateurs appropriés — le même champ que celui configuré dans API.

Personnalisation des e-mails

Référencez la valeur dans la copie sous la forme {{cf_membership_no}} ou {{member.cf_membership_no}}.

Accès au compte membre

Les valeurs personnalisées sont renvoyées au membre object sous customAttributes.

2 Modules

Fonctionnalités optionnelles, activées par espace de travail

Lorsqu'un champ personnalisé ajoute une valeur, un module ajoute une capacité complète — par exemple, un module de gestion des tickets d'assistance, de rendez-vous ou un journal de réparation. Les modules sont désactivés par défaut et activés pour chaque espace de travail. Chaque espace de travail utilise la même base de code ; l'activation ou la désactivation d'un module relève des données (un droit), et non d'une configuration privée.

Fonctionnement du contrôle d'accès

Appliqué par le serveur, en un seul endroit

Chaque module possède une clé stable (par exemple, tickets). L'utilisation de ce module par un espace de travail est contrôlée par un interrupteur unique, vérifié à un point de décision unique et appliqué partout où le module apparaît : fail-closed. Si l'interrupteur est désactivé, la fonctionnalité est tout simplement indisponible.

API

Les points de terminaison d'un module désactivé rejettent les appels avec 403. L'accès n'est jamais laissé au hasard dans la seule interface utilisateur.

Navigation et pages

Les entrées de menu et les pages d'un module s'affichent uniquement lorsqu'il est activé pour l'espace de travail et disparaissent proprement lorsqu'il est désactivé.

Isolation des locataires

Les droits d'accès sont spécifiques à chaque espace de travail. Les modules et les données d'une marque ne sont jamais visibles par une autre.

Extension sans duplication

Comment un nouveau module est introduit

Lorsqu'une fonctionnalité est véritablement réutilisable, elle est construite une seule fois en tant que module — enregistrée dans un catalogue de modules sous sa clé, avec ses propres données, son propre API contrôlé par les droits et ses propres pages. Le premier espace de travail qui en a besoin est construit ; le suivant actionne simplement l'interrupteur. C'est le cœur du modèle : les différences entre les clients sont exprimées sous forme de paramètres, de sorte qu'une mise à niveau ou un correctif atteint simultanément chaque espace de travail.

  1. Le module s'enregistre dans le catalogue avec une clé et une description stables.
  2. Ses données et ses routes API sont protégées par cette clé (sécurité renforcée).
  3. Sa navigation et ses pages ne sont visibles que lorsque la touche est activée.
  4. Un propriétaire active la fonctionnalité pour un espace de travail ; l’ajout d’un second espace de travail nécessite une simple activation, et non une reconstruction.
Gestion des modules

Activer ou désactiver les modules

Les responsables d'espace de travail gèrent les modules depuis Paramètres → Modules. Chaque modification est immédiatement prise en compte dans API et l'interface utilisateur.

Règle de décision : privilégier la configuration ; Ajoutez un champ personnalisé lorsque vous devez stocker une valeur ; créez un module lorsqu'une fonctionnalité est réellement réutilisable et ne dupliquez jamais le produit pour un seul client.

Besoin d’un tout nouveau type de dossier, pas seulement d’un champ supplémentaire ? Voir Objets personnalisés : créez votre propre objet métier sans code, puis parcourez les enregistrements et segmentez-les. Pour synchroniser le reste de votre pile, consultez Connecteurs et notifications.