如何在Chain Fluent对话框中使用LuisDialog?

时间:2016-10-21 12:10:11

标签: c# botframework luis

我想使用链接口作为我的根对话框,通过用户消息切换对话,例如,如果用户写了“帮助”,我可以调用HelpDialog。并让其他输入由LuisDialog管理。

我的问题是LuisDialog等待来自用户的消息,因此,在链环境中,用户必须在Luis返回其意图之前写入两次输入。

这是我的示例代码:

public static readonly IDialog<string> dialog = Chain
        .PostToChain()
        .Switch(
            new Case<IMessageActivity, IDialog<string>>(msg =>
                {
                    var regex = new Regex("^help$", RegexOptions.IgnoreCase);
                    return regex.IsMatch(msg.Text);
                },
                (ctx, msg) =>
                {
                    return new HelpDialog();
                }),

            new DefaultCase<IMessageActivity, IDialog<string>>(
                (ctx, msg) => {
                    return new MyLuisDialog();
                })
        )           
        .Unwrap().PostToUser();

是否可以将LuisDialog与Chain一起使用,或者如何一起使用多个Dialog?

由于 马可

1 个答案:

答案 0 :(得分:0)

要使用,context.Forward和context.Call需要创建一个实现IDialog的新类。

如果您不想这样做,请在LuisDialog实施中尝试以下代码。它有效!

public override async Task StartAsync(IDialogContext context)
    {
        await this.MessageReceived(context, Awaitable.FromItem(context.Activity.AsMessageActivity()));
    }