Ereignisse
DirectoryHub tauscht Ereignisse („FpEvents") mit anderen Fluxpunkt-Modulen aus: Es sendet zu jedem Importlauf ein Start- und ein Abschlussereignis mit Quelle, Ergebnis und Zählern — und empfängt ein Steuerereignis, mit dem Drittsysteme den Import einer Quelle sofort anstoßen. Typische Konsumenten sind EventBridge (Weiterleitung als Webhook, E-Mail, Syslog oder Datenbankeintrag) und eigene STARFACE-Module, die Ereignisse direkt abonnieren oder senden.
Diese Schnittstelle ist für die Nutzung durch Drittsysteme freigegeben. Änderungen und Erweiterungen werden je Version in den Release Notes dokumentiert.
Grundlagen
- Typ: FpEvents — der modulübergreifende Ereignismechanismus der Fluxpunkt-Module auf dem anlageninternen Ereignisbus. Es handelt sich um keine Netzwerkschnittstelle: Ereignisse sind nur innerhalb der Anlage erreichbar; nach außen gelangen sie über EventBridge.
- Identifikatoren: die Ereignisnamen
DirectoryImportStartedEvent,DirectoryImportFinishedEvent(gesendet) undExecuteDirectoryImport(empfangen). Die Namen sind anlagenweit gültig und unabhängig vom Namen der Modulkonfiguration. - Nutzlast: ein JSON-Objekt. Felder ohne Wert (
null) entfallen in der Nutzlast; unbekannte Felder werden beim Empfang ignoriert. - Zugriff: EventBridge abonniert Ereignisse per Konfiguration und kann das Steuerereignis als Aktion senden (z. B. ausgelöst durch einen eingehenden Webhook). Eigene Module verwenden die Modulfunktionen FpEvent abonnieren / FpEvent senden — Download und Anleitung im Artikel Schnittstellen & APIs.
- Quellen-ID: Alle Ereignisse identifizieren die Importquelle über ihre stabile ID
(Format
src-+ acht Zeichen, z. B.src-9f3a21c7). Die ID einer Quelle lesen Sie am einfachsten aus einem gesendeten Importereignis ab — etwa per Event-Logging in EventBridge während eines manuellen Importlaufs.
Gemeinsame Felder
Alle drei Ereignisse tragen neben der Quellen-ID zwei gemeinsame Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
trigger | String | Herkunft des Laufs: MANUAL (Schaltfläche Jetzt importieren), TIMER (Zeitplan der Quelle), EVENT (Steuerereignis eines anderen Moduls), API (programmatischer Aufruf). Im Steuerereignis optional; fehlt der Wert, gilt EVENT. Start- und Abschlussereignis übernehmen den Wert des Auslösers. |
timerName | String, optional | Name des auslösenden Timer-Tasks; bei zeitgesteuerten Läufen von DirectoryHub ist das directoryhub-import. Nur bei trigger = TIMER gesetzt, sonst nicht enthalten. |
Empfangenes Steuerereignis: ExecuteDirectoryImport
Stößt den Import einer Quelle sofort an — unabhängig von deren Zeitplan. DirectoryHub führt
den Lauf aus und veröffentlicht dazu DirectoryImportStartedEvent und
DirectoryImportFinishedEvent.
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
sourceId | String | ja | ID der zu importierenden Quelle. Ereignisse ohne sourceId werden verworfen. |
trigger | String | nein | Herkunftskennzeichnung, wird in die gesendeten Ereignisse übernommen (Standard EVENT). |
timerName | String | nein | Nur sinnvoll bei trigger = TIMER (z. B. wenn ein fremder Zeitplan den Import auslöst). |
{
"sourceId": "src-9f3a21c7"
}
So senden Drittsysteme das Ereignis:
- Aus einem eigenen STARFACE-Modul: Modulfunktion Fluxpunkt: FpEvent senden
(
FpPublishEvent) mit EreignisnameExecuteDirectoryImportund der Nutzlast als Map oder JSON-Text. - Von außerhalb der Anlage: über einen eingehenden
EventBridge-Webhook, dessen Aktion das interne Ereignis
ExecuteDirectoryImportmit obiger Nutzlast sendet — damit wird der Import per HTTP-Aufruf auslösbar, ohne dass DirectoryHub selbst eine Netzwerkschnittstelle öffnet.
Ein CRM meldet über seinen Automatisierungs-Workflow jede Kontaktänderung an einen
EventBridge-Webhook. Die hinterlegte Aktion sendet ExecuteDirectoryImport für die
CRM-Quelle — neue Ansprechpartner stehen Minuten später im LDAP-Telefonbuch aller
Tischtelefone, statt erst beim nächsten Intervall-Import.
Gesendete Ereignisse
DirectoryHub veröffentlicht die beiden Ereignisse zu jedem Importlauf — gleich, ob er manuell, zeitgesteuert oder per Steuerereignis ausgelöst wurde.
DirectoryImportStartedEvent
Wird unmittelbar vor Beginn des Laufs gesendet.
| Feld | Typ | Beschreibung |
|---|---|---|
sourceId | String | stabile ID der Quelle |
sourceName | String | Anzeigename der Quelle |
sourceType | String | Quelltyp: SQL_JDBC, LDAP_AD, MS_GRAPH, CSV, XML, CARDDAV, VCARD, ODOO, HUBSPOT oder PIPEDRIVE |
startedAt | Zahl | Startzeitpunkt (Unix-Zeit in Millisekunden) |
trigger / timerName | String | siehe gemeinsame Felder |
{
"sourceId": "src-9f3a21c7",
"sourceName": "CRM (Odoo)",
"sourceType": "ODOO",
"startedAt": 1785826800000,
"trigger": "EVENT"
}
DirectoryImportFinishedEvent
Wird nach Abschluss des Laufs gesendet — bei Erfolg wie bei Fehlschlag.
| Feld | Typ | Beschreibung |
|---|---|---|
sourceId / sourceName / sourceType | String | wie im Startereignis |
success | Boolean | true, wenn der Lauf ohne fatalen Fehler abgeschlossen wurde |
read | Zahl | aus der Quelle gelesene Rohdatensätze |
upserted | Zahl | als eigener Kontakt angelegte oder aktualisierte Datensätze |
merged | Zahl | mit einem bestehenden Kontakt (quellenübergreifend) zusammengeführte Datensätze |
deleted | Zahl | aus dem Bestand entfernte Kontakte, die in der Quelle nicht mehr vorhanden sind |
skipped | Zahl | übersprungene Datensätze (nicht abbildbar oder je Datensatz fehlerhaft) |
filtered | Zahl | vom Datensatz-Filter der Quelle ausgeschlossene Datensätze |
error | String | Fehlermeldung des Laufs; entfällt bei Erfolg |
startedAt | Zahl | Startzeitpunkt (Unix-Zeit in Millisekunden) |
durationMs | Zahl | Laufdauer in Millisekunden |
trigger / timerName | String | siehe gemeinsame Felder |
{
"sourceId": "src-9f3a21c7",
"sourceName": "CRM (Odoo)",
"sourceType": "ODOO",
"success": true,
"read": 1284,
"upserted": 1210,
"merged": 46,
"deleted": 12,
"skipped": 9,
"filtered": 7,
"startedAt": 1785826800000,
"durationMs": 8412,
"trigger": "EVENT"
}
{
"sourceId": "src-9f3a21c7",
"sourceName": "CRM (Odoo)",
"sourceType": "ODOO",
"success": false,
"read": 0,
"upserted": 0,
"merged": 0,
"deleted": 0,
"skipped": 0,
"filtered": 0,
"error": "Connection refused: crm.example.de:8069",
"startedAt": 1785826800000,
"durationMs": 5031,
"trigger": "TIMER",
"timerName": "directoryhub-import"
}
Fehlerbehandlung
Der Ereignisweg arbeitet nach dem Fire-and-forget-Prinzip: Es gibt keine Empfangsbestätigung. Ein Steuerereignis, das nicht ausgeführt wird, bleibt ohne Start- und Abschlussereignis; die Ursache steht im Modul-Log:
| Situation | Verhalten |
|---|---|
ExecuteDirectoryImport ohne sourceId | Verworfen (Log-Eintrag). |
sourceId unbekannt | Verworfen mit Log-Eintrag „Unknown source: …"; es werden keine Ereignisse gesendet. |
| Quelle editionsbedingt inaktiv (Small Business Edition: nur die erste Quelle läuft) | Ausführung abgelehnt bzw. bei trigger = TIMER still übersprungen; keine Ereignisse. |
| Importlauf schlägt fehl (Quelle nicht erreichbar, Zugangsdaten ungültig, …) | Regulärer Ereignisfluss: DirectoryImportStartedEvent, danach DirectoryImportFinishedEvent mit success = false und error. |
| Unbekannte Felder in der Nutzlast | Werden ignoriert; das Ereignis wird normal verarbeitet. |
Unbekannter oder fehlender Wert in trigger | Wird wie EVENT behandelt. |
Das Veröffentlichen der Import-Ereignisse ist best-effort: Ein Fehler beim Senden bricht einen laufenden Import nicht ab.
Versionierung & Kompatibilität
Ereignisnamen und Feldnamen sind stabile Verträge; Erweiterungen erfolgen additiv
(neue optionale Felder, neue sourceType-Werte bei neuen Quelltypen). Verarbeiten Sie
Nutzlasten daher tolerant gegenüber zusätzlichen Feldern und unbekannten Werten. Zum
Erkunden der tatsächlichen Nutzlasten Ihrer Installation eignet sich das Event-Logging von
EventBridge; Änderungen an den Ereignissen dokumentieren die
Release Notes der jeweiligen Modulversion.