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