Dialogablaufstruktur im YAML-Modus
Die OBotML-Definition ist in drei Hauptteile unterteilt: context
, defaultTransitions
und states
. Sie definieren die Variablen, die in der Session innerhalb des context
-Knotens verfügbar sind. Die Definition des Ablaufs selbst wird im Abschnitt states
beschrieben.
Der Dialogablauf ist wie folgt aufgebaut:
main: true
name: "HelloKids"
context:
variables:
variable1: "entity1"
variable2: "error"
...
States
state1:
component: "a custom or built-in component"
properties:
property1: "component-specific property value"
property2: "component-specific property value"
transitions:
actions:
action1: "value1"
action2: "value2"
state2:
component: "a custom or built-in component"
properties:
property1: "component-specific property value"
property2: "component-specific property value"
transitions:
actions:
action1: "value1"
action2: "value2"
...
Hinweis
In Plattformversionen vor 20.12 beginnt der Dialogablauf mit dem Knoten
In Plattformversionen vor 20.12 beginnt der Dialogablauf mit dem Knoten
metadata
, der einen platformVersion
-Knoten enthält. Ab Plattformversion 20.12 sind diese Knoten veraltet.
Der context-Knoten
Bei den Variablen, die Sie im context
-Knoten definieren, kann es sich um Primitive-Typen wie int
, string
, boolean
, double
oder float
handeln. Sie können eine Variable als Map (ein JSON-Objekt) definieren oder Variablen verwenden, um die Fehlerbehandlung zu beschreiben.
Wie das folgende Snippet aus der PizzaBot-Dialogablaufdefinition zeigt, können Sie Variablen für integrierte oder benutzerdefinierte Entitys benennen (in diesem Fall sind dies die Variablen
PizzaSize
und PizzaCrust
). Neben integrierten und benutzerdefinierten Entitys können Sie auch eine Variable für die Entity nlpresult
deklarieren, die das Intent enthält, das aus der Benutzereingabe aufgelöst wurde. Diese Variablen gelten für den gesamten Ablauf. Im Abschnitt Wie schreibe ich Dialogabläufe in OBotML? erhalten Sie Informationen darüber, wie Sie die verschiedenen Teile des Dialogablaufs assemblieren können. Sie können außerdem den Geltungsbereich von Benutzervariablenwerten festlegen. So kann Ihr Bot den Benutzer erkennen und Benutzervoreinstellungen nach der ersten Unterhaltung dauerhaft persistieren. Unter Benutzerspezifische Variablen in YAML-Dialogabläufen werden diese Variablen beschrieben.main: true
name: "PizzaBot"
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
iResult: "nlpresult"
Der defaultTransitions-Knoten
Sie können Übergänge an zwei Stellen festlegen: als Bestandteil der Komponentendefinitionen in den Statuswerten des Dialogablaufs oder im Knoten
defaultTransitions
. Dieser Knoten legt die globale Navigation fest. Beispiel:defaultTransitions
next: "..."
error: "..."
actions:
action_name1: "..."
action_name2: "..."
Der Standardübergang fungiert als Fallback, d.h. er wird ausgelöst, wenn keine Übergänge in einem Status definiert sind oder wenn die Bedingungen, die für das Auslösen eines Übergangs erforderlich sind, nicht erfüllt werden können.Mit dem Knoten
defaultTransitions
können Sie das Routing definieren, mit dem Ihr Skillbot unerwartete Benutzeraktionen ordnungsgemäß verarbeiten kann. Insbesondere können Sie Ihrem Skillbot mit diesem Knoten ermöglichen, angemessen zu reagieren, wenn ein Benutzer eine Option in einer vorherigen Antwort anstelle einer der Optionen in der aktuellen (und besser geeigneten) Antwort des Bots auswählt. Wie von der Aktion NONE
im folgenden Snippet gezeigt, können Sie diesen Übergang so konfigurieren, dass eine Weiterleitung zu einem Status erfolgt, der alle unerwarteten Aktionen verarbeitet.defaultTransitions:
error: "globalErrorHandler"
...
globalErrorHandler:
component: System.Switch
properties:
source: "${system.errorState}"
values:
- "getOrderStatus"
- "displayOrderStatus"
- "createOrder"
transitions:
actions:
NONE: "unhandledErrorToHumanAgent"
getOrderStatus: "handleOrderStatusError"
displayOrderStatus: "handleOrderStatusError"
createOrder: "handleOrderStatusError"
Der states-Knoten
In YAML-basierten Dialogen definieren Sie jedes Dialogfeld und die zugehörigen Vorgänge als eine Abfolge von Übergangsstatus, mit denen die Logik innerhalb des Dialogablaufs verwaltet wird. Um die Aktion anzustoßen, benennt jeder
state
-Knoten in Ihrer OBotML-Definition eine Komponente, die die Funktionalität bereitstellt, die an dieser Stelle im Dialog benötigt wird. Status werden im Wesentlichen um die Komponenten herum erstellt. Sie enthalten komponentenspezifische Eigenschaften und definieren die Übergänge zu anderen Status, die nach Ausführung der Komponente ausgelöst werden. state_name:
component: "component_name"
properties:
component_property: "value"
component_proprety: "value"
transitions:
actions:
action_string1: "go_to_state1"
action_string2: "go_to_state2"
Eine Statusdefinition kann die Übergänge enthalten, die für die Komponente spezifisch sind, oder die Standardübergange next
, error
, actions
oder return
(die im Abschnitt Ablaufnavigation und Übergänge beschrieben werden), die Sie für jede Komponente definieren können. Übergänge, die in Status festgelegt werden, können durch die globalen Übergänge außer Kraft gesetzt werden, die im Knoten defaultTransitions
definiert sind.
PizzaBot enthält eine Abfolge von
state
-Knoten, die das Alter eines Kunden überprüfen. Diese Status umfassen Komponenten, die den vom Benutzer angegebenen ganzzahligen Wert abrufen, prüfen und gegebenenfalls eine Textzeichenfolge ausgeben. Um den Prozess zu starten, fordert die Statuskomponente askage
die Benutzereingabe an und geht dann in den Status checkAge
über, dessen Komponente AgeChecker
die Benutzereingabe validiert. In diesem Fall ist der Dialog eine Schnittstelle: Der Schlüssel transitions
definiert den Status block
oder allow
. Wenn der Status allow
ausgelöst wird, kann der Benutzer fortfahren. In den nachfolgenden Statusdefinitionen wird die Benutzereingabe verfolgt, um den Kontext des Benutzers solange beizubehalten, bis die Bestellung abgeschlossen ist. Wenn die Benutzereingabe dazu führt, dass die Komponente AgeChecker
die Aktion block
auslöst, wird die Unterhaltung jedoch für einen minderjährigen Benutzer beendet, weil der Dialog in den Status underage
übergeht.main: true
name: "PizzaBot"
context:
variables:
size: "PizzaSize"
type: "PizzaType"
crust: "PizzaCrust"
cheese: "CheeseType"
iResult: "nlpresult"
...
askage:
component: "System.Output"
properties:
text: "How old are you?"
transitions:
next: checkage
checkage:
component: "AgeChecker"
properties:
minAge: 18
transitions:
actions:
allow: "crust"
block: "underage"
crust:
component: "System.List"
properties:
options: "Thick,Thin,Stuffed,Pan"
prompt: "What crust do you want for your Pizza?"
variable: "crust"
transitions:
...
underage:
component: "System.Output"
properties:
text: "You are too young to order a pizza"
transitions:
return: "underage"