1

我们有一个将收集信息的机器人,我们想利用 FormFlow。使用自定义提示器,我们可以自定义传出消息,但是有没有类似的工具可以让我们在传入消息到达识别器之前拦截它们?具体的用例是基于用户输入的,我们可能希望立即存在于流程之外并重定向到不同的对话框。

4

1 回答 1

0

在使用 FormFlow 时,您可以使用业务逻辑来处理用户输入,您可以在其中立即退出表单流并重定向到不同的对话框。

由于 validate 函数无法传递上下文,因此您可以将上下文存储在构造时填充的表单变量中。

public MyFormClass(IDialogContext context)
{
    Context = context;
}
public IDialogContext Context { get; set; }
public int IntegerField { get; set; }

稍后,为特定字段调用 validate 函数。在这里,您可以使用存储的上下文来启动一个新对话框。

return new FormBuilder<MyFormClass>()
    .Field(nameof(IntegerField),
        validate: async (state, value) =>
        {
            var result = new ValidateResult { IsValid = true };

            if (state.IntegerField > 10)
            {
                await state.Context.Call(new Dialog(), Dialog.ResumeMethod);
                return result;
            }
            else
            {
                return result;
            }
        }
    )
    .Build();

笔记:

  • 即使永远不会到达第一个 return 语句,也需要避免抛出错误。
  • 您可能需要实施额外的步骤来正确管理机器人的对话框堆栈。

即使永远不会到达第一个 return 语句,它也是必需的

于 2018-06-07T18:01:58.623 回答