Tag: bots

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

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

将图像上传到Skype BOT

我有一个使用Microsoft Bot Framework开发的bot,并在Debug中正确运行 在Skype上安装后,上传图像后我有这样的链接 https://df-apis.skype.com/v2/attachments/0-eus-d4-7e19a097c62f5fc21dd53eabfa19d85e/views/original 代码很简单,没有skype运行 if ((activity.Attachments != null) && (activity.Attachments.Count > 0)) { analysisResult = await AnalyzeUrl(activity.Attachments[0].ContentUrl); } …….. 我如何找到我发送的图片?

暂时存储特定用户的会话

我尝试使用IActivityLogger捕获用户的对话,有没有办法将用户和机器人的对话编译为临时持有者,如变量或会话? 我需要暂时将它存储在只有当用户想要与真人而不是机器人交谈时才能使用的地方。 将发送包含用户和机器人的先前对话的电子邮件。 我不想将其保存到数据库,因为有些用户不会选择这样做。 参见使用的代码。 记录器类: public class Logger:IActivityLogger { public async Task LogAsync(IActivity activity) { var a = ($”From:{activity.From.Id} – To:{activity.Recipient.Id} – Message:{activity.AsMessageActivity()?.Text}” + “\b\r”); } } 全球Asax: protected void Application_Start() { var builder = new ContainerBuilder(); builder.RegisterType().AsImplementedInterfaces().InstancePerDependency(); builder.Update(Conversation.Container); GlobalConfiguration.Configure(WebApiConfig.Register); }

在FormFlows – Bot Framework中为Quit添加另一个关键字

是否可以使用Bot Framework在FormDialog中更改Quit突击队的关键字? 我想在键入某个单词时抛出FormCanceledException(不使用英语作为语言)。 如果我可以更改关键字,或者添加另一个与Quit相同的关键字,那将是完美的

当用户键入“退出”,“退出”等时,终止所有对话框并退出MS Bot Framework中的对话

我无法弄清楚如何在MS Bot Framework中做一个非常简单的事情:允许用户突破任何对话,离开当前对话框并通过键入“quit”,“exit”或“返回主菜单”重来”。 这是我的主要对话设置方式: public async Task Post([FromBody]Activity activity) { try { if (activity.Type == ActivityTypes.Message) { UserActivityLogger.LogUserBehaviour(activity); if (activity.Text.ToLower() == “start over”) { //Do something here, but I don’t have the IDialogContext here! } BotUtils.SendTyping(activity); //send “typing” indicator upon each message received await Conversation.SendAsync(activity, () => new RootDialog()); } else { HandleSystemMessage(activity); } } […]

Microsoft Bot使用FormFlow从用户接收附件

我正在使用FormFlow设计一个Bot,其中一个输入将要求用户附加文件以继续进行。 我可以在下面看到链接地址类似的问题。 https://github.com/Microsoft/BotBuilder/issues/570 链接中提供的解决方案是使用自定义IRecognizer或如下所示 a)将其放入未暴露给FormFlow的私有字段/属性中。 b)将其作为暴露于forms流的字段的值。 c)使用private属性动态生成允许在它们之间进行选择的字段。 我对Bot框架很天真。 是否有任何示例在使用FormFlow从客户接收附件时实现此目的 。 下面是我的代码片段 enter code here [Serializable] public class DocBot { [Prompt(“What’s your name?”)] public string Name { get; set; } [Prompt(“Hey {&} , Choose the options below? {||}”)] public Service? shaun; [Prompt(“Attach the Document required for further processing?”)] public string Document { get; set; } — […]

如何在Microsoft Bot Framework + C#中安排任务?

我正在使用Microsoft的Bot Framework / Bot Builder为C#.NET / LUIS构建测试机器人。 它部署在Azure上。 我的测试项目的想法是向用户发送提醒。 例如,当用户要求“在两小时内提醒我购买牛奶”时,它应该在两小时内发起对话或向现有对话发送回复。 使用LUIS将自然语言解析为日期和任务没有问题,但我不知道如何安排任务,以便框架以某种方式稍后向用户发送回复。 我已经阅读了文档,并在https://docs.botframework.com/en-us/csharp/builder/sdkreference/上查看了示例,并在StackOverflow上进行了搜索,但似乎框架不支持它。 我也看过Azure Scheduler,但它似乎非常昂贵,即使我的机器人只有100个用户,每个用户只有一个计划任务。 安排任务的另一种方法是什么,以便机器人在指定时间向用户发送消息?

Bot Framework无法使用AddKeyboardCard或使用ChannelData发送FacebookQuickReply

我正在使用Bot Framework 3.3.0,我理解它支持Facebook正确实现的快速回复(而不是创建dynamic对象并通过ChannelData发送)。 类名是Microsoft.Bot.Builder.ConnectorEx.FacebookQuickReply. 以下是我如何在IDialog中创建快速回复: var reply = context.MakeMessage(); reply.Text = msg; var quickReplies = new List() { new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, “Cathay”, “Cathay”), new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, “HK Airlines”, “Hong Kong Airlines”), new FacebookQuickReply(FacebookQuickReply.ContentTypes.Text, “HK Express”, “HK Express”) }; 以下是我试图将它们发送到聊天中的两种方式: //I tried both of the lines below //reply.ChannelData = quickReplies.ToArray(); reply.AddKeyboardCard(“quick_replies”, quickReplies); await context.PostAsync(reply); 我从Ezequiel Jadib的文章中获得的第一种方式(嗨,我知道你正在读这篇文章!)在facebook messenger上对我不起作用。 部分原因是它似乎在v3.3中, […]

如何在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); […]

同一个对话框架中有3个不同的频道

我正在尝试为人类混合机器人支持客户做一个C#MVC WebApplication,因此我无法在3个不同的渠道之间建立对话。 例: 1-)用户在Facebook中与我的机器人开始聊天 2-)当机器人接收到活动时,他会在谈话中添加一个新人(直接,那就是我有对话)。 3-)Facebook用户现在正在与其他2个用户(机器人和直接用户)聊天。 是正确的逻辑吗? 我正在尝试创建此群组对话,但我收到错误500。