Voir le flux RSS

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

[Actualité] Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder

Note : 3 votes pour une moyenne de 3,67.
par , 24/09/2018 à 01h16 (469 Affichages)
Dans mon billet précédent, j’ai introduit le Bot Builder SDK V4. Cette nouvelle version de la plateforme de développement des agents conversationnels apporte une refonte importante par rapport à la version précédente.

Cette refonte s’accompagne avec la non-prise en charge de certaines fonctionnalités de la V3, notamment FormFlow. Toutefois, grâce au port de certains packages de la V3, il est possible d’utiliser les fonctionnalités de cette version dans une application développée avec le Bot Builder SDK V4. Mais, cela est possible uniquement pour les applications ASP.NET Core compatibles .NET Framework. Une application qui repose sur .NET Core ne peut pas utiliser les fonctionnalités de la V3.

Dans ce billet, nous verrons comment utiliser FormFlow dans un Bot développé avec le SDK V4. Pour rappel, FormFlow permet avec peu d’effort de mettre en place des dialogues offrant une expérience utilisateur optimale. Imaginez que vous devez mettre en place un bot qui va guider un client dans la commande d’une Pizza à partir d’un large catalogue de choix avec des options : quelles questions doivent être posées, quelles questions ne doivent pas être posées en fonction des réponses du client, quel doit être la prochaine question en fonction du choix du client, quand revenir en arrière, comment permettre au client de modifier ses choix, quand est-ce que la conversation doit être interrompue, etc. La mise sur pied d’un algorithme qui permettra de guider l’utilisateur de façon optimale en utilisant Dialogs peut s’avérer assez complexe.

Pour supporter le SDK V3 dans votre bot, vous devez dans un premier temps installer via NuGet le package Microsoft.Bot.Builder.Classic.

Nom : img6.PNG
Affichages : 1124
Taille : 15,8 Ko


Dans le code V3 de votre Bot avec FormFlow, vous devez utiliser le namespace Microsoft.Bot.Builder.Classic.FormFlow lieu et place du namespace Microsoft.Bot.Builder.FormFlow.

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
using System;
using System.Collections.Generic;
using Microsoft.Bot.Builder.Classic.FormFlow;
 
namespace FirstBot.Forms
{
    [Serializable]
    public class SurveyForm
    {
 
         [Prompt("Quel est votre poste ? {||}")]     
         public JobOptions Job;
         [Prompt("Combien d'années d'expérience avez-vous ? {||}")]
         public ExperienceOptions Experience;
         [Prompt("Pour quelle plateforme développez-vous ? {||}")]
         public PlatformOptions Platform;
         [Prompt("Quels langages de programmation utilisez-vous ? {||}")]
         public List<LanguageOptions> Language;
         [Prompt("Quel Framework Web utilisez-vous ? {||}")]
         public WebFrameworkOptions WebFramework;
         [Prompt("Quelle plateforme Cloud utilisez-vous ? {||}")]
         public CloudOptions Cloud;
 
        public static IForm<SurveyForm> BuildForm()
        {
            return new FormBuilder<SurveyForm>()
                    .Message("Merci de prendre quelques minutes pour repondre aux questions de cette enquête.")
                    .Build();
        }
 
    }
 
 
    public enum JobOptions {Developpeur_junior=1, Developpeur_senior, Architecte, Autre};
    public enum ExperienceOptions {Moins_de_5_ans=1, De_5_a_10_ans, Plus_de_10_ans};
    public enum PlatformOptions {Web =1, Mobile, Cloud, Desktop};
    public enum LanguageOptions {Csharp=1, Java, JavaScript, C, Ruby, Python,  Autre};
    public enum WebFrameworkOptions { ASPNET_Core = 1, AngularJS, Lavarel, ReactJS, NodeJS, Autre};
    public enum CloudOptions {Microsoft_Azure=1, Google_Cloud_platform, Amazon_Web_Services, IBM_Cloud, Autre};
 
 
}

Il faut noter que pour tout package de la V3, a la suite de Microsoft.Bot.Builder, vous devez ajouter .Classic, avant ce qui suit. Dont :

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.Dialogs.Internals;
using Microsoft.Bot.Builder.FormFlow;
using Microsoft.Bot.Builder.Scorables;

deviendrait :

Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
using Microsoft.Bot.Builder.Classic.Dialogs;
using Microsoft.Bot.Builder.Classic.Dialogs.Internals;
using Microsoft.Bot.Builder.Classic.FormFlow;
using Microsoft.Bot.Builder.Classic.Scorables;

Pour appeler FormFlow, nous pouvons toujours utiliser Conversation.SendAsync. Toutefois, il faudra passer en paramètre le ITurnContext de la V4 en lieu et place de Activity :

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
using System.Threading.Tasks;
using Microsoft.Bot;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Classic.Dialogs;
using Microsoft.Bot.Builder.Classic.FormFlow;
using Microsoft.Bot.Schema;
 
namespace FirstBot
{
    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}'");
 
                await Conversation.SendAsync(context, () => FormDialog.FromForm(Forms.SurveyForm.BuildForm));
            }
        }
    }
}

A l’exécution de mon bot, j’obtiens le résultat suivant :

Nom : img7.PNG
Affichages : 963
Taille : 50,9 Ko

Pour ceux qui sont nostalgiques de certaines fonctionnalités de la V3, vous avez cette option qui est offerte. Mais, pour cela, vous devez utiliser .NET Framework au lieu de .NET Core.

A bientôt pour de nouveaux billets sur le Bot Builder SDK V4.

Restez connecté !

GitHub du Bot Builder SDK V4

GitHub du Bot Framework Emulator V4

Blog Bot Framework

Envoyer le billet « Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder » dans le blog Viadeo Envoyer le billet « Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder » dans le blog Twitter Envoyer le billet « Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder » dans le blog Google Envoyer le billet « Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder » dans le blog Facebook Envoyer le billet « Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder » dans le blog Digg Envoyer le billet « Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder » dans le blog Delicious Envoyer le billet « Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder » dans le blog MySpace Envoyer le billet « Bot Framework : exploiter les fonctionnalités du SDK V3 dans la version 4 du Bot Builder » dans le blog Yahoo

Commentaires