При использовании метода 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. Вы должны помнить об этом и использовать этот диалог только для доступа к сущностям Луиса.
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}");
}
}