是否有任何通用方法可以满足 LUIS 对话框中的所有意图?
Is there any common method which will hit all the intents in the LUIS Dialog?
我想知道是否有人知道在调用任何 Luis Intent 方法时始终调用自定义方法的方法。基本上,当机器人从 LuisDialog 获取数据时,我试图向用户添加加载程序消息。
我有两个想法。
- 从您的消息控制器发送 "loader message"。
- 有一个从 MessagesController 调用的根对话框。它可以在对您的 LUIS 对话框 context.forward() 执行 context.forward() 之前发送您的加载程序消息
希望对您有所帮助。
如果您有一个将消息转发到 LuisDialog 的 RootDialog,您可以在 RootDialog 或 LuisDialog 的 StartAsync 方法中显示 "loader message"。另一种选择是覆盖 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);
}
}
以上将产生以下消息:
我想知道是否有人知道在调用任何 Luis Intent 方法时始终调用自定义方法的方法。基本上,当机器人从 LuisDialog 获取数据时,我试图向用户添加加载程序消息。
我有两个想法。
- 从您的消息控制器发送 "loader message"。
- 有一个从 MessagesController 调用的根对话框。它可以在对您的 LUIS 对话框 context.forward() 执行 context.forward() 之前发送您的加载程序消息
希望对您有所帮助。
如果您有一个将消息转发到 LuisDialog 的 RootDialog,您可以在 RootDialog 或 LuisDialog 的 StartAsync 方法中显示 "loader message"。另一种选择是覆盖 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);
}
}
以上将产生以下消息: