2016-05-09 4 views
10

今私はMicrosoft.Bot.Builder.Dialogs.Conversation.SendAsyncMicrosoft.Bot.Builder.Dialogs.Conversation.ResumeAsyncを使って会話を一時停止して再開する方法を実装していますが、「終了」や前の状態に戻ることは不可能です。それは会話ダイアログに詰まっています。Botフレームワーク:会話を終了するには?

「キャンセル」コマンドを実装するだけですか?その場合、元の状態に戻るためにはどのデータを消去する必要がありますか?

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

私は「ログイン」を送信する場合それは行くと開始新しいChatDialog会話をこの状態にはまり込むように思われます。別のコマンドを送信しようとしても、ログインを要求し続けます。 'キャンセル'コマンドを処理する別のCaseクラスを実装していますか?または、ユーザーが同じ「ログイン」コマンドを複数回送信すると、自動的に会話をキャンセルする必要がありますか?別々に 'キャンセル'コマンドを送信する必要があるような気がします。

+0

結局のところ、解決策を見つけましたか?私は同じ問題を抱えている。 – K48

答えて

2

あなたはDefaultCaseが不足していると思います。 thisを確認してください。 Facebook認証サンプルのDefaultCaseの実装を示しています。ところで、そのサンプルにはLogoutコマンドもあります。

0

私はあなたのユーザーが会話の終わりをどのように解釈するか考えて、それらのシナリオと人々が会話を終了させる方法について考えます。

特定のキーワードとGlobalMessageHandlerパターンを使用して、リセットまたは会話の終了を処理するコードを追加できます。また

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

、ユーザーはちょうど彼らが終わったら/ウィンドウを閉じて「ハングアップ」を期待しています。

メトリックの優れたセットは、ユーザーがボットを使用してボットを改善する方法に関する情報を収集するのに役立ちます。 つまり、インタラクションXが期待されるインタラクションYにつながったか、この会話で最後に見たインタラクションは何か...

関連する問題