0

如何在 Bot 框架表单流中自定义验证消息?下面是我正在使用的示例代码,如果用户键入除提供的选项以外的任何文本,我需要将选择列表返回给他们,说明选择的选项不正确。

    [Prompt("Please choose # category... {||}", ChoiceStyle = ChoiceStyleOptions.Buttons)]
    public string Category;

    [Prompt("Please choose  # sub category... {||}", ChoiceStyle = ChoiceStyleOptions.Buttons)]
    public string Subcategory;

    [Prompt("We need some more details to create the request, provide me your **contact number**...")]
    [Pattern(Validations.Phone)]
    public string ContactNumber;

    [Prompt("Please provide **Attachement** if you don't have attachemnt please enter ? {||}")]
    public ChoiceOptions? Attachment;

目前,如果该选项不在列表中,它只会抛出一条消息,例如

'用户输入 不是 联系人/附件/类别 选项'

4

1 回答 1

0

Jobin,你想看看formFlow更高级的功能。您可以使用字段验证功能围绕字段创建业务逻辑。这是从 MS Online 文档中获取的示例。您可以在此处查看完整的示例和文档, 我发现这种创建表单的方法比使用属性灵活得多。

public static IForm<SandwichOrder> BuildForm()
{
...
return new FormBuilder<SandwichOrder>()
    .Message("Welcome to the sandwich order bot!")
    .Field(nameof(Sandwich))
    .Field(nameof(Bread))
    .Field(nameof(Toppings),
        validate: async (state, value) =>
        {
            var values = ((List<object>)value).OfType<ToppingOptions>();
            var result = new ValidateResult { IsValid = true, Value = values };
            if (values != null && values.Contains(ToppingOptions.Everything))
            {
                result.Value = (from ToppingOptions topping in Enum.GetValues(typeof(ToppingOptions))
                                where topping != ToppingOptions.Everything && !values.Contains(topping)
                                select topping).ToList();
            }
            return result;
        })
    .Message("For sandwich toppings you have selected {Toppings}.")
    ...
    .Build();
}
于 2018-11-17T14:50:54.743 回答