Botframework 使用FormFlow机器人框架测验程序

Botframework 使用FormFlow机器人框架测验程序,botframework,formflow,Botframework,Formflow,我们的机器人构建为用户进行“个性测验”。想想Buzzfeed 我有各种各样的属性,我想根据用户在表单上的选择增加,只是整数,然后返回最终结果。 使用Sandwichbot作为模板,这是一个类似(意译)的问题: 你喜欢帮助别人吗?是不是 代码如下: .Confirm(async (state) => { switch (state.HelpYesNo)

我们的机器人构建为用户进行“个性测验”。想想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来让用户“确认”。这是一个额外的步骤,特别是如果他们必须在每个问题之后做

[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};
    }
}
我试着用一个validate代替它,例如validate:async(state,response)=> 这提供了更好的用户体验,但实际上并没有运行switch case。我认为开关的格式设置在验证的错误位置?我不确定这里的语法是否可以让“validate”来处理这个案例


在FormFlow中,这样做的正确方法是什么

试试这样的东西。布尔字段也会产生“是/否”问题

[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};
    }
}
[可序列化]
公共类QuizForm
{
公共价值;
公共价值;
[提示(“你喜欢帮助别人吗?{|}”)]
公共福利人员;
公共静态表单BuildForm()
{
返回新的FormBuilder()
.Message(“让测验开始…”)
.字段(姓名(帮助人员),验证:ValidateBool)
//其他领域
.Build();
}
私有静态异步任务ValidateBool(QuizForm状态,对象值)
{
var TrueOrFalse=(bool)值;
开关(真或假)
{
大小写为true:state.HelpfulValue++;break;
case false:state.HurtfulValue++;break;
}
返回新的ValidateResult{IsValid=true,Value=Value};
}
}

啊,谢谢!除了在ValidateBool中用QuizForm替换了一个打字错误外,这是有效的。谢谢你的帮助!