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.


Eine Beschreibung von yaml_sections.png folgt

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 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"