调用context.Forward后,如何获取子对话框中的项目
After call context.Forward, how to get the item in child dialog
我有一个主要的 Luis 对话框,我需要转发 CheckListDialog 并将 'luisresult.entity' 传递给 CheckListDialog,代码如下:
context.Forward(new CheckListDialog(), this.DialogResumeAfter,result.Entities,CancellationToken.None);
问题:在"CheckListDialog"中,如何得到"result.Entities"?
PS:还有另一种解决方案可以得到Luisresult.Entities,
context.Call(new CheckListDialog(result.Entities), this.DialogResumeAfter);
此解决方案有效,但我想知道如何使用 context.Forward 获取参数值。
使用context.Forward方法时,它希望您发送IMessageActivity类型的参数。如果您只想发送您的第一个实体,那么您可以创建一个 IMessageActivity 变量,然后将其转发给您想要的方法。
["YourLuisIntent"]
public async Task YourLuisIntent(IDialogContext context, IAwaitable<IMessageActivity> argument, LuisResult result)
{
var message = await argument;
message .Text = result.Entities[0].Entity;
var dialog = new CheckListDialog();
await context.Forward(dialog, this.DialogResumeAfter, message , CancellationToken.None);
}
这是完成任务的常规方法。但是,如果您坚持将 LuisResult 传递给方法,那么 Bot Framework 允许您这样做,您可以执行以下操作:
路易斯·达格
["YourLuisIntent"]
public async Task YourLuisIntent(IDialogContext context, LuisResult result)
{
var dialog = new CheckListDialog();
await context.Forward(dailog, this.DialogResumeAfter, result.Entities, CancellationToken.None);
}
清单对话框
此处您需要的是 IList 类型的值,而不是 IMessageActivity。您需要牢记这一点,并且仅使用此对话框访问 Luis 实体。
public Task StartAsync(IDialogContext context)
{
context.Wait<IList<EntityRecommendation>>(MessageReceivedAsync);
return Task.CompletedTask;
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IList<EntityRecommendation>> result)
{
var LuisResult = await result as IList<EntityRecommendation>;
foreach( var entity in LuisResult)
{
await context.PostAsync($"{entity.Entity} - {entity.Type}");
}
}
我有一个主要的 Luis 对话框,我需要转发 CheckListDialog 并将 'luisresult.entity' 传递给 CheckListDialog,代码如下:
context.Forward(new CheckListDialog(), this.DialogResumeAfter,result.Entities,CancellationToken.None);
问题:在"CheckListDialog"中,如何得到"result.Entities"?
PS:还有另一种解决方案可以得到Luisresult.Entities,
context.Call(new CheckListDialog(result.Entities), this.DialogResumeAfter);
此解决方案有效,但我想知道如何使用 context.Forward 获取参数值。
使用context.Forward方法时,它希望您发送IMessageActivity类型的参数。如果您只想发送您的第一个实体,那么您可以创建一个 IMessageActivity 变量,然后将其转发给您想要的方法。
["YourLuisIntent"]
public async Task YourLuisIntent(IDialogContext context, IAwaitable<IMessageActivity> argument, LuisResult result)
{
var message = await argument;
message .Text = result.Entities[0].Entity;
var dialog = new CheckListDialog();
await context.Forward(dialog, this.DialogResumeAfter, message , CancellationToken.None);
}
这是完成任务的常规方法。但是,如果您坚持将 LuisResult 传递给方法,那么 Bot Framework 允许您这样做,您可以执行以下操作:
路易斯·达格
["YourLuisIntent"]
public async Task YourLuisIntent(IDialogContext context, LuisResult result)
{
var dialog = new CheckListDialog();
await context.Forward(dailog, this.DialogResumeAfter, result.Entities, CancellationToken.None);
}
清单对话框
此处您需要的是 IList 类型的值,而不是 IMessageActivity。您需要牢记这一点,并且仅使用此对话框访问 Luis 实体。
public Task StartAsync(IDialogContext context)
{
context.Wait<IList<EntityRecommendation>>(MessageReceivedAsync);
return Task.CompletedTask;
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IList<EntityRecommendation>> result)
{
var LuisResult = await result as IList<EntityRecommendation>;
foreach( var entity in LuisResult)
{
await context.PostAsync($"{entity.Entity} - {entity.Type}");
}
}