我目前正在研究Bot框架技术,在我的一个项目中,一旦我点击FORM中的后退按钮,我想回到用户对话,如下图所示。
我知道当用户在机器人框架模拟器中输入时,它会立即返回,但我想要上面的场景。
如何解决上述情况?
答案 0 :(得分:0)
如果这是FormDialog,您可以向表单中的每个元素添加验证步骤。在你的情况下,你可能会使用bool“WantsToCreateAccount”或类似的东西吗?
在您的FormBuilder代码中,您通常会按照我在此处所做的更简单的方式执行操作:
public static IForm<UserData> BuildForm()
{
return new FormBuilder<UserData>()
.Message("Before we start, let me ask you a couple of questions")
.AddRemainingFields()
.Field(new FieldReflector<UserData>(nameof(IsCustomer))
.SetValidate(async (state, value) => await ValidateIsCustomerFieldAsync(state, value)))
.Field(new FieldReflector<UserData>(nameof(HasCustomerId))
.SetValidate(async (state, value) => await ValidateHasCustomerIdFieldAsync(state, value)))
.Build();
}
SetValidate 是此处的关键,您可以在验证该字段后应用您想要的任何逻辑,即
private static Task<ValidateResult> ValidateHasCustomerIdFieldAsync(UserData state, object value)
{
if( (SvarAlternativ) value == SvarAlternativ.Nej)
{
state.CustomerId = "Kund, har inte Id";
}
return Task.FromResult(new ValidateResult { IsValid = true, Value = value });
}
请注意,BOOLEAN值很难进行验证,因为它是一个不能为null的值类型,因此验证器不会看到它是否具有“NoValue”或“false”状态。因此,我刚刚创建了一个枚举,其中零值是机器人框架设置的“NoValue”状态:
public enum SvarAlternativ
{
NoValue,
Ja,
Nej
}
希望这会对你有所帮助。进入验证方法后,您可以使用context.close或执行您需要的任何操作。