【问题标题】:How can i go back to previous user conversation once i click the back button In Confirmation Dialog?在确认对话框中单击后退按钮后,如何返回上一个用户对话?
【发布时间】:2016-06-17 13:05:02
【问题描述】:

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

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

如何解决上述情况?

【问题讨论】:

  • 我不确定我是否理解您的要求。你能更具体一点吗?
  • 在上图中,当我单击后退按钮时,它不会转到上一步对话对话框。你能告诉我点击后退按钮后如何返回上一个对话。
  • 那么你是说它在模拟器中有效,但在其他地方无效?
  • 即使模拟器也不行。

标签: botframework azure-language-understanding


【解决方案1】:

如果这是一个 FormDialog,您可以为表单中的每个元素添加验证步骤。在您的情况下,您可能正在使用布尔“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”状态。正因为如此,我刚刚创建了一个枚举,其中的零值是 bot 框架设置的“NoValue”状态:

public enum SvarAlternativ
    {
        NoValue,
        Ja, 
        Nej
    }

希望这对您有所帮助。一旦进入验证方法,您可以 context.close 或做任何您需要的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多