Zum Hauptinhalt springen

Ereignisse

AíPowerDesk sendet Ereignisse („FpEvents") an andere Fluxpunkt-Module und — über EventBridge — an Drittsysteme. Zwei Anwendungsfälle stehen dahinter: Die frei konfigurierbaren Aktionsschaltflächen der Rufliste übergeben ein Gespräch samt Zusammenfassung und Transkript per Klick an Branchensoftware, Ticket- oder CRM-Systeme; die Zusammenfassungs-Ereignisse melden jede fertiggestellte oder nachträglich korrigierte KI-Gesprächszusammenfassung und ermöglichen so eine automatische Gesprächsdokumentation in nachgelagerten Systemen — ohne Polling und ohne Datenbankzugriff.

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.
  • Identifikator: der Ereignisname — ActionButtonEvent, TranscriptionSummaryReadyEvent oder TranscriptionSummaryChangedEvent.
  • Nutzlast: ein JSON-Objekt. Felder ohne Wert (null) entfallen in der Nutzlast; unbekannte Felder werden beim Empfang ignoriert.
  • Konsum: EventBridge abonniert Ereignisse per Konfiguration und reicht sie als Webhook, E-Mail, Syslog-Meldung oder Datenbankeintrag weiter. Eigene STARFACE-Module verwenden die Modulfunktionen FpEvent abonnieren / FpEvent abbestellen (FpRegisterEvents / FpUnregisterEvents) — Download und Anleitung im Artikel Schnittstellen & APIs.
  • Richtung: AíPowerDesk sendet ausschließlich; Steuerereignisse empfängt das Modul nicht.
  • Voraussetzung: eine aktive, lizenzierte Modulkonfiguration.

ActionButtonEvent

Wird veröffentlicht, wenn ein Benutzer eine Aktionsschaltfläche drückt („Aktionsschaltfläche gedrückt"). Administratoren definieren bis zu 255 Schaltflächen (Indizes 0–254) mit Beschriftung, Icon und Tooltip im Modul-Backend; sie erscheinen in der Ruflisten-Seitenleiste und in den Schnellaktionsleisten der Rufliste. Das Ereignis transportiert den vollständigen Kontext des Ruflisteneintrags, auf dem der Klick erfolgte — Gesprächsmetadaten, KI-Zusammenfassung und Transkript.

Auslösezeitpunkt: unmittelbar beim Klick, nachdem das Modul-Backend den angemeldeten STARFACE-Benutzer und die Modullizenz geprüft hat. Für als privat markierte Gespräche wird der Klick abgewiesen, wenn der Benutzer nicht auf die Gesprächsinhalte zugreifen darf — in diesem Fall wird kein Ereignis veröffentlicht, denn die Nutzlast trägt Transkript und Zusammenfassung aus dem System hinaus.

FeldTypBedeutung
moduleIdStringKennung des sendenden Moduls; bei AíPowerDesk konstant AiPowerDesk. Das Ereignis ist modulübergreifend definiert — filtern Sie auf dieses Feld, wenn Sie nur AíPowerDesk-Klicks verarbeiten wollen.
moduleNameStringAnzeigename des sendenden Moduls; derzeit ebenfalls AiPowerDesk.
buttonUuidStringStabile UUID (v4) der Schaltfläche, einmalig bei ihrer Anlage erzeugt und danach unveränderlich. Empfohlener Schlüssel für Regeln in EventBridge: Er übersteht Umbenennungen und Umsortierungen. Die Administrationsoberfläche zeigt je Schaltfläche die Kurzform der UUID und bietet das Kopieren des vollen Werts an.
buttonIndexInteger0-basierte Position der Schaltfläche (0–254). Ändert sich beim Umsortieren — nicht als Schlüssel geeignet.
buttonNameStringBeschriftung der Schaltfläche zum Zeitpunkt des Klicks.
accountIdIntegerSTARFACE-Account-ID des klickenden Benutzers.
timestampIntegerZeitpunkt der Veröffentlichung (Epoch-Millisekunden).
payloadObjektAíPowerDesk-spezifische Nutzlast — der vollständige Kontext des Ruflisteneintrags (siehe unten).

Die Nutzlast payload

Die Felder der Nutzlast sind der verbindliche Vertrag für moduleId = AiPowerDesk. Die Anreicherung erfolgt best-effort: Existiert (noch) keine Zusammenfassung oder Transkription oder schlägt ein Nachschlagen fehl, entfallen die betreffenden Felder — das Ereignis wird dennoch gesendet.

FeldTypBedeutung
callIdIntegerSTARFACE-Call-ID des Gesprächs.
callListEntryIdIntegerID des Ruflisteneintrags.
callerNameStringName des Anrufers.
callerNumberStringRufnummer des Anrufers.
calleeNameStringName des Angerufenen.
calleeNumberStringRufnummer des Angerufenen.
startTimeIntegerGesprächsbeginn (Epoch-Millisekunden).
endTimeIntegerGesprächsende (Epoch-Millisekunden, aus dem Ergebniszeitpunkt des Ruflisteneintrags).
resultTimeIntegerZeitpunkt des Gesprächsergebnisses (Epoch-Millisekunden).
incomingBooleantrue = eingehendes Gespräch.
voicemailBooleantrue = Voicemail-Eintrag.
commentStringAktueller Kommentar des Ruflisteneintrags.
commentAuthorStringAutor des Kommentars.
calledBackBooleanOb der Eintrag als „zurückgerufen" markiert ist.
summaryBriefStringKurzzusammenfassung (Markdown). Nur vorhanden, wenn eine Zusammenfassung existiert — das gilt für alle summary…-Felder.
summaryDetailedStringDetailzusammenfassung (Markdown).
summaryInvoiceTextStringAls Rechnungs-/Belegtext geeignete Zusammenfassung.
summaryNoteWorthyStringAuffälligkeiten des Gesprächs.
summaryReasonStringWahrscheinlicher Anrufgrund.
summaryCategoriesStringKommaseparierte Kategorien (z. B. „Vertrieb, Support").
summaryToneMoodStringTonalität und Stimmung des Gesprächs.
summaryEntitiesStringKommaseparierte Liste genannter Produkte, Firmen oder Dritter.
summaryConfidenceDescriptionStringErläuterung der Konfidenzeinschätzung.
summaryConfidenceValueZahlKonfidenz von Transkription und Zusammenfassung (0–100).
summaryJsonString (JSON)Die vollständige Zusammenfassung als JSON-Text — Struktur siehe TranscriptionSummaryReadyEvent.
transcriptionJsonString (JSON)Das vollständige Transkript als JSON-Text (Absätze, Sprecher, Zeitpositionen; siehe folgende Tabelle). Nur vorhanden, wenn eine Transkription existiert.
transcriptionTextStringDas Transkript als Klartext, Absätze durch Zeilenumbrüche getrennt.

Der JSON-Text in transcriptionJson enthält folgende Struktur:

FeldTypBedeutung
timeIntegerZeitstempel der Transkription (Epoch-Millisekunden).
confidenceZahlGesamtkonfidenz der Transkription.
paragraphsArrayAbsätze des Transkripts, je Eintrag: text (String), channel (Integer), speaker (Integer — Sprecherindex innerhalb des Kanals), start/end (Zahl — Zeitversatz innerhalb der Aufzeichnung), confidence (Zahl).
sourceObjektHerkunft der Transkription: provider (String), model (String), speakerLayout (String — channel_per_side, channel_per_side_heuristic, diarized oder single_speaker; beschreibt, ob channel verlässlich die Gesprächsseite kennzeichnet: 0 = Anruferseite, 1 = angerufene Seite). Kann bei älteren Transkriptionen fehlen.
Beispiel: ActionButtonEvent
{
"moduleId": "AiPowerDesk",
"moduleName": "AiPowerDesk",
"buttonUuid": "7c8f3a2b-9d4e-4f6c-a1b8-2e9f0d5b7a31",
"buttonIndex": 0,
"buttonName": "Ticket erstellen",
"accountId": 42,
"timestamp": 1785829000000,
"payload": {
"callId": 123456,
"callListEntryId": 654321,
"callerName": "Erika Musterfrau",
"callerNumber": "+4972112345678",
"calleeName": "Vertrieb",
"calleeNumber": "+497219876543",
"startTime": 1785828600000,
"endTime": 1785828840000,
"resultTime": 1785828840000,
"incoming": true,
"voicemail": false,
"comment": "Telefonische Beratung zu Produkt X\nAngebot bis Freitag zugesagt.",
"commentAuthor": "System",
"calledBack": false,
"summaryBrief": "**Erika Musterfrau** bittet um ein **Angebot** für Produkt X. …",
"summaryDetailed": "Frau Musterfrau erkundigt sich nach … ",
"summaryInvoiceText": "Telefonische Beratung zu Produkt X",
"summaryNoteWorthy": "",
"summaryReason": "Angebotsanfrage",
"summaryCategories": "Vertrieb, Pre-Sales",
"summaryToneMood": "freundlich, sachlich",
"summaryEntities": "Beispiel GmbH, Produkt X",
"summaryConfidenceDescription": "Transkript weitgehend eindeutig; Namen durch Anruferdaten gestützt.",
"summaryConfidenceValue": 93.0,
"summaryJson": "{\"brief\":\"**Erika Musterfrau** bittet um ein **Angebot** für Produkt X. …\", … }",
"transcriptionJson": "{\"time\":1785828900000,\"confidence\":0.95,\"paragraphs\":[{\"text\":\"Guten Tag, mein Name ist Musterfrau …\",\"channel\":0,\"speaker\":0,\"start\":0.4,\"end\":6.8,\"confidence\":0.97}, … ],\"source\":{\"provider\":\"deepgram\",\"model\":\"nova-2\",\"speakerLayout\":\"channel_per_side\"}}",
"transcriptionText": "Guten Tag, mein Name ist Musterfrau von der Beispiel GmbH.\nGuten Tag, was kann ich für Sie tun?"
}
}
Anwendungsbeispiel

Ein Systemhaus legt eine Schaltfläche „Ticket erstellen" an. EventBridge matcht auf die buttonUuid und ruft per Webhook die Ticketsystem-API auf — mit payload.summaryInvoiceText als Ticketbetreff und payload.transcriptionText als Beschreibung. Der Agent dokumentiert ein Gespräch mit einem einzigen Klick.

TranscriptionSummaryReadyEvent

Wird veröffentlicht, sobald eine KI-Gesprächszusammenfassung erstellt und gespeichert wurde („Zusammenfassung fertig") — für Gespräche wie für Voicemails. Nachträgliche manuelle Korrekturen meldet separat das TranscriptionSummaryChangedEvent.

Auslösezeitpunkt: nach jeder Zusammenfassungserstellung, unabhängig vom Auslöser — automatisch durch den Hintergrundprozess des Moduls (prüft etwa alle 30 Sekunden auf Transkriptionen ohne Zusammenfassung), manuell aus der Oberfläche oder nach der automatischen Neuerzeugung im Zuge einer Feldkorrektur mit der Option „auf alle Zusammenfassungen anwenden". Voraussetzung ist eine vorhandene Transkription (aus der Live-Transkription oder Call Recording); für Voicemails erstellt das Modul die Transkription bei Bedarf selbst. Leere Zusammenfassungen — etwa bei unverwertbarer KI-Antwort oder inhaltsleerer Transkription — werden nicht gemeldet.

Die Felder ab callerNumber wiederholen Anrufkontext, der sich auch über die callId auflösen ließe. Sie sind enthalten, damit Konsumenten außerhalb der STARFACE — etwa eine EventBridge-Regel, die direkt in ein Drittsystem schreibt — allein mit dem Ereignis arbeiten können. Aufgenommen sind nur Werte, die für das ganze Gespräch stabil sind.

FeldTypBedeutung
callIdIntegerSTARFACE-Call-ID des Gesprächs.
voicemailBooleantrue = Zusammenfassung einer Voicemail.
timestampIntegerZeitpunkt der Veröffentlichung (Epoch-Millisekunden).
summaryJsonString (JSON)Die vollständige Zusammenfassung als JSON-Text — Struktur siehe unten.
callerNumberStringRufnummer des Anrufers; leer, wenn unbekannt.
calledNumberStringGewählte Rufnummer; leer, wenn unbekannt.
incomingBooleantrue = eingehendes Gespräch.
startTimeIntegerGesprächsbeginn (Epoch-Millisekunden), 0 wenn unbekannt.
endTimeIntegerGesprächsende (Epoch-Millisekunden), 0 wenn unbekannt.
recordedAccountIdIntegerSTARFACE-Account des Gesprächsabschnitts, zu dem die Aufzeichnung gehört. Bewusst nicht accountId genannt: An einem Gespräch können durch Weiterleitungen mehrere Accounts beteiligt sein; eine Aufzeichnung beginnt jedoch auf einem Abschnitt — eine Weiterleitung erzeugt eine neue Aufzeichnung und damit ein eigenes Ereignis.
Beispiel: TranscriptionSummaryReadyEvent
{
"callId": 123456,
"voicemail": false,
"timestamp": 1785828900000,
"summaryJson": "{\"brief\":\"**Erika Musterfrau** bittet um ein **Angebot** für Produkt X. …\", … }",
"callerNumber": "+4972112345678",
"calledNumber": "+497219876543",
"incoming": true,
"startTime": 1785828600000,
"endTime": 1785828840000,
"recordedAccountId": 17
}

Struktur von summaryJson

summaryJson transportiert die vollständige Zusammenfassungsstruktur als JSON-Text (dieselbe Struktur wie das gleichnamige Feld der Aktionsschaltflächen-Nutzlast). Dekodiert:

FeldTypBedeutung
briefStringKurzzusammenfassung (rund 100 Wörter, Markdown; Kernpunkte fett).
detailedStringDetailzusammenfassung (bis rund 400 Wörter, Markdown).
noteworthyStringAuffälligkeiten (z. B. ungewöhnliche Anrufzeit); kann leer sein.
keysPerSpeakerArrayKernaussagen je Sprecher (siehe folgende Tabelle).
categoriesStringKommaseparierte Kategorien des Gesprächs (z. B. „Vertrieb, Support, Finanzen").
reasonStringWahrscheinlicher Anrufgrund.
invoiceTextStringAls Rechnungs-/Belegtext geeignete Zusammenfassung.
ticketRefsArray von StringIm Gespräch genannte Ticket-/Vorgangsnummern.
contactRefsArray von StringIm Gespräch genannte E-Mail-Adressen und Rufnummern.
entitiesStringKommaseparierte Liste genannter Produkte, Dienstleistungen, Firmen oder Dritter.
toneMoodStringTonalität, Stimmung und Gesprächsklima.
confidenceValueIntegerKonfidenz von Transkription und Zusammenfassung (0–100).
confidenceDescriptionStringErläuterung der Konfidenzeinschätzung.

Jeder Eintrag in keysPerSpeaker beschreibt einen Gesprächsteilnehmer:

FeldTypBedeutung
channelIntegerKanal aus dem Transkript; bei kanalgetrennten Transkriptionen: 0 = Anruferseite, 1 = angerufene Seite.
speakerIdIntegerSprecherindex innerhalb des Kanals (unterscheidet mehrere Personen derselben Seite).
nameStringName des Sprechers, sofern bekannt — sonst die Rolle (Anrufer/Angerufener).
sideStringcaller oder callee.
actionsObjektKernaussagen bzw. nächste Schritte des Sprechers als Schlüssel; Wert ist je Aussage ein Array von Tags: important, task, done, agreements, todo.
summaryJson (dekodiert)
{
"brief": "**Erika Musterfrau** bittet um ein **Angebot** für Produkt X. **Rückmeldung bis Freitag** vereinbart.",
"detailed": "Frau Musterfrau erkundigt sich nach den Konditionen für Produkt X. …",
"noteworthy": "",
"keysPerSpeaker": [
{
"channel": 0,
"speakerId": 0,
"name": "Erika Musterfrau",
"side": "caller",
"actions": { "Erwartet Angebot für Produkt X": ["important"] }
},
{
"channel": 1,
"speakerId": 0,
"name": "Max Mustermann",
"side": "callee",
"actions": { "Angebot bis Freitag erstellen": ["todo"] }
}
],
"categories": "Vertrieb, Pre-Sales",
"reason": "Angebotsanfrage",
"invoiceText": "Telefonische Beratung zu Produkt X",
"ticketRefs": [],
"contactRefs": ["erika.musterfrau@beispiel.de", "+4972112345678"],
"entities": "Beispiel GmbH, Produkt X",
"toneMood": "freundlich, sachlich",
"confidenceValue": 93,
"confidenceDescription": "Transkript weitgehend eindeutig; Namen durch Anruferdaten gestützt."
}

TranscriptionSummaryChangedEvent

Wird veröffentlicht, wenn ein Benutzer eine bestehende Zusammenfassung nachträglich ändert — etwa falsch erkannte Namen oder Formulierungen über die Inline-Bearbeitung korrigiert. Das Ereignis nennt das geänderte Feld mit Vorher-/Nachher-Wert, sodass Konsumenten die Korrektur in bereits übertragene Datensätze nachziehen oder auditieren können. Es trägt denselben Anrufkontext wie das TranscriptionSummaryReadyEvent, damit ein Drittsystem den zugehörigen Datensatz ohne Rückfrage an die STARFACE wiederfindet.

Auslösezeitpunkt: nach jeder gespeicherten Feldänderung durch einen Benutzer. Wählt der Benutzer dabei die Option, die Korrektur auf alle Zusammenfassungsfelder zu übertragen, folgt zusätzlich ein neues TranscriptionSummaryReadyEvent mit der neu erzeugten Gesamtstruktur.

FeldTypBedeutung
callIdIntegerSTARFACE-Call-ID des Gesprächs.
voicemailBooleantrue = Zusammenfassung einer Voicemail.
timestampIntegerZeitpunkt der Veröffentlichung (Epoch-Millisekunden).
changedFieldStringName des geänderten Felds innerhalb der Zusammenfassungsstruktur: brief, detailed, invoiceText, reason, categories oder entities.
beforeStringWert des Felds vor der Änderung.
afterStringWert des Felds nach der Änderung.
changedByAccountIdIntegerSTARFACE-Account-ID des Benutzers, der die Änderung vorgenommen hat.
callerNumberStringRufnummer des Anrufers; leer, wenn unbekannt.
calledNumberStringGewählte Rufnummer; leer, wenn unbekannt.
incomingBooleantrue = eingehendes Gespräch.
startTimeIntegerGesprächsbeginn (Epoch-Millisekunden), 0 wenn unbekannt.
endTimeIntegerGesprächsende (Epoch-Millisekunden), 0 wenn unbekannt.
recordedAccountIdIntegerSTARFACE-Account des aufgezeichneten Gesprächsabschnitts (siehe TranscriptionSummaryReadyEvent).
Beispiel: TranscriptionSummaryChangedEvent
{
"callId": 123456,
"voicemail": false,
"timestamp": 1785832500000,
"changedField": "invoiceText",
"before": "Telefonische Beratung zu Produkt X",
"after": "Telefonische Beratung zu Produkt X, Angebot zugesagt",
"changedByAccountId": 42,
"callerNumber": "+4972112345678",
"calledNumber": "+497219876543",
"incoming": true,
"startTime": 1785828600000,
"endTime": 1785828840000,
"recordedAccountId": 17
}

Versionierung & Kompatibilität

Ereignisnamen und Feldnamen sind stabile Verträge; Erweiterungen erfolgen additiv (neue Ereignisse, neue optionale Felder). Verarbeiten Sie Nutzlasten daher tolerant gegenüber zusätzlichen Feldern.

  • ActionButtonEvent: verfügbar seit Modulversion 26.5.21.
  • TranscriptionSummaryReadyEvent und TranscriptionSummaryChangedEvent: verfügbar seit Modulversion 26.6.10; die Anrufkontext-Felder (callerNumber bis recordedAccountId) seit Modulversion 26.7.28.

Den anlagenweiten Ereigniskatalog führt die Ereignisliste der EventBridge-Dokumentation; Änderungen an den Ereignissen dokumentieren die Release Notes der jeweiligen Modulversion.