Créer un bot pour slack avec le Microsoft Bot Framework

Auteur du billet de blog : Nicolas Hilaire - Neotech Solutions

Nicolas Hilaire

Consultant .NET
  Publié le vendredi 2 septembre 2016

Artisan logiciel particulièrement intéressé par les technologies .NET. Polyvalent et curieux, je suis néanmoins à l'écoute des autres technologies du marché. MVP (Microsoft Most Valuable Professional) de 2007 à 2014, je suis également auteur d'un ouvrage pour apprendre le C#, à destination des débutants et de plusieurs MOOCs sur le C#, Windows Phone ou ASP.NET MVC...

Le Microsoft Bot Framework est comme son nom l’indique un framework pour réaliser des bots. Il consiste en une offre unifiée permettant de réaliser des bots pour beaucoup de plateformes différentes. Je vais m’en servir ici pour créer un bot complètement inutile pour slack, permettant de générer des « meme » de Doris, le fameux poisson sans mémoire du dessin animé le monde de Némo.

Le point de départ de la création d’un bot est la consultation de la documentation accessible à cette url : https://docs.botframework.com/en-us/ et notamment la partie C# puisque c’est celle-là que je vais utiliser https://docs.botframework.com/en-us/csharp/builder/sdkreference/, sachant qu’il est possible d’écrire des bots dans d’autres langages vu qu’il s’agit au final de créer une API REST.

Le plus simple est d’utiliser Visual Studio 2015 et de récupérer le template de création d’une application BOT comme décrit sur cette page https://docs.botframework.com/en-us/csharp/builder/sdkreference/gettingstarted.html. A savoir :

  • Télécharger le zip
  • Le copier dans "%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#\"

Une fois ceci fait, et Visual Studio redémarré, on peut voir un nouveau template de projet :

Permettant de créer une application Bot (en fait, il s’agit d’une Web api toute bête qui expose une route particulière avec un peu de code pour nous prémâcher le travail).

La première chose à faire est de démarrer l’application BOT et de noter le port utilisé par l’API Web:

ici donc, 3979.

Téléchargez maintenant l’émulateur https://aka.ms/bf-bc-emulator, qui va nous permettre de tester notre application BOT. Une fois démarré, il vous faut changer l’url pour pointer sur le bon port de la web api :

 

notez que la route utilisée est "api/messages" comme on peut le voir grâce à la configuration de la route :

et l’utilisation d’un MessagesController.

Pour être sûr que tout fonctionne, tentez d’envoyer un message pour voir si tout est ok :

Ici j’envoie la chaine « test bot » et je reçois « You sent test bot which was 8 characters ». Si vous pouvez voir cette réponse du BOT dans la partie gauche, ainsi que du JSON dans la partie droite, c’est que c’est gagné :). En effet, si vous allez regarder le code, on peut voir que par défaut le BOT calcule la longueur du texte envoyé et renvoi la chaine ainsi que sa longueur. Bon, on peut sans doute faire un peu mieux, mais au moins c’est un début ^^.

Bien sûr, on peut débugger la web api pour voir ce qu’il se passe, si vous mettez un point d’arrêt et que vous renvoyez un message, vous pourrez naviguer dans le code du BOT en local.

Poussons un peu plus loin l’expérience et pour cela nous allons créer un bot qui génère un meme du poisson Doris. Pour cela, je vais créer un compte sur le site http://memegenerator.net et utiliser l’API adéquate. Voici une première version du code :

Donc, vous pouvez voir que j’ai choisi arbitrairement d’utiliser le caractère pipe | pour séparer la phrase avec sa partie haute et sa partie basse. Ensuite, rien de transcendant, j’appelle l’API avec l’HttpClient en lui passant les bons paramètres, puis j’utilise le markdown du BOT framework pour intégrer une image de Doris, voir https://docs.botframework.com/en-us/csharp/builder/sdkreference/activities.html pour les détails du langage markdown.

Il n’y a plus qu’à tester dans l’émulateur :

Plutôt pas mal pour un début :) .

Pour que notre application BOT soit utilisable depuis l’extérieur, il faut bien sur la publier et qu’elle soit accessible en ligne. Faisons ça dans Azure avec un petit click-droit -> publish….

Maintenant que le BOT est en ligne il faut l’enregistrer sur le portail https://dev.botframework.com/ ; où il faut se logguer. Puis ensuite, cliquez sur Register a bot :

 

Il faut maintenant saisir les informations relatives à votre BOT, faites attention à l’url de votre BOT sur Azure qui doit être en HTTPS et doit contenir bien sûr api/messages :

 

On vous demande ensuite plus bas de créer un app id :

 

 

Et il vous faut générer un ID d’application ainsi qu’un mot de passe :

Ceux-ci seront à mettre dans le web.config de votre API web :

Une fois ceci fait, il vous faut republier sur Azure avec ces modifications. Ça fait quelques allers-retours, mais c’est pour la bonne cause :).

Vous pouvez ensuite tester la connexion avec votre BOT depuis l’interface et choisir d’ajouter un ou plusieurs channels de communication. Et c’est là notamment toute la force du BOT framework :

Je choisi ici de créer une intégration avec Slack. Pour ce cas, un petit how-to apparait pour me guider et m’aider à configurer slack :

 

Allez jusqu’au bout du process et vous voici avec un BOT créé et configuré. Je l’ai appelé @doris pour ma part et je peux interagir avec lui comme un user classique, en message direct :

 

Bon, c'est bien, mais là il n'y a que moi qui le voit. Ce qui n’est pas mal, c’est que je peux également l’ajouter à un channel. Mais là par contre, il va écouter tous les messages qui passent et ainsi répondre à chaque message par une génération de meme. Ce qui n’est pas le but recherché.

Qu’à cela ne tienne, je vais utiliser une petite astuce pour le démarrer uniquement sur un mot clé. Ce qui se fait en général est d’utiliser un # par exemple. Voici la deuxième version du code faisant en sorte que le BOT n’écoute que les messages commençant par #doris :

Rien de spécial dans ce code, je supprime juste le #doris pour qu’il n’apparaisse pas dans l’image.

Note : je n’ai pas l’impression que l’on puisse utiliser les slash commands avec le BOT framework.

Et voilà comment le BOT fonctionne dans un channel désormais :

Vous n'avez plus qu'à implémenter d'autres générations de meme.

Et voilà pour cette première découverte du bot framework qui vous permettra d’agrémenter vos discussions sur slack :).