如果用户不喜欢列表中的任何选项,我想截取用户写的内容。我的代码如下,但是仅当用户选择一个选项时,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;
}
}
}
答案 0 :(得分:0)
有一些可能的解决方法供您考虑。通常,如果您要考虑用户要提问或说与表格无关的情况,可以让他们使用Quit command取消表格。如果您希望您的机器人足够聪明,可以在用户在表单中间更改主题时进行解释,那就更高级了。
如果您想继续使用validate方法,可以将MainOption字段更改为feed_dict
而不是string
,以便将所有用户输入发送到validate方法,但是您可以d需要自己生成选择列表。
我的建议是使用自定义提示器而不是验证方法。我写了blog post,其中详细说明了如何制作这样的提示。首先,您将提供一个NotUnderstood template来提示您何时提示消息不是FormFlow中的有效选项。然后,在提示符下,您将调用QnAMaker对话框或对消息进行任何操作。
MainOptions?