2016-10-26 7 views
1

私はいくつかのLUISインテントを持つLuisDialogを持っています。これらの意図の中には、ユーザーに詳細な情報を求める必要がある場合があります。これらの場合、私はPromptDialogまたはPromptStringを使用しようとしています。LuisIntentの内部でPromptDialogを呼び出すにはどうすればよいですか?

私はalredyこの試みた:

[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を取得します。私がコードをデバッグしているときには、AfterUserInputSymbolと入力するだけです。result.Entities[0].Entity = userSymbol;

LuisIntentの詳細情報を表示するにはどうすればよいですか?

答えて

2

あなたの質問に投稿されたエラーがないので、何が起こっているのか正確にはわかりませんが、そこで起こっている可能性があるのはあなたが新しいダイアログを開始していることです。ダイアログを起動している場合は、そのフロー内のメッセージを待つ必要はありません。そのため、そこに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

関連する問題