2016-05-09 2 views
10

so gerade jetzt verwende ich Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync und Microsoft.Bot.Builder.Dialogs.Conversation.ResumeAsync, um eine Möglichkeit zu implementieren, die Konversation anzuhalten und fortzusetzen, aber es scheint unmöglich, "zu beenden" oder in den vorherigen Zustand zurückzukehren. Es ist im Dialog Konversation fest.Bot Framework: Wie kann man Konversation beenden?

Implementiere ich einfach einen 'Abbrechen' Befehl? Wenn ja, welche Daten muss ich löschen, damit es in den ursprünglichen Zustand zurückkehrt?

public static readonly IDialog<string> dialog = Chain 
     .PostToChain() 
     .Switch(
      new Case<Message, IDialog<string>>((msg) => 
      { 
       var regex = new Regex("login", RegexOptions.IgnoreCase); 
       return regex.IsMatch(msg.Text); 
      }, (ctx, msg) => 
      { 
       return Chain.ContinueWith(new ChatDialog(msg), 
          async (context, res) => 
          { 
           var token = await res; 
           //var valid = await Helpers.ValidateAccessToken(token); 
           //var name = await Helpers.GetProfileName(token); 
           var name = "User"; 
           context.UserData.SetValue("name", name); 
           return Chain.Return($"You are logged in as: {name}"); 
          }); 
      }) 
     ).Unwrap().PostToUser(); 

so, wenn ich eine ‚login‘ senden wird es gehen und ein neues ChatDialog Gespräch beginnen, aber es scheint in diesem Zustand stecken. Selbst wenn ich versuche, einen anderen Befehl zu senden, wird es weiter nach dem Login fragen. Implementiere ich eine andere Case Klasse, um einen 'Abbrechen'-Befehl zu verarbeiten? Oder sollte es die Konversation automatisch abbrechen, wenn der Benutzer denselben 'Login'-Befehl mehrmals sendet? Es scheint irgendwie klobig zu sein, einen 'Abbrechen'-Befehl separat zu senden.

+0

Sie fragen sich, haben Sie schließlich eine Lösung gefunden? Ich habe das gleiche Problem. – K48

Antwort

2

Ich denke, dass Sie die DefaultCase vermissen. Überprüfen Sie this. Es zeigt die Implementierung der DefaultCase für das Facebook Auth Sample. Übrigens haben sie in diesem Beispiel auch einen Logout-Befehl.

0

Ich würde überlegen, wie Ihre Benutzer das Ende der Konversation interpretieren und über diese Szenarien nachdenken und wie Menschen Konversationen beenden.

Sie können Code hinzufügen, um das Zurücksetzen oder das Ende einer Konversation basierend auf bestimmten Schlüsselwörtern und mithilfe des GlobalMessageHandler-Musters zu behandeln.

https://github.com/Microsoft/BotBuilder-Samples/tree/master/CSharp/core-GlobalMessageHandlers

Auch erwarten Benutzer nur auf „Auflegen“/das Fenster schließen, sobald sie fertig sind.

Ein guter Satz von Metriken kann helfen, Informationen darüber zu sammeln, wie Menschen den Bot nutzen, um ihn zu verbessern. : Hat Interaktion X zu der erwarteten Interaktion Y geführt, oder was war die letzte Interaktion, die wir für diese Konversation gesehen haben ... etc.