Tag: luis

将模型和订阅密钥传递给LuisDialog而不是通过属性

我正在写一个可以说两种语言的机器人。 因此,我需要使用两个单独的LUIS应用程序(每种语言一个)。 Bot框架中的LuisDialog像这样初始化(来自Microsoft的例子): [LuisModel(“c413b2ef-382c-45bd-8ff0-f76d60e2a821”, “6d0966209c6e4f6b835ce34492f3e6d9”)] [Serializable] public class SimpleAlarmDialog : LuisDialog { 但是,我需要使用动态应用程序ID和订阅密钥,具体取决于我确定的用户的语言。 两个LUIS应用程序中的所有方法,意图等都是相同的。 C#中的属性不能是动态的。 我可以动态地将应用和订阅密钥传递给LuisDialog而不是硬编码的另一种方式是什么?

如何在与机器人聊天时获取用户的位置?

我正在开发一个Bot Framework应用程序,它使用Microsoft Bot技术与Slack集成。 在bot项目中,我试图在用户发送消息时获取用户位置。 我想要实现的是,当用户键入消息“向我显示附近的医院”时,我想让用户使用Geo坐标并将其传递给API,该API将返回该位置附近的医院列表。 那么关于如何获得用户在Microsoft Bot项目中的当前位置的任何想法? 我尝试使用Geo位置类,但是我无法直接添加类引用,当我为Geo位置类添加外部DLL时,Visual Studio会抛出一些错误。 有没有办法让用户在Bots中获得当前位置?

将LUIS与FormFlow集成

我创建了一个机器人,里面有一个FormFlow。 现在,如果您键入我想要启动产品,LUIS将告诉它必须转到哪个对话框: internal static IDialog CreateProduct() { return Chain.From(() => FormDialog.FromForm(AssesmentHelper.BuildForm)) .Do(async (context, profileForm) => { try { var completed = await profileForm; } catch (FormCanceledException e) { string reply; if (e.InnerException == null) { reply = $”You quit on {e.Last}–maybe you can finish next time!”; } else { reply = Responses.ShortCircuit; } await context.PostAsync(reply); […]

LUIS / Bot Framework多个对话框,将意图处理移动到另一个对话框

我的目标是使用他们的C#SDK将对话框和LUIS实现到Microsoft Bot Framework应用程序中。 我试图遵循这个主题 https://github.com/Microsoft/BotBuilder/issues/127及其相关post(最后引用),但无法让我的代码在实践中运行。 这是我的RootDialog类。 请注意,我创建了一个处理“GetProduct”意图的方法,当它获得此意图时,它应该使用context.Forward()方法将LuisResult转发到ProductsDialog,但我所看到的只是它直接转到ResumeAfter方法,ProductsDialogCompleted。 现在,这可能是我失败的地方,但我找不到显示多个LUIS对话框的示例。 public class RootDialog : LuisDialog { [LuisIntent(“GetProduct”)] private async Task GetProduct(IDialogContext context, LuisResult result) { await context.PostAsync(“Calling ProductsDialog…”); await context.Forward(Chain.From(() => new ProductsDialog()), ProductsDialogCompleted, context.Activity, CancellationToken.None); } private async Task ProductsDialogCompleted(IDialogContext context, IAwaitable result) { var res = await result; context.PostAsync(“ProductsDialogCompleted” + result); context.Wait(this.MessageReceived); } } public […]

在Microsoft bot框架中validation用户

我正在建立一个银行机器人,我需要在向用户提供任何详细信息之前对用户进行身份validation。 如果Bot闲置5分钟,我需要用户重新进行身份validation,然后再继续操作。 我正在使用Microsoft Bot框架和LUIS进行BOT开发。 任何人都可以帮我解决这个问题吗?

如何从IDialogContext获取活动信息

我正在使用LuisDialog,所有我得到的回调返回的是IDialogContext和LuisResult。 有没有办法可以从名称等等的原始活动中获取信息,如频道?

如何在Microsoft Bot Framework中避免“抱歉,我的机器人代码有问题”

我有一个运行在Azure + Bot Framework + LUIS(通过LuisDialog)的机器人。 如果用户碰巧快速连续发送两条消息(在机器人有机会回答之前),他们会在Facebook Messenger或web embed上看到此错误消息: 对不起,我的机器人代码出了问题。 通过bot通道模拟器进行调试时,我发现错误是这样的: “text”:“错误:响应状态代码未指示成功:429(请求太多)。位于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) Microsoft.Bot.Builder.Luis.LuisService.d__4.MoveNext() 堆栈跟踪的结尾显示错误源自MessageController.cs中的此行: await Conversation.SendAsync(activity, () => new LuisRootDialogEnglish()); 这很奇怪,因为我使用的是付费版本的LUIS,每秒最多可以拨打10个电话。 在任何情况下,我都尝试将MessageController.cs中的整个代码包装到try / catch块中,并且无论exception如何都返回此值: return Request.CreateResponse(HttpStatusCode.OK); 仍然,用户看到错误消息“抱歉,我的机器人代码有问题”,这基本上意味着存在未处理的exception。 如何防止向用户显示此消息或捕获exception?

如何在Bot Framework中从RootDialog转发到LuisDialog

我正在为FAQ创建一个机器人。 当机器人开始对话时,发送带有2个选项的PromptDialog:英语,法语。 我想在用户选择英语按钮时将对话框转发到EnglishLuis,在选择法语时我想将FrenchLuis转发。 这是我的代码: Rootdialog.cs public class RootDialog : IDialog { private const string EnglishMenu = “English”; private const string FrenchMenu = “French”; private const string QAMenu = “Q&A”; private List mainMenuList = new List() { EnglishMenu, FrenchMenu, QAMenu }; private string location; public async Task StartAsync(IDialogContext context) { await context.PostAsync(“Welcome to Root Dialog”); context.Wait(MessageReceiveAsync); […]