Anpassung: Felder & Module
Flash ist für jede Marke auf zwei Arten angepasst, beide basieren auf einer gemeinsamen Codebasis – es wird niemals ein Fork erstellt. Benutzerdefinierte Felder fügen Ihre eigenen Daten zum Mitgliedsdatensatz hinzu und werden über die v2 REST API festgelegt. Module sind optionale Funktionen, die pro Arbeitsbereich aktiviert und vom Server erzwungen werden. Dieser Leitfaden behandelt beides.
Felder werden deklariert, bevor sie festgelegt werden.
Ein Inhaber oder Administrator erstellt Felder unter Einstellungen → Benutzerdefinierte Felder. Jedes Feld verfügt über einen key (seinen Maschinennamen, z. B. cf_membership_no), einen type und – bei den Auswahltypen – eine Liste von Optionen. Schlüssel und Typ sind nach der Erstellung festgelegt. API erstellt keine Felder; es setzt lediglich Werte für bereits existierende Felder und verwirft unbekannte Schlüssel – die Definitionstabelle dient als Zulassungsliste.
Übergeben Sie customAttributes beim Erstellen oder Aktualisieren
Sowohl POST /api/v2/members (Erstellen) als auch PATCH /api/v2/members/{id} (Aktualisieren) akzeptieren einen customAttributes object-Schlüssel, der durch Ihre Feldschlüssel definiert ist. Authentifizieren Sie sich mit einem Bearer fl_live_-Schlüssel mit dem Gültigkeitsbereich 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"
}
}'Beim Aktualisieren werden nur die zu ändernden Schlüssel gesendet. Durch Setzen eines Schlüssels auf null wird dieser gelöscht.
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" } }'Was jeder Feldtyp akzeptiert
| Typ | Beispiel-JSON-Wert | Akzeptiert |
|---|---|---|
text | "A-10023" | Zeichenfolge |
number | 42 | number (oder numerisch string) |
date | "2018-05-01" | ISO-Datum (JJJJ-MM-TT) |
boolean | true | wahr / falsch |
enum | "flagship" | eine der Optionen des Feldes |
list | ["running","tennis"] | Teilmenge der Feldoptionen |
Die Validierung ist streng: Ein Wert muss mit dem Typ seines Felds übereinstimmen, ein enum/list-Wert muss eine der definierten Optionen sein und unbekannte Schlüssel werden mit 400 abgelehnt. Felder für sensible personenbezogene Daten (PII) werden noch nicht akzeptiert. Behalten Sie benutzerdefinierte Attribute für nicht sensible Geschäftswerte bei.
Ein Wert, plattformweit verwendet.
Segmente
Filtert Mitglieder anhand beliebiger benutzerdefinierter Felder mit typspezifischen Operatoren – demselben Feld, das Sie für API festgelegt haben.
E-Mail-Personalisierung
Im Copy-Code kann auf den Wert als {{cf_membership_no}} oder {{member.cf_membership_no}} verwiesen werden.
Mitglied gelesen
Benutzerdefinierte Werte werden für das Mitglied object unter customAttributes zurückgegeben.
Optionale Funktionen, pro Arbeitsbereich aktivierbar
Wo ein benutzerdefiniertes Feld einen Wert hinzufügt, fügt ein Modul eine ganze Funktion hinzu – beispielsweise ein Modul für Service-Tickets, Termine oder ein Reparaturprotokoll. Module sind standardmäßig deaktiviert und werden pro Arbeitsbereich aktiviert. Jeder Arbeitsbereich verwendet dieselbe Codebasis; ob ein Modul aktiviert oder deaktiviert ist, sind Daten (eine Berechtigung), niemals eine private Build-Variable.
Wird vom Server an einem Ort erzwungen
Jedes Modul verfügt über einen festen Schlüssel (z. B. tickets). Ob ein Arbeitsbereich das Modul nutzen darf, wird durch einen einzigen Schalter pro Arbeitsbereich aktiviert. Dieser Schalter wird an einem zentralen Punkt geprüft und überall dort angewendet, wo das Modul verwendet wird – fail-closed: Ist der Schalter nicht aktiviert, ist die Funktion nicht verfügbar.
API
Die Endpunkte eines deaktivierten Moduls lehnen Aufrufe mit 403 ab. Der Zugriff wird in der Benutzeroberfläche allein nie dem Zufall überlassen.
Navigation & Seiten
Die Menüeinträge und Seiten eines Moduls werden nur angezeigt, wenn es für den Arbeitsbereich aktiviert ist – und verschwinden sauber, wenn es deaktiviert wird.
Mandantenisoliert
Berechtigungen gelten pro Arbeitsbereich. Die Module und Daten einer Marke sind für andere Marken niemals sichtbar.
Einführung eines neuen Moduls
Wenn eine Funktion wirklich wiederverwendbar ist, wird sie einmal als Modul erstellt – registriert in einem Modulkatalog unter ihrem Schlüssel, mit ihren eigenen Daten, ihrem eigenen berechtigungsgesteuerten API und ihren eigenen Seiten. Der erste Arbeitsbereich, der es braucht, baut es; Der nächste legt einfach den Schalter um. Dies ist der Kern des Modells: Kundenunterschiede werden als Einstellungen ausgedrückt, sodass ein Upgrade oder Fix jeden Arbeitsbereich gleichzeitig erreicht.
- Das Modul wird mit einem stabilen Schlüssel und einer Beschreibung im Katalog registriert.
- Die Daten und API Routen sind durch diesen Schlüssel geschützt (Fail-Closed).
- Die Navigation und die Seiten werden nur angezeigt, wenn der Schlüssel aktiviert ist.
- Ein Besitzer aktiviert es für einen Arbeitsbereich; ein zweiter Arbeitsbereich wird durch Umschalten, nicht durch Neuinstallation, aktiviert.
Schalten Sie Module ein oder aus
Arbeitsbereichsbesitzer verwalten Module über Einstellungen → Module. Jede Änderung wird sofort im gesamten API und der Benutzeroberfläche wirksam.
Die Entscheidungsregel: Verwenden Sie zuerst die Konfiguration; fügen Sie ein benutzerdefiniertes Feld hinzu, wenn Sie einen Wert speichern müssen; erstellen Sie ein Modul, wenn eine Funktion wirklich wiederverwendbar ist – und forken Sie niemals das Produkt für einen einzelnen Kunden.
Benötigen Sie eine ganz neue Art von Datensatz, nicht nur ein zusätzliches Feld? Siehe Benutzerdefinierte Objekte – Erstellen Sie Ihr eigenes Geschäftsobjekt ohne Code, durchsuchen Sie dann Datensätze und segmentieren Sie sie. Um den Rest Ihres Stacks synchron zu halten, lesen Sie Connectoren und Benachrichtigungen.