如何在FormFlow中的消息到达识别器之前对其进行拦截? (枚举用法)

时间:2018-10-23 09:27:28

标签: c# botframework formflow

如果用户不喜欢列表中的任何选项,我想截取用户写的内容。我的代码如下,但是仅当用户选择一个选项时,validate函数才起作用。

using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.FormFlow;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;


namespace BotApplication.App_Code
{
    public enum MainOptions { AccessoAreaRiservata = 1, AcquistoNuovaPolizza, RinnovoPolizza, Documenti, StatoPratica, AltroArgomento }

    [Serializable]
    public class MainReq
    {
        [Prompt("Indicare la tipologia della richiesta? {||}")]
        public MainOptions? MainOption;

        public static IForm<MainReq> BuildForm()
        {
            var form = (new FormBuilder<MainReq>()

                .Field(nameof(MainOption),validate: async (state, response) =>
                        {
                            var result = new ValidateResult { IsValid = true };
                          {
                            string risposta = (response.ToString());
                            if (risposta  == "AltroArgomento")
                            {
                                result.Feedback = "it works only if user choose an option";
                                result.IsValid = true;
                            }
                            return result;
                          }
                        })
                .Build()); 
            return form;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

有一些可能的解决方法供您考虑。通常,如果您要考虑用户要提问或说与表格无关的情况,可以让他们使用Quit command取消表格。如果您希望您的机器人足够聪明,可以在用户在表单中间更改主题时进行解释,那就更高级了。

如果您想继续使用validate方法,可以将MainOption字段更改为feed_dict而不是string,以便将所有用户输入发送到validate方法,但是您可以d需要自己生成选择列表。

我的建议是使用自定义提示器而不是验证方法。我写了blog post,其中详细说明了如何制作这样的提示。首先,您将提供一个NotUnderstood template来提示您何时提示消息不是FormFlow中的有效选项。然后,在提示符下,您将调用QnAMaker对话框或对消息进行任何操作。

MainOptions?