Flows
Ein Ablauf ist ein Teil des Dialogablaufs "Skill", der die Interaktion mit dem Benutzer zum Abschließen einer Aufgabe oder eines Teils einer Aufgabe definiert, die der Benutzer ausführen möchte.
Typische Beispiele für Abläufe sind:
- Intent-gesteuerte Abläufe, bei denen jedem im Skill definierten Intent ein Ablauf zugeordnet ist, z.B. "Pizza bestellen", "Geld senden" oder "Aufwand erstellen".
- Unterstützende oder Utilityabläufe für Aufgaben wie Benutzerautorisierung, Onboarding neuer Benutzer, Logging oder Bereitstellung von Benutzerunterstützung. Solche Flows können aus mehreren Flows aufgerufen werden.
Beispiel: Sie können einen Subflow "Konto erstellen" verwenden, den Sie aus Abläufen wie "Pizza bestellen" oder "Geld senden" aufrufen.
Flow-Typen
Im Allgemeinen werden Flows in folgende Typen unterteilt:
- Hauptfluss.
- Intent-Abläufe.
- Abläufe für integrierte Ereignisse und Systemübergänge.
- Subflows, die von Abläufen der obersten Ebene verwendet werden können.
Hauptfluss
Bei Dialogabläufen, die im Visual Flow Designer erstellt werden, verfügt jeder Dialogablauf über einen einzigen Hauptfluss, mit dem Folgendes konfiguriert wird:
- Die Zuordnungen zwischen Ereignissen und Abläufen.
- Globale Kontextvariablen, die in allen Abläufen des Skills verwendet werden können.
Wenn Sie mit einem Freemarker-Ausdruck auf eine solche Variable zugreifen, stellen Sie dem Variablennamen im Ausdruck
skill.
voran.Diese Variablen auf Skill-Ebene werden gelöscht, nachdem die Benutzersession abläuft. Sessionablauf wird auf Kanalebene konfiguriert und beträgt in der Regel standardmäßig 24 Stunden.
Der Hauptfluss ist nicht wirklich ein Fluss als solcher. Vielmehr ist es das Control Center für den Skill, von dem aus Benutzer zu speziellen Abläufen geleitet werden, die den aufgelösten Intents zugeordnet sind. Die Hauptablaufkonfiguration umfasst die vordefinierte Variable skill.system.nlpresult
, die bei der Auflösung eines Intents mit Intent- und Entityabgleichsergebnissen aufgefüllt wird. Dadurch kann die Kontrolle an einzelne Abläufe übergeben werden.
Intent-Abläufe
Wenn Sie Dialogabläufe mit Visual Flow Designer entwerfen, erstellen Sie Abläufe, die Sie dann Ihren Intents zuordnen. Alle regulären Intents (d.h. Intents, die keine Antwort-Intents sind) müssen mit einem Ablauf verknüpft werden.
Für Antwort-Intents können Sie entweder (oder eine Kombination) der folgenden Ansätze verwenden:
- Erstellen Sie einen einzelnen Ablauf, und ordnen Sie ihn dem integrierten Ereignis "Antwort-Intent" zu.
- Erstellen Sie einzelne Abläufe für bestimmte Antwort-Intents.
Mit diesem Ansatz können Sie bestimmte Prompts oder Fragen vor und/oder jeder Antwort folgen.
Sie haben auch die Möglichkeit, überhaupt keinen Ablauf für Antwort-Intents anzugeben. In diesem Fall erhält der Benutzer die Antwort, ohne dass der Dialogablauf direkt involviert ist.
Utilityflows für integrierte Ereignisse und Systemübergänge
Sie können Abläufe erstellen, die durch die integrierten Ereignisse des Skills (wie Antwort-Intent und Dialogfehler), benutzerdefinierte Ereignisse und Systemübergänge (wie "Benutzer autorisieren" und "Dialogfehler") ausgelöst werden.
Benutzerdefinierte Unterfelder
Sie können auch Abläufe erstellen, die nicht einem bestimmten Intent zugeordnet sind oder auf integrierten Ereignissen (oder Systemübergängen) basieren, die jedoch von anderen Abläufen aufgerufen werden können.
Beispiel: In einem Skill für ein Restaurant können Sie einen Ablauf "Menü anzeigen" verwenden, der in der Mitte eines Bestellablaufs aufgerufen werden kann, wenn ein Benutzer dies anfordert.
Variablen und Scope
Im Visual Flow Designer können Variablen auf zwei Ebenen definiert werden:
- In einem individuellen Fluss. Auf Variablen, die auf dieser Ebene definiert sind, kann nur innerhalb des Ablaufs zugegriffen werden, in dem sie definiert sind.
Auf eine Flowscope-Variable kann nicht direkt außerhalb des Flows zugegriffen werden, in dem sie definiert ist, selbst nicht über Subflows oder aufrufende Flows. Sie können jedoch Eingabe- und Ausgabeparameter für einen Ablauf definieren, um Werte an und von Variablen zu übergeben, die im Ablauf definiert sind.
Wenn der Ablauf beendet ist, werden die Variablenwerte zurückgesetzt.
Die meisten Variablen sollten auf dieser Ebene definiert werden. Durch die regelmäßige Verwendung von Flussvariablen machen Sie Ihre Abläufe eigenständiger, was sie einfacher wiederzuverwenden, isolierter zu testen und weniger wahrscheinlich von Fehlern in anderen Abläufen beeinträchtigt zu werden.
- Im Hauptfluss. Hier definierte Variablen verfügen über einen Skill-weiten (globalen) Geltungsbereich, d.h. sie können von allen Abläufen im Skill aufgerufen werden.
Werte für diese globalen Variablen persistieren die Session des Benutzers mit dem Skill. Die Variablen werden gelöscht, wenn die Benutzersession mit dem Skill beendet wird. Dies geschieht, wenn eines der folgenden Ereignisse eintritt:
- Der Benutzer schließt das Chat-Fenster.
- Die Session wird nach einem Zeitraum der Inaktivität wegen Timeout abgebrochen (der Wert wird auf Kanalebene definiert und beträgt in der Regel 24 Stunden).
- Im Kontext eines digitalen Assistenten beendet der Benutzer den Skill oder erreicht einen Status, der einen anderen Skill direkt aufruft.
Hinweis
Wenn der Benutzer eine Unterhaltung mit einer nicht sequenziellen Eingabe unterbricht und vorübergehend an einen anderen Skill weitergeleitet wird, bleibt der digitale Assistent im Kontext des ursprünglichen Skills und seine Variablen werden nicht automatisch gelöscht. Wenn der Benutzer in diesem Fall nach der Unterbrechung zum ursprünglichen Skill zurückkehrt, enthalten die Variablen ihre Werte. Wenn der Benutzer wählt, nicht zum ursprünglichen Skill zurückzukehren, wird der ursprüngliche Skill beendet, und die Variablen werden gelöscht.
Sie sollten die Verwendung dieser Skillbereichsvariablen auf Variablen beschränken, die einen gemeinsamen Kontext erfordern. Beispiel: In einem Skill für die Lebensmittelzustellung benötigen Sie möglicherweise eine Variable auf Skillebene für die Liste aller Bestellungen, die ein Benutzer in einer Session ausgeführt hat.
In den Komponenten "Gemeinsame Antwort" und "Variable festlegen" können Sie auch Variablen des Benutzer- oder Profilgeltungsbereichs erstellen. In solchen Fällen erstellen Sie die Variablen über die Dropdown-Liste direkt in der Eigenschaft Variable der Komponente (nicht die Schaltfläche Erstellen neben der Eigenschaft). Siehe Andere Variablentypen.
Variablenwerte müssen mit dem Typ übereinstimmen, der für die Variable deklariert wurde. Wenn einer Variablen ein Wert zugewiesen wird, der nicht dem deklarierten Typ entspricht, tritt ein Laufzeitfehler auf.
Im Visual Flow Designer können Variablen bei ihrer Deklaration ein Anfangswert zugewiesen werden. (Dies unterscheidet sich in YAML-basierten Dialogabläufen, in denen Sie den Anfangswert mit einer
System.SetVariable
-Komponente festlegen müssen.)
Hinweise für Entwickler, die für YAML-basierte Dialogabläufe verwendet werden
Wenn Sie Dialogabläufe mit dem Codeeditor OBotML entwerfen, müssen Sie die folgenden Informationen zu Abläufen kennen, die Sie mit Visual Flow Designer erstellen:
- Im Visual Flow Designer ist kein
return
-Übergang verfügbar.Wenn der letzte Status eines Ablaufs erreicht ist, werden die Variablen des Ablaufs automatisch gelöscht (obwohl alle Variablen auf Skill-Ebene bis zum Ende der Session aktiv bleiben).
- Statusübergänge können nur über die Übergangs- oder Übergangsaktionen
next
definiert werden.Wenn Sie mit dem Designer einen Status in einen Ablauf einfügen, werden die entsprechenden
next
-Übergänge in diesen Zustand und den vorherigen Zustand eingefügt.Implizite Übergänge, die auf der Abfolge der Status basieren, sind nicht zulässig. Wenn kein übereinstimmender Übergang gefunden wird, wird ein Laufzeitfehler ausgelöst.
- Es ist nicht möglich, FreeMarker-Ausdrücke direkt zu verwenden, um die Zielstatus für Übergänge in einer Komponente bedingt zu definieren. Um den Zielstatus bedingt anzugeben, fügen Sie eine Switch-Komponente in den Ablauf ein, um den Ausdruck zu speichern, und definieren Sie die Aktionsübergänge basierend auf dem Ergebnis des Ausdrucks.
Abläufe entwerfen
Flow erstellen
Bevor Sie einen beliebigen Ereignistyp zuordnen können, unabhängig davon, ob es sich um ein Intent-Ereignis für einen Transaktionsablauf oder um ein integriertes Ereignis für einen Utilityfluss handelt, müssen Sie zuerst den Ablauf selbst erstellen. Das Mapping, das Sie einem Ablauf schließlich zuweisen, bestimmt, ob sein Geltungsbereich sich auf den gesamten Skill oder nur auf einen Ablauf erstreckt.
Klicken Sie auf + Ablauf hinzufügen, um einen Ablauf zu erstellen.
Der Editor wird mit einem Flowstartknoten aufgefüllt. Sie bauen den Fluss von hier aus auf. Der Editor enthält auch den Knoten "Ereignisse", in dem Sie die Subflows für die Systemübergangsereignisse definieren, die Dialogfehler, Out-of-Order-Benutzermeldungen, unerwartete Benutzereingaben und Authentifizierungen verarbeiten.
Beschreibung der Abbildung df-2-0-initial-flow.png
Ihr Ablauf kann ohne einen tatsächlichen Endflussstatus (implizit) enden. Wenn Sie jedoch Ausgabeparameter definiert haben, die erforderliche Werte an einen anderen Ablauf übergeben, müssen Sie einen Endflussstatus hinzufügen, der diese Ausgabeparameter angibt.
Tipp:
Klicken Sie auf Validieren, und prüfen Sie die Ergebnisse beim Erstellen eines Ablaufs..
Variablen auf Qualifikationsebene erstellen
- Wählen Sie Hauptablauf > Skillvariable aus.
- Klicken Sie auf + Variable hinzufügen, und schließen Sie das Dialogfeld ab.
- Wählen Sie den Variablentyp als Entity, primitiven Typ oder als Liste (JSON-Array) oder Map (JSON-Objekt) aus. Wenn die Variable eine Entity referenziert (benutzerdefiniert oder integriert), füllen Sie das Dialogfeld aus, indem Sie die Variable für die ausgewählte Entity benennen.
Hinweis
Sie müssen Variablen für alle Variablen erstellen, die in Entity-Event-Handlern oder benutzerdefinierten Komponenten festgelegt oder erstellt werden. - Geben Sie bei Bedarf einen anfänglichen (Standard-)Wert ein. Dies kann ein einzelner Wert (z.B.
false
, für einen booleschen Wert oder4
für eine Ganzzahl), ein Ausdruck (z.B.list.ManageAccounts.addAccount
für eine Zeichenfolge) oder ein JSON-Objekt sein, das die Schlüssel und Werte in doppelte Anführungszeichen ("
) setzt, wie durch das folgende Listenobjekt dargestellt:
Dieses Snippet veranschaulicht den Standardwert für eine Listentypvariable in einem Array.[ { "pizzaType":"Veggie", "price":"10 USD" } ]
Tipp:
Wenn Sie einen Anfangswert für eine Variable festlegen, müssen Sie keinen Status "Variable festlegen" im Ablauf hinzufügen, um ihm einen Anfangswert zu geben.
Anfangsstatus angeben

Der Startstatus ist der erste Status, der innerhalb eines Ablaufs ausgeführt wird. Wenn andere Status dem Startstatus vorangehen, überspringt der Ablauf diese Status und lässt sie nicht ausgeführt werden.
Zustand hinzufügen
Beschreibung der Abbildung df-2-0-initial-flow.png
Sie können Ihren Status vom Flow-Startknoten aus erstellen, indem Sie zuerst auf das Menü klicken und dann einen Status einfügen, der im Dialogfeld "Status hinzufügen" ausgewählt wurde, indem Sie auf Startstatus hinzufügen klicken.
Beschreibung der Abbildung df-2-0-add-state-dialog.png klicken.
Bundesland zwischen Bundesstaaten einfügen
- Klicken Sie auf die Übergangszeile, die beide Status verbindet, und öffnen Sie dann das Menü "Status hinzufügen", indem Sie auf
klicken. Beachten Sie, dass die Übergangszeile den Typ des Übergangs zwischen den Statusangaben angibt (z.B.
next
). - Erstellen Sie sofort einen Status, indem Sie im Menü Nächster Übergang oder im Menü Übergang zu die Option "Status hinzufügen" für Aktionen auswählen.
Eigenschaften eines Status bearbeiten
Wenn Sie auf einen Status klicken, wird der Eigenschaftseditor geöffnet, in dem Sie die Komponentenkonfiguration und -übergänge festlegen.
Beschreibung der Abbildung df-2-0-start-state-properties.png
Der Eigenschaftseditor für den Ausgabestatus ist beispielsweise eine Sende-Nachrichtenkomponente für die Ausgabe einer Zeichenfolge.
Beschreibung der Abbildung df-2-0-start-state-component-page.png
Status löschen
Sie können einen Status löschen, indem Sie mit der Maus auf die entsprechende Kachel zeigen, auf klicken und dann Löschen auswählen.
WARNUNG:
Das Löschen eines Status kann unbeabsichtigte Konsequenzen haben. Wenn Sie einen Status löschen, wird der Status vollständig von jeder Stelle entfernt, an der er im Ablauf angezeigt wird. Wenn Sie den falschen Status löschen, können Sie ihn wiederherstellen.- Wählen Sie im Menü die Option Status löschen.
- Klicken Sie im Bestätigungsdialogfeld auf Löschen.
Wenn Sie die fehlerhaften Status gelöscht haben, klicken Sie auf Rückgängig machen.
Tipp:
Wenn Sie nur ein Vorkommen eines Status in einem Ablauf entfernen möchten, können Sie ihn von diesem Teil des Ablaufs trennen, indem Sie den Wert des Übergangs vom vorherigen Status ändern.gelöschten Status wiederherstellen
Wenn Sie versehentlich einen Status löschen und dann feststellen, dass Sie ihn wiederherstellen möchten, können Sie ihn wiederherstellen, solange Sie im Visual Flow Designer verbleiben und keine anderen Änderungen vorgenommen haben. Führen Sie hierzu die folgenden Schritte aus:
- Suchen Sie das Dialogfeld, in dem bestätigt wird, dass der Status gelöscht wurde. Dies sollte in der unteren linken Ecke Ihres Bildschirms angezeigt werden und ungefähr wie der folgende Screenshot aussehen:
- Klicken Sie auf Aufheben.
Status "Verbindung getrennt" erneut herstellen
Im Laufe der Entwicklung können Sie eine Unterbrechung zwischen den Staaten verursachen, indem Sie einen Übergang ändern. Zu diesem Zeitpunkt wird der aus dem Ablauf unterbrochene Teil des Ablaufs in einer Kachel mit dem Namen Verbindung getrennt geparkt, die unterhalb der Kachel Ereignisse angezeigt wird.
Sie können einen Teil eines nicht verbundenen Flusses erneut mit einem Arbeitsfluss verbinden, indem Sie den Namen eines nicht verbundenen Status als Übergang im Arbeitsfluss angeben. Führen Sie hierzu die folgenden Schritte aus:
- Wenn Sie nicht sicher sind, welche Status getrennt wurden, doppelklicken Sie auf die Kachel Verbindung getrennt, um die Status anzuzeigen, die vom Ablauf getrennt wurden.
- Wählen Sie die Kachel des Status aus, von dem aus Sie in den Status "Aktuell getrennt" übergehen möchten, um den zugehörigen Eigenschaftsinspektor zu öffnen.
- Wählen Sie im Eigenschaftsinspektor die Registerkarte Übergänge aus.
- Wenn Sie den nächsten Übergang verwenden, wählen Sie den Status "Nicht verbunden" aus der Dropdown-Liste Nächster Übergang aus.
- Wenn Sie einen Aktionsübergang verwenden, klicken Sie für den Übergang, den Sie für den Status verwenden möchten, auf Bearbeiten (
), und ändern Sie den Wert für Übergang zu in den Status, zu dem Sie eine Verbindung herstellen möchten.
Neuen ersten Status einfügen

- Bewegen Sie den Mauszeiger über den Status des Startknotens, um das Menü
aufzurufen.
- Wählen Sie Vorherigen Status hinzufügen aus.
- Wählen Sie im Dialogfeld "Status hinzufügen" eine Vorlage aus. Sie können den Standardübergang
Next
auswählen oder eine Übergangsaktion erstellen, die Sie später im Eigenschaftseditor konfigurieren können. - Nachdem Sie den vorherigen Status eingefügt haben, können Sie ihn als Startknoten zuweisen, indem Sie im Menü die Option Startstatus festlegen auswählen.
Status kopieren
- Klicken Sie in dem Status, den Sie kopieren möchten, auf das Menü
, und wählen Sie Status kopieren. Ihre Auswahl kann je nach Position und Beziehung des Staates zu anderen Staaten einen einzelnen Status oder eine ganze Verzweigung enthalten.
- Wählen Sie den Zielablauf aus (entweder den aktuellen Ablauf oder einen anderen Ablauf im Skill). Klicken Sie dann auf Kopieren. Wenn Sie einen separaten Ablauf auswählen, werden alle der Auswahl zugeordneten Variablen in diesen Ablauf kopiert.
- Öffnen Sie den Knoten "Nicht verbunden", und legen Sie dann einen Übergang fest, der den Status oder die Status mit dem Fluss verbindet. Wenn Sie einen neuen Ablauf basierend auf den kopierten Statuswerten erstellen, wählen Sie Startstatus festlegen für den ausgewählten Status aus.Hinweis
In den aktuellen Ablauf kopierte Status werden von den Originalen mit einer 1 unterschieden. Beispiel: Die Kopie voncancelOrder
lautetcancelOrder1
.