如何在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个用户,每个用户只有一个计划任务.

安排任务的另一种方法是什么,以便机器人在指定时间向用户发送消息?

因此,如果我理解正确,您的问题涉及两个部分:

1.如何开始对话

在v3.0中,MS引入了一种新的方式来开始新的对话(组或1对1).参考:https://docs.botframework.com/en-us/csharp/builder/sdkreference/routing.html#conversation

示例代码

var connector = new ConnectorClient(incomingMessage.ServiceUrl);
var ConversationId = await connector.Conversations.CreateDirectConversationAsync(incomingMessage.Recipient,incomingMessage.From);
IMessageActivity message =  Activity.CreateMessageActivity();
message.From = botChannelAccount;
message.Recipient = new ChannelAccount() { name: "Larry","id":"@UV357341"};
message.Conversation = new ConversationAccount(id: ConversationId.Id);
message.Text = "Hello";
message.Locale = "en-Us";
var reply = await connector.Conversations.ReplyToActivityAsync(message);

2.如何安排工作

有多种方法,您可以使用外部队列服务,Azure Web作业,Web角色,或尝试在ASP.NET本身注册.

Hangfire(http://hangfire.io/)是我用于机器人的东西.

代码示例:

BackgroundJob.Schedule(
() => TriggerConversation(),// <= the start conversation code here
TimeSpan.FromDays(1)); // <= when the job should be ran

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...