2016-09-21 8 views
14

私はAzure + Bot Framework + LUIS(LuisDialog経由)で動作するボットを持っています。 Microsoftボットフレームワークで「申し訳ありません、ボットコードに問題があります」

ユーザーは、彼らが自分のFacebook Messengerまたはウェブサイトに埋め込むには、このエラーメッセージが表示される(ボットが回答する機会を得る前に)立て続けに2つのメッセージを送信するために発生した場合

Sorry, my bot code is having an issue.

を通じデバッグするときボット・チャネル・エミュレータ、私はエラーがこれであることを参照してください。

"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()

スタックトレースの終わりには、エラーが私のMessageController.csにこの行で発生していることを示しています。

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

私はLUISの有料版を使用しているため、これは異常です。これは、最大10コール/秒を可能にします。いずれの場合においても

、私はtry/catchブロックにMessageController.csで全体のコードをラップし、関係なく、例外のこの値を返す試してみました:

return Request.CreateResponse(HttpStatusCode.OK); 

それでも、ユーザーは、「エラーメッセージが表示されます申し訳ありませんが、ボットコードに問題があります。「基本的に未処理例外があることを意味します。

このメッセージがユーザーに表示されないようにするにはどうすればよいですか、例外をキャッチしますか?

答えて

10

メッセージは例外がルートダイアログA.を脱出したという理由だけで、あなたは

一つの選択肢は、追加することですルートダイアログA.から逃げるの未処理の例外を防止することによって、この状況を回避することができますPostUnhandledExceptionToUserTaskにユーザに送信されます別のルートダイアログBは単にダイアログAを呼び出し、ResumeAfter<R>コールバックに渡されたIAwaitable<R>の結果を無視します。

Chain.DefaultIfExceptionあなたは内部例外を処理するボットフレームワークのDefaultIfException機能を使用することができるダイアログB.

1

の実装を提供します。 このようになります:

await Conversation.SendAsync(
    activity,() => new Dialogs.RootDialog().DefaultIfException() 
); 
関連する問題