私のボットには、いくつかの意図を持つ LUIS ダイアログがあります。MessageController から LUIS ダイアログを呼び出します。インテントが検出された場合は、子ダイアログを開始します。子ダイアログが完了したら、そのタスクが呼び出された context.Done("response from user").
後に呼び出します。ChlildDialogDone
タスク内ChildDialogDone
で、LUIS ダイアログを再度呼び出して、ユーザーのメッセージの意図を検出したいと考えています (これは に来ます ChildDialogDone
)。このコード行が実行されると、何も起こらず、ボットはユーザーからの次のメッセージを待っていChildDialogDone
ます。context.Wait(MessageReceived).
コードは次のとおりです。
[Serializable]
public partial class DefiningIntentDialog : LuisDialog<object>
{
[LuisIntent("")]
public async Task NoIntent(IDialogContext context, LuisResult result)
{
var dialog = new GreetingsDialog();
dialog.InitialMessage = result.Query;
context.Call(dialog, GreetingDialogDone);
}
[LuisIntent("Email")]
public virtual async Task ConfirmationEmail(IDialogContext context, LuisResult result)
{
await context.Forward(new EmailDialog, EmailDialogDone, "message", CancellationToken.None);
}
private async Task EmailDialogDone(IDialogContext context, IAwaitable<string> argument)
{
var messageHandled = await argument;
context.Wait(MessageReceived);
}
}
そのため、EmailDialogDone 内にはユーザーからのメッセージがあり、このメッセージで DefiningIntent ダイアログを再度実行したいと考えています。どうすればいいですか?