Voir le flux RSS

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

[Actualité] Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework

Noter ce billet
par , 14/01/2018 à 16h16 (685 Affichages)
Ces dernières années, l’intelligence artificielle et l’apprentissage automatique figurent parmi les plus grosses tendances de l’IT. Ils ouvrent la voie à de nouvelles plateformes qui sont de plus en plus populaires, dont le bot Framework de Microsoft.

Le bot Framework est un ensemble d’outils supporté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. Le kit de développement est disponible à la fois pour Node.js et le Framework .NET.

Pour les développeurs .NET, Microsoft offre des modèles de projets pour démarrer rapidement avec la création d’une application Bot, sans avoir besoin de démarrer à partir de zéro. Ce template contient notamment les packages bot Framework nécessaires au fonctionnement d’un bot basique et le code permettant au bot de répliquer à une conversation.

Cependant, ce template est disponible pour ASP.NET MVC 5. Dans ce billet, je vais vous montrer comment créer une bot application qui repose sur ASP.NET Core et .NET Core 2.0. Vous aurez besoin d’un poste sur lequel sont installés :

  • Visual Studio 2017 ;
  • .NET Core 2.0 ;
  • Le bot emulator pour les tests.


Création de la Web API de démarrage

Pour commencer, vous allez démarrer Visual Studio 2017 et créer une Web API qui repose sur ASP.NET Core 2.0 et .NET Core :

Nom : img1.PNG
Affichages : 1538
Taille : 26,4 Ko

Ajout des packages du Bot Framework

Nous aurons besoin d’installer deux packages. Ces packages vont nous permettre de créer une connexion avec le Bot Framework. Il s’agit entre autres du :

  • Package Microsoft.Bot.Connector, qui offre une API REST de connexion au Bot Framework ;
  • Package Microsoft.Bot.Connector.AspNetCore qui est une librairie ASP.NET Core pour le connecteur Bot Framework.


Pour installer ces packages, vous allez utiliser le gestionnaire de packages NuGet :

Nom : img2.PNG
Affichages : 1455
Taille : 17,1 Ko

Définir les paramètres de configuration pour enregistrer votre bot

Pour être en mesure d’utiliser votre Bot avec le Bot Service ou le tester avec l’émulateur, vous devez enregistrer au préalable votre bot et renseigner les informations d’enregistrement dans votre application. Il s’agit entre autres :

  • de l'ID de l’application, qui aura pour nom de paramètre MicrosoftAppId ;
  • et le mot de passe de l’application qui aura pour nom de paramètre MicrosoftAppPassword.



Vous devez donc éditer le fichier appconfig.json pour ajouter ces paramètres :

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
15
16
17
{
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  },
  "MicrosoftAppId": "",
  "MicrosoftAppPassword": ""
}

Pour l’instant, nous n’allons mettre aucune valeur. Lorsque vous allez enregistrer votre bot sur https://dev.botframework.com, vous devez modifier le fichier de configuration pour renseigner ces valeurs.

Modifier le fichier Startup.

Nous allons modifier le fichier Startup.cs pour ajouter les services nécessaires au fonctionnement du bot dans le conteneur d’injection de dépendances.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Bot.Connector;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
 
namespace BotApplication
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
 
        public IConfiguration Configuration { get; }
 
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton(Configuration);
 
            var credentialProvider = new StaticCredentialProvider(Configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppIdKey)?.Value,
                Configuration.GetSection(MicrosoftAppCredentials.MicrosoftAppPasswordKey)?.Value);
 
            services.AddAuthentication(
                      options =>
                    {
                        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                    }
                )
                .AddBotAuthentication(credentialProvider);
 
            services.AddSingleton(typeof(ICredentialProvider), credentialProvider);
 
            services.AddMvc(options =>
            {
                options.Filters.Add(typeof(TrustServiceUrlAttribute));
            });
 
            services.AddMvc();
        }
 
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
 
            app.UseAuthentication();
 
            app.UseMvc();
        }
    }
}

Ajouter la classe MessagesController

Vous allez commencer par supprimer le fichier ValuesController. Ensuite, vous devez ajouter dans ce dossier le fichier MessagesController.cs. La classe MessagesController va permettre d’écrire le code pour assurer une interaction avec le bot. Son contenu est le suivant :

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
27
28
29
30
31
32
33
34
35
36
37
38
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Bot.Connector;
using Microsoft.Extensions.Configuration;
 
namespace BotApplication.Controllers
{
    [Route("api/[controller]")]
    public class MessagesController : Controller
    {
        private readonly IConfiguration configuration;
        public MessagesController(IConfiguration configuration)
        {
            this.configuration = configuration;
        }
 
        [Authorize(Roles = "Bot")]
        [HttpPost]
        public async Task<OkResult> Post([FromBody] Activity activity)
        {
            var appCredentials = new MicrosoftAppCredentials(this.configuration);
            var client = new ConnectorClient(new Uri(activity.ServiceUrl), appCredentials);
            var reply = activity.CreateReply();
            if (activity.Type == ActivityTypes.Message)
            {
                reply.Text = $"You sent {activity.Text} which was {activity.Text.Length} characters";
 
                await client.Conversations.ReplyToActivityAsync(reply);
            }
            return Ok();
        }
    }
}

Ceci fait, vous pouvez tester votre application avec le bot Framework Emulator. Pour cela, vous devez lancer l’émulateur, ensuite exécuter votre application.

Une fois l’application en cours d’exécution, vous devez saisir l’URL permettant de faire un appel sur MessagesController (http://localhost:port/api/messages), l’ID ainsi que le mot de passe de l’application. Vu que nous n’avons rien renseigné pour ces paramètres dans notre fichier de configuration, vous allez laisser ces champs vides :

Nom : img3.PNG
Affichages : 1456
Taille : 7,3 Ko

Une fois tous les champs renseignés, cliquez sur Connect et vous pouvez commencer à utiliser votre Bot :

Nom : img4.PNG
Affichages : 1475
Taille : 14,9 Ko

Il faut noter toutefois que la prise en charge de « Dialogs » n’est malheureusement pas offerte sur ASP.NET Core. Ceci à cause de l’absence d’un package officiel pour Microsoft.Bot.Builder supportant .NET Core 2.0. Ce qui réduit énormément ce qui est possible de faire avec le Bot Framework, ASP.NET Core et .NET Core 2.0.

En fouillant un peu sur le GitHub du projet, la principale cause serait l’absence de BinaryFormatter dans .NET Core 2.0. Il n’y a plus donc de sérialisation pour les types System.RuntimeType et System.RuntimeMethod qui sont cependant très utilisés dans le package Microsoft.Bot.Builder.

Le projet complet est disponible sur mon GitHub.

Envoyer le billet « Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework » dans le blog Viadeo Envoyer le billet « Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework » dans le blog Twitter Envoyer le billet « Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework » dans le blog Google Envoyer le billet « Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework » dans le blog Facebook Envoyer le billet « Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework » dans le blog Digg Envoyer le billet « Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework » dans le blog Delicious Envoyer le billet « Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework » dans le blog MySpace Envoyer le billet « Créer un bot avec ASP.NET Core Web API, .NET Core et Bot Framework » dans le blog Yahoo

Mis à jour 14/01/2018 à 22h08 par ClaudeLELOUP

Catégories
DotNET , ASP.NET , .NET Core , ASP.NET Core

Commentaires