2016-09-21 1 views
14

나는 Azure + Bot Framework + LUIS (LuisDialog를 통해)에서 실행되는 봇을 가지고 있습니다. 피하는 방법 "봇 코드에 문제가 있습니다."Microsoft Bot Framework

사용자가 그들의 페이스 북 메신저 또는 웹 삽입에이 오류 메시지가 표시 (로봇이 대답 할 수있는 기회를하기 전에) 빠른 연속 두 개의 메시지를 보낼 발생하면

:

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 개 통화를 허용하기 때문에 이상합니다.

return Request.CreateResponse(HttpStatusCode.OK); 

아직도, 사용자가 오류 메시지 "를 참조

: 어떤 경우에

, 나는 try/catch 블록에 MessageController.cs의 전체 코드를 포장하고, 예외에 관계없이이 값을 반환하는 시도 죄송합니다. 내 봇 코드에 문제가 있습니다. "기본적으로 처리되지 않은 예외가 있음을 의미합니다.

어떻게하면이 메시지가 사용자에게 표시되지 않거나 예외를 잡을 수 있습니까? 예외가 당신은 루트 대화 A.에게

하나의 옵션을 탈출에서 처리되지 않은 예외를 방지하여이 상황을 피할 수 루트 대화 A. 탈출에만 있기 때문에

답변

10

메시지는을 추가 PostUnhandledExceptionToUserTask에서 사용자에게있다 전송 다른 루트 대화 상자 B는 단순히 대화 A를 호출 한 다음 ResumeAfter<R> 콜백에 전달 된 IAwaitable<R> 결과를 무시합니다.

Chain.DefaultIfException 당신은 내부적으로 예외를 처리로 봇 프레임 워크에 대한 DefaultIfException 기능을 사용할 수 있습니다 대화 B.

1

의 구현을 제공합니다. 다음과 같이 보입니다.

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