2016-10-21 2 views
4

내 프로젝트 중 하나에 봇 프레임 워크를 사용하고 있습니다. 그것은 PromptDialog.Confirm 함수에서 회신을 처리하는 동안 루프에 갇혀있는 것 같습니다.대화 상자 루프에 봇 프레임 워크가 걸림

namespace Genome 
{ 
public class InitiateDialog : IDialog<object> 
{ 
    public async Task StartAsync(IDialogContext context) 
    { 
     context.Wait(ConversationStarted); 
    } 

    public async Task ConversationStarted(IDialogContext context, IAwaitable<IMessageActivity> message) 
    { 
     await context.PostAsync("Hi!"); 
     PromptDialog.Confirm(
      context: context, 
      resume: ResumeAndPromptPlatformAsync, 
      prompt: "Would you like to upload the document?", 
      retry: "I didn't understand. Please try again." 
      ); 
    } 

    public async Task ResumeAndPromptPlatformAsync(IDialogContext context, IAwaitable<bool> result) 
    { 
     await context.PostAsync("Input Received"); 
    } 
} 
} 

이 코드의 실행은 절대로 ResumeAndPromptPlatformAsync 함수에 도달하지 않습니다. 매번 PromptDialog에서 Yes/No를 선택합니다 .Confirm() 봇 에뮬레이터는 다시 ConversationStarted()로 시작하여 동일한 질문을 다시 묻습니다.

+0

사용중인 BotBuilder NuGet 패키지의 버전은 무엇입니까? –

답변

0

현재 코드가 맞다고 생각하지만 루프를 유발 한 이전 코드에 오류가 있었을 수 있습니다. 봇 프레임 워크는 자동으로 상태를 저장하기 때문에 이전 코드를 사용하는 경우에도 여전히 문제가 있습니다.

facebook 채널을 사용하는 경우 "/deleteprofile"을 입력하여 상태를 재설정하고 새 코드 사용을 시작하십시오. 에뮬레이터를 사용중인 경우 데이터 삭제를 클릭하거나 새 사용자와 새 대화를 시작하십시오.

또한 ResumeAndPromptPlatformAsync 메서드는 context.Wait 또는 context.Done으로 끝나야합니다. 그렇지 않으면 문제의 원인 일 수있는 예외가 발생합니다.

업데이트 : 코드를 실행했으며 context.Done(this);을 추가 한 후 예상대로 작동합니다. 나는 에뮬레이터를 사용하고있다.

+0

이 질문에 게시 된 문제를 재현 할 수 있습니다 (내 ResumeAndPromptPlatformAsync에서 context.Done이 있음). 결코이 방법에 도달하지 않습니다. botframework의 버그처럼 보입니다. 나는 어제부터이 상황에 직면하고있다. – rajkiran

+0

나는 코드를 실행했고, context.Done을 ​​추가 한 후에 그것을 사용했다. – K48

+0

@ K48 감사합니다. 이제 작동합니다. –

관련 문제