Dialogmodul mit Kontext personalisieren

Um die Konversation zu personalisieren, kann Ihr Assistent Informationen vom Kunden erfassen und später in der Konversation darauf verweisen.

Informationen über mehrere Dialogrunden beibehalten

Das Dialogmodul ist statusunabhängig. Dies bedeutet, dass es keine Informationen von einer Interaktion mit dem Benutzer bis zur nächsten aufbewahrt. Wenn Sie einen Dialog zu einem Assistenten hinzufügen und bereitstellen, speichert der Assistent den Kontext eines Nachrichtenaufrufs und übergibt ihn dann bei der nächsten Anforderung während der aktuellen Sitzung erneut. Die aktuelle Sitzung bleibt bestehen, während ein Benutzer mit dem Assistenten interagiert, plus dem festgelegten Zeitrahmen für die Inaktivität der Sitzung. Die maximal zulässige Sitzungsinaktivitätszeit liegt abhängig von Ihrem Plantyp zwischen 5 Minuten und 7 Tagen. Wenn Sie den Dialog nicht zu einem Assistenten hinzufügen, ist es Ihre Aufgabe als Entwickler angepasster Anwendungen, alle fortlaufenden Informationen zu verwalten, die die Anwendung benötigt.

Die Anwendung kann Informationen an den Dialog übergeben und der Dialog kann diese Informationen aktualisieren und an die Anwendung oder an einen nachfolgenden Knoten übergeben. Für diesen Zweck werden im Dialogmodul Kontextvariablen verwendet.

Kontextvariablen

Eine Kontextvariable ist eine Variable, die Sie in einem Knoten definieren. Sie können einen Standardwert für die Variable angeben. Anschließend können andere Knoten, Anwendungslogik oder Benutzereingaben den Wert der Kontextvariablen festlegen oder ändern.

Sie können für die Werte von Kontextvariablen Bedingungen festlegen, indem Sie eine Kontextvariable aus einer Bedingung eines Dialogmodulknotens heraus referenzieren, um festzulegen, ob ein Knoten ausgeführt wird. Sie können auch über Antwortbedingungen des Dialogmodulknotens auf eine Kontextvariable verweisen, um abhängig von einem Wert, der von einem externen Service oder vom Benutzer bereitgestellt wird, unterschiedliche Antworten anzuzeigen.

Weitere Informationen

Kontext aus der Anwendung heraus übergeben

Zum Übergeben von Informationen aus der Anwendung an das Dialogmodul legen Sie eine Kontextvariable fest und übergeben Sie die Kontextvariable an das Dialogmodul.

Ihre Anwendung kann beispielsweise eine Kontextvariable $time_of_day festlegen und an den Dialog übergeben, der die Informationen verwenden kann, um die für den Benutzer angezeigte Begrüßung anzupassen.

Zeigt einen Willkommensknoten, der Antwortbedingungen verwendet, um nach dem Wert der Kontextvariablen $time_of_day zu suchen, die von der Anwendung an das Dialogmodul übergeben wird.
Uhrzeitkontext

In diesem Beispiel weiß der Dialogmodulknoten, dass die Anwendung die Variable auf einen der Werte morning, afternoon oder evening festlegt. Er kann jeden Wert überprüfen und je nach dem vorhandenen Wert die passende Begrüßung zurückgeben. Falls die Variable nicht übergeben wurde oder einen Wert besitzt, der mit keinem der erwarteten Werte übereinstimmt, wird für den Benutzer eine allgemeinere Begrüßung angezeigt.

Kontext von Knoten zu Knoten übergeben

Das Dialogmodul kann auch Kontextvariablen hinzufügen, um Informationen von einem Knoten zu einem anderen Knoten zu übergeben oder um die Werte von Kontextvariablen zu aktualisieren. Wenn der Dialog Informationen vom Benutzer anfordert und abruft, kann er die Informationen verfolgen und später in der Konversation darauf verweisen.

Beispielsweise kann in einem Knoten der Benutzer nach seinem Namen gefragt werden und der Benutzer in einem späteren Knoten mit seinem Namen angesprochen werden.

Zeigt einen Einführungsknoten an, der den Benutzer nach seinem Namen fragt und ihn als Kontextvariable speichert. Der nächste Knoten verweist mithilfe der Kontextvariablen $username auf den Benutzer nach Namen.
Kontext von einem Knoten an einen anderen übergeben

In diesem Beispiel wird die Systementität @name verwendet, um den Namen des Benutzers aus der Eingabe zu extrahieren, wenn der Benutzer einen angibt. Im JSON-Editor wird die Kontextvariable für den Benutzernamen definiert und auf den Wert @name gesetzt. In einem nachfolgenden Knoten wird die Kontextvariable '$username' in die Antwort einbezogen, um den Benutzer mit seinem Namen anzusprechen.

Kontextvariable definieren

Definieren Sie eine Kontextvariable, indem Sie den Variablennamen im Feld Variable und einen Standardwert für die Variable im Feld Wert der Bearbeitungsansicht für den Knoten hinzufügen.

  1. Klicken Sie auf den Dialogmodulknoten, zu dem Sie eine Kontextvariable hinzufügen möchten, um ihn zu öffnen.

  2. Wechseln Sie zum Abschnitt Assistent antwortet und klicken Sie auf das Menüsymbol Symbol für Überlaufmenü.

  3. Klicken Sie auf Kontexteditor öffnen.

  4. Geben Sie das Name/Wert-Paar für die Variable in den Feldern Variable und Wert an.

    • name kann beliebige Groß-und Kleinbuchstaben, numerische Zeichen (0-9) und Unterstreichungszeichen enthalten.

    • Der value kann ein beliebiger unterstützter JSON-Typ sein (z. B. eine einfache Zeichenfolgevariable, eine Zahl, ein JSON-Array oder ein JSON-Objekt).

Die folgende Tabelle enthält Beispiele für das Definieren von Name/Wert-Paaren für verschiedene Werttypen:

Name/Wert-Paare definieren
Variable Wert Werttyp
Dessert "Kuchen" Zeichenfolge
age 18 Zahl
toppings_array ["onions","olives"] JSON-Array
full_name {"first":"John","last":"Doe"} JSON-Objekt

Verwenden Sie anschließend zum Referenzieren dieser Kontextvariablen die Syntax $name, wobei Name der Name der von Ihnen definierten Kontextvariablen ist.

Sie können beispielsweise den folgenden Ausdruck als Dialogantwort angeben:

The customer, $age-year-old <? $full_name.first ?>, wants a pizza with <? $toppings_array.join(' and ') ?>, and then $dessert.

Als Ergebnis wird die folgende Ausgabe angezeigt:

The customer, 18-year-old John, wants a pizza with onions and olives, and then cake.

Zum Definieren von Kontextvariablen können Sie auch den JSON-Editor verwenden. Die Verwendung des JSON-Editors empfiehlt sich, wenn Sie einen komplexen Ausdruck als Variablenwert hinzufügen möchten. Weitere Details enthält der Abschnitt Kontextvariablen im JSON-Editor.

Häufige Aufgaben für Kontextvariablen

Verwenden Sie input.text, um die gesamte Zeichenfolge zu speichern, die vom Benutzer eingegeben wurde:

Benutzereingaben erfassen
Variable Wert
repeat <?input.text?>

Die Benutzereingabe könnte beispielsweise wie folgt lauten: I want to order a device. Wenn die Knotenantwort You said: $repeat lautet, wird die Antwort wie folgt angezeigt You said: I want to order a device..

Verwenden Sie die folgende Syntax, um den Wert einer Entität in einer Kontextvariablen zu speichern:

Entitätserwähnung erfassen
Variable Wert
place @place

Die Benutzereingabe könnte beispielsweise I want to go to Paris. Wenn Ihre @place-Entität Paris erkennt, speichert Ihr Assistent Paris in der Kontextvariablen $place.

Um den Wert einer Zeichenfolge zu speichern, die Sie aus der Benutzereingabe extrahiert haben, können Sie einen SpEL-Ausdruck angeben, der mithilfe der Methode extract einen regulären Ausdruck auf die Benutzereingabe anwendet. Der folgende Ausdruck extrahiert eine Zahl aus der Benutzereingabe und speichert sie in der Kontextvariablen $number.

Zeichenfolgemethode verwenden
Variable Wert
Zahl <?input.text.extract('[\d]+',0)?>

Um den Wert einer Musterentität zu speichern, fügen Sie '.literal' an den Entitätsnamen an. Verwenden Sie diese Syntax, um sicherzustellen, dass der genaue Textbereich aus der Benutzereingabe, der mit dem angegebenen Muster übereinstimmt, in der Variablen gespeichert wird.

Musterentitätswert erfassen
Variable Wert
E-Mail <? @email.literal ?>

Beispiel: Die Benutzereingabe Contact me at joe@example.com. Ihre Entität mit dem Namen @email erkennt das E-Mail-Format name@domain.com. Indem Sie die Kontextvariable so konfigurieren, dass @email.literal gespeichert wird, geben Sie an, dass der Teil der Eingabe gespeichert werden soll, der mit dem Muster übereinstimmt. Wenn Sie die Eigenschaft .literal im Wertausdruck nicht angeben, wird der von Ihnen für das Muster angegebene Entitätswertname anstelle des mit dem Muster übereinstimmenden Teils der Benutzereingabe zurückgegeben.

Kontextvariable löschen

Um eine Kontextvariable zu löschen, setzen Sie die Variable auf null.

Kontextvariable auf 'null' setzen
Variable Wert
order_form null

Wert einer Kontextvariablen aktualisieren

Um den Wert einer Kontextvariablen zu aktualisieren, definieren Sie eine Kontextvariable mit dem gleichen Namen wie die vorherige Kontextvariable, jedoch mit einem anderen zugehörigen Wert.

Wenn mehr als ein Knoten den Wert derselben Kontextvariablen festlegt, kann der Wert der Kontextvariablen im Verlauf des Dialogs mit einem Benutzer geändert werden. Welcher Wert angewendet wird, hängt davon ab, welcher Knoten vom Benutzer im Verlauf des Dialogs ausgelöst wird. Der Wert, der im zuletzt verarbeiteten Knoten für die Kontextvariable angegeben wird, überschreibt alle Werte, die von den zuvor verarbeiteten Knoten für die Variable festgelegt wurden.

Informationen zum Aktualisieren eines Kontextvariablenwerts, der ein JSON-Objekt- oder JSON-Arraydatentyp ist, enthält der Abschnitt Kontextvariablenwert in JSON aktualisieren.

Verarbeitung von Kontextvariablen

An welcher Stelle Sie eine Kontextvariable definieren, ist durchaus von Bedeutung. Die Kontextvariable wird erst erstellt und auf den von Ihnen angegebenen Wert gesetzt, wenn Ihr Assistent den Teil des Dialogmodulknotens verarbeitet, in dem Sie die Kontextvariable definiert haben. In den meisten Fällen wird die Kontextvariable als Teil der Knotenantwort definiert. Wenn dies zutrifft, wird die Kontextvariable erstellt und auf den angegebenen Wert gesetzt, wenn der Assistent die Knotenantwort zurückgibt.

Bei einem Knoten mit bedingten Antworten wird die Kontextvariable erstellt und festgelegt, wenn die Bedingung für eine bestimmte Antwort erfüllt ist und die zugehörige Antwort verarbeitet wird. Wenn Sie beispielsweise eine Kontextvariable für die bedingte Antwort #1 definieren und Ihr Assistent die Antwort verarbeitet #2, wird die Variable, die Sie für die bedingte Antwort #1 definiert haben, nicht festgelegt.

Informationen zum Hinzufügen von Kontextvariablen, die Ihr Assistent festlegen soll, wenn ein Benutzer mit einem Knoten mit Slots interagiert, finden Sie unter Kontextvariablen zu einem Knoten mit Slots hinzufügen.

Verarbeitungsreihenfolge

Wenn Sie mehrere Variablen definieren, die zusammen verarbeitet werden sollen, legt die Reihenfolge ihrer Erstellung nicht fest, in welcher Reihenfolge sie von dem Assistenten ausgewertet werden. Der Assistent wertet die Variablen in einer Zufallsreihenfolge aus. Legen Sie keinen Wert in der ersten Kontextvariablen fest und erwarten Sie, ihn in der zweiten Variablen zu verwenden, da die erste Kontextvariable möglicherweise nicht vor der zweiten ausgeführt wird. Verwenden Sie beispielsweise nicht zwei Kontextvariablen, zum Implementieren von Logik, die prüft, ob die Benutzereingabe das Wort Yes enthält.

Zwei Kontextvariablen zum Prüfen auf einen Wert in der Benutzereingabe verwenden
Variable Wert
user_input <? input.text ?>
contains_yes <? $user_input.contains('Yes') ?>

Verwenden Sie stattdessen einen etwas komplexeren Ausdruck, um nicht darauf angewiesen zu sein, dass der Wert der ersten Variablen in Ihrer Liste (user_input) vor der zweiten Variablen (contains_yes) ausgewertet wird.

Einzelne Kontextvariable verwenden
Variable Wert
contains_yes <? input.text.contains('Yes') ?>

Kontextvariablen zu einem Knoten mit Slots hinzufügen

Weitere Informationen zu Slots enthält der Abschnitt Informationen mit Slots erfassen.

Gehen Sie wie folgt vor, um eine Kontextvariable hinzuzufügen, die verarbeitet wird, nachdem eine Antwortbedingung für einen Slot erfüllt wurde:

  1. Öffnen Sie den Knoten mit Slots in der Bearbeitungsansicht.
  2. Klicken Sie auf das Symbol Slot anpassen Slot anpassen.
  3. Klicken Sie auf das Symbol Optionen Optionen und wählen Sie dann Bedingung aktivieren aus.
  4. Klicken Sie auf das Symbol Handler anpassen Segment bearbeiten neben der Antwort, der Sie die Kontextvariable zuordnen möchten.
  5. Klicken Sie im Antwortabschnitt des Assistenten auf das Symbol Optionen Optionen und anschließend auf Kontexteditor öffnen.
  6. Geben Sie das Name/Wert-Paar für die Variable in den Feldern Variable und Wert an.

So fügen Sie eine Kontextvariable hinzu, die festgelegt oder aktualisiert wird, wenn eine Slotbedingung erfüllt ist:

  1. Öffnen Sie den Knoten mit Slots in der Bearbeitungsansicht.
  2. Klicken Sie auf das Symbol Slot anpassen Slot anpassen.
  3. Klicken Sie auf das Symbol Optionen Optionen und wählen Sie dann Bedingung aktivieren aus.
  4. Geben Sie das Name/Wert-Paar für die Variable im JSON-Format an.
{
"time_of_day": "morning"
}

Sie können den Kontexteditor nicht verwenden, um Kontextvariablen zu definieren, die während dieser Phase der Auswertung des Dialogmodulknotens festgelegt werden. Sie müssen stattdessen den JSON-Editor verwenden. Weitere Informationen zur Verwendung des JSON-Editors enthält der Abschnitt Kontextvariablen im JSON-Editor.

Kontextvariablen im JSON-Editor

Eine Kontextvariable kann auch im JSON-Editor definiert werden. Verwenden Sie den JSON-Editor, wenn Sie eine komplexe Kontextvariable definieren und den vollständigen SpEL-Ausdruck anzeigen möchten, wenn Sie ihn hinzufügen oder ändern.

Die Name/Wert-Paare müssen die folgenden Voraussetzungen erfüllen:

  • name kann beliebige Groß-und Kleinbuchstaben, numerische Zeichen (0-9) und Unterstreichungszeichen enthalten.

    Sie können auch andere Zeichen (z. B. Punkte und Bindestriche) im Namen verwenden. In diesem Fall müssen Sie jedoch bei jedem Verweis auf die Variable die Kurzform $(variable-name) angeben. Weitere Details enthält der Abschnitt Ausdrücke für Objektzugriff.

  • Der value kann ein beliebiger unterstützter JSON-Typ sein (z. B. eine einfache Zeichenfolgevariable, eine Zahl, ein JSON-Array oder ein JSON-Objekt).

Im folgenden JSON-Beispiel werden die Werte für die Kontextvariablen '$dessert' (Zeichenfolge), '$toppings_array' (Array), '$age' (Zahl) und '$full_name' (Objekt) definiert:

{
  "context": {
    "dessert": "cake",
    "toppings_array": [
      "onions",
      "olives"
    ],
    "age": 18,
    "full_name": {
      "first": "Jane",
      "last": "Doe"
    }
  },
  "output":{}
}

So definieren Sie eine Kontextvariable im JSON-Format:

  1. Klicken Sie auf den Dialogmodulknoten, zu dem Sie die Kontextvariable hinzufügen möchten, um ihn zu öffnen.

    Alle vorhandenen Kontextvariablenwerte, die für diesen Knoten definiert sind, werden in einer Gruppe mit zugehörigen Feldern Variable und Wert angezeigt. Wenn diese Felder nicht in der Bearbeitungsansicht des Knotens angezeigt werden sollen, müssen Sie den Kontexteditor schließen. Verwenden Sie zum Schließen des JSON-Editors dasselbe Menü wie zum Öffnen des Editors. In den folgenden Schritten wird beschrieben, wie Sie auf dieses Menü zugreifen können.

  2. Klicken Sie auf das Symbol Optionen Optionen für die Assistentenantwort und dann auf JSON-Editor öffnen.

    Wenn die Einstellung Mehrere bedingte Antworten für den Knoten aktiviert ist, müssen Sie zuerst auf das Symbol Antwort anpassen Antwort anpassen für die Antwort klicken, der Sie die Kontextvariable zuordnen wollen.

  3. Fügen Sie einen Block "context":{} hinzu, falls keiner vorhanden ist.

    {
      "context":{},
      "output":{}
    }
    
  4. Fügen Sie im Block 'context' ein Paar aus "name" und "value" für jede Kontextvariable hinzu, die Sie definieren möchten.

    {
      "context":{
        "name": "value"
    },
      "output": {}
    }
    

    In diesem Beispiel wird eine Variable mit dem Namen new_variable einem Kontextblock hinzugefügt, der bereits eine Variable enthält.

    {
      "context":{
        "existing_variable": "value",
        "new_variable":"value"
      }
    }
    

    Um auf die Kontextvariable zu verweisen, verwenden Sie die Syntax $name, wobei Name der Name der von Ihnen definierten Kontextvariablen ist. Zum Beispiel $new_variable.

Weitere Informationen

Kontextvariable in JSON löschen

Um eine Kontextvariable zu löschen, setzen Sie die Variable auf null.

{
  "context": {
    "order_form": null
  }
}

Wenn Sie alle Spuren der Kontextvariablen löschen möchten, können Sie die Variable mithilfe der Methode 'JSONObject.remove(string)' aus dem Kontextobjekt löschen. Dabei müssen Sie für den Löschvorgang eine Variable verwenden. Definieren Sie die neue Variable in der Nachrichtenausgabe, damit sie nicht über den aktuellen Aufruf hinaus gespeichert wird.

{
  "output": {
    "text" : {},
    "deleted_variable" : "<? context.remove('order_form') ?>"
  }
}

Alternativ können Sie die Kontextvariable in Ihrer Anwendungslogik löschen.

Kontextvariable in JSON aktualisieren

Wenn ein Knoten den Wert einer Kontextvariablen festlegt, die bereits festgelegt ist, wird der vorherige Wert durch den neuen Wert überschrieben.

Komplexes JSON-Objekt aktualisieren

Vorherige Werte werden bei allen JSON-Typen überschrieben, jedoch mit Ausnahme von JSON-Objekten. Falls die Kontextvariable einen komplexen Typ wie beispielsweise ein JSON-Objekt besitzt, wird die Variable mithilfe der JSON-Prozedur 'merge' aktualisiert. Die Operation 'merge' fügt neu definierte Eigenschaften hinzu und überschreibt alle vorhandenen Eigenschaften des Objekts.

Im folgenden Beispiel ist die Kontextvariable 'name' als komplexes Objekt definiert:

{
  "context": {
    "complex_object": {
      "user_firstname" : "Paul",
      "user_lastname" : "Pan",
      "has_card" : false
    }
  }
}

Ein Dialogmodulknoten aktualisiert das JSON-Objekt für die Kontextvariable mit den folgenden Werten:

{
  "complex_object": {
    "user_firstname": "Peter",
    "has_card": true
  }
}

Dies ergibt den folgenden Kontext:

{
  "complex_object": {
    "user_firstname": "Peter",
    "user_lastname": "Pan",
    "has_card": true
  }
}

Arrays aktualisieren

Falls die Kontextdaten des Dialogmoduls ein Array von Werten enthalten, können Sie das Array aktualisieren, indem Sie Werte anhängen, einen Wert entfernen oder alle Werte ersetzen.

Wählen Sie eine der folgenden Aktionen aus, um das Array zu aktualisieren. In jedem Fall wird das Array vor der Aktion, die Aktion und das Array nach der Anwendung der Aktion angezeigt.

  • Anhängen: Um Werte am Ende des Arrays hinzuzufügen, verwenden Sie die Methode append.

    Ausgangspunkt ist der folgende Laufzeitkontext des Dialogmoduls:

    {
      "context": {
        "toppings_array": ["onion", "olives"]
      }
    }
    

    Nehmen Sie die folgende Aktualisierung vor:

    {
      "context": {
        "toppings_array": "<? $toppings_array.append('ketchup', 'tomatoes') ?>"
      }
    }
    

    Ergebnis:

    {
      "context": {
        "toppings_array": ["onion", "olives", "ketchup", "tomatoes"]
      }
    }
    
  • Entfernen: Um ein Element zu entfernen, verwenden Sie die Methode remove und geben Sie den Wert oder die Position des Elements im Array an.

    • Beim Entfernen mit Wertangabe wird ein Element anhand seines Wertes aus dem Array entfernt.

      Ausgangspunkt ist der folgende Laufzeitkontext des Dialogmoduls:

      {
        "context": {
          "toppings_array": ["onion", "olives"]
        }
      }
      

      Nehmen Sie die folgende Aktualisierung vor:

      {
        "context": {
          "toppings_array": "<? $toppings_array.removeValue('onion') ?>"
        }
      }
      

      Ergebnis:

      {
        "context": {
          "toppings_array": ["olives"]
        }
      }
      
    • Beim Entfernen mit Positionsangabe wird ein Element anhand seiner Indexposition aus dem Array entfernt.

      Ausgangspunkt ist der folgende Laufzeitkontext des Dialogmoduls:

      {
        "context": {
          "toppings_array": ["onion", "olives"]
        }
      }
      

      Nehmen Sie die folgende Aktualisierung vor:

      {
        "context": {
          "toppings_array": "<? $toppings_array.remove(0) ?>"
        }
      }
      

      Ergebnis:

      {
        "context": {
          "toppings_array": ["olives"]
        }
      }
      
  • Überschreiben: Zum Überschreiben der Werte in einem Array setzen Sie das Array auf die neuen Werte:

    Ausgangspunkt ist der folgende Laufzeitkontext des Dialogmoduls:

    {
      "context": {
        "toppings_array": ["onion", "olives"]
      }
    }
    

    Nehmen Sie die folgende Aktualisierung vor:

    {
      "context": {
        "toppings_array": ["ketchup", "tomatoes"]
      }
    }
    

    Ergebnis:

    {
      "context": {
        "toppings_array": ["ketchup", "tomatoes"]
      }
    }
    

Zwei Kontextvariablen gleichsetzen

Wenn Sie eine Kontextvariable mit einer anderen Kontextvariablen gleichsetzen, definieren Sie einen Zeiger von der einen zur anderen. Wenn sich später der Wert einer der Variablen ändert, wird auch der Wert der anderen Variablen geändert.

Wenn Sie beispielsweise eine Kontextvariable wie folgt angeben und sich der Wert von $var1 oder $var2 später ändert, ändert sich auch der Wert der anderen Variablen.

Zwei Kontextvariablen gleichsetzen
Variable Wert
var2 var1

Setzen Sie nicht eine Variable mit einer anderen gleich, um einen Zeitpunktwert zu erfassen. Wenn Sie mit Arrays einen Arraywert erfassen möchten, der in einer Kontextvariablen gespeichert ist und später verwendet wird, erstellen Sie stattdessen eine neue Variable auf der Basis des aktuellen Werts der Variablen.

Um beispielsweise eine Kopie der Werte eines Arrays an einem bestimmten Punkt zu erstellen, fügen Sie ein Array hinzu, das mit den Werten für das vorhandene Array gefüllt wird. Zu diesem Zweck können Sie die folgende Syntax verwenden:

{
"context": {
   "var2": "<? output.var2?:new JsonArray().append($var1) ?>"
 }
 }