3

我想使用链式接口作为我的根对话框,通过用户消息切换对话,例如,如果用户编写“帮助”,我可以调用 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 一起使用,或者如何将多个对话框一起使用?

谢谢马可

4

1 回答 1

0

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

如果您不喜欢这样做,请在 LuisDialog 实现中尝试以下代码。有用!

public override async Task StartAsync(IDialogContext context)
    {
        await this.MessageReceived(context, Awaitable.FromItem(context.Activity.AsMessageActivity()));
    }
于 2017-03-20T14:02:26.610 回答