2017-02-06 13 views
1

最近Microsoftのbotframeworkを使用してチャットボットを開発していました。私はユーザーのyes/no入力を取るprompt.confirmを使用していますが、基本的なyes/noを書いたときの試行回数が多すぎます。私はボットがあまりにも多くの試行の例外を表示するのではなく、内部的に処理したいと思っています。ここに私のコードです。C#BotFrameworkプロンプトが表示される回数が多すぎます。

[LuisIntent("None")] 
public async Task NoneIntent(IDialogContext context, LuisResult result) 
{ 
    try 
    { 
     PromptDialog.Confirm(context, NextQuestionAsync, QuestionPrompt, attempts: 1, promptStyle: PromptStyle.Auto); 
    } 
    catch (Exception ex) 
    { 
     await context.PostAsync("Something really bad happened."); 
    } 
} 

public async Task NextQuestionAsync(IDialogContext context, IAwaitable<bool> result) 
{ 
    try 
    { 
     if (await result) 
     { 
      await context.PostAsync($"Ok, alarm 0 disabled."); 
      //context.Wait(NoneIntent); 
     } 
     else 
     { 
      await context.PostAsync("You Said No"); 
     } 
    } 
    catch (Exception e) 
    { 

    } 
} 
+0

https://github.com/Microsoft/BotBuilder/issues/1757 – stuartd

答えて

2

私はこの問題を、PromptOptionsコンストラクタである「Thanks to ezequiel」よりも優先して解決しました。私はそれを達成するためにPromptDialog.Choiceを使用しましたが、確認してもそれを実行できました。ここで私は

List<string> questions = new List<string>(); 
    questions.Add("Yes"); // Added yes option to prompt 
    questions.Add("No"); // Added no option to prompt 
    string QuestionPrompt = "Are you sure?"; 
    PromptOptions<string> options = new PromptOptions<string>(QuestionPrompt, "", "", questions, 1); // Overrided the PromptOptions Constructor. 
    PromptDialog.Choice<string>(context, NextQuestionAsync, options); 
+0

PromptConfirmは、はい/いいえの質問には優れてやったことです。これは私の答えの重複のようなものです。そしてあなたはコンストラクタをオーバーライドしていません。それは間違った声明です。 –

+0

確かに...他の質問と同じパターンでした。気にしないで –

3

あなたはただ、後でメッセージを表示するためにhereを使用しているPromptOptions constructor、中に独自の文字列を渡すことでTooManyAttemptsメッセージを上書きすることができます。また

TooManyAttempts例外の場合には、それを処理する方法は、呼び出し側でawaitなく周囲の、ResumeAfter方法ののtry/catch(この場合は、あなたのNextQuestionAsync法)であることに留意してい方法。

関連する問題