我如何在 Bot Framework 中 cancel/exit 或逃离 PromptDialog.Choice?
How do I cancel/exit or escape from PromptDialog.Choice in Bot Framework?
Bot Framework 中的 PromptDialog.Choice 显示选项列表效果很好。但是,我希望可以选择 cancel/escape/exit 对话框,并在列表中提供 cancel/escape/exit 选项。 PromptDialog.Choice 中是否有任何可以覆盖的内容,因为我没有找到任何取消选项。
这是我在 C# 中的代码..
PromptDialog.Choice(
context: context,
resume: ChoiceSelectAsync,
options: getSoftwareList(softwareItem),
prompt: "We have the following software items matching " + softwareItem + ". (1), (2), (3). Which one do you want?:",
retry: "I didn't understand. Please try again.",
promptStyle: PromptStyle.PerLine);
示例:
Bot:我们有以下与 Photoshop 相匹配的软件项目。 (1)、(2)、(3)。你想要哪一个
- 版本 1
- 版本 2
- 版本 3
如果用户输入上面的 none 或命令或数字,取消,退出,绕过上面的选项,而不会触发重试错误消息,我想要什么。
我们该怎么做?
只需在列表中添加选项 "cancel" 并在获取用户输入的方法上使用 switch-case,然后调用您的主菜单,或任何您想在取消时执行的操作
有两种方法可以实现:
- 按照建议添加取消选项。虽然这肯定有效,但从长远来看,您会发现自己经常重复自己,而且您会在选择列表中看到取消选项,这可能不是您想要的。
- 更好的方法是扩展当前的 PromptChoice 以添加您的 exit/cancelation 逻辑。好消息是已经实现了一些东西,您可以按原样使用或作为实现您的需求的基础。看看CancelablePromptChoice included in the BotBuilder-Samples repository. Here是怎么用的
当前提示选项不能以允许用户 select 按号码的方式工作。我已经覆盖了 CancleablePromptChoice 中的 ScoreMatch 函数,如下所示
public override Tuple<bool, int> ScoreMatch(T option, string input)
{
var trimmed = input.Trim();
var text = option.ToString();
// custom logic to allow users to select by number
int isInt;
if(int.TryParse(input,out isInt) && isInt <= promptOptions.Options.Count())
{
text = promptOptions.Options.ElementAt(isInt - 1).ToString();
trimmed = option.ToString().Equals(text) ? text :trimmed;
}
bool occurs = text.IndexOf(trimmed, StringComparison.CurrentCultureIgnoreCase) >= 0;
bool equals = text == trimmed;
return occurs ? Tuple.Create(equals, trimmed.Length) : null;
}
@Ezequiel 再次感谢!
Bot Framework 中的 PromptDialog.Choice 显示选项列表效果很好。但是,我希望可以选择 cancel/escape/exit 对话框,并在列表中提供 cancel/escape/exit 选项。 PromptDialog.Choice 中是否有任何可以覆盖的内容,因为我没有找到任何取消选项。
这是我在 C# 中的代码..
PromptDialog.Choice(
context: context,
resume: ChoiceSelectAsync,
options: getSoftwareList(softwareItem),
prompt: "We have the following software items matching " + softwareItem + ". (1), (2), (3). Which one do you want?:",
retry: "I didn't understand. Please try again.",
promptStyle: PromptStyle.PerLine);
示例:
Bot:我们有以下与 Photoshop 相匹配的软件项目。 (1)、(2)、(3)。你想要哪一个
- 版本 1
- 版本 2
- 版本 3
如果用户输入上面的 none 或命令或数字,取消,退出,绕过上面的选项,而不会触发重试错误消息,我想要什么。
我们该怎么做?
只需在列表中添加选项 "cancel" 并在获取用户输入的方法上使用 switch-case,然后调用您的主菜单,或任何您想在取消时执行的操作
有两种方法可以实现:
- 按照建议添加取消选项。虽然这肯定有效,但从长远来看,您会发现自己经常重复自己,而且您会在选择列表中看到取消选项,这可能不是您想要的。
- 更好的方法是扩展当前的 PromptChoice 以添加您的 exit/cancelation 逻辑。好消息是已经实现了一些东西,您可以按原样使用或作为实现您的需求的基础。看看CancelablePromptChoice included in the BotBuilder-Samples repository. Here是怎么用的
当前提示选项不能以允许用户 select 按号码的方式工作。我已经覆盖了 CancleablePromptChoice 中的 ScoreMatch 函数,如下所示
public override Tuple<bool, int> ScoreMatch(T option, string input)
{
var trimmed = input.Trim();
var text = option.ToString();
// custom logic to allow users to select by number
int isInt;
if(int.TryParse(input,out isInt) && isInt <= promptOptions.Options.Count())
{
text = promptOptions.Options.ElementAt(isInt - 1).ToString();
trimmed = option.ToString().Equals(text) ? text :trimmed;
}
bool occurs = text.IndexOf(trimmed, StringComparison.CurrentCultureIgnoreCase) >= 0;
bool equals = text == trimmed;
return occurs ? Tuple.Create(equals, trimmed.Length) : null;
}
@Ezequiel 再次感谢!