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

c# scheduled-tasks bots botframework

5243 просмотра

2 ответа

0 Репутация автора

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

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

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

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

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

Автор: user6269864 Источник Размещён: 18.07.2016 07:49

Ответы (2)


15 плюса

3690 Репутация автора

Решение

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

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.

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

Пример кода:

BackgroundJob.Schedule(
() => TriggerConversation(), // <= the start conversation code here
TimeSpan.FromDays(1)); // <= when the job should be ran
Автор: Kien Chu Размещён: 18.07.2016 11:06

1 плюс

0 Репутация автора

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

Автор: user6269864 Размещён: 18.07.2016 11:13
Вопросы из категории :
32x32