Voir le flux RSS

Blog de Hinault Romaric (.NET Core, ASP.NET Core, Azure, DevOps)

[Actualité] Démarrer avec le Bot Builder SDK V4 pour .NET

Noter ce billet
par , 13/09/2018 à 21h48 (87 Affichages)
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 :

Nom : img1.PNG
Affichages : 1117
Taille : 47,3 Ko

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.

Nom : img2.PNG
Affichages : 940
Taille : 27,0 Ko

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 - Visualiser dans une fenêtre à part
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>

En dehors des fichiers traditionnels d’une application ASP.NET Core de base, nous avons les fichiers EchoBot.cs, EchoState.cs et FirstBot.bot :

Nom : img3.PNG
Affichages : 940
Taille : 10,7 Ko

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 - Visualiser dans une fenêtre à part
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));
            });
        }

Le Bot Builder SDK V4 offre une nouvelle méthode d’extension AddBot. C’est un générique qui accepte une classe qui doit être une implémentation de l’interface IBot. Elle prend ensuite en paramètre un objet de type BotFrameworkOptions, qui est un delegate permettant de définir les options de votre bot.

La première option concerne les credentials du bot :

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);

Les credentials du bot sont enregistrés par défaut dans le fichier appsettings.json.

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
{  
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": ""
}

Pour que votre bot soit utilisé via Skype, FaceBook Messenger ou une page de chat d’un site Web, vous devez au préalable enregistrer celui-ci via Azure Bot Channel Registration. Vous allez obtenir l’AppID et l’AppPassword de votre application, que vous devez enregistrer dans ce fichier de configuration.

L’option suivante concerne la gestion des exceptions :

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
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!");
                }));

Le middleware CatchExceptionMiddleware fournit un gestionnaire d’exception pour votre bot. Toute exception lors de l’exécution du bot sera attrapée par ce code.

La dernière option concerne le stockage qui sera utilisé pour enregistrer l’état du bot :

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
IStorage dataStore = new MemoryStorage();
                options.Middleware.Add(new ConversationState<EchoState>(dataStore));

Le stockage en mémoire est utilisé par défaut. Il est assez pratique lorsqu’on développe encore sont bot. Mais, en environnement de production, vous devez utiliser un moyen de stockage qui permettra la persistance des données.

Passons maintenant à la Méthode Configure :

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
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();
        }

La méthode d’extension UserBotFramework() va permettre de charger dans le pipeline HTTP le code nécessaire pour faite fonctionner votre bot.

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 - Visualiser dans une fenêtre à part
1
2
3
4
public class EchoState
    {
        public int TurnCount { get; set; } = 0;
    }

Le fichier EchoBot.cs

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
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 ce fichier nous avons le code de notre bot : ce que ce dernier fera. La classe EchoBot hérite de l’interface IBot. Elle doit implémenter minimalement la méthode OnTurn. Toute conversation avec le bot appelle cette méthode. Elle prend en paramètre ITurnContext qui contient toutes les données de contexte du bot.

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 - Visualiser dans une fenêtre à part
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"
    }
  ]
}

Test du bot

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.

Nom : img4.PNG
Affichages : 938
Taille : 38,6 Ko

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.

Nom : img5.PNG
Affichages : 934
Taille : 39,5 Ko

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

Envoyer le billet « Démarrer avec le Bot Builder SDK V4 pour .NET » dans le blog Viadeo Envoyer le billet « Démarrer avec le Bot Builder SDK V4 pour .NET » dans le blog Twitter Envoyer le billet « Démarrer avec le Bot Builder SDK V4 pour .NET » dans le blog Google Envoyer le billet « Démarrer avec le Bot Builder SDK V4 pour .NET » dans le blog Facebook Envoyer le billet « Démarrer avec le Bot Builder SDK V4 pour .NET » dans le blog Digg Envoyer le billet « Démarrer avec le Bot Builder SDK V4 pour .NET » dans le blog Delicious Envoyer le billet « Démarrer avec le Bot Builder SDK V4 pour .NET » dans le blog MySpace Envoyer le billet « Démarrer avec le Bot Builder SDK V4 pour .NET » dans le blog Yahoo

Commentaires