20 c# botframework azure-language-understanding
我有一个运行在Azure + Bot Framework + LUIS(通过LuisDialog)的机器人.
如果用户碰巧快速连续发送两条消息(在机器人有机会回答之前),他们会在Facebook Messenger或web embed上看到此错误消息:
对不起,我的机器人代码有问题.
通过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());
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我使用的是付费版本的LUIS,每秒最多可以拨打10个电话.
在任何情况下,我都尝试将MessageController.cs中的整个代码包装到一个try/catch
块中,并且无论异常如何都返回此值:
return Request.CreateResponse(HttpStatusCode.OK);
Run Code Online (Sandbox Code Playgroud)
仍然,用户看到错误消息"抱歉,我的机器人代码有问题",这基本上意味着存在未处理的异常.
如何防止向用户显示此消息或捕获异常?
Wil*_*noy 13
该消息仅发送给用户,PostUnhandledExceptionToUserTask
因为异常已转义根对话框A.您可以通过防止未处理的异常转义根对话框A来避免这种情况.
一种选择是添加一个不同的根对话框B,只需调用对话框A,然后忽略IAwaitable<R>
传递给ResumeAfter<R>
回调的结果.
Chain.DefaultIfException
提供了对话框B的实现.
归档时间: |
|
查看次数: |
10146 次 |
最近记录: |