Comment planifier des tâches dans Microsoft Bot Framework + C #?

Je suis en train de construire un bot de test utilisant Bot Framework / Bot Builder pour C # .NET / LUIS de Microsoft. Il est déployé sur Azure. L’idée de mon projet de test est d’envoyer un rappel à l’utilisateur.

Par exemple, lorsque l’utilisateur demande “rappelle-moi dans deux heures pour acheter du lait”, il doit initier une conversation ou envoyer une réponse à la conversation existante dans deux heures.

Je n’ai aucun problème à parsingr le langage naturel en date et en tâche à l’aide de LUIS, mais je ne sais pas comment planifier une tâche de sorte que le cadre envoie une réponse à l’utilisateur ultérieurement.

J’ai lu la documentation et vérifié les exemples à l’ adresse https://docs.botframework.com/en-us/csharp/builder/sdkreference/ . J’ai également effectué une recherche sur StackOverflow, mais il semble que le cadre ne le supporte pas. J’ai également examiné Azure Scheduler, mais cela semble incroyablement coûteux, même si mon bot ne compte que 100 utilisateurs avec une tâche planifiée chacun.

Quel est un autre moyen de planifier des tâches pour que le bot envoie un message à l’utilisateur à une heure précise?

Donc, si je comprends bien, votre question comporte deux parties:

1. Comment démarrer une conversation

Dans la version 3.0, MS introduisait une nouvelle façon de démarrer une nouvelle conversation (groupe ou 1-sur-1). Référence: https://docs.botframework.com/en-us/csharp/builder/sdkreference/routing.html#conversation

Exemple de code:

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. Comment planifier un travail

Il existe plusieurs façons de le faire. Vous pouvez utiliser un service de queue externe, des travaux Web Azure, des rôles Web ou essayer de vous enregistrer dans ASP.NET.

Hangfire ( http://hangfire.io/ ) est ce que j’utilise pour mon bot.

Exemple de code:

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

Quartz.NET semble être une solution populaire pour la planification des tâches. Il peut les stocker dans une firebase database dans Azure.