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

标签 c# scheduled-tasks bots botframework

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

例如,当用户询问“两小时后提醒我买牛奶”时,它应该在两小时内发起对话或发送对现有对话的回复。

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

我已阅读文档并检查了 https://docs.botframework.com/en-us/csharp/builder/sdkreference/ 中的示例,也在StackOverflow上搜了一下,好像框架不支持。我还查看了 Azure Scheduler,但它似乎贵得离谱,即使我的机器人只有 100 个用户,每个用户都有一个计划任务。

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

最佳答案

所以如果我没理解错的话,你的问题涉及两部分:

<强>1。如何开始对话

在 v3.0 中,MS 引入了一种开始新对话(群组或一对一)的新方式。引用: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 网络作业、网络角色,或者尝试在 ASP.NET 本身中注册。

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

代码示例:

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

关于c# - 如何在 Microsoft Bot Framework + C# 中安排任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38431234/

相关文章:

algorithm - 日历调度算法

audio - 如何使AIML机器人发出声音响应?有没有办法使这种声音成为自定义声音?

c++ - 为什么 SendInput() 不工作?

c# - IIS 中的 HTTP 重定向问题,在浏览器上不断出现 ERR_TOO_MANY_REDIRECTS

c# - NUnit值得学习吗?

message-queue - 处理数百万条定时(预定)消息的解决方案?

java - Java 的 Facebook Messenger bot 对象结构

c# - 在 C# 中,是否需要 "this"关键字?

C# - 无法找到哈希集的确认答案包含比较检查

java - 具有注解驱动的 spring 任务的多个 spring 任务执行器