2016-10-26 1 views
1

LUIS 인 텐트가있는 LuisDialog가 있습니다. 이러한 의도 중 일부에서는 사용자에게 더 많은 정보를 요구할 수도 있습니다. 이 경우 PromptDialog 또는 PromptString을 사용하려고합니다.LuisIntent에서 PromptDialog를 호출하려면 어떻게해야합니까?

[LuisIntent("MyIntent")] 
public async Task MyIntent(IDialogContext context, LuisResult result) 
{ 
    if (result.Entities.Count == 0) 
    { 

     PromptDialog.Text(context, AfterUserInputSymbol, "Message to the user", "Try again message", 2); 
     result.Entities[0].Entity = userSymbol;     
    } 

    //some other code 

    context.Wait(MessageReceived); 
} 

private async Task AfterUserInputSymbol(IDialogContext context, IAwaitable<string> result) 
{ 
    userSymbol = await result; 
    context.Wait(MessageReceived); 
} 

그리고이 :

[LuisIntent("MyIntent")] 
public async Task MyIntent(IDialogContext context, LuisResult result) 
{ 
    if (result.Entities.Count == 0) 
    { 
     PromptString dialog = new PromptString("Message to the user", "Try again message", 2); 
     context.Call(dialog, AfterUserInputSymbol); 
     result.Entities[0].Entity = userSymbol;     
    } 

    //some other code 

    context.Wait(MessageReceived); 
} 

private async Task AfterUserInputSymbol(IDialogContext context, IAwaitable<string> result) 
{ 
    userSymbol = await result; 
    context.Wait(MessageReceived); 
} 
프롬프트가 사용자에게 표시되지 않습니다 두 경우 모두

userSymbol의 값이 널 (null)를 얻을 수

나는 alredy이 시도. 디버깅 할 때 코드가 AfterUserInputSymbol 인 경우에만 입력됩니다 : result.Entities[0].Entity = userSymbol;

LuisIntent에 대한 자세한 정보를 묻습니다.

답변

2

질문에 오류가 게시되지 않았으므로 정확히 어떤 것인지 잘 모르는 경우가 있습니다. 그러나 거기에서 일어날 수있는 일은 새로운 대화를 시작하고 컨텍스트를 가지고 있다는 것입니다. 잠깐만 (MessageReceived). 대화 상자를 시작하는 경우 해당 흐름에서 메시지를 기다릴 필요가 없습니다. 그래서 else 절을 ​​추가합니다.

if (result.Entities.Count == 0) 
    { 
     PromptDialog.Text(context, AfterUserInputSymbol, "Message to the user", "Try again message", 2); 
     // The following line shouldn't be here 
     result.Entities[0].Entity = userSymbol;     
    } 
    //here you should put an else 
    else 
    { 
    context.Wait(MessageReceived); 
    } 

또한, 당신은 당신이하고자하는대로 대화 상자를 호출 한 후 루이스 결과 개체에 userSymbol을 할당 할 수 없습니다 염두에두고있다. ResumeAfter 메서드 "AfterUserInputSymbol"에서 수행해야합니다.

당신이 그렇게하면, 당신은 수동으로 상황과 새로운 루이스 결과를 전달하는 당신의 의도를 호출 할 수는

+0

를 (이전 한 당신이 달성하려고하는 내용에 따라 저장해야 할 수도 있습니다) 그것은 나에게 일을 잠시했다 몇 가지 테스트 및 물건, 그러나 그것은 잘 작동했습니다. 고맙습니다. – artie