如何在MicrosoftBotFramework+C#中安排任务

本文关键字:任务 MicrosoftBotFramework+C# | 更新日期: 2023-09-27 17:57:29

我正在使用Microsoft的bot Framework/bot Builder for C#.NET/LUIS构建一个测试机器人。它部署在Azure上。我的测试项目的想法是向用户发送提醒。

例如,当用户要求"两小时后提醒我买牛奶"时,它应该在两小时内发起对话或回复现有对话。

我使用LUIS将自然语言解析为日期和任务没有问题,但我不知道如何安排任务,以便框架稍后以某种方式向用户发送回复。

我已经阅读了文档并查看了上的示例https://docs.botframework.com/en-us/csharp/builder/sdkreference/,也在StackOverflow上搜索过,但该框架似乎不支持它。我也看过Azure Scheduler,但它似乎非常昂贵,即使我的机器人只有100个用户,每个用户都有一个计划任务。

还有什么方法可以安排任务,让机器人在指定时间向用户发送消息?

如何在MicrosoftBotFramework+C#中安排任务

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

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中注册。

上火(http://hangfire.io/)是我用于我的机器人的。

代码示例:

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

Quartz.NET似乎是调度任务的流行解决方案。它可以将它们存储在Azure的数据库中。