У меня есть диалог корень, LuisDialog, из которого я называю несколько дочерних диалоговых окон, как следуетPass LuisResult ребенку диалоговое
[LuisModel("8869ccea-7c5f-4cce-8639-64bbc7ecd62b", "c5835534ed7746449356c62dcdf48fde")]
[Serializable]
public class DefaultDialog : LuisDialog<object>
{
[LuisIntent("showIncidents")]
public async Task ShowIncidents(IDialogContext context, IAwaitable<IMessageActivity> _message, LuisResult result)
{
var message = await _message;
await context.Forward(new ShowIncident(), ResumeAfter,message,CancellationToken.None);
}
[LuisIntent("CreateIncident")]
public async Task CreateIncident(IDialogContext context, LuisResult result)
{
//context.Call(new CreateIncident(), ResumeAfter);
context.Call(new CreateIncident(), ResumeAfter);
}
Когда я называю «ShowIncident()» dialiog, я хотел бы перенаправить LuisResult, а не сообщение, потому что мне нужны сущности из LuisResult в дочернем диалоге. Таким образом, я пытался вызова диалога ребенка с помощью следующего кода:
await context.Forward(new ShowIncident(), ResumeAfter,result,CancellationToken.None);
Я попытался реализации моего «ShowIncident» диалог следующим образом:
[Serializable]
public class ShowIncident : IDialog<object>
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
}
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<LuisResult> _result)
{
var result = await _result;
// Get and post Incidents
Incidents incidents = await ServiceNow.GetIncidentsAsync();
await context.PostAsync(incidents.toText());
}
}
Это выдает ошибку, которую я предполагаю, потому что IAwaitable<LuisResult>
должен be IAwaitable<IMessageActivity>
. Я понимаю, что могу использовать несколько обходных решений, например, позиционирование сущностей в виде сообщения или использование общедоступного статического класса для определения инцидентов. Но каков был бы «правильный путь»?