【问题标题】:How to avoid "Sorry, my bot code is having an issue" in Microsoft Bot Framework如何在 Microsoft Bot Framework 中避免“抱歉,我的机器人代码有问题”
【发布时间】:2016-09-21 07:07:57
【问题描述】:

我有一个在 Azure + Bot Framework + LUIS 上运行的机器人(通过 LuisDialog)。

如果用户碰巧连续快速发送两条消息(在机器人有机会回答之前),他们会在 Facebook Messenger 或网络嵌入中看到此错误消息:

抱歉,我的机器人代码有问题。

通过bot通道模拟器调试时,我看到错误是这样的:

"text": "错误:响应状态码不表示成功:429 (请求太多)。在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.Bot.Builder.Luis.LuisService.d__4.MoveNext()

堆栈跟踪的末尾显示错误源自我的 MessageController.cs 中的这一行:

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

这很奇怪,因为我使用的是付费版本的 LUIS,每秒最多允许 10 个调用。

在任何情况下,我都尝试将 MessageController.cs 中的整个代码包装到 try/catch 块中,并在不考虑异常的情况下返回此值:

return Request.CreateResponse(HttpStatusCode.OK);

不过,用户仍会看到错误消息“抱歉,我的机器人代码有问题”,这基本上意味着存在未处理的异常。

如何防止向用户显示此消息,或捕获异常?

【问题讨论】:

    标签: c# botframework azure-language-understanding


    【解决方案1】:

    消息发送给PostUnhandledExceptionToUserTask中的用户只是因为异常已经逃逸了根对话框A。您可以通过防止未处理的异常逃逸根对话框A来避免这种情况。

    一种选择是添加一个不同的根对话框 B,它只调用您的对话框 A,然后简单地忽略传递给 ResumeAfter<R> 回调的 IAwaitable<R> 结果。

    Chain.DefaultIfException 提供了对话框 B 的实现。

    【讨论】:

      【解决方案2】:

      您可以使用 Bot Framework 的 DefaultIfException 功能在内部处理异常。

      看起来像这样:

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

      【讨论】:

        【解决方案3】:

        当您收到 403 或 429 时,可能分别是“超出配额”或“请求过多”,在第一种情况下,您必须再次创建密钥并分配给您的 LUIS 应用,前 1000 个端点查询是免费的,并且每个月都会更新,您必须明智地使用它,否则您必须使用付费层。

        对于第二种情况,您对请求也有限制,请参阅Boundaries documentation

        您可以在此处找到有关此内容的 Microsoft documentation

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多