2016-05-09 13 views
10

quindi adesso sto usando Microsoft.Bot.Builder.Dialogs.Conversation.SendAsync e Microsoft.Bot.Builder.Dialogs.Conversation.ResumeAsync per implementare un modo per mettere in pausa e riprendere la conversazione ma sembra impossibile "uscire" o tornare allo stato precedente. È bloccato nella finestra di dialogo della conversazione.Bot Framework: come uscire dalla conversazione?

Devo solo implementare un comando "Annulla"? In tal caso, quali dati devo cancellare in modo che torni allo stato originale?

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(); 

quindi se io mando un 'login' andrà e iniziare una nuova conversazione ChatDialog ma sembra rimanere bloccati in questo stato. Anche se provo a inviare un altro comando, continuerà a chiedere l'accesso. Devo implementare un'altra classe Case per gestire un comando 'Annulla'? O dovrebbe annullare automaticamente la conversazione quando l'utente invia lo stesso comando 'login' più di una volta? Sembra abbastanza difficile dover inviare un comando "annulla" separatamente.

+0

Solo a chiedersi, hai trovato una soluzione? Sto avendo lo stesso problema. – K48

risposta

2

Penso che manchi il DefaultCase. Controllare this. Mostra l'implementazione di DefaultCase per l'esempio di autenticazione di Facebook. A proposito, in quel campione hanno anche un comando di disconnessione.

0

Considererei come i vostri utenti interpreteranno la fine della conversazione e penseranno a quegli scenari e a come le persone finiscono le conversazioni.

È possibile aggiungere codice per gestire il ripristino o la fine di una conversazione in base a parole chiave specifiche e utilizzando il modello GlobalMessageHandler.

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

Inoltre, si aspettano che gli utenti semplicemente "appendere"/chiudere la finestra, una volta che sono fatto.

Un buon set di metriche può aiutare a raccogliere informazioni su come le persone utilizzano il bot per i proprietari per migliorarlo. i.e: l'interazione X ha portato all'interazione prevista Y, o qual è stata l'ultima interazione che abbiamo visto per questa conversazione ... ecc.