C# BotFramework Prompt.Confirm 显示太多尝试异常
C# BotFramework Prompt.Confirm displays too many attempts exception
我最近正在使用 Microsoft 的 botframework 开发聊天机器人。我正在使用 prompt.confirm 获取用户的 yes/no 输入,但是当我编写基本 yes/no 时它显示了太多尝试异常。我不希望我的机器人显示太多尝试异常,而是我想在内部处理它。这是我的代码。
[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)
{
}
}
您可以通过在 PromptOptions constructor, which is later used here 中传递您自己的字符串来覆盖 TooManyAttempts
消息以显示消息。
此外,请记住,在 TooManyAttempts
异常的情况下,处理它的方法是在 ResumeAfter
方法的 try/catch 中(在这种情况下,您的 NextQuestionAsync
方法),围绕 await
而不是在调用方方法中。
我通过覆盖 PromptOptions 构造函数解决了这个问题,感谢 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);
我最近正在使用 Microsoft 的 botframework 开发聊天机器人。我正在使用 prompt.confirm 获取用户的 yes/no 输入,但是当我编写基本 yes/no 时它显示了太多尝试异常。我不希望我的机器人显示太多尝试异常,而是我想在内部处理它。这是我的代码。
[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)
{
}
}
您可以通过在 PromptOptions constructor, which is later used here 中传递您自己的字符串来覆盖 TooManyAttempts
消息以显示消息。
此外,请记住,在 TooManyAttempts
异常的情况下,处理它的方法是在 ResumeAfter
方法的 try/catch 中(在这种情况下,您的 NextQuestionAsync
方法),围绕 await
而不是在调用方方法中。
我通过覆盖 PromptOptions 构造函数解决了这个问题,感谢 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);