簡體   English   中英

在Bot框架C#中自定義驗證消息

[英]Customize validation message in Bot framework C#

如何在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;

當前,如果該選項不在列表中,它只會引發一條消息,例如

'用戶輸入不是聯系人/附件/類別選項'

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM