在到达识别器之前,可以在FormFlow中拦截一条消息吗?

时间:2017-09-14 02:42:00

标签: botframework formflow

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

1 个答案:

答案 0 :(得分:0)

使用FormFlow时,您可以使用business logic处理用户输入,您可以立即退出表单流并重定向到其他对话框。

由于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语句,也需要