Zum Hauptinhalt springen

Ausgehende Aktionen

Event-Handler von EventBridge führen je abonniertem Ereignis genau eine Aktion aus: einen HTTP-Aufruf (Webhook), eine E-Mail, eine Syslog-Nachricht, eine Ablage in Datei oder SQL-Datenbank, einen Modul-Logeintrag oder ein neues internes Ereignis. Diese Seite dokumentiert Konfiguration, Formate und Zustellverhalten der Aktionstypen sowie die vollständige Platzhalter-Syntax {{…}}. Die Bedienung der Handler (Ereignisauswahl, JsonPath-Extraktion, MVEL-Bedingungen) beschreibt die Dokumentation.

Verwendung durch Dritte

Die von diesen Aktionen erzeugten Formate sind für die Verarbeitung durch Drittsysteme freigegeben. Änderungen und Erweiterungen werden je Version in den Release Notes dokumentiert.

Grundlagen

  • Auslöser: ein abonniertes Ereignis der STARFACE-Eventbusse, des Asterisk-AMI oder der Fluxpunkt-Module — siehe Ereignisliste.
  • Ablauf je Handler: Ereignis → Zeitfenster-Prüfung → optionale Verzögerung → MVEL-Bedingung → Zustands-Speicherung → Aktion.
  • Nebenläufigkeit: Aktionen laufen asynchron auf einem Worker-Pool mit 4 Threads; die Ereignisverarbeitung der Anlage wird nie blockiert.
  • Verzögerung: je Handler in Millisekunden konfigurierbar (0 = sofort). Ein konfiguriertes Zeitfenster wird nach Ablauf der Verzögerung erneut geprüft.
  • Zustellgarantien: Es gibt keine automatischen Wiederholungen. Eine fehlgeschlagene Aktion wird ausschließlich im Modul-Log protokolliert (fire-and-forget).
  • Vorlagen: Die Ausgabefelder aller Aktionstypen unterstützen {{…}}-Platzhalter — vollständige Referenz unten.

Aktionstypen

Webhook (HTTP-Aufruf)

Ruft eine frei konfigurierbare URL auf.

FeldPlatzhalterBeschreibung
URLjaZiel-URL einschließlich Query-Parametern
MethodeGET oder POST
Kopfzeilenja (im Wert)Name-Wert-Paare; nur Einträge im Modus „Wert" werden gesendet, Platzhalter im Wert werden ersetzt
Bodyjafrei gestalteter Anfragekörper (z. B. JSON)
Formulardatenja (im Wert)Alternative zum Body: Schlüssel-Wert-Paare, gesendet als application/x-www-form-urlencoded. Sind Formulardaten konfiguriert, wird der Body ignoriert

Bei GET werden weder Body noch Formulardaten übertragen. Setzen Sie den Content-Type der Nutzlast als eigene Kopfzeile (z. B. application/json).

Body-Vorlage mit Platzhaltern
{
"text": "Verpasster Anruf von {{callerName}} ({{callerNumber}})",
"gruppe": {{groupId}},
"quelle": "STARFACE"
}
Beim Empfänger eintreffender Body (Beispielwerte)
{
"text": "Verpasster Anruf von Max Mustermann (67)",
"gruppe": 5470,
"quelle": "STARFACE"
}

Zustellverhalten: Der Aufruf erfolgt synchron auf dem Worker-Pool; der Antwort-Statuscode des Zielsystems wird im Modul-Log (Trace) vermerkt, die Antwort selbst wird nicht weiterverarbeitet. Es gibt keine modulseitig konfigurierbaren Timeouts und keine Wiederholversuche.

E-Mail

Versendet eine Text-E-Mail über die Mailversand-Funktion des STARFACE-Modul-SDK.

FeldPlatzhalterBeschreibung
EmpfängerjaZieladresse
AbsenderjaAbsenderangabe (Feld fromName des STARFACE-Mailversands)
BetreffjaBetreffzeile
TextjaNachrichtentext
Betreff-Vorlage (Beispiel)
Verpasster Anruf von {{callerName}} {{callerNumber}} an Zentrale

Zustellverhalten: Erfolg oder Misserfolg des Versands wird im Modul-Log vermerkt; keine Wiederholversuche.

Modul-Logeintrag

Schreibt eine Zeile in das Modul-Log der Anlage.

FeldPlatzhalterBeschreibung
Log-LevelTRACE, DEBUG, INFO (Standard), WARN, ERROR
NachrichtjaLogtext

Internes Ereignis (FpEvent)

Veröffentlicht ein Fluxpunkt-Ereignis auf dem anlageninternen Ereignisbus (Topic fp-event_<Ereignisname>). Das ist keine Netzwerkschnittstelle: Empfänger sind Fluxpunkt-Module (z. B. die Steuerereignisse des Admin Power Pack), eigene STARFACE-Module über die Modulfunktionen FpEvent abonnieren/FpEvent senden (siehe Schnittstellen & APIs) — und EventBridge selbst.

FeldPlatzhalterBeschreibung
Ereignisfrei wählbarer Ereignisname; Platzhalter werden hier nicht ersetzt
Nutzlast (JSON)jaJSON-Vorlage des Ereignisses

Eigene Handler abonnieren ein solches Ereignis über die Ereignisauswahl (Kategorie FLUXPUNKT; intern wird der synthetische Klassenname de.fluxpunkt.fpevent.<Ereignisname> verwendet). In der Ereignisauswahl erscheinen nur Ereignisnamen, die auf Event enden — Steuerereignisse wie ExecuteUserTemplate sind bewusst nur sendbar, nicht abonnierbar.

Ablage (SFTP / SMB / SQL-Datenbank)

Schreibt frei gestaltete Inhalte auf ein wiederverwendbares Speicherziel (Tab Speicherziele). Die Aktion referenziert das Ziel; Pfad und Inhalt definieren Sie je Handler.

Ziel-Konfiguration:

ZieltypFelder
SFTPHost (Port 22), Basisverzeichnis, Benutzername, Passwort (verschlüsselt gespeichert)
SMB/CIFSHost (Port 445), Freigabename, Unterordner, Benutzername, Passwort, Domäne, Sicherheitsmodus (Standard ntlmssp)
SQL-DatenbankDatenbanktyp (MySQL, PostgreSQL, Microsoft SQL Server, Derby), Host, Datenbankname, Benutzername, Passwort, Verbindungsoptionen

Aktion — Datei-Ziele (SFTP/SMB):

FeldPlatzhalterBeschreibung
PfadjaPfad einschließlich Dateiname, relativ zum Basisverzeichnis des Ziels; ein Verzeichnisanteil wird angehängt
InhaltjaDateiinhalt, geschrieben als UTF-8

Aktion — Datenbank-Ziele:

Der Inhalt ist eine SQL-Anweisung. Ereignisdaten werden nie in den SQL-Text eingesetzt: Jeder {{Platzhalter}} wird durch einen ?-Bindeparameter ersetzt und der aufgelöste Wert als Zeichenkette gebunden (PreparedStatement) — konstruktionsbedingt kein SQL-Injection-Vektor. Ein unaufgelöster Platzhalter bindet eine leere Zeichenkette (nie SQL-NULL). Die Ausführung ist auf 10 Sekunden je Anweisung begrenzt.

Platzhalter in SQL nicht in Anführungszeichen setzen

Schreiben Sie VALUES ({{callerNumber}}), nicht VALUES ('{{callerNumber}}'). Innerhalb eines SQL-String-Literals wird der Platzhalter nicht zum Bindeparameter; die Anweisung schlägt durch die abweichende Parameteranzahl fehl und es wird nichts geschrieben (fail-closed).

Beispiel: Zieltabelle (MySQL)
CREATE TABLE eventbridge_calls (
id INT AUTO_INCREMENT PRIMARY KEY,
erfasst_am TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
anrufer VARCHAR(64),
gruppe VARCHAR(32),
ergebnis VARCHAR(32)
);
Inhalt der Aktion (Vorlage)
INSERT INTO eventbridge_calls (anrufer, gruppe, ergebnis)
VALUES ({{callerNumber}}, {{groupId}}, {{result}})
Tatsächlich ausgeführte Anweisung
INSERT INTO eventbridge_calls (anrufer, gruppe, ergebnis) VALUES (?, ?, ?)
-- gebundene Parameter (in Reihenfolge): '67', '5470', 'MISSED'

Alle Parameter werden als Zeichenketten gebunden; die Konvertierung in numerische Spalten übernimmt das Datenbanksystem.

Zustellverhalten: Schreibvorgänge laufen synchron auf dem Worker-Pool, ohne Wiederholversuche. SFTP/SMB besitzen kein konfigurierbares Timeout; Datenbankanweisungen sind auf 10 Sekunden begrenzt. Halten Sie Speicherziele schnell erreichbar — langsame oder nicht erreichbare Ziele belegen die 4 Worker-Threads und verzögern damit auch andere Aktionen.

Syslog

Übermittelt eine Nachricht im Format RFC 5424 oder RFC 3164 an ein als Speicherziel konfiguriertes Syslog-Ziel.

Ziel-Konfiguration:

FeldStandardBeschreibung
Host / PortPort 514Syslog-Collector
TransportUDPUDP, TCP oder TLS
NachrichtenformatRFC 5424RFC 5424 oder RFC 3164
TCP-FramingOctet-CountingRFC 6587: Octet-Counting (<Länge> vor der Nachricht) oder Non-Transparent (abschließendes \n); nur TCP/TLS
Standard-FacilityLOCAL0alle RFC-5424-Facilities KERN (0) bis LOCAL7 (23)
App-NameSTARFACE EventBridgeRFC-5424-APP-NAME bzw. RFC-3164-TAG
Hostname-Overrideersetzt den automatisch ermittelten Anlagen-Hostnamen
TLS-Zertifikatsprüfungaktivabschaltbar (dann werden alle Zertifikate akzeptiert)
Verbindungs-Timeout5000 msVerbindungs- und Socket-Timeout für TCP/TLS

Aktionsfelder:

FeldPlatzhalterBeschreibung
SeverityEMERGENCY (0) bis DEBUG (7); Standard INFO (6)
Facility-Overrideersetzt die Standard-Facility des Ziels für diese Aktion
App-Name-Overrideersetzt den App-Namen des Ziels; Platzhalter werden nicht ersetzt
MSGIDRFC-5424-MSGID; leer ⇒ -; Platzhalter werden nicht ersetzt
STRUCTURED-DATAjaRFC-5424-STRUCTURED-DATA; leer ⇒ -
Nachrichtjader Nachrichtentext (MSG)

Nachrichtenformat: Der PRI-Wert berechnet sich als Facility × 8 + Severity (LOCAL0/INFO<134>). Zeilenumbrüche im Nachrichtentext werden durch Leerzeichen ersetzt.

RFC-5424-Nachricht (Beispiel)
<134>1 2026-08-04T09:30:12.184+02:00 pbx01 STARFACEEventBridge - - - Verpasster Anruf von Max Mustermann (67)
  • Aufbau: PRI, Version 1, ISO-8601-Zeitstempel mit Zeitzone, HOSTNAME, APP-NAME, PROCID (immer -), MSGID, STRUCTURED-DATA, Nachricht.
  • Unmittelbar vor dem Nachrichtentext steht die unsichtbare UTF-8-Byte-Order-Mark (U+FEFF), wie in RFC 5424 §6.4 für UTF-8-Nachrichten vorgesehen.
  • Leere Kopffelder werden als - übertragen; Leerzeichen innerhalb von HOSTNAME, APP-NAME und MSGID werden entfernt (aus STARFACE EventBridge wird STARFACEEventBridge).
RFC-3164-Nachricht (Beispiel)
<134>Aug 4 09:30:12 pbx01 STARFACE EventBridge: Verpasster Anruf von Max Mustermann (67)
  • Aufbau: PRI, Zeitstempel (englische Monatsabkürzung, Tag mit führendem Leerzeichen), HOSTNAME, TAG (App-Name, hier unverändert mit Leerzeichen), : , Nachricht.

Zustellverhalten: UDP versendet ein einzelnes Datagramm ohne Zustellbestätigung. Bei TCP/TLS wird je Nachricht eine neue Verbindung aufgebaut (Timeout siehe Ziel); keine Wiederholversuche.

Platzhalter-Referenz

Platzhalter der Form {{name}} werden beim Ausführen einer Aktion durch Werte aus vier Quellen ersetzt. Die Namen der Ereignis-, Global- und Zustandsvariablen vergeben Sie selbst — es gibt kein festes Platzhalter-Vokabular und keine eingebauten Funktions- oder Datumsplatzhalter: Jeder benötigte Wert wird per JsonPath aus dem Ereignis extrahiert oder als globale bzw. Zustandsvariable bereitgestellt.

Variablenquellen

QuellePlatzhalterBedeutungBeispielwert
Ereignisdaten (Parser){{callerNumber}}, {{groupId}}, … (frei benannt)Je Handler definierte Extraktionen: ein JsonPath-Ausdruck gegen das Ereignis-JSON (z. B. $.callListEntry.callerNumber), ein fester Wert oder eine Benutzer-/Gruppenauswahl. Skalare Treffer werden zur Zeichenkette, Objekte/Arrays zu JSON-Text; ein nicht vorhandener Pfad lässt die Variable unbelegt67
Implizite Webhook-Variablen{{webhookId}}ID des eingehenden Webhooks, der den Aufruf angenommen hat — nur bei eingehenden Webhooks9f3a21c4
{{webhookName}}Name des eingehenden WebhooksTicket-Import
Globale Variablen{{apiKey}}, … (frei benannt)Anlagenweite Name-Wert-Paare aus dem Tab Globale Variablen — z. B. Zugangsschlüssel, Basis-URLs, Standortek7fj29a…
Zustandsvariablen{{lastCaller}}, … (frei benannt)Zur Laufzeit von Handlern geschriebene Werte (Abschnitt „Zustand speichern"), mit Lebensdauer je Eintrag (maximal 90 Tage; 0 ⇒ 90 Tage). Damit reichen Handler Werte an spätere Ereignisse weiter0711459880

Im Konfigurationsexport (.ebc) und in der Modul-RPC werden die Parser-Werte mit den Präfixen jp: (JsonPath), val: (fester Wert) und ug: (Benutzer-/Gruppenauswahl als URL-kodiertes JSON-Objekt mit users/groups) serialisiert; ohne Präfix gilt JsonPath.

Rangfolge

Bei gleichem Namen gilt: Ereignis-/Parser-Variablen überschreiben Zustandsvariablen, diese überschreiben globale Variablen. Im Webhook-Ingress liegen die impliziten Variablen {{webhookId}}/{{webhookName}} zwischen Parser- und Zustandsebene — eine gleichnamige Parser-Variable überschreibt sie gezielt.

Wirkungsbereiche

AktionstypFeldPlatzhalter ersetzt
WebhookURL, Kopfzeilen-Werte, Body, Formulardaten-Werteja
E-MailEmpfänger, Absender, Betreff, Textja
Internes EreignisNutzlast (JSON)ja
Internes EreignisEreignisnamenein
Modul-LogeintragNachrichtja
AblagePfad, Inhalt (SQL: als gebundene Parameter)ja
SyslogNachricht, STRUCTURED-DATAja
SyslogMSGID, App-Name-Overridenein
Zustand speichernName, Wertja
Eingehender WebhookEreignis-Nutzlast (JSON)ja
Bedingung (MVEL)nein — Variablen stehen dort ohne Klammern als Bezeichner bereit (result == "MISSED")

Syntax und Auflösungsverhalten

  • Schreibweise: exakt {{name}} — ohne Leerraum zwischen Klammern und Namen; Groß-/Kleinschreibung ist relevant.
  • Unaufgelöste Platzhalter bleiben in Textfeldern wörtlich erhalten. Ausnahme SQL-Inhalte: Dort wird jeder Platzhalter zum ?-Parameter; ein unaufgelöster bindet eine leere Zeichenkette.
  • Standardwerte: In Textfeldern liefert {{name:-Ersatzwert}} den Ersatzwert, wenn name nicht belegt ist (Verhalten der eingesetzten Template-Engine Apache Commons Text). In SQL-Inhalten gilt diese Syntax nicht — dort zählt der gesamte Text zwischen den Klammern als Variablenname.
  • Escaping: Ein vorangestelltes Dollarzeichen (${{name}}) gibt die Zeichenfolge {{name}} in Textfeldern wörtlich aus.
  • Rekursion: Enthält ein aufgelöster Wert selbst {{…}}, wird er in Handler-Aktionen erneut ersetzt. Bei eingehenden Webhooks ist diese Rekursion aus Sicherheitsgründen deaktiviert.
  • Datentypen: Alle Variablenwerte sind Zeichenketten. In JSON-Vorlagen entscheidet die Vorlage über den Typ: "{{groupId}}" erzeugt einen String, {{groupId}} ein JSON-Zahlen- bzw. Rohtoken.
Anwendungsbeispiel

Ein Systemhaus protokolliert jeden verpassten Gruppenanruf doppelt: per SQL-Ablage in eine Auswertungstabelle und als RFC-5424-Nachricht an das zentrale SIEM. Vollständige Konfigurationen dieser Art enthält der Abschnitt Beispielkonfigurationen.

Fehlerbehandlung

SituationVerhalten
Bedingung nicht erfülltAktion unterbleibt; Vermerk im Modul-Log (Debug)
MVEL-Fehler oder Nicht-Boolean-Ergebnis der Bedingungzählt als „nicht erfüllt"; Aktion unterbleibt; Vermerk im Modul-Log
Aktion schlägt fehl (Netzwerk, SMTP, SQL, Syslog)Eintrag im Modul-Log; keine Wiederholung
Referenziertes Speicher-/Syslog-Ziel nicht vorhandenWarnung im Modul-Log; nichts wird gesendet
SQL-Parameteranzahl-Konflikt (z. B. Platzhalter in Anführungszeichen)SQLException, im Modul-Log protokolliert; nichts wird geschrieben
Datenbankanweisung überschreitet 10 SekundenAbbruch der Anweisung

Zur Diagnose stehen je Handler eine Testfunktion (wartet bis zu 30 Sekunden auf ein passendes Ereignis und zeigt die vollständig aufgelösten Vorlagen an, ohne die Aktion auszuführen) sowie die Vorschau „Echte Werte" mit aufgezeichneten Beispielereignissen bereit. Die „Zustand speichern"-Einträge werden — anders als die Aktion — bereits vor der Aktionsausführung persistiert und bleiben auch bei fehlgeschlagener Aktion erhalten.

Versionierung & Kompatibilität

FunktionVerfügbar seit
Aktionen Webhook, E-Mail, Modul-Logeintrag, internes EreignisGrundbestandteil des Moduls
Zustandsvariablen26.6.4
Ablage SFTP/SMB/Datenbank26.7.10
Syslog26.7.13
Implizite Webhook-Variablen {{webhookId}}/{{webhookName}}26.7.23

Die dokumentierten Formate — Platzhalter-Syntax, Syslog-Nachrichtenaufbau, SQL-Parameterbindung — gelten als stabiler Vertrag; abwärtskompatible Erweiterungen (neue Aktionstypen, zusätzliche Felder) erfolgen ohne Ankündigung, Änderungen bestehenden Verhaltens werden in den Release Notes dokumentiert. Die Struktur der abonnierbaren Ereignisse selbst ist kein Bestandteil dieses Vertrags — STARFACE-Ereignisse können sich mit Anlagen-Updates ändern (siehe Hinweise in der Ereignisliste).