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.