如何在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
Quartz.NET似乎是一种用于调度任务的流行解决方案。 它可以将它们存储在Azure中的数据库中。
- 如何在使用Microsoft Bot Framework时使用CSS设置聊天窗口的样式
- 如何在Microsoft Bot Framework中避免“抱歉,我的机器人代码有问题”
- C#BotFramework Prompt.Confirm显示太多尝试exception
- 可以预先填充机器人框架中的流场吗?
- Microsoft Bot Framework – 清除会话状态
- 当用户向我的机器人发送消息时,他会收到欢迎消息。 但是当用户响应时,bot会再次发送欢迎消息。 我怎样才能解决这个问题?
- 从对话框调用表单
- 当用户键入“退出”,“退出”等时,终止所有对话框并退出MS Bot Framework中的对话
- 如何在Azure中检索已保存的对话数据(Tablelogger)