Как планировать задачи в Microsoft Bot Framework + C #?

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

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

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

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

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

Ответы на вопрос(2)

Решение Вопроса

1. Как начать разговор

В версии 3.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.

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

Пример кода:

BackgroundJob.Schedule(
() => TriggerConversation(), // <= the start conversation code here
TimeSpan.FromDays(1)); // <= when the job should be ran
 Alok Rajasukumaran03 нояб. 2016 г., 12:17
Я установил Hangfire, но запутался, где все это запускать и регистрировать вещи. Следующие ошибки произошли при попытке загрузить приложение. - Не найдена сборка, содержащая атрибут OwinStartupAttribute. - Не найдена сборка, содержащая класс Startup или [AssemblyName] .Startup. Чтобы отключить обнаружение запуска OWIN, добавьте appSetting owin: AutomaticAppStartup со значением «false» в вашем файле web.config. Чтобы указать сборку, класс или метод запуска OWIN, добавьте appSetting owin: AppStartup с полным именем класса запуска или метода конфигурации в файле web.config.
 Alok Rajasukumaran03 нояб. 2016 г., 09:03
Можете ли вы дать демо о том, как это сделать?
 Kien Chu03 нояб. 2016 г., 08:33
@AlokRajasukumaran: я использую бесплатную версию
 Alok Rajasukumaran03 нояб. 2016 г., 11:12
Ищу запустить моего бота в определенное время для конкретного пользователя. это возможно с помощью этого?
 Alok Rajasukumaran03 нояб. 2016 г., 08:30
Вы используете бесплатную версию или платную?
 Kien Chu03 нояб. 2016 г., 09:04
@AlokRajasukumaran: мой код такой же простой, как и мой ответ, с какой проблемой вы сталкиваетесь?

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

 Alok Rajasukumaran03 нояб. 2016 г., 09:03
Можете ли вы дать демо-код, как это сделать?
 Alok Rajasukumaran04 нояб. 2016 г., 05:13
Было бы здорово, если бы вы предоставили реализацию

Ваш ответ на вопрос