2016-07-18 1 views
4

Я создаю тестовый бот с помощью Microsoft Bot Framework/Bot Builder для C# .NET/LUIS. Он развернут на Azure. Идея моего тестового проекта - отправить напоминание пользователю.Как планировать задачи в Microsoft Bot Framework + C#?

Например, когда пользователь просит «напомнить мне через два часа, чтобы купить молоко», он должен начать разговор или отправить ответ на существующий разговор за два часа.

У меня нет проблем с анализом естественного языка на дату и задание с использованием LUIS, однако я понятия не имею, как планировать задачу, чтобы инфраструктура каким-то образом отправила ответ пользователю позже.

Я прочитал документы и проверил примеры на https://docs.botframework.com/en-us/csharp/builder/sdkreference/, а также выполнил поиск в StackOverflow, но, похоже, инфраструктура не поддерживает его. Я также посмотрел на Azure Scheduler, но кажется безумно дорогим, даже если мой бот будет иметь только 100 пользователей с одной запланированной задачей каждый.

Каков другой способ планирования задач, чтобы бот отправил сообщение пользователю в назначенное время?

ответ

16

Так что, если я правильно понимаю, ваш вопрос состоит из двух частей:

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 веб рабочих мест, веб-роли или попытаться зарегистрироваться в самой ASP.NET.

Hangfire (http://hangfire.io/) - это то, что я использую для своего бота.

Пример кода:

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

Вы используете бесплатную версию или оплатили? –

+1

@AlokRajasukumaran: Я использую бесплатную версию –

+0

Можете ли вы дать демонстрацию того, как это сделать? –

1

Quartz.NET кажется популярным решением для планирования задач. Он может хранить их в базе данных в Azure.

+0

Можете ли вы дать демо-код, как это сделать? –

+0

Было бы здорово, если бы вы обеспечили реализацию –