MS Bot 如何将 Luis 实体转发给子对话框

MS Bot how to forward Luis Entities to child Dialog

我正在尝试将 EntitiesLuisResults 转发到子对话框 class。谁能协助解决这个问题?

Luis Dialog Class

...
[LuisIntent("Foo")]
public async Task Foo(IDialogContext context, LuisResult result)
{
    var entities = result.Entities;
    await context.Forward(new FooDialog(), AfterFooDialog, entities, 
    CancellationToken.None);
}
...

FooDialog Class

...
public async StartAsync(IDialogContext context)
{
    context.Wait(MessageReceivedAsync);
}

private async Task MessageReceivedAsync(IDialogContext context, List<string> entities, IAwaitable(IMessageActivity) result)
{
    var _entites = await entities;
    ...

}
...

一种方法是,通过构造函数初始化 FooDialog 中的实体。因此,将实体从 LuisDialog.

转发到构造函数中的 FooDialog

因此您的代码将是:

路易斯·达格

[LuisIntent("Foo")]
    public async Task Foo(IDialogContext context, LuisResult result)
    {
        var entities = result.Entities;
        await context.Forward(new FooDialog(entities), AfterFooDialog, entities, CancellationToken.None);
    }

还有你的FooDialog

[Serializable]
public class FooDialog : IDialog<object>
{
    public IList<EntityRecommendation> _entities { get; set; }

    public FooDialog(IList<EntityRecommendation> entities)
    {
        this._entities = entities;
    }

    public FooDialog()
    {}

    public async Task StartAsync(IDialogContext context)
    {
        context.Wait(this.MessageReceivedAsync);
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result )
    {
        await context.PostAsync("Entity : " + _entities.First().Entity);
    }

}

现在您在 FooDialog class 中有了实体,并且可以通过对象中的任何函数访问。