1

我们的机器人构建为用户进行了“个性测验”。想想 Buzzfeed。

我有各种我想增加的属性,只是整数,基于用户在表单上的选择,然后返回最终结果。使用 Sandwichbot 作为模板,这是在询问类似(释义):

你喜欢帮助别人吗?是 否

代码就像:

                       .Confirm(async (state) =>
                       {

                        switch (state.HelpYesNo)
                        {
                            case true: HelpfulValue++; break;
                            case false: HurtfulValue++; break;
                        }
                        return new PromptAttribute("Thanks, choose OK to continue.");

它工作正常,但我讨厌我必须通过键入 OK 来让用户“确认”。这是一个额外的步骤,特别是如果他们必须在每个问题之后都这样做。

我尝试用 validate 来编写这个,例如 validate: async (state, response) => 这提供了更好的用户体验,但实际上并没有运行 switch-case。我认为开关的格式是在错误的地方进行验证?我不确定此处获取“验证”以处理此案的语法。

在 FormFlow 中做这样的事情的正确方法是什么?

4

1 回答 1

2

尝试这样的事情。布尔字段也会导致是/否问题。

[Serializable]
public class QuizForm
{
    public int HelpfulValue;
    public int HurtfulValue;

    [Prompt("Do you like to help people? {||}")]
    public bool HelpPeople;

    public static IForm<QuizForm> BuildForm()
    {
        return new FormBuilder<QuizForm>()
                .Message("Let the quiz begin...")
                .Field(nameof(HelpPeople), validate: ValidateBool)
                // other fields
                .Build();
    }

    private static async Task<ValidateResult> ValidateBool(QuizForm state, object value)
    {
        var TrueOrFalse = (bool) value;

        switch (TrueOrFalse)
        {
            case true: state.HelpfulValue++; break;
            case false: state.HurtfulValue++; break;
        }

        return new ValidateResult{IsValid = true, Value = value};
    }
}
于 2017-05-05T16:09:56.410 回答