单击“确认对话框”中的后退按钮后,如何返回上一个用户对话?

时间:2016-06-17 13:05:02

标签: botframework luis

我目前正在研究Bot框架技术,在我的一个项目中,一旦我点击FORM中的后退按钮,我想回到用户对话,如下图所示。 enter image description here

我知道当用户在机器人框架模拟器中输入时,它会立即返回,但我想要上面的场景。

如何解决上述情况?

1 个答案:

答案 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或执行您需要的任何操作。