Microsoft a apporté une importante refonte à sa plateforme de développement des agents conversationnels avec la version 4 du Bot Framework.Pour rappel, le bot Framework est un ensemble d’outils développés par Microsoft, permettant de développer avec souplesse et simplicité des bots. Il s’agit des agents conversationnels qui seront en mesure d’échanger avec une entité tierce. Un bot sera par exemple en mesure de guider un humain pour effectuer la commande d’un repas, acheter un article, etc. Les implémentations possibles sont assez nombreuses et il y a actuellement un engouement pour de telles technologies.
Le Bot Framework offre des outils pour développer, connecter, tester, déployer et gérer des bots. La refonte de la plateforme porte principalement sur les points clés suivants :
L’ouverture à d’autres langages/framework
Initialement, il était uniquement possible de développer des bots en .NET et en Node en utilisant le SDK Bot Builder pour NodeJS et pour .NET. Dans la version 4, le bot builder SDK sera disponible pour Python et Java. Il sera donc possible de développer son agent conversationnel en utilisant l’un de ces quatre langages populaires.
Prise en charge de .NET Core
Avec la version 3.0 du Bot Builder SDK, il était assez difficile de développer un bot reposant sur .NET Core. Ceci parce que le Bot Builder utilisait de nombreuses librairies qui ne sont pas disponibles avec .NET Core.
La version 4.0 du Bot Framework a été développée pratiquement à partir de zéro, en utilisant comme socle .NET Core. Le projet est encore au stade de préversion et est activement en cours de développement. La rupture avec la version précédente est importante.
Un nouveau Bot Emulator
Avec la version 4 du Bot Builder SDK, Microsoft mettra également à la disposition des développeurs une nouvelle version du Bot Framework Emulator.
Pour information, le Bot Framework Emulator est une application de bureau permettant aux développeurs de tester et déboguer leur Bot. Grâce à ce dernier, le développeur peut chatter avec son bot et inspecter les messages reçus et envoyés par ce dernier.
Le Bot Framework Emulator V4, qui est également encore en phase de préversion, apporte aussi des changements importants à l’outil.
Avec cette version, il est possible de sauvegarder le transcript de sa conversation avec le Bot. Une sauvegarde peut également être chargée dans l’interface de chat du bot. Il est possible d’utiliser le format markdown pour créer son propre transcript, ensuite le sauvegarder avec l’extension .chat afin de l’ouvrir avec l’émulateur. Cette fonctionnalité est très utile pour prototyper son bot avant de débuter avec le développement.
Le Bot Framework Emulator V4 est disponible en téléchargement sur la page suivante : https://github.com/Microsoft/BotFram...lator/releases
Prérequis pour créer son premier bot
Pour créer votre premier bot, vous devez disposer des outils suivants :
- Visual Studio 2017
- Bot Framework Emulator V4
- Bot Builder SDK V4
Le Bot Builder SDK est disponible comme un package NuGet. Aucune installation n’est requise.
Installation du modèle de projet Bot Builder
Micrososft a mis en place un modèle de projet pour permettre de démarrer facilement avec le Bot Builder SDK V4. Ce modèle contient les références aux packages du Bot Builder, la configuration et le code minimum pour exécuter un bot basique.
Pour installer ce template dans Visual Studio, vous pouvez utiliser Visual Studio MarketPlace. L’interface est accessible via le menu Outils, ensuite Extensions et mises à jour. Vous devez rechercher Bot Builder V4 :
NB : Pour que l’installation s’effectue, vous devez fermer toutes les instances de Visual Studio 2017.
Création de notre premier bot
Nous allons maintenant créer un nouveau projet en utilisant le modèle de projet que nous venons d’installer.
Explorons le code de l’application créée.
L’application qui a été créée est une application ASP.NET Core 2.0. En dehors des packages par défaut de ASP.NET Core, trois packages supplémentaires ont été installés pour le Bot Builder SDK. Ceux-ci sont visibles dans le fichier .csproj :
| Code xml : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" /> <PackageReference Include="Microsoft.Bot.Builder.Core" Version="4.0.1-preview" /> <PackageReference Include="Microsoft.Bot.Builder.Core.Extensions" Version="4.0.1-preview" /> <PackageReference Include="Microsoft.Bot.Builder.Integration.AspNet.Core" Version="4.0.1-preview" /> </ItemGroup> </Project> |
Le fichier Startup.cs
Démystifions pour commencer le fichier Startup.cs. Il s’agit du fichier de démarrage de toute application ASP.NET Core. Il est directement appelé dans le Main de votre projet. Ce fichier est utilisé pour enregistrer les services et injecter des modules dans le pipeline d’une requête HTTP.
Observons pour commencer la méthode ConfigureServices. Cette méthode est utilisée pour configurer dans le conteneur d’IoC les services qui seront consommés par l’application :
| Code c# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public void ConfigureServices(IServiceCollection services) { services.AddBot<EchoBot>(options => { options.CredentialProvider = new ConfigurationCredentialProvider(Configuration); // The CatchExceptionMiddleware provides a top-level exception handler for your bot. options.Middleware.Add(new CatchExceptionMiddleware<Exception>(async (context, exception) => { await context.TraceActivity("EchoBot Exception", exception); await context.SendActivity("Sorry, it looks like something went wrong!"); })); IStorage dataStore = new MemoryStorage(); options.Middleware.Add(new ConversationState<EchoState>(dataStore)); }); } |
La première option concerne les credentials du bot :
| Code c# : | Sélectionner tout |
options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);
| Code c# : | Sélectionner tout |
1 2 3 4 | { "MicrosoftAppId": "", "MicrosoftAppPassword": "" } |
L’option suivante concerne la gestion des exceptions :
| Code c# : | Sélectionner tout |
1 2 3 4 5 6 |
options.Middleware.Add(new CatchExceptionMiddleware<Exception>(async (context, exception) =>
{
await context.TraceActivity("EchoBot Exception", exception);
await context.SendActivity("Sorry, it looks like something went wrong!");
})); |
La dernière option concerne le stockage qui sera utilisé pour enregistrer l’état du bot :
| Code c# : | Sélectionner tout |
1 2 | IStorage dataStore = new MemoryStorage(); options.Middleware.Add(new ConversationState<EchoState>(dataStore)); |
Passons maintenant à la Méthode Configure :
| Code c# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseDefaultFiles() .UseStaticFiles() .UseBotFramework(); } |
Le fichier EchoState.cs
Ce fichier contient la classe EchoState qui est une simple classe de données qui permettra de récupérer les données de l’état du bot lors d’une conversation :
| Code c# : | Sélectionner tout |
1 2 3 4 | public class EchoState { public int TurnCount { get; set; } = 0; } |
| Code c# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class EchoBot : IBot { /// <summary> /// Every Conversation turn for our EchoBot will call this method. In here /// the bot checks the Activty type to verify it's a message, bumps the /// turn conversation 'Turn' count, and then echoes the users typing /// back to them. /// </summary> /// <param name="context">Turn scoped context containing all the data needed /// for processing this conversation turn. </param> public async Task OnTurn(ITurnContext context) { // This bot is only handling Messages if (context.Activity.Type == ActivityTypes.Message) { // Get the conversation state from the turn context var state = context.GetConversationState<EchoState>(); // Bump the turn count. state.TurnCount++; // Echo back to the user whatever they typed. await context.SendActivity($"Turn {state.TurnCount}: You sent '{context.Activity.Text}'"); } } } |
Dans l’exemple ci-dessus, on vérifie si l’activité en cours du bot est de type Message. En Fonction du type du message, vous pouvez effectuer des traitements différents.
Ensuite on récupère l’état actuel du bot à partir des données de contexte qui sont stockées dans le MemoryStorage défini dans la configuration du bot.
Le fichier FirstBot.Bot
Ce fichier permet de stocker en un seul endroit les métadonnées sur les différents services qui sont consommés par le bot. Par défaut, il contient les informations suivantes :
| Code json : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "name": "FirstBot", "secretKey": "", "services": [ { "appId": "", "id": "http://localhost:3978/api/messages", "type": "endpoint", "appPassword": "", "endpoint": "http://localhost:3978/api/messages", "name": "FirstBot" } ] } |
Pour tester le bot, vous devez exécuter votre application en appuyant sur F5. Une page va s’afficher dans votre navigateur avec les instructions pour débogueur le bot en utilisant l’émulateur et pour déployer ce dernier.
Ouvrez l’émulateur, allez sur le menu fichier, puis cliquez sur « Open Bot Configuration ». Une fenêtre de chat va s’afficher. Vous pouvez commencer à échanger avec votre bot.
La nouvelle version du Bot Builder SDK apporte une refonte importante à la plateforme. Ceci est mon premier billet sur le Bot Builder SDK V4. Plusieurs autres billets seront publiés dans les prochaines semaines sur le même sujet.
Restez connecté!
GitHub du Bot Builder SDK V4
GitHub du Bot Framework Emulator V4
Blog Bot Framework
Vous avez lu gratuitement 2 833 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.