【问题标题】:Quit current dialog if user wants to stop如果用户想停止,退出当前对话框
【发布时间】:2018-10-19 13:43:40
【问题描述】:

我正在使用多个对话框。有些使用 formbuilder,有些使用 ResultAfter 方法来自定义提示值。我想要一种方法来检查退出词(如停止、退出等)的传入消息。

我认为 StartAsync 函数将是一个好的开始。看到所有对话框都是从我的 RootDialog 转发的,我已经在 RootDialog 中实现了这个:

    public override async Task StartAsync(IDialogContext context)
    {
        string[] stopStrings = { "quit", "cancel", "exit" };
        var msg = context.Activity.AsMessageActivity().Text;
        if (stopStrings.Any(msg.Contains))
        {
            await context.PostAsync("You cancelled.");
            context.Done(true);
        }
        else
        {
            context.Wait(this.MessageReceived);
        }
    }

当我要求机器人“停止”时,它成功地告诉我我取消了。但是在我发送的下一条消息中,我收到了这个错误:

Exception thrown: 'System.Collections.Generic.KeyNotFoundException'

在我的 MessageController 中的这一行:

await Conversation.SendAsync(activity, () => new RootDialog());

现在我不确定没有找到什么密钥,以及为什么它会向我发送这个。感谢您的帮助!

【问题讨论】:

    标签: frameworks bots azure-language-understanding mbf


    【解决方案1】:

    通常,当有人想要完成类似的事情时,例如取消关键字,他们会使用scorables。 Scorables 是全局消息处理程序,因此如果您设置的关键字触发了一个关键字,它将在触发您的正常对话流之前得到处理。有一些很棒的资源可用于评分,例如 this blogthis video 应该可以帮助您入门。

    我实际上无法重现此错误,但这里有一些提示和想法。我认为我从未见过有人将逻辑放入StartAsync 并按照他们的预期行事。当我尝试你的代码时,我无法弄清楚为什么你会以你的方式覆盖它。逻辑应该在MessageReceivedAsync 中。尝试将您的逻辑移动到 MessageReceivedAsync 方法中。如果您绝对想这样做,则可以尝试另一件事,即用 context.Wait(this.MessageReceivedAsync); 替换 context.Done(true) ,因为无论如何您都在 RootDialog 中,消息只会从消息控制器路由到那里,然后您就可以做到不需要手动操作对话框堆栈,虽然我不知道你的项目的结构,所以我可能是错的。

    【讨论】:

    • 感谢您的回答。我正在使用 LUIS。我试图处理应该处理退出和停止之类的词的意图“取消”。这不起作用(我已将意图处理放在 rootdialog 和子对话框中)。在使用 Luis 的同时使用 Scorable 感觉有点奇怪,或者这是一般做法?关于用 .wait 替换 .done:我想退出当前(子)对话框。等待下一个回复只会将消息再次转发到子对话框。
    • 一起使用 LUIS 和 scorable 是一种完全合法的方式来设计您的机器人,它在处理“返回”和“退出”之类的事情时非常常见。我们实际上有一个sample that uses LUIS QnA and scorables all in the same project。我明白你所说的完成/等待。使用示例代码很难推断出您的项目中发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多