【问题标题】:Bot Framework Dialog Leakage IssueBot Framework 对话框泄漏问题
【发布时间】:2018-11-03 00:13:47
【问题描述】:

我开发了一个机器人,它在对话开始时调用基于提示对话框的菜单。 消息控制器上使用的对话框调用:

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

问题是当我通过 Bot Emulator 提示对话框选项执行它时,代码已正确处理。 但是,当我通过直接通道提示对话框选项执行它时,对话框代码中的“泄漏”并移动到调用 LUIS 来管理菜单选项的根对话框。 关于如何避免这种情况的想法?

谢谢!

【问题讨论】:

  • 所以你的根对话框是一个 LUIS 对话框? CustomBellaHelp 是您的根对话框吗?当您说 Direct Channel 时,您是指 Direct Line 吗?您是否在响应 ConversationUpdate 事件?我想我需要查看您的其余代码才能为您提供帮助。
  • 谢谢凯尔。对于您的问题:CustomBellaHelp 不是我的根对话框。在对话开始时,消息控制器可以选择调用它。抱歉,我的意思是 Direct Line ;) 是的,我正在回复 ConversationUpdate。代码可在onedrive.live.com/… 获得提前感谢!

标签: botframework


【解决方案1】:

我想你可能误解了Conversation.SendAsync() 的目的。 MakeRoot 委托不是导航到您想要的任何对话框的功能。它仅在对话开始时调用,用于创建对话的根对话。如果对话已经在进行中,Conversation.SendAsync() 会将活动发送到堆栈顶部的任何对话框,并忽略 MakeRoot 委托。您可以在此处阅读有关对话和对话流程的更多信息:https://docs.microsoft.com/en-us/azure/bot-service/bot-service-design-conversation-flow?view=azure-bot-service-3.0

如果你想在对话中间开始对话,你应该在另一个对话中而不是从你的消息控制器中开始。这样做的典型方法是使用context.Forward():https://docs.microsoft.com/en-us/azure/bot-service/dotnet/bot-builder-dotnet-manage-conversation-flow?view=azure-bot-service-3.0#invoke-the-new-order-dialog

至于 Direct Line 的行为与模拟器不同的原因,您必须了解像 conversationUpdate 这样的事件是特定于频道的,并且可能在不同频道上以意想不到的方式表现。

【讨论】:

  • 非常感谢凯尔的指导。所以我的理解是,没有办法在对话开始时实现一个自启动的菜单驱动对话框。如果你知道出路,请告诉我;)谢谢!
  • 查看此内容以了解有关如何在用户第一条消息之前启动对话框的信息:blog.botframework.com/2018/07/12/…
  • 酷。将有一个战利品。顺便说一句,刚刚找到了一个完全符合我要求的 MS 机器人。 cloudsociety.microsoft.com
  • 别忘了点赞并将这个答案标记为正确
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多