Informationen zu Komponenten- und Wasserfalldialogfeldern

GILT FÜR: SDK v4

Dialogfelder kommen in einigen verschiedenen Typen. In diesem Artikel werden Komponenten, Wasserfälle und Eingabeaufforderungsdialogfeldern beschrieben. Informationen zu Dialogfeldern im Allgemeinen finden Sie im Artikel zur Dialogfelderbibliothek . Informationen zu adaptiven Dialogfeldern finden Sie in der Einführung in adaptive Dialogfelder.

Ein Wasserfalldialogfeld (oder Wasserfall) definiert eine Abfolge von Schritten, sodass Ihr Bot einen Benutzer durch einen linearen Prozess leiten kann. Diese Dialogfelder sind so konzipiert, dass sie im Kontext eines Komponentendialogfelds funktionieren.

Ein Komponentendialogfeld ist eine Art von Containerdialogfeld, mit dem Dialogfelder im Satz andere Dialogfelder aufgerufen werden können, z. B. ein Dialogfeld zum Aufrufen von Eingabeaufforderungsdialogen oder ein anderes Wasserfalldialogfeld. Komponentendialogfeld verwalten eine Reihe untergeordneter Dialogfelder, z. B. Wasserfalldialoge, Eingabeaufforderungen usw. Sie können ein Komponentendialogfeld entwerfen, um bestimmte Aufgaben zu verarbeiten und sie wiederzuverwenden, in demselben Bot oder über mehrere Bots hinweg.

Eingabeaufforderungsdialoge (Eingabeaufforderungen) sind Dialogfelder , die den Benutzer um bestimmte Arten von Informationen bitten, z. B. eine Zahl, ein Datum oder einen Namen usw. Eingabeaufforderungen dienen dazu, mit Wasserfalldialogfeldern in einem Komponentendialogfeld zu arbeiten.

Komponentendialoge

Manchmal bietet es sich an, einen wiederverwendbaren Dialog zu schreiben, den Sie in verschiedenen Szenarien verwenden können (z. B. ein Adressendialog, bei dem der Benutzer zur Eingabe von Werten für Straße, Ort und Postleitzahl aufgefordert wird).

Der Komponentendialog ermöglicht das Erstellen unabhängiger Dialoge für bestimmte Szenarien, indem ein umfangreicher Dialogsatz in besser verwaltbare Teile unterteilt wird. Jeder dieser Teile verfügt über einen eigenen Dialogsatz, wodurch Namenskonflikte mit dem übergeordneten Dialogsatz vermieden werden. Weitere Informationen finden Sie im Komponentendialogfeld.

Wasserfalldialoge

Ein Wasserfalldialog ist eine spezifische Implementierung eines Dialogs, die häufig verwendet wird, um Informationen vom Benutzer zu erfassen oder den Benutzer durch eine Reihe von Aufgaben zu leiten. Jeder Schritt der Konversation wird als eine asynchrone Funktion implementiert, die einen Parameter für den Wasserfallschrittkontext (step) akzeptiert. In jedem Schritt fordert der Bot den Benutzer zur Eingabe auf (oder kann ein untergeordnetes Dialogfeld beginnen, aber es ist häufig eine Aufforderung), wartet auf eine Antwort und übergibt dann das Ergebnis an den nächsten Schritt. Das Ergebnis der ersten Funktion wird als Argument an die nächste Funktion übergeben usw.

Das folgende Diagramm zeigt eine Sequenz von Wasserfallschritten und die ausgeführten Stapelvorgänge. Ausführliche Informationen zur Verwendung des Dialogstapels finden Sie weiter unten im Abschnitt Verwenden von Dialogen.

Darstellung der Zuordnung von Nachrichten zu Wasserfallschritten.

In Wasserfallschritten wird der Kontext des Wasserfalldialogs im Wasserfallschrittkontext gespeichert. Der Schrittkontext ähnelt dem Dialogfeldkontext und bietet Zugriff auf den aktuellen Turnkontext und den aktuellen Status. Verwenden Sie das Wasserfallschritt-Kontextobjekt, um aus einem Wasserfallschritt heraus mit einem Dialogsatz zu interagieren.

Sie können den Rückgabewert eines Dialogs entweder innerhalb eines Wasserfallschritts in einem Dialog oder im Turn-Handler Ihres Bots verarbeiten. Im Allgemeinen müssen Sie jedoch nur den Status des Turn-Ergebnisses des Dialogs in der Turn-Logik Ihres Bots überprüfen. In einem Wasserfallschritt stellt der Dialog den Rückgabewert in der result-Eigenschaft des Wasserfall-Schrittkontexts bereit.

Eigenschaften des Wasserfallschrittkontexts

Der Wasserfallschrittkontext enthält die folgenden Eigenschaften:

  • Options: Eingabeinformationen für den Dialog.
  • Values: Informationen, die dem Kontext hinzugefügt werden können und in nachfolgenden Schritten übernommen werden.
  • Result: Das Ergebnis des vorherigen Schritts.

Darüber hinaus wird die nächste Methode (NextAsync in C#, next in JavaScript und Python) weiterhin den nächsten Schritt des Wasserfalldialogfelds innerhalb derselben Runde fortgesetzt, sodass Ihr Bot bei Bedarf einen bestimmten Schritt überspringen kann.

Eingabeaufforderungen

Die in der Dialogbibliothek verfügbaren Eingabeaufforderungen sind eine einfache Möglichkeit, um Benutzer zur Eingabe von Informationen aufzufordern und ihre Antwort auszuwerten. Zum Beispiel für eine Nummernaufforderung geben Sie die Frage oder Informationen an, die Sie fragen, und die Eingabeaufforderung überprüft automatisch, ob sie eine gültige Nummernantwort erhalten hat. Wenn dies der Vorgang getan hat, kann die Unterhaltung fortgesetzt werden; falls nicht, wird der Benutzer erneut für eine gültige Antwort aufgefordert.

Im Hintergrund sind Eingabeaufforderungen ein aus zwei Schritten bestehender Dialog. Im ersten Schritt fordert die Eingabeaufforderung den Benutzer zur Eingabe auf. Im zweiten Schritt wird der gültige Wert zurückgegeben oder der Vorgang mit einer erneuten Eingabeaufforderung wiederholt.

Eingabeaufforderungen verfügen über Eingabeaufforderungsoptionen, die beim Aufrufen der Eingabeaufforderung bereitgestellt werden. In diesen Optionen können Sie den Text der Eingabeaufforderung, die erneute Eingabeaufforderung im Fall eines Validierungsfehlers und Auswahlmöglichkeiten für die Beantwortung der Eingabeaufforderung angeben. Im Allgemeinen sind die Eingabeaufforderungs- und Wiederholungsaufforderungseigenschaften Aktivitäten, obwohl es einige Variationen gibt, wie dies in verschiedenen Programmiersprachen behandelt wird.

Zudem können Sie beim Erstellen der Eingabeaufforderung eine benutzerdefinierte Validierung hinzufügen. Angenommen, Sie möchten mit der Zahleneingabeaufforderung eine Anzahl von Personen erfragen, diese Zahl muss jedoch größer als 2 und kleiner als 12 sein. Die Eingabeaufforderung überprüft zuerst, ob sie eine gültige Nummer erhalten hat, und führt dann die benutzerdefinierte Überprüfung aus, wenn sie bereitgestellt wird. Wenn die benutzerdefinierte Überprüfung fehlschlägt, wird der Benutzer wie oben erneut bereitgestellt.

Eine Eingabeaufforderung gibt bei ihrem Abschluss den resultierenden angeforderten Wert explizit zurück. Wenn dieser Wert zurückgegeben wird, können wir sicherstellen, dass er sowohl die integrierte Eingabeaufforderungsüberprüfung als auch alle zusätzlichen benutzerdefinierten Überprüfungen übergeben hat, die möglicherweise bereitgestellt wurden.

Beispiele zur Verwendung verschiedener Eingabeaufforderungen finden Sie im Artikel zum Erfassen von Benutzereingaben mithilfe der Dialogbibliothek.

Eingabeaufforderungstypen

Im Hintergrund sind Eingabeaufforderungen ein aus zwei Schritten bestehender Dialog. Zuerst fragt die Eingabeaufforderung nach Eingabe; zweitens gibt er den gültigen Wert zurück oder startet von oben neu mit einer Neuanordnung. Die Dialogbibliothek bietet verschiedene grundlegende Eingabeaufforderungen, die jeweils zum Sammeln einer anderen Art von Antwort verwendet werden. Die einfachen Eingabeaufforderungen können Eingaben in natürlicher Sprache interpretieren (z. B. „zehn“ oder „ein Dutzend“ für eine Zahl oder „morgen“ oder „Freitag um 10 Uhr“ für eine Datums- und Zeitangabe).

Prompt BESCHREIBUNG Rückgabe
Anlageneingabeaufforderung Fordert den Benutzer auf, eine oder mehrere Anlagen anzufügen (beispielsweise ein Dokument oder Bild). Eine Sammlung von attachment-Objekten.
Auswahleingabeaufforderung Fordert den Benutzer auf, eine Auswahl in einer Reihe von Optionen zu treffen. Ein found choice-Objekt.
Bestätigungseingabeaufforderung Fordert den Benutzer zur Bestätigung auf. Ein boolescher Wert.
Datums-/Uhrzeiteingabeaufforderung Fordert den Benutzer auf, ein Datum und eine Uhrzeit anzugeben. Eine Sammlung von Objekten für die Datums-/Uhrzeitauflösung.
Zahleneingabeaufforderung Fordert den Benutzer auf, eine Zahl einzugeben. Ein numerischer Wert.
Texteingabeaufforderung Fordert den Benutzer auf, einen allgemeinen Text einzugeben. Eine Zeichenfolge.

Um einen Benutzer zur Eingabe aufzufordern, definieren Sie eine Eingabeaufforderung mit einer der integrierten Klassen (beispielsweise text prompt), und fügen Sie diese dann Ihrem Dialogsatz hinzu. Eingabeaufforderungen verfügen über feste IDs, die innerhalb eines Dialogsatzes eindeutig sein müssen. Sie können ein benutzerdefiniertes Validierungssteuerelement für jede Eingabeaufforderung verwenden, und für einige Eingabeaufforderungen können Sie ein Standardgebietsschema angeben.

Gebietsschema der Eingabeaufforderung

Das Gebietsschema wird verwendet, um das sprachspezifische Verhalten der Eingabeaufforderungen choice, confirm, date-time und number zu bestimmen. Wenn für den Kanal eine locale-Eigenschaft angegeben wurde, wird für alle Eingaben des Benutzers dieser Wert verwendet. Wenn das Standardgebietsschema der Eingabeaufforderung beim Aufrufen des Konstruktors der Eingabeaufforderung angegeben oder zu einem späteren Zeitpunkt festgelegt wird, wird andernfalls dieses Gebietsschema verwendet. Wenn keine dieser Gebietsschemas bereitgestellt wird, wird Englisch ("en-us") als Gebietsschema verwendet.

Das Gebietsschema ist ein ZWEI-, drei- oder vierstellige ISO 639-Code, der eine Sprache oder Sprachfamilie darstellt.

Eingabeaufforderungsoptionen

Der zweite Parameter der prompt-Methode des Schrittkontexts akzeptiert ein promptOptions-Objekt mit den folgenden Eigenschaften.

Eigenschaft BESCHREIBUNG
prompt Die erste Aktivität, die an den Benutzer gesendet wird, um ihn zur Eingabe aufzufordern.
retryPrompt Die Aktivität, die dem Benutzer gesendet werden soll, wenn seine erste Eingabe nicht überprüft wurde.
choices Eine Liste mit Optionen, aus denen der Benutzer bei einer Auswahleingabeaufforderung wählen kann.
validations Zusätzliche Parameter für die Verwendung mit einem benutzerdefinierten Validierungssteuerelement.
style Legt fest, wie die Optionen für eine Auswahl- oder Bestätigungsaufforderung einem Benutzer präsentiert werden.

Sie sollten immer die anfängliche Eingabeaufforderungsaktivität angeben, die an den Benutzer gesendet werden soll, und eine Wiederholungsaufforderung für Instanzen, wenn die Eingabe des Benutzers nicht überprüft wird.

Wenn die Eingabe des Benutzers ungültig ist, wird die Wiederholungsaufforderung an den Benutzer gesendet. wenn kein Wiederholungsversuche angegeben wurde, wird die anfängliche Eingabeaufforderung verwendet. Wenn jedoch eine Aktivität aus dem Validierungssteuerelement an den Benutzer zurückgesendet wird, wird keine Wiederholungsaufforderung gesendet.

Validierung einer Eingabeaufforderung

Sie können die Antwort auf eine Eingabeaufforderung vor der Rückgabe des Werts an den nächsten Schritt des Wasserfalls überprüfen. Eine Validierungsfunktion verfügt über einen Parameter für den Validierungskontext der Eingabeaufforderung und gibt einen booleschen Wert zurück, der angibt, ob die Validierung der Eingabe erfolgreich war. Der Validierungskontext der Eingabeaufforderung enthält die folgenden Eigenschaften:

Eigenschaft BESCHREIBUNG
Context Der aktuelle Turn-Kontext für den Bot.
Recognized Ein Ergebnis der Eingabeaufforderungserkennung, das Informationen zu der von der Erkennung verarbeiteten Benutzereingabe enthält.
Optionen Enthält die Eingabeaufforderungsoptionen, die im Aufruf zum Starten der Eingabeaufforderung angegeben wurden.

Das Ergebnis der Eingabeaufforderungserkennung weist die folgenden Eigenschaften auf:

Eigenschaft BESCHREIBUNG
Erfolgreich Gibt an, ob die Erkennung die Eingabe analysieren konnte.
Wert Der Rückgabewert der Erkennung. Bei Bedarf kann der Validierungscode diesen Wert ändern.

Verwenden von Dialogen

Sie können sich Dialoge als einen programmgesteuerten Stapel vorstellen, den so genannten Dialogstapel. Der Turn-Handler steuert den Stapel und fungiert als Fallback, wenn der Stapel leer ist. Das oberste Element in diesem Stapel wird als aktives Dialogfeld betrachtet, und der Dialogfeldkontext leitet alle Eingaben an das aktive Dialogfeld.

Wenn ein Dialogfeld beginnt, wird es auf den Stapel verschoben und ist jetzt das aktive Dialogfeld. Es bleibt das aktive Dialogfeld, bis es beendet wird, es wird von der Ersetzen-Dialogfeldmethode entfernt, oder ein anderes Dialogfeld wird auf den Stapel verschoben (entweder durch den Turnhandler oder das aktive Dialogfeld selbst) und wird zum aktiven Dialogfeld. Wenn dieses neue Dialogfeld endet, wird er aus dem Stapel geknallt, und das nächste Dialogfeld wird erneut zum aktiven Dialogfeld. Dies ermöglicht das Wiederholen eines Dialogs oder das Verzweigen einer Konversation (wie unten beschrieben).

Sie können ein Stammdialogfeld mit der Ausführung der Dialogfelderweiterungsmethode beginnen oder fortsetzen. Über den Botcode wird die Erweiterungsmethode des Dialogfelds entweder fortgesetzt oder eine neue Instanz des Dialogfelds gestartet, wenn der Stapel aktuell leer ist. Steuerelement und Benutzereingabe wechseln zum aktiven Dialogfeld im Stapel.

Die Ausführungsmethode erfordert einen Statuseigenschaftszugriffor , um auf den Dialogfeldstatus zuzugreifen. Der Accessor wird wie andere Zustandsaccessoren erstellt und verwendet, er wird jedoch auf der Grundlage des Konversationszustands als seine eigene Eigenschaft erstellt. Informationen zur Verwaltung des Zustands finden Sie im Thema Verwalten des Zustands. Die Verwendung des Dialogzustands wird in der Anleitung Implementieren eines sequenziellen Konversationsflusses erläutert.

In einem Dialogfeld haben Sie Zugriff auf den Dialogfeldkontext und können es verwenden, um andere Dialogfelder zu starten, das aktuelle Dialogfeld zu beenden und andere Vorgänge auszuführen.

So starten Sie einen Dialog

Übergeben Sie in einem Wasserfalldialogfeld die Dialogfeld-ID des Dialogfelds, das Sie mit dem Kontext des Wasserfalldialogs beginnen möchten, indem Sie entweder das Dialogfeld "Beginnen", " Eingabeaufforderung" oder " Dialogfeld ersetzen " verwenden.

  • Die Eingabeaufforderungs- und Startdialogmethoden verschieben eine neue Instanz des referenzierten Dialogfelds an den Oberen Rand des Stapels.
  • Die Methode „replace dialog“ entfernt den aktuellen Dialog aus dem Stapel und verschiebt den ersetzenden Dialog an den Anfang des Stapels. Der ersetzte Dialog wird abgebrochen, und alle in dieser Instanz enthaltenen Informationen werden entfernt.

Verwenden Sie den options-Parameter, um Informationen an die neue Instanz des Dialogs zu übergeben. Der Zugriff auf die in den neuen Dialog übergebenen Optionen ist in jedem Schritt des Dialogs über die options-Eigenschaft des Schrittkontexts möglich. Weitere Informationen finden Sie im Erstellen erweiterter Unterhaltungsfluss mithilfe von Verzweigungen und Schleifen.

So setzen Sie einen Dialog fort

Verwenden Sie innerhalb eines Wasserfalldialogfelds die Werteeigenschaft des Schrittkontexts, um den Zustand zwischen Wendungen beizubehalten. Jeder Wert, der dieser Sammlung in einem vorherigen Durchgang hinzugefügt wurde, ist in den nachfolgenden Durchgängen verfügbar. Weitere Informationen finden Sie im Erstellen erweiterter Unterhaltungsfluss mithilfe von Verzweigungen und Schleifen.

So beenden Sie einen Dialog

Verwenden Sie in einem Wasserfalldialogfeld die Enddialogmethode , um ein Dialogfeld zu beenden, indem Sie es aus dem Stapel springen. Die Enddialogmethode kann ein optionales Ergebnis an den übergeordneten Kontext zurückgeben (z. B. das Dialogfeld, das sie aufgerufen hat, oder den Turnhandler des Bots). Die Methode wird meistens innerhalb des Dialogs aufgerufen, um die aktuelle Instanz dieses Dialogs zu beenden.

Die EndDialog-Methode kann überall aufgerufen werden, wo ein Dialogkontext vorhanden ist, für den Bot entsteht jedoch der Eindruck, dass sie im aktuellen aktiven Dialog aufgerufen wurde.

Tipp

Es empfiehlt sich, die Enddialogmethode am Ende des Dialogfelds explizit aufzurufen.

So löschen Sie alle Dialoge

Wenn Sie alle Dialoge aus dem Stapel entfernen möchten, können Sie den Dialogstapel löschen, indem Sie die cancel all dialogs-Methode des Dialogkontexts aufrufen.

Wiederholen eines Dialogs

Sie können ein Dialogfeld durch sich selbst ersetzen und dadurch eine Schleife erstellen. Verwenden Sie dazu die Methode replace dialog. Dies ist eine großartige Möglichkeit, komplexe Interaktionen und eine Technik zum Verwalten von Menüs zu behandeln.

Hinweis

Wenn Sie den internen Status für das aktuelle Dialogfeld beibehalten müssen, müssen Sie Informationen an die neue Instanz des Dialogfelds im Aufruf der Ersetzen-Dialogfeldmethode übergeben und dann das Dialogfeld entsprechend initialisieren.

Verzweigen einer Konversation

Der Dialogkontext verwaltet den Dialogstapel und verfolgt für jeden Dialog im Stapel nach, welcher Schritt als Nächstes ansteht. Die BeginDialog-Methode erstellt einen untergeordneten Dialog und pusht diesen Dialog an den Anfang des Stapels. Die EndDialog-Methode entfernt den obersten Dialog per Pop aus dem Stapel. EndDialog wird in der Regel innerhalb des Dialogs aufgerufen, der beendet wird.

Ein Dialog kann innerhalb des gleichen Dialogsatzes einen neuen Dialog starten. Dazu wird die Methode begin dialog des Dialogkontexts aufgerufen und die ID des neuen Dialogs angegeben. Dadurch wird der neue Dialog zum aktuell aktiven Dialog. Der ursprüngliche Dialog befindet sich zwar weiterhin im Stapel, Aufrufe der Methode continue dialog des Dialogkontexts werden aber nur an den Dialog gesendet, der sich ganz oben im Stapel befindet (aktiver Dialog). Wenn ein Dialog per Pop aus dem Stapel entfernt wird, fährt der Dialogkontext mit dem Schritt des Wasserfalls aus dem Stapel fort, der im ursprünglichen Dialog als nächstes an der Reihe wäre.

Somit können Sie eine Verzweigung innerhalb Ihres Konversationsablaufs erstellen, indem Sie einen Schritt in einen Dialog einschließen, der bei Bedarf einen Dialog aus einer Gruppe verfügbarer Dialoge startet.

Zusätzliche Informationen