web-dev-qa-db-ja.com

Microsoft Bot Frameworkで「申し訳ありませんが、私のボットコードに問題があります」を回避する方法

Azure + Bot Framework + LUIS(LuisDialog経由)で実行されるボットがあります。

ユーザーがたまたま2つのメッセージを連続して送信した場合(ボットが応答する前に)、Facebook MessengerまたはWeb埋め込みにこのエラーメッセージが表示されます。

申し訳ありませんが、ボットコードに問題があります。

ボットチャネルエミュレータを介してデバッグすると、エラーは次のようになります。

「テキスト」:「エラー:応答ステータスコードは成功を示しません: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());

これは、1秒あたり最大10回の呼び出しが可能なLUISの有料版を使用しているため、奇妙です。

いずれにせよ、MessageController.csのコード全体をtry/catchブロックにラップし、例外に関係なくこの値を返しました。

return Request.CreateResponse(HttpStatusCode.OK);

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

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

20
K48

例外がルートダイアログAをエスケープしたため、メッセージはPostUnhandledExceptionToUserTaskでユーザーに送信されます。未処理の例外がルートダイアログAをエスケープしないようにすることで、この状況を回避できます。

1つのオプションは、ダイアログAを単に呼び出し、IAwaitable<R>コールバックに渡されるResumeAfter<R>結果を単に無視する別のルートダイアログBを追加することです。

Chain.DefaultIfExceptionは、ダイアログBの実装を提供します。

13
Will Portnoy

Bot FrameworkのDefaultIfException機能を使用して、例外を内部的に処理できます。

次のようになります。

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

403または429を取得すると、それぞれ「クォータを超えている」または「要求が多すぎる」可能性があります。最初の場合は、キーを再作成してLUISアプリに署名する必要があります。毎月更新されるため、賢明に使用するか、有料ティアを使用する必要があります。

2番目の場合、リクエストの制限もあります。 Boundaries documentation をご覧ください。

ここで、Microsoft documentation についてこれを見つけることができます。

0