c# - 如何避免 Microsoft Bot Framework 中的 "Sorry, my bot code is having an issue"

标签 c# botframework azure-language-understanding

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

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

Sorry, my bot code is having an issue.

通过机器人 channel 模拟器调试时,我看到错误是这样的:

"text": "Error: Response status code does not indicate success: 429 (Too Many Requests). at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) Microsoft.Bot.Builder.Luis.LuisService.d__4.MoveNext()

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

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

这很奇怪,因为我使用的是 LUIS 的付费版本,它每秒最多可以调用 10 次。

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

return Request.CreateResponse(HttpStatusCode.OK);

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

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

最佳答案

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

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

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

关于c# - 如何避免 Microsoft Bot Framework 中的 "Sorry, my bot code is having an issue",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609638/

相关文章:

c# - 当似乎无法进行空引用时,为什么会收到可能的取消引用空引用警告?

c# - Microsoft Bot Framework 地理定位

botframework - 尝试将 luis 迁移到 Azure 资源时出现 BadArgument 错误

node.js - 关闭node js登录后弹出的窗口

botframework - 如何在 Bot Framework v2.0 上开发自定义操作

botframework - Luis 可以用于在 MSFT Bot Framework 以外的平台上设计的机器人吗

c# - LUIS 获取所有意图列表,其中包含所有标记的话语

c# - session 关闭后加载子对象

c# - 如何调用动态外部 dll

c# - 决定需要哪个子类的最佳方法