是否有任何常见的方法可以达到LUIS对话中的所有意图?

问题描述 投票:2回答:2

我想知道是否有人知道任何方式在调用任何Luis Intent方法时始终调用自定义方法。基本上我正在尝试在Bot从LuisDialog获取数据时向用户添加加载器消息。

c# botframework luis
2个回答
3
投票

如果你有一个将消息转发给LuisDialog的RootDialog,你可以在RootDialog或LuisDialog的StartAsync方法中显示“加载器消息”。另一种选择是覆盖LuisDialog的MessageReceived,并在调用base.MessageReceived之前发送加载器消息。

[Serializable]
public class RootDialog : IDialog<object>
{
    public Task StartAsync(IDialogContext context)
    {
        context.Wait(MessageReceivedAsync);
        return Task.CompletedTask;
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {
        var activity = await result as Activity;
        await context.PostAsync("RootDialog.MessageReceivedAsync");
        await context.Forward(new LuisTestDialog(), AfterLuisDialog, activity);            
    }

    private async Task AfterLuisDialog(IDialogContext context, IAwaitable<object> result)
    {
        await context.PostAsync("RootDialog.AfterLuisDialog");            
    }
}

[LuisModel("xxx", "xxx")]
[Serializable]
public class LuisTestDialog : LuisDialog<object>
{
    public async override Task StartAsync(IDialogContext context)
    {
        await context.PostAsync("LuisTestDialog.StartAsync");
        await base.StartAsync(context);
    }

    [LuisIntent("")]
    [LuisIntent("None")]
    public async Task None(IDialogContext context, LuisResult result)
    {
        await context.PostAsync("LuisTestDialog.None");
        context.Done(true);
    }

    protected async override Task MessageReceived(IDialogContext context, IAwaitable<IMessageActivity> item)
    {
        await context.PostAsync("LuisTestDialog.MessageReceived");
        await base.MessageReceived(context, item);
    }
}

以上将导致以下消息:

enter image description here


0
投票

我有两个想法。

  1. 从Messagescontroller发送“加载程序消息”。
  2. 有一个从MessagesController调用的根对话框。它可以在对您的LUIS对话框执行context.forward()之前发送加载程序消息

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.