2016-08-11 4 views
1

Ich benutze MS-Bot-Framework und ich versuche, einen Bot zu bauen, die Dialoge, die statt nur ein flaches Szenario verzweigen können.Wie verzweigen Dialoge in Microsoft Bot-Framework

Zum Beispiel fragt der Bot in der ersten Nachricht den Benutzer nach einer Frage und startet abhängig von der Antwort einen der drei untergeordneten Dialoge, die je nach Benutzereingaben ihre eigenen untergeordneten Dialoge starten können. Ich bin auf der Suche nach so etwas wie diese

So:

if (userAnswer == "option 1") { 
    LaunchSupportDialog(); 
} 
else { 
    LaunchNewOrderDialog(); 
} 

Die Beispiele von Microsoft sind entweder flach (zB ein Bot, der Sandwich-Aufträge, ohne Äste verarbeiten kann, um jeden Schritt nacheinander ausgeführt wird), oder wo die Verzweigung automatisch von LUIS basierend auf der Benutzerabsicht erfolgt.

Ich bin auf der Suche nach etwas viel weniger schlau, so dass es aussieht, als ob ich nur eine Art von Methode oder Klasse, die in der Lage wäre, zu tun wäre.

Der docs Zustand:

Explizite Verwaltung des Stapels von aktiven Dialogen ist möglich durch IDialogStack.Call und IDialogStack.Done, explizit Komponieren Dialoge in ein größeres Gespräch. Es ist auch möglich, implizit den Stapel aktiver Dialoge über die fließenden Chain-Methoden zu verwalten.

aber ich fand keine Beispiele dafür, wie ein neues IDialogStack-Objekt zu erstellen, oder wie explizit .Call() oder .done() aufzurufen, oder die Kettenklassenmethoden für diese verwenden.

Antwort

2

Eine Option ist die Verwendung von Ketten, die das Switch Konstrukt für die Verzweigung bieten.

IDialog<string> MyDialog = 
    Chain 
    .PostToChain() 
    .Switch(
     new Case<string, IDialog<string>>(userAnswer => userAnswer == "option 1", (ctx, _) => Option1Dialog), 
     Chain.Default<string, IDialog<string>>((ctx, _) => DefaultDialog)) 
    .Unwrap() 
    .Select(dialogResult => $"The result is: {dialogResult}") 
    .PostToUser(); 

Dieses Beispiel wartet auf eine Nachricht von dem Benutzer, startet einen Dialog in Abhängigkeit von der Nachricht (Option1Dialog oder DefaultDialog, beide vom Typ IDialog<string>), das Dialogergebnis transformieren, und sendet sie an den Benutzer zurück.

Weitere Einzelheiten finden Sie im Teil this (obwohl es leider nicht viele Beispiele gibt).

Verwandte Themen