Transcript
Page 1: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM - Universiteacute IBM i 2017

17 et 18 mai 2017

IBM Client Center - Bois-Colombes

ldquohands-onrdquo

Chatbot pour IBM i

v12

Ce hands-on vous permet de deacutecouvrir comment deacutevelopper un prototype de chatbot permettant drsquointerroger lrsquoeacutetat des ressources systegraveme drsquoun IBM i Il utilise les services Node-RED et Watson de Bluemix pour le chatbot et Slack pour lrsquointerface utilisateur Lrsquoeacutetat des ressources systegraveme de lrsquoIBM i sera exposeacute sous forme de web services impleacutementeacutes en Nodejs Tous ces composants seront eacutetudieacutes et impleacutementeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 2 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Auteur C Laleveacutee (laleveefribmcom) Version 12 du 15 mai 2017

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 3 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Agenda

Preacutesentation du Hands-on 4

0 Connection au poste de travail 6

1 Bluemix deacuteploiement et configuration de Watson Conversation 7 Section 1 Connexion et configuration Bluemix 7 Section 2 Deacuteploiement de Watson Conversation 7 Section 3 Configuration initiale de Conversation 8 Section 4 Gestion des intentions 13

2 Slack creacuteation et configuration drsquoun team 22 Section 1 Creacuteation drsquoun team Slack 22 Section 2 Creacuteation drsquoun bot Slack 22

3 Bluemix deacuteploiement de Node-RED 25 Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED 25 Section 2 Configuration de lrsquoenvironnement Node-RED 26 Section 3 Creacuteation du flux ndash eacutetape 1 28 Section 4 Creacuteation du flux ndash eacutetape 2 31

4 Slack test du dialogue 38

5 Option - IBM i creacuteation des APIs REST en NodeJS 39 Section 1 Connection OpenVPN 39 Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git) 40 Section 3 Modification du code Nodejs 43 Section 4 Exeacutecution du programme Nodejs et test 47

6 Conclusion 49

7 Annexe 1 identifiants OpenVPN 50 8 Annexe 2 Utilisation de Nodepad++ 51 9 Annexe 3 Code source programme Nodejs IBM i 53

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 4 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Preacutesentation du Hands-on

Pour pouvoir faire ce hands-on vous devez posseacuteder un compte Bluemix Si vous nrsquoen avez pas encore vous pouvez le creacuteer ici httpibmbizBluemix-BC

Dans cet hands-on vous allez creacuteer un chatbot qui permet drsquointerroger en langage naturel lrsquoeacutetat des ressources systegraveme (CPU ASP) drsquoun IBM i en utilisant Slack comme interface utilisateur

Ce hands-on est conccedilu comme un deacuteveloppement de prototype Vous utiliserez donc Node-RED une interface de deacuteveloppement graphique ideacuteale pour impleacutementer rapidement une application sans presque eacutecrire de code Dans ce prototype 2 demandes utilisateur seulement seront traiteacutees dire bonjour et demander le taux drsquoutilisation du processeur et de lrsquoASP systegraveme Cette derniegravere demande vous amegravenera agrave creacuteer 2 web services sur lrsquoIBM i en utilisant SQL et Nodejs

Enfin le prototypage eacutetant la cleacute de voucircte du deacuteveloppement iteacuteratif et agile la disponibiliteacute immeacutediate drsquoune plateforme adeacutequate pour supporter ce type de deacuteveloppement est fondamentale Vous utiliserez donc Bluemix Platform et ses nombreux services innovants

LrsquoIBM i utiliseacute est heacutebergeacute dans un Datacenter IBM agrave Montpellier France Pour que vous puissiez y acceacuteder nous avons installeacute sur votre poste de travail un logiciel de VPN OpenVPN Votre application chatbot dans Bluemix utilisera elle un service Bluemix drsquointeacutegration Secure Gateway Le deacuteploiement et la configuration de ce service ne fait pas partie de ce hands-on Vous utiliserez une instance preacuteconfigureacutee pour vous

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 5 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

La vue globale de ce hands-on est donc (les numeacuteros correspondent au numeacutero des exercices)

Vous aurez 4 composants agrave deacuteployer et configurer

1) Le service Watson Conversation dans Bluemix en charge de la reconnaissance des intentions et de la gestion du dialogue

2) Le logiciel Slack lrsquointerface utilisateur au sein duquel vous allez creacuteer un laquo Bot Slack raquo composant servant agrave interfacer Slack agrave votre propre programme de Chatbot (3)

3) Votre programme de Chatbot deacuteveloppeacute en Node-RED dans Bluemix Crsquoest le cœur de la solution Il fait le lien entre le Service Watson Conversation (1) lrsquointerface utilisateur (2) et des sources de donneacutees comme les APIs REST de lrsquoIBM i (5) Crsquoest le composant lrsquolaquo application logic raquo

5) Un programme Nodejs sur IBM i pour exposer lrsquoeacutetat du systegraveme (laquo WRKSYSSTS raquo) sous forme drsquoAPIs REST Durant les eacutetapes 1 agrave 4 (4 eacutetant la phase de test) vous utiliserez un programme Nodejs existant et mis agrave disposition

6) Le service drsquointeacutegration Bluemix la Secure Gateway qui permet de mettre en place une communication seacutecuriseacutee (type VPN) entre votre programme Chatbot srsquoexeacutecutant sur Bluemix (Cloud Public) et votre programme IBM i Nodejs (Datacenter interne IBM ndash Montpellier priveacute) Le deacuteploiement et la configuration de ce service ne font pas partie de cet exercice

1

2

3

5

6

4

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 6 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

0 Connection au poste de travail

Connectez-vous agrave votre machine virtuelle agrave lrsquoaide du logiciel Remote Desktop Connection

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 7 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

1 Bluemix deacuteploiement et configuration de Watson Conversation

Dans cette premiegravere partie vous allez deacuteployer configurer et tester le service Bluemix Watson qui sera en charge du dialogue avec lrsquoutilisateur du chatbot

Section 1 Connexion et configuration Bluemix

__ 1 Connectez-vous agrave votre compte Bluemix (httpwwwbluemixnet) agrave lrsquoaide de votre IBM ID Si neacutecessaire suivez la proceacutedure pour creacuteer un nouveau compte

__ 2 Choisissez la reacutegion Royaume-Uni et lrsquoespace dans lequel vous voulez travailler Vous pouvez creacuteer un nouvel espace si vous le souhaitez (lien laquo creacuteer un espace raquo)

Section 2 Deacuteploiement de Watson Conversation

__ 1 Afficher le catalogue des services (menu en haut agrave droite)

`

__ 2 Dans la cateacutegorie Watson retrouvez le service Conversation et cliquez dessus Vous obtenez la page de configuration du service

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 8 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Renseignez le nom du service

__ 4 Consulter les diffeacuterents plans de facturation et seacutelectionnez le plan gratuit (1 000 requecirctes dAPI par mois jusquagrave 3 espaces de travail jusquagrave 25 intentions Cloud public partageacute) Notez qursquoil existe un plan laquo Premium raquo permettant drsquoavoir une instance deacutedieacutee de services Watson Developer Cloud pour reacutepondre aux besoins drsquoisolation maximum que vous pourriez avoir

__ 5 Creacuteez le service (bouton laquo Creacuteer raquo au bas de la page)

Section 3 Configuration initiale de Conversation

__ 1 Le service creacuteeacute vous obtenez la page drsquoaccueil de votre service Conversation A partir du menu laquo Geacuterer raquo cliquez sur le bouton

pour lancer lrsquoapplication de configuration du service

Lrsquoapplication va se lancer dans un nouvel onglet de votre navigateur Gardez lrsquoonglet initial ouvert sur lrsquoenvironnement Bluemix Vous y reviendrez dans la suite de cet exercice

__ 2 Cette application permet de geacuterer et configurer plusieurs laquo workspaces raquo Un laquo workspace raquo est un environnement agrave lrsquointeacuterieur du service Conversation vous permettant de geacuterer de maniegravere indeacutependante les artefacts drsquoun dialogue pour un usage ou une application particuliegravere Creacuteez un nouveau laquo workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 2: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 2 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Auteur C Laleveacutee (laleveefribmcom) Version 12 du 15 mai 2017

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 3 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Agenda

Preacutesentation du Hands-on 4

0 Connection au poste de travail 6

1 Bluemix deacuteploiement et configuration de Watson Conversation 7 Section 1 Connexion et configuration Bluemix 7 Section 2 Deacuteploiement de Watson Conversation 7 Section 3 Configuration initiale de Conversation 8 Section 4 Gestion des intentions 13

2 Slack creacuteation et configuration drsquoun team 22 Section 1 Creacuteation drsquoun team Slack 22 Section 2 Creacuteation drsquoun bot Slack 22

3 Bluemix deacuteploiement de Node-RED 25 Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED 25 Section 2 Configuration de lrsquoenvironnement Node-RED 26 Section 3 Creacuteation du flux ndash eacutetape 1 28 Section 4 Creacuteation du flux ndash eacutetape 2 31

4 Slack test du dialogue 38

5 Option - IBM i creacuteation des APIs REST en NodeJS 39 Section 1 Connection OpenVPN 39 Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git) 40 Section 3 Modification du code Nodejs 43 Section 4 Exeacutecution du programme Nodejs et test 47

6 Conclusion 49

7 Annexe 1 identifiants OpenVPN 50 8 Annexe 2 Utilisation de Nodepad++ 51 9 Annexe 3 Code source programme Nodejs IBM i 53

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 4 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Preacutesentation du Hands-on

Pour pouvoir faire ce hands-on vous devez posseacuteder un compte Bluemix Si vous nrsquoen avez pas encore vous pouvez le creacuteer ici httpibmbizBluemix-BC

Dans cet hands-on vous allez creacuteer un chatbot qui permet drsquointerroger en langage naturel lrsquoeacutetat des ressources systegraveme (CPU ASP) drsquoun IBM i en utilisant Slack comme interface utilisateur

Ce hands-on est conccedilu comme un deacuteveloppement de prototype Vous utiliserez donc Node-RED une interface de deacuteveloppement graphique ideacuteale pour impleacutementer rapidement une application sans presque eacutecrire de code Dans ce prototype 2 demandes utilisateur seulement seront traiteacutees dire bonjour et demander le taux drsquoutilisation du processeur et de lrsquoASP systegraveme Cette derniegravere demande vous amegravenera agrave creacuteer 2 web services sur lrsquoIBM i en utilisant SQL et Nodejs

Enfin le prototypage eacutetant la cleacute de voucircte du deacuteveloppement iteacuteratif et agile la disponibiliteacute immeacutediate drsquoune plateforme adeacutequate pour supporter ce type de deacuteveloppement est fondamentale Vous utiliserez donc Bluemix Platform et ses nombreux services innovants

LrsquoIBM i utiliseacute est heacutebergeacute dans un Datacenter IBM agrave Montpellier France Pour que vous puissiez y acceacuteder nous avons installeacute sur votre poste de travail un logiciel de VPN OpenVPN Votre application chatbot dans Bluemix utilisera elle un service Bluemix drsquointeacutegration Secure Gateway Le deacuteploiement et la configuration de ce service ne fait pas partie de ce hands-on Vous utiliserez une instance preacuteconfigureacutee pour vous

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 5 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

La vue globale de ce hands-on est donc (les numeacuteros correspondent au numeacutero des exercices)

Vous aurez 4 composants agrave deacuteployer et configurer

1) Le service Watson Conversation dans Bluemix en charge de la reconnaissance des intentions et de la gestion du dialogue

2) Le logiciel Slack lrsquointerface utilisateur au sein duquel vous allez creacuteer un laquo Bot Slack raquo composant servant agrave interfacer Slack agrave votre propre programme de Chatbot (3)

3) Votre programme de Chatbot deacuteveloppeacute en Node-RED dans Bluemix Crsquoest le cœur de la solution Il fait le lien entre le Service Watson Conversation (1) lrsquointerface utilisateur (2) et des sources de donneacutees comme les APIs REST de lrsquoIBM i (5) Crsquoest le composant lrsquolaquo application logic raquo

5) Un programme Nodejs sur IBM i pour exposer lrsquoeacutetat du systegraveme (laquo WRKSYSSTS raquo) sous forme drsquoAPIs REST Durant les eacutetapes 1 agrave 4 (4 eacutetant la phase de test) vous utiliserez un programme Nodejs existant et mis agrave disposition

6) Le service drsquointeacutegration Bluemix la Secure Gateway qui permet de mettre en place une communication seacutecuriseacutee (type VPN) entre votre programme Chatbot srsquoexeacutecutant sur Bluemix (Cloud Public) et votre programme IBM i Nodejs (Datacenter interne IBM ndash Montpellier priveacute) Le deacuteploiement et la configuration de ce service ne font pas partie de cet exercice

1

2

3

5

6

4

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 6 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

0 Connection au poste de travail

Connectez-vous agrave votre machine virtuelle agrave lrsquoaide du logiciel Remote Desktop Connection

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 7 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

1 Bluemix deacuteploiement et configuration de Watson Conversation

Dans cette premiegravere partie vous allez deacuteployer configurer et tester le service Bluemix Watson qui sera en charge du dialogue avec lrsquoutilisateur du chatbot

Section 1 Connexion et configuration Bluemix

__ 1 Connectez-vous agrave votre compte Bluemix (httpwwwbluemixnet) agrave lrsquoaide de votre IBM ID Si neacutecessaire suivez la proceacutedure pour creacuteer un nouveau compte

__ 2 Choisissez la reacutegion Royaume-Uni et lrsquoespace dans lequel vous voulez travailler Vous pouvez creacuteer un nouvel espace si vous le souhaitez (lien laquo creacuteer un espace raquo)

Section 2 Deacuteploiement de Watson Conversation

__ 1 Afficher le catalogue des services (menu en haut agrave droite)

`

__ 2 Dans la cateacutegorie Watson retrouvez le service Conversation et cliquez dessus Vous obtenez la page de configuration du service

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 8 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Renseignez le nom du service

__ 4 Consulter les diffeacuterents plans de facturation et seacutelectionnez le plan gratuit (1 000 requecirctes dAPI par mois jusquagrave 3 espaces de travail jusquagrave 25 intentions Cloud public partageacute) Notez qursquoil existe un plan laquo Premium raquo permettant drsquoavoir une instance deacutedieacutee de services Watson Developer Cloud pour reacutepondre aux besoins drsquoisolation maximum que vous pourriez avoir

__ 5 Creacuteez le service (bouton laquo Creacuteer raquo au bas de la page)

Section 3 Configuration initiale de Conversation

__ 1 Le service creacuteeacute vous obtenez la page drsquoaccueil de votre service Conversation A partir du menu laquo Geacuterer raquo cliquez sur le bouton

pour lancer lrsquoapplication de configuration du service

Lrsquoapplication va se lancer dans un nouvel onglet de votre navigateur Gardez lrsquoonglet initial ouvert sur lrsquoenvironnement Bluemix Vous y reviendrez dans la suite de cet exercice

__ 2 Cette application permet de geacuterer et configurer plusieurs laquo workspaces raquo Un laquo workspace raquo est un environnement agrave lrsquointeacuterieur du service Conversation vous permettant de geacuterer de maniegravere indeacutependante les artefacts drsquoun dialogue pour un usage ou une application particuliegravere Creacuteez un nouveau laquo workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 3: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 3 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Agenda

Preacutesentation du Hands-on 4

0 Connection au poste de travail 6

1 Bluemix deacuteploiement et configuration de Watson Conversation 7 Section 1 Connexion et configuration Bluemix 7 Section 2 Deacuteploiement de Watson Conversation 7 Section 3 Configuration initiale de Conversation 8 Section 4 Gestion des intentions 13

2 Slack creacuteation et configuration drsquoun team 22 Section 1 Creacuteation drsquoun team Slack 22 Section 2 Creacuteation drsquoun bot Slack 22

3 Bluemix deacuteploiement de Node-RED 25 Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED 25 Section 2 Configuration de lrsquoenvironnement Node-RED 26 Section 3 Creacuteation du flux ndash eacutetape 1 28 Section 4 Creacuteation du flux ndash eacutetape 2 31

4 Slack test du dialogue 38

5 Option - IBM i creacuteation des APIs REST en NodeJS 39 Section 1 Connection OpenVPN 39 Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git) 40 Section 3 Modification du code Nodejs 43 Section 4 Exeacutecution du programme Nodejs et test 47

6 Conclusion 49

7 Annexe 1 identifiants OpenVPN 50 8 Annexe 2 Utilisation de Nodepad++ 51 9 Annexe 3 Code source programme Nodejs IBM i 53

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 4 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Preacutesentation du Hands-on

Pour pouvoir faire ce hands-on vous devez posseacuteder un compte Bluemix Si vous nrsquoen avez pas encore vous pouvez le creacuteer ici httpibmbizBluemix-BC

Dans cet hands-on vous allez creacuteer un chatbot qui permet drsquointerroger en langage naturel lrsquoeacutetat des ressources systegraveme (CPU ASP) drsquoun IBM i en utilisant Slack comme interface utilisateur

Ce hands-on est conccedilu comme un deacuteveloppement de prototype Vous utiliserez donc Node-RED une interface de deacuteveloppement graphique ideacuteale pour impleacutementer rapidement une application sans presque eacutecrire de code Dans ce prototype 2 demandes utilisateur seulement seront traiteacutees dire bonjour et demander le taux drsquoutilisation du processeur et de lrsquoASP systegraveme Cette derniegravere demande vous amegravenera agrave creacuteer 2 web services sur lrsquoIBM i en utilisant SQL et Nodejs

Enfin le prototypage eacutetant la cleacute de voucircte du deacuteveloppement iteacuteratif et agile la disponibiliteacute immeacutediate drsquoune plateforme adeacutequate pour supporter ce type de deacuteveloppement est fondamentale Vous utiliserez donc Bluemix Platform et ses nombreux services innovants

LrsquoIBM i utiliseacute est heacutebergeacute dans un Datacenter IBM agrave Montpellier France Pour que vous puissiez y acceacuteder nous avons installeacute sur votre poste de travail un logiciel de VPN OpenVPN Votre application chatbot dans Bluemix utilisera elle un service Bluemix drsquointeacutegration Secure Gateway Le deacuteploiement et la configuration de ce service ne fait pas partie de ce hands-on Vous utiliserez une instance preacuteconfigureacutee pour vous

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 5 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

La vue globale de ce hands-on est donc (les numeacuteros correspondent au numeacutero des exercices)

Vous aurez 4 composants agrave deacuteployer et configurer

1) Le service Watson Conversation dans Bluemix en charge de la reconnaissance des intentions et de la gestion du dialogue

2) Le logiciel Slack lrsquointerface utilisateur au sein duquel vous allez creacuteer un laquo Bot Slack raquo composant servant agrave interfacer Slack agrave votre propre programme de Chatbot (3)

3) Votre programme de Chatbot deacuteveloppeacute en Node-RED dans Bluemix Crsquoest le cœur de la solution Il fait le lien entre le Service Watson Conversation (1) lrsquointerface utilisateur (2) et des sources de donneacutees comme les APIs REST de lrsquoIBM i (5) Crsquoest le composant lrsquolaquo application logic raquo

5) Un programme Nodejs sur IBM i pour exposer lrsquoeacutetat du systegraveme (laquo WRKSYSSTS raquo) sous forme drsquoAPIs REST Durant les eacutetapes 1 agrave 4 (4 eacutetant la phase de test) vous utiliserez un programme Nodejs existant et mis agrave disposition

6) Le service drsquointeacutegration Bluemix la Secure Gateway qui permet de mettre en place une communication seacutecuriseacutee (type VPN) entre votre programme Chatbot srsquoexeacutecutant sur Bluemix (Cloud Public) et votre programme IBM i Nodejs (Datacenter interne IBM ndash Montpellier priveacute) Le deacuteploiement et la configuration de ce service ne font pas partie de cet exercice

1

2

3

5

6

4

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 6 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

0 Connection au poste de travail

Connectez-vous agrave votre machine virtuelle agrave lrsquoaide du logiciel Remote Desktop Connection

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 7 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

1 Bluemix deacuteploiement et configuration de Watson Conversation

Dans cette premiegravere partie vous allez deacuteployer configurer et tester le service Bluemix Watson qui sera en charge du dialogue avec lrsquoutilisateur du chatbot

Section 1 Connexion et configuration Bluemix

__ 1 Connectez-vous agrave votre compte Bluemix (httpwwwbluemixnet) agrave lrsquoaide de votre IBM ID Si neacutecessaire suivez la proceacutedure pour creacuteer un nouveau compte

__ 2 Choisissez la reacutegion Royaume-Uni et lrsquoespace dans lequel vous voulez travailler Vous pouvez creacuteer un nouvel espace si vous le souhaitez (lien laquo creacuteer un espace raquo)

Section 2 Deacuteploiement de Watson Conversation

__ 1 Afficher le catalogue des services (menu en haut agrave droite)

`

__ 2 Dans la cateacutegorie Watson retrouvez le service Conversation et cliquez dessus Vous obtenez la page de configuration du service

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 8 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Renseignez le nom du service

__ 4 Consulter les diffeacuterents plans de facturation et seacutelectionnez le plan gratuit (1 000 requecirctes dAPI par mois jusquagrave 3 espaces de travail jusquagrave 25 intentions Cloud public partageacute) Notez qursquoil existe un plan laquo Premium raquo permettant drsquoavoir une instance deacutedieacutee de services Watson Developer Cloud pour reacutepondre aux besoins drsquoisolation maximum que vous pourriez avoir

__ 5 Creacuteez le service (bouton laquo Creacuteer raquo au bas de la page)

Section 3 Configuration initiale de Conversation

__ 1 Le service creacuteeacute vous obtenez la page drsquoaccueil de votre service Conversation A partir du menu laquo Geacuterer raquo cliquez sur le bouton

pour lancer lrsquoapplication de configuration du service

Lrsquoapplication va se lancer dans un nouvel onglet de votre navigateur Gardez lrsquoonglet initial ouvert sur lrsquoenvironnement Bluemix Vous y reviendrez dans la suite de cet exercice

__ 2 Cette application permet de geacuterer et configurer plusieurs laquo workspaces raquo Un laquo workspace raquo est un environnement agrave lrsquointeacuterieur du service Conversation vous permettant de geacuterer de maniegravere indeacutependante les artefacts drsquoun dialogue pour un usage ou une application particuliegravere Creacuteez un nouveau laquo workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 4: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 4 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Preacutesentation du Hands-on

Pour pouvoir faire ce hands-on vous devez posseacuteder un compte Bluemix Si vous nrsquoen avez pas encore vous pouvez le creacuteer ici httpibmbizBluemix-BC

Dans cet hands-on vous allez creacuteer un chatbot qui permet drsquointerroger en langage naturel lrsquoeacutetat des ressources systegraveme (CPU ASP) drsquoun IBM i en utilisant Slack comme interface utilisateur

Ce hands-on est conccedilu comme un deacuteveloppement de prototype Vous utiliserez donc Node-RED une interface de deacuteveloppement graphique ideacuteale pour impleacutementer rapidement une application sans presque eacutecrire de code Dans ce prototype 2 demandes utilisateur seulement seront traiteacutees dire bonjour et demander le taux drsquoutilisation du processeur et de lrsquoASP systegraveme Cette derniegravere demande vous amegravenera agrave creacuteer 2 web services sur lrsquoIBM i en utilisant SQL et Nodejs

Enfin le prototypage eacutetant la cleacute de voucircte du deacuteveloppement iteacuteratif et agile la disponibiliteacute immeacutediate drsquoune plateforme adeacutequate pour supporter ce type de deacuteveloppement est fondamentale Vous utiliserez donc Bluemix Platform et ses nombreux services innovants

LrsquoIBM i utiliseacute est heacutebergeacute dans un Datacenter IBM agrave Montpellier France Pour que vous puissiez y acceacuteder nous avons installeacute sur votre poste de travail un logiciel de VPN OpenVPN Votre application chatbot dans Bluemix utilisera elle un service Bluemix drsquointeacutegration Secure Gateway Le deacuteploiement et la configuration de ce service ne fait pas partie de ce hands-on Vous utiliserez une instance preacuteconfigureacutee pour vous

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 5 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

La vue globale de ce hands-on est donc (les numeacuteros correspondent au numeacutero des exercices)

Vous aurez 4 composants agrave deacuteployer et configurer

1) Le service Watson Conversation dans Bluemix en charge de la reconnaissance des intentions et de la gestion du dialogue

2) Le logiciel Slack lrsquointerface utilisateur au sein duquel vous allez creacuteer un laquo Bot Slack raquo composant servant agrave interfacer Slack agrave votre propre programme de Chatbot (3)

3) Votre programme de Chatbot deacuteveloppeacute en Node-RED dans Bluemix Crsquoest le cœur de la solution Il fait le lien entre le Service Watson Conversation (1) lrsquointerface utilisateur (2) et des sources de donneacutees comme les APIs REST de lrsquoIBM i (5) Crsquoest le composant lrsquolaquo application logic raquo

5) Un programme Nodejs sur IBM i pour exposer lrsquoeacutetat du systegraveme (laquo WRKSYSSTS raquo) sous forme drsquoAPIs REST Durant les eacutetapes 1 agrave 4 (4 eacutetant la phase de test) vous utiliserez un programme Nodejs existant et mis agrave disposition

6) Le service drsquointeacutegration Bluemix la Secure Gateway qui permet de mettre en place une communication seacutecuriseacutee (type VPN) entre votre programme Chatbot srsquoexeacutecutant sur Bluemix (Cloud Public) et votre programme IBM i Nodejs (Datacenter interne IBM ndash Montpellier priveacute) Le deacuteploiement et la configuration de ce service ne font pas partie de cet exercice

1

2

3

5

6

4

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 6 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

0 Connection au poste de travail

Connectez-vous agrave votre machine virtuelle agrave lrsquoaide du logiciel Remote Desktop Connection

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 7 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

1 Bluemix deacuteploiement et configuration de Watson Conversation

Dans cette premiegravere partie vous allez deacuteployer configurer et tester le service Bluemix Watson qui sera en charge du dialogue avec lrsquoutilisateur du chatbot

Section 1 Connexion et configuration Bluemix

__ 1 Connectez-vous agrave votre compte Bluemix (httpwwwbluemixnet) agrave lrsquoaide de votre IBM ID Si neacutecessaire suivez la proceacutedure pour creacuteer un nouveau compte

__ 2 Choisissez la reacutegion Royaume-Uni et lrsquoespace dans lequel vous voulez travailler Vous pouvez creacuteer un nouvel espace si vous le souhaitez (lien laquo creacuteer un espace raquo)

Section 2 Deacuteploiement de Watson Conversation

__ 1 Afficher le catalogue des services (menu en haut agrave droite)

`

__ 2 Dans la cateacutegorie Watson retrouvez le service Conversation et cliquez dessus Vous obtenez la page de configuration du service

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 8 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Renseignez le nom du service

__ 4 Consulter les diffeacuterents plans de facturation et seacutelectionnez le plan gratuit (1 000 requecirctes dAPI par mois jusquagrave 3 espaces de travail jusquagrave 25 intentions Cloud public partageacute) Notez qursquoil existe un plan laquo Premium raquo permettant drsquoavoir une instance deacutedieacutee de services Watson Developer Cloud pour reacutepondre aux besoins drsquoisolation maximum que vous pourriez avoir

__ 5 Creacuteez le service (bouton laquo Creacuteer raquo au bas de la page)

Section 3 Configuration initiale de Conversation

__ 1 Le service creacuteeacute vous obtenez la page drsquoaccueil de votre service Conversation A partir du menu laquo Geacuterer raquo cliquez sur le bouton

pour lancer lrsquoapplication de configuration du service

Lrsquoapplication va se lancer dans un nouvel onglet de votre navigateur Gardez lrsquoonglet initial ouvert sur lrsquoenvironnement Bluemix Vous y reviendrez dans la suite de cet exercice

__ 2 Cette application permet de geacuterer et configurer plusieurs laquo workspaces raquo Un laquo workspace raquo est un environnement agrave lrsquointeacuterieur du service Conversation vous permettant de geacuterer de maniegravere indeacutependante les artefacts drsquoun dialogue pour un usage ou une application particuliegravere Creacuteez un nouveau laquo workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 5: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 5 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

La vue globale de ce hands-on est donc (les numeacuteros correspondent au numeacutero des exercices)

Vous aurez 4 composants agrave deacuteployer et configurer

1) Le service Watson Conversation dans Bluemix en charge de la reconnaissance des intentions et de la gestion du dialogue

2) Le logiciel Slack lrsquointerface utilisateur au sein duquel vous allez creacuteer un laquo Bot Slack raquo composant servant agrave interfacer Slack agrave votre propre programme de Chatbot (3)

3) Votre programme de Chatbot deacuteveloppeacute en Node-RED dans Bluemix Crsquoest le cœur de la solution Il fait le lien entre le Service Watson Conversation (1) lrsquointerface utilisateur (2) et des sources de donneacutees comme les APIs REST de lrsquoIBM i (5) Crsquoest le composant lrsquolaquo application logic raquo

5) Un programme Nodejs sur IBM i pour exposer lrsquoeacutetat du systegraveme (laquo WRKSYSSTS raquo) sous forme drsquoAPIs REST Durant les eacutetapes 1 agrave 4 (4 eacutetant la phase de test) vous utiliserez un programme Nodejs existant et mis agrave disposition

6) Le service drsquointeacutegration Bluemix la Secure Gateway qui permet de mettre en place une communication seacutecuriseacutee (type VPN) entre votre programme Chatbot srsquoexeacutecutant sur Bluemix (Cloud Public) et votre programme IBM i Nodejs (Datacenter interne IBM ndash Montpellier priveacute) Le deacuteploiement et la configuration de ce service ne font pas partie de cet exercice

1

2

3

5

6

4

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 6 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

0 Connection au poste de travail

Connectez-vous agrave votre machine virtuelle agrave lrsquoaide du logiciel Remote Desktop Connection

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 7 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

1 Bluemix deacuteploiement et configuration de Watson Conversation

Dans cette premiegravere partie vous allez deacuteployer configurer et tester le service Bluemix Watson qui sera en charge du dialogue avec lrsquoutilisateur du chatbot

Section 1 Connexion et configuration Bluemix

__ 1 Connectez-vous agrave votre compte Bluemix (httpwwwbluemixnet) agrave lrsquoaide de votre IBM ID Si neacutecessaire suivez la proceacutedure pour creacuteer un nouveau compte

__ 2 Choisissez la reacutegion Royaume-Uni et lrsquoespace dans lequel vous voulez travailler Vous pouvez creacuteer un nouvel espace si vous le souhaitez (lien laquo creacuteer un espace raquo)

Section 2 Deacuteploiement de Watson Conversation

__ 1 Afficher le catalogue des services (menu en haut agrave droite)

`

__ 2 Dans la cateacutegorie Watson retrouvez le service Conversation et cliquez dessus Vous obtenez la page de configuration du service

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 8 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Renseignez le nom du service

__ 4 Consulter les diffeacuterents plans de facturation et seacutelectionnez le plan gratuit (1 000 requecirctes dAPI par mois jusquagrave 3 espaces de travail jusquagrave 25 intentions Cloud public partageacute) Notez qursquoil existe un plan laquo Premium raquo permettant drsquoavoir une instance deacutedieacutee de services Watson Developer Cloud pour reacutepondre aux besoins drsquoisolation maximum que vous pourriez avoir

__ 5 Creacuteez le service (bouton laquo Creacuteer raquo au bas de la page)

Section 3 Configuration initiale de Conversation

__ 1 Le service creacuteeacute vous obtenez la page drsquoaccueil de votre service Conversation A partir du menu laquo Geacuterer raquo cliquez sur le bouton

pour lancer lrsquoapplication de configuration du service

Lrsquoapplication va se lancer dans un nouvel onglet de votre navigateur Gardez lrsquoonglet initial ouvert sur lrsquoenvironnement Bluemix Vous y reviendrez dans la suite de cet exercice

__ 2 Cette application permet de geacuterer et configurer plusieurs laquo workspaces raquo Un laquo workspace raquo est un environnement agrave lrsquointeacuterieur du service Conversation vous permettant de geacuterer de maniegravere indeacutependante les artefacts drsquoun dialogue pour un usage ou une application particuliegravere Creacuteez un nouveau laquo workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 6: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 6 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

0 Connection au poste de travail

Connectez-vous agrave votre machine virtuelle agrave lrsquoaide du logiciel Remote Desktop Connection

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 7 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

1 Bluemix deacuteploiement et configuration de Watson Conversation

Dans cette premiegravere partie vous allez deacuteployer configurer et tester le service Bluemix Watson qui sera en charge du dialogue avec lrsquoutilisateur du chatbot

Section 1 Connexion et configuration Bluemix

__ 1 Connectez-vous agrave votre compte Bluemix (httpwwwbluemixnet) agrave lrsquoaide de votre IBM ID Si neacutecessaire suivez la proceacutedure pour creacuteer un nouveau compte

__ 2 Choisissez la reacutegion Royaume-Uni et lrsquoespace dans lequel vous voulez travailler Vous pouvez creacuteer un nouvel espace si vous le souhaitez (lien laquo creacuteer un espace raquo)

Section 2 Deacuteploiement de Watson Conversation

__ 1 Afficher le catalogue des services (menu en haut agrave droite)

`

__ 2 Dans la cateacutegorie Watson retrouvez le service Conversation et cliquez dessus Vous obtenez la page de configuration du service

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 8 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Renseignez le nom du service

__ 4 Consulter les diffeacuterents plans de facturation et seacutelectionnez le plan gratuit (1 000 requecirctes dAPI par mois jusquagrave 3 espaces de travail jusquagrave 25 intentions Cloud public partageacute) Notez qursquoil existe un plan laquo Premium raquo permettant drsquoavoir une instance deacutedieacutee de services Watson Developer Cloud pour reacutepondre aux besoins drsquoisolation maximum que vous pourriez avoir

__ 5 Creacuteez le service (bouton laquo Creacuteer raquo au bas de la page)

Section 3 Configuration initiale de Conversation

__ 1 Le service creacuteeacute vous obtenez la page drsquoaccueil de votre service Conversation A partir du menu laquo Geacuterer raquo cliquez sur le bouton

pour lancer lrsquoapplication de configuration du service

Lrsquoapplication va se lancer dans un nouvel onglet de votre navigateur Gardez lrsquoonglet initial ouvert sur lrsquoenvironnement Bluemix Vous y reviendrez dans la suite de cet exercice

__ 2 Cette application permet de geacuterer et configurer plusieurs laquo workspaces raquo Un laquo workspace raquo est un environnement agrave lrsquointeacuterieur du service Conversation vous permettant de geacuterer de maniegravere indeacutependante les artefacts drsquoun dialogue pour un usage ou une application particuliegravere Creacuteez un nouveau laquo workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 7: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 7 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

1 Bluemix deacuteploiement et configuration de Watson Conversation

Dans cette premiegravere partie vous allez deacuteployer configurer et tester le service Bluemix Watson qui sera en charge du dialogue avec lrsquoutilisateur du chatbot

Section 1 Connexion et configuration Bluemix

__ 1 Connectez-vous agrave votre compte Bluemix (httpwwwbluemixnet) agrave lrsquoaide de votre IBM ID Si neacutecessaire suivez la proceacutedure pour creacuteer un nouveau compte

__ 2 Choisissez la reacutegion Royaume-Uni et lrsquoespace dans lequel vous voulez travailler Vous pouvez creacuteer un nouvel espace si vous le souhaitez (lien laquo creacuteer un espace raquo)

Section 2 Deacuteploiement de Watson Conversation

__ 1 Afficher le catalogue des services (menu en haut agrave droite)

`

__ 2 Dans la cateacutegorie Watson retrouvez le service Conversation et cliquez dessus Vous obtenez la page de configuration du service

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 8 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Renseignez le nom du service

__ 4 Consulter les diffeacuterents plans de facturation et seacutelectionnez le plan gratuit (1 000 requecirctes dAPI par mois jusquagrave 3 espaces de travail jusquagrave 25 intentions Cloud public partageacute) Notez qursquoil existe un plan laquo Premium raquo permettant drsquoavoir une instance deacutedieacutee de services Watson Developer Cloud pour reacutepondre aux besoins drsquoisolation maximum que vous pourriez avoir

__ 5 Creacuteez le service (bouton laquo Creacuteer raquo au bas de la page)

Section 3 Configuration initiale de Conversation

__ 1 Le service creacuteeacute vous obtenez la page drsquoaccueil de votre service Conversation A partir du menu laquo Geacuterer raquo cliquez sur le bouton

pour lancer lrsquoapplication de configuration du service

Lrsquoapplication va se lancer dans un nouvel onglet de votre navigateur Gardez lrsquoonglet initial ouvert sur lrsquoenvironnement Bluemix Vous y reviendrez dans la suite de cet exercice

__ 2 Cette application permet de geacuterer et configurer plusieurs laquo workspaces raquo Un laquo workspace raquo est un environnement agrave lrsquointeacuterieur du service Conversation vous permettant de geacuterer de maniegravere indeacutependante les artefacts drsquoun dialogue pour un usage ou une application particuliegravere Creacuteez un nouveau laquo workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 8: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 8 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Renseignez le nom du service

__ 4 Consulter les diffeacuterents plans de facturation et seacutelectionnez le plan gratuit (1 000 requecirctes dAPI par mois jusquagrave 3 espaces de travail jusquagrave 25 intentions Cloud public partageacute) Notez qursquoil existe un plan laquo Premium raquo permettant drsquoavoir une instance deacutedieacutee de services Watson Developer Cloud pour reacutepondre aux besoins drsquoisolation maximum que vous pourriez avoir

__ 5 Creacuteez le service (bouton laquo Creacuteer raquo au bas de la page)

Section 3 Configuration initiale de Conversation

__ 1 Le service creacuteeacute vous obtenez la page drsquoaccueil de votre service Conversation A partir du menu laquo Geacuterer raquo cliquez sur le bouton

pour lancer lrsquoapplication de configuration du service

Lrsquoapplication va se lancer dans un nouvel onglet de votre navigateur Gardez lrsquoonglet initial ouvert sur lrsquoenvironnement Bluemix Vous y reviendrez dans la suite de cet exercice

__ 2 Cette application permet de geacuterer et configurer plusieurs laquo workspaces raquo Un laquo workspace raquo est un environnement agrave lrsquointeacuterieur du service Conversation vous permettant de geacuterer de maniegravere indeacutependante les artefacts drsquoun dialogue pour un usage ou une application particuliegravere Creacuteez un nouveau laquo workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 9: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 9 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Donnez un nom agrave ce nouveau workspace et seacutelectionnez la langue dans laquelle vous voulez geacuterer le dialogue

__ 4 Vous arrivez sur la page vous permettant de creacuteer de nouvelles intentions Un dialogue se compose de 3 types de donneacutees

bull Les intentions laquo le verbe raquo Les intentions repreacutesentent le but de lentreacutee dun utilisateur Vous pouvez consideacuterer les intentions comme les actions que vos utilisateurs pourraient vouloir effectuer avec votre application Exemple drsquointention Connaicirctre la valeur drsquoune ressource du systegraveme

bull Les entiteacutes laquo le nom raquo Une entiteacute repreacutesente un terme ou un objet dans la texte de lutilisateur qui fournit des eacuteclaircissements ou un contexte speacutecifique pour une intention particuliegravere En reconnaissant les entiteacutes qui sont mentionneacutees dans lentreacutee de lutilisateur le service Conversation peut choisir les actions speacutecifiques agrave prendre pour reacutealiser une intention donneacutee Exemple drsquoentiteacute Ressource systegraveme (CPU Disque Meacutemoire hellip)

bull Le dialogue lui-mecircme Le dialogue deacutefinit le flux de votre conversation sous la forme dun arbre logique Chaque nœud de larbre a une condition qui le deacuteclenche en fonction de lentreacutee de lutilisateur Le but du dialogue est de conduire agrave la reacuteponse agrave une question ou agrave lexeacutecution dune action commande

__ 5 Creacuteez une nouvelle intention (bouton laquo create new raquo)

__ 6 Le but sera drsquoidentifier lrsquointention drsquoun utilisateur voulant connaitre le taux drsquoutilisation drsquoune ressource systegraveme Nommez lrsquointention (SYSSTS par exemple)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 10: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 10 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Bien entendu Conversation ne deacutetectera pas lrsquointention sur des phrases preacutedeacutefinies mais utilisera des algorithmes de type laquo machine learning raquo pour reconnaicirctre les intentions Eacutenumeacuterez plusieurs faccedilons de poser la mecircme question (min 5) pour aider votre robot agrave reconnaicirctre lintention Exemples

bull Quel est le taux dutilisation de la cpu

bull Quelle est la valeur du pourcentage CPU utiliseacute

bull Quelle est loccupation de lASP systegraveme

__ 8 Une fois les exemples entreacutes creacuteez lrsquointention en cliquant sur le bouton laquo Create raquo

__ 9 De la mecircme maniegravere creacuteez une intention HELLO permettant de comprendre que notre utilisateur dit bonjour

__ 10 Nous allons maintenant creacuteer une entiteacute permettant drsquoidentifier quelle valeur systegraveme lrsquoutilisateur veut voir avec cette intention Dans la barre de menu cliquez sur laquo Entities raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 11: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 11 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Il existe 2 types drsquoentiteacutes les entiteacutes systegraveme laquo geacuteneacuteriques raquo preacutedeacutefinie par le service Conversation (nombre date hellip) et devant simplement ecirctre activeacutees et les entiteacutes utilisateur que vous devez creacuteer pour vos besoins speacutecifiques Creacuteer une nouvelle entiteacute bouton laquo Create new raquo

__ 12 Le but est drsquoidentifier agrave quelle ressource lrsquoutilisateur srsquointeacuteresse CPU ASP Nous allons donc creacuteer une entiteacute laquo ressource raquo pouvant prendre les valeurs CPU ou ASP ou les synonymes de ces valeurs Saisissez valeurs et synonymes pour les ressources CPU et ASP comme dans lrsquoexemple ci-dessous

__ 13 Creacuteer la nouvelle entiteacute en cliquant sur le bouton laquo create raquo

__ 14 Nous allons maintenant creacuteer le flux permettant de dialoguer avec lrsquoutilisateur et de lui fournir les reacuteponses demandeacutees Dans la barre de menu cliquez sur laquo Dialograquo

__ 15 Nous allons creacuteer un dialogue simple Creacuteer un nouveau dialogue bouton laquo Create raquo Vous verrez apparaicirctre un premier nœud

__ 16 Tout drsquoabord creacuteons le nœud pour deacutemarrer le dialogue un message drsquoaccueil Dans ce premier nœud qui est apparu entrez laquo conversation_start raquo dans le

champ laquo Enter a condition raquo Seacutelectionnez ensuite

laquo conversation_start (create new condition) raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 12: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 12 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 17 Dans le champ laquo Enter a response raquo entrez un message drsquoaccueil puis

ltEntergt Par exemple

__ 18 Un autre nœud laquo anything_else raquo a eacuteteacute automatiquement creacuteeacute permettant de

toujours reacutepondre agrave lrsquoutilisateur Il sera utiliseacute quand le robot nrsquoaura pas de reacuteponse agrave fournir ou qursquoil ne comprendra pas la saisie de lrsquoutilisateur

__ 19 Ouvrez le en cliquant sur laquo gt raquo et saisissez une reacuteponse Par exemple laquo Deacutesoleacute mais je ne sais pas reacutepondre agrave ccedila raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 13: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 13 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 20 Nous pouvons maintenant tester notre dialog En haut agrave droite de la fenecirctre cliquez sur lrsquoicocircne

__ 21 Un panneau srsquoouvre contenant votre message drsquoaccueil Vous pouvez eacutegalement dialoguez avec votre robot (champ laquo Enter something to test your

bot raquo)

__ 22 Essayez de lui dire bonjour Le robot reconnaicirct bien lrsquointention HELLO (en vert) mais il nrsquoest pas (encore) configureacute pour reacutepondre agrave cette intention Il utilise donc le nœud par deacutefaut (laquo anything_else raquo) pour reacutepondre

Notez que ce panneau permet aussi drsquoentrainer Watson Conversation Si HELLO nrsquoavait pas eacuteteacute la bonne intention en cliquant sur la flegraveche du menu deacuteroulant nous aurions pu lui indiquer ce qursquoil aurait ducirc reconnaicirctre

Section 4 Gestion des intentions

__ 1 Nous allons maintenant creacuteer les nœuds permettant de geacuterer les intentions HELLO et SYSSTS

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 14: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 14 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Cliquez sur le premier node laquo conversation_start raquo Un + apparaicirct sous le nœud (pour le moment ne tenez pas compte de celui apparu agrave droite) Cliquez sur le + du bas pour ajouter un nouveau nœud

__ 3 Un panneau apparaicirct sur la droite Renseignez les diffeacuterents champs de maniegravere agrave obtenir

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez une intention Dans un dialogue le preacutefixe identifie toujours une intention

__ 4 Testez votre dialogue Vous devez maintenant obtenir une reacuteponse pertinente lorsque vous lui dites bonjour

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 15: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 15 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Geacuterons maintenant lrsquointention permettant drsquoobtenir la valeur courante drsquoune ressource systegraveme Pour cela nous devons identifier lrsquointention SYSSTS et lrsquoentiteacute sur laquelle elle porte (CPU ou ASP) Creacuteez de la maniegravere suivante un nouveau nœud SYSSTS suivant le nœud geacuterant lrsquointention HELLO (+ au bas du nœud HELLO)

La condition drsquoexeacutecution de ce nœud est

bull Que lrsquointention identifieacutee soit obtenir un taux drsquoutilisation drsquoune ressource (SYSSTS)

bull ET que la ressource demandeacutee soit speacutecifieacutee dans la phrase crsquoest agrave dire que la phrase contienne une entiteacute Ressource

Note pour deacutefinir la condition drsquoexeacutecution de ce nœud (laquo trigger raquo) entrez seulement laquo raquo puis seacutelectionnez lrsquointention SYSSTS Cliquez sur le (+) pour ajouter une condition Dans le nouveau champ entrez laquo raquo puis seacutelectionnez dans la liste deacuteroulante Ressource Dans un dialogue le preacutefixe identifie toujours une entiteacute

Dans le champ laquo Enter a response raquo saisissez une reacuteponse comme par

exemple laquo Vous voulez obtenir la valeur de lt Ressource gt raquo

(Cela ne sera utile que pour les tests preacuteliminaires) Notez la maniegravere drsquoeacutecrire la variable entiteacute agrave lrsquoaide des balises laquo lt raquo et laquo gt raquo

__ 6 Testez votre dialogue Vous devez obtenirhellip

Lrsquointention SYSSTS et lrsquoentiteacute Ressource ont bien eacuteteacute reconnues et geacutereacutees

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 16: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 16 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 A ce stade du dialogue Conversation va devoir laisser la main agrave lrsquoapplication chatbot afin qursquoelle interroge lrsquoIBM i pour obtenir le taux drsquoutilisation de la CPU (ou de lrsquoASP systegraveme) Le diagramme de seacutequence sera donc

Pour lrsquointention HELLO le service Conversation reacutepond en langage naturel agrave lrsquoutilisateur apregraves avoir identifieacute lrsquointention Lrsquoapplication chatbot (que vous deacutevelopperez ensuite) nrsquoest donc ici qursquoun simple intermeacutediaire

Pour lrsquointention SYSSTS le service Conversation apregraves avoir identifieacute lrsquointention demande agrave lrsquoapplication chatbot de retrouver la valeur de la CPU (et non de reacutepondre agrave lrsquoutilisateur) Pour cela vous initialiserez une variable dans le laquo contexte raquo de cette conversation ($ACTION) Lrsquoapplication chatbot devra tester cette variable pour savoir si il faut interroger lrsquoIBM i et ce qursquoil vaut reacutecupeacuterer comme valeur (en fonction de la valeur de la variable ACTION cpu vs asp) Lrsquoapplication chatbot retournera la valeur au service Conversation qui pourra alors formuler la reacuteponse en langage naturel agrave lrsquoutilisateur

Notez que pour le service Conversation il nrsquoy a pas de diffeacuterence entre une reacuteponse provenant drsquoun utilisateur ou du programme chatbot

__ 8 Pour deacutefinir la variable ACTION qui sera intercepteacutee et testeacutee par le programme chatbot vous allez eacutediter le contexte de la conversation Ce contexte est deacutefini en format JSON Il contient toutes les informations permettant au service Conversation drsquoecirctre laquo connection less raquo crsquoest agrave dire qursquoil nrsquoy a pas de connexion permanente entre le programme chatbot et le service Conversation mais des appels successifs

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 17: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 17 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Cliquez sur les 3 points agrave droite du message que vous avez deacutefini puis seacutelectionnez laquo JSON raquo

Vous obtenez alors

Apregraves la premiegravere accolade ajoutez le texte suivant

context

ACTION lt Ressource gt

On sauvegarde dans la variable ACTION lrsquoentiteacute trouveacutee elle deacuteterminera lrsquoAPI agrave appeler Vous obtenez alors

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 18: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 18 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 9 Vous allez creacuteer un nouveau nœud comme ci-dessous

En cliquant sur le nœud preacuteceacutedemment creacuteeacute (SYSSTS and Ressource) faites apparaitre un (+) en haut agrave droite du nœud Cliquez dessus pour ajouter un nœud qui srsquoexeacutecutera agrave la suite du nœud courant

Lrsquoicocircne entre les 2 nœuds repreacutesente une saisie utilisateur Concregravetement cela revient agrave reacutepondre au programme du chatbot et agrave reacutecupeacuterer de sa part une reacuteponse retourneacutee par un utilisateur ou un programme

Creacuteez le nouveau nœud de la maniegravere suivante

La condition drsquoexeacutecution sera laquo contextACTION == CPU raquo = geacuterer la reacuteponse du programme chatbot suite agrave la demande de la valeur CPU Tapez contextACTION == CPU puis seacutelectionnez laquo contextACTION == CPU (create new condition) raquo

contextACTION == lsquoCPUrsquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 19: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 19 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

En passant en mode drsquoaffichage JSON tapez le texte suivant

context

ACTION null

output

text

values [

la CPU est agrave lt inputtext gt de charge

]

selection_policy sequential

Cela permet de

bull Annuler la demande drsquoappel agrave lrsquoIBM i puisque agrave ce stade elle vient drsquoecirctre faite (ACTION null)

bull Reacutepondre en geacuteneacuterant un message incluant la valeur de la CPU retrouveacutee laquo lt inputtext gt raquo (retourneacute par votre programme chatbot)

__ 10 En cliquant sur le nœud faites apparaitre un (+) en bas du nœud Ajouter un nœud de la maniegravere suivante

Tous les nœuds de la mecircme colonne forment un laquo switch case raquo La condition laquo true raquo permet de faire une condition laquo toujours vraie raquo le traitement par deacutefaut Dans cet exemple simple si on nrsquoa pas demandeacute la charge CPU crsquoest que lrsquoon a demandeacute lrsquooccupation de lrsquoASP La reacutealiteacute serait plus probablement complexehellip

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 20: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 20 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 11 Testez votre dialogue Apregraves la premiegravere reacuteponse de Conversation (laquo Vous voulez obtenir la valeur de CPU raquo) simulez la reacuteponse du programme de chatbot en saisissant vous-mecircme la valeur de la CPU telle quelle pourrait ecirctre retourneacutee par lrsquoAPI IBM i Vous obtenez alors

__ 12 Afin que le programme Chatbot puisse tester la variable ACTION pour chaque intention (besoin drsquoun appel drsquoune source de donneacutee externe ) ajoutez la variable action dans le nœud HELLO afin drsquoobtenir

Faites de mecircme sur le nœud laquo Conversation_start raquo

__ 13 Vous avez fini la configuration de votre premier dialogue Pour revenir sur la page drsquoaccueil de lrsquooutil de configuration de Conversation cliquez sur le menu laquo burger raquo puis laquo Back to workspace raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 21: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 21 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 14 Vous reviendrez sur cet espace dans lrsquoexercice 2 pour retrouver lrsquoidentifiant de ce workspace (gardez cette page ouverte dans votre navigateur)

Vous allez maintenant creacuteer lrsquointerface utilisateur

Notez qursquoagrave partir de ce menu laquo Burger raquo vous pouvez acceacuteder agrave lrsquointerface drsquoentrainement de Conversation afin de le rendre plus efficace et pertinent dans lrsquoidentification des intentions et entiteacutes laquo Improve raquo gt laquo User conversations raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 22: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 22 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

2 Slack creacuteation et configuration drsquoun team

Votre application de chatbot sera accessible au travers de Slack lrsquointerface utilisateur

Slack est une plate-forme de communication collaborative proprieacutetaire lanceacutee en 2014

Slack fonctionne agrave la maniegravere dun chat IRC organiseacute en canaux correspondant agrave autant de sujets de discussion La plateforme permet eacutegalement de conserver une trace de tous les eacutechanges (laquo Slack raquo est lacronyme de laquo Searchable Log of All Conversation and Knowledge raquo) permet le partage de fichiers au sein des conversations et integravegre en leur sein des services externes comme GitHub Box hellip Slack dispose de clients natifs sur la plupart des plateformes mobiles (iOS Android Windows Phone) ainsi que sur MacOS Windows Linux et via un navigateur internet La documentation en franccedilais est disponible ici httpsgetslackhelphcfr-fr

Slack permet eacutegalement de srsquointerface avec des programmes exteacuterieurs Crsquoest ce meacutecanisme que vous utiliserez pour creacuteer un laquo bot Slack raquo communicant avec votre programme chatbot lui-mecircme communiquant avec Watson Conversation

Section 1 Creacuteation drsquoun team Slack

__ 1 Ouvrez un nouvel onglet dans votre navigateur et creacuteez un groupe Slack (httpsslackcomcreate) ou utilisez un groupe existant si vous avez suffisamment de privilegraveges Reacutefeacuterez-vous agrave la documentation en ligne pour savoir comment creacuteer

un groupe httpsgetslackhelphcen-usarticles206845317-Create-a-Slack-team

Section 2 Creacuteation drsquoun bot Slack

__ 1 Pour ajouter un Bot Slack allez sur la page Slack de configuration des applications de votre groupe httpsltslack_groupgtslackcomappsnewA0F7YS25R-bots

__ 2 Donner un nom agrave votre Bot Slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 23: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 23 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Copiez le token (laquo API token raquo) geacuteneacutereacute Vous en aurez besoin lors de la creacuteation de votre programme de chatbot

__ 4 Sauvegardez

__ 5 Vous pouvez maintenant voir votre Bot Slack et sa configuration en vous rendant sur la page httpsslack_groupslackcomappsmanage et en cliquant sur le menu de gauche laquo Custom Integrations raquo

__ 6 Connectez-vous agrave votre groupe Slack httpsslack_groupslackcommessages Vous pouvez voir dans le menu de gauche votre nouveau Bot Slack comme un utilisateur laquo non connecteacute raquo (il apparaitra comme laquo connecteacute raquo lorsque nous aurons creacuteeacute le programme chatbot)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 24: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 24 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous souhaitez que votre Bot Slack reacuteponde aux questions poseacutees dans un Channel creacuteez un nouveau Channel (sinon vous pourrez vous adresser directement agrave lui) Cliquez sur laquo Channel raquo dans le menu Slack de gauche

__ 8 Sur la nouvelle page qui srsquoouvre cliquez surhellip

__ 9 Saisissiez un nom pour votre Channel et invitez votre Bot Slack

__ 10 Creacuteez le Channelhellip

Votre Bot Slack est precirct agrave dialoguer Vous allez maintenant creacuteer le programme chatbot (laquo application logic raquo) pour faire la liaison entre le Bot Slack et le service Watson Conversation

Gardez la fenecirctre ou lrsquoonglet Slack ouvert dans votre navigateur Vous y reviendrez dans la suite de cet exercice

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 25: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 25 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

3 Bluemix deacuteploiement de Node-RED

Pour creacuteer le programme de chatbot vous allez utiliser Node-RED Node-RED est un logiciel initialement deacuteveloppeacute par IBM pour lrsquointerfaccedilage de mateacuteriels drsquoAPI et de services en ligne (laquo Cloud raquo) dans le cadre de lInternet des objets Il fournit un eacutediteur de flux accessible via un navigateur qui peut ecirctre utiliseacute pour creacuteer des fonctions JavaScript Les eacuteleacutements des applications (laquo nodes raquo) deacuteployeacutes graphiquement peuvent ecirctre sauvegardeacutes ou partageacutes pour ecirctre reacuteutiliseacutes Node-RED srsquoappuie sur Nodejs En 2016 IBM a apporteacute Node-RED en tant que projet open source agrave la JS Foundation

Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED

__ 1 Retournez sur lrsquoenvironnement Bluemix dans lrsquoespace ougrave vous avez deacuteployeacute le service Conversation Affichez le catalogue de services et seacutelectionnez laquo Boilerplate raquo dans la cateacutegorie laquo Applis raquo Cliquez sur laquo Node-RED Starter raquo

Notes Un boilerplate est une application precircte agrave lrsquoemploi inteacutegrant la partie code mais eacutegalement les services neacutecessaires agrave son fonctionnement Le boilerplate Node-RED est composeacute drsquoun runtime NodeJS et drsquoune base de donneacutees Cloudant Consultez les plans de tarifications Vous avez bien les plans de tarifications pour les 2 services inclus dans ce boilerplate

__ 2 Donnez un nom agrave votre application Node-RED et creacuteez-la

__ 3 Lrsquoapplication va ecirctre construire (laquo Build raquo) puis deacuteployeacutee (laquo Deploy raquo) et enfin exeacutecuteacutee Cela peut prendre quelques minutes Profitez-en pour vous familiariser avec les diffeacuterents menus composant lrsquoenvironnement de cette application Consultez notamment les logs traccedilant le deacuteploiement de lrsquoapplication (Menu laquo journaux raquo)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 26: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 26 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Une fois lrsquoapplication deacuteployeacutee cliquez sur le lien laquo Visit App URL raquo

Cela va ouvrir un nouvel onglet contenant lrsquoapplication Node-RED Si vous obtenez un message de la formehellip

404 Not Found Requested route (chatbot4i-v2eu-

gbmybluemixnet) does not exist

hellip crsquoest que lrsquoapplication nrsquoest pas encore deacuteployeacutee toujours en cours de lancement

Section 2 Configuration de lrsquoenvironnement Node-RED

__ 1 Configurez lrsquoauthentification Node-RED agrave lrsquoaide de lrsquoassistant puis cliquez sur laquo Go to your Node-RED flow editor raquo pour ouvrir lrsquoeacutediteur de flux

__ 2 Node-RED permet de construire des applications agrave laide drsquoun eacutediteur graphique en connectant ensemble les blocs (ou nœuds) dont on a besoin Il suffit simplement de glisser et deacuteposer les blocs du menu de gauche (la palette) dans lespace de travail au centre de leacutecran et les connecter ensemble pour creacuteer un nouveau flux un programme Voici agrave quoi ressemblera le flux que vous allez creacuteer (par la suite nous reviendrons en deacutetail sur les diffeacuterents nœuds interconnecteacutes)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 27: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 27 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 La palette de gauche contient deacutejagrave les nœuds correspondant aux services Watson Par contre elle ne contient pas ceux permettant de se connecter agrave Slack Vous allez donc lrsquoenrichir Ouvrez le menu laquo burger raquo en haut agrave droite de votre fenecirctre et cliquez sur laquo Manage palette raquo

__ 4 Un panneau se deacuteploie alors sur le cocircteacute gauche Cliquez sur lrsquoonglet laquo Install raquo

__ 5 Dans le champs laquo search modules raquo entrez le nom du module Slack rechercheacute node-red-contrib-slack

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 28: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 28 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Une liste apparaicirct Cliquez sur le bouton laquo install raquo en face du module deacutesireacute

__ 7 Un message de mise en garde peut apparaicirctre indiquant qursquoun redeacutemarrage de lrsquoapplication Node_RED peut ecirctre neacutecessaire Cliquez sur le bouton laquo install raquo

__ 8 Vous devez maintenant voir le module Slack installeacute disponible dans la liste des modules (onglet laquo Nodes raquo) Fermez le panneau laquo Manage Palette raquo en cliquant sur le bouton laquo Done raquo

Section 3 Creacuteation du flux ndash eacutetape 1

__ 1 Dans la palette retrouvez le nœud laquo Slack Bot In raquo et glissez-le sur lrsquoespace de travail

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 29: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 29 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Double cliquez dessus Renseignez les champs laquo Bot API Token raquo et laquo Channel raquo deacutefinis agrave lrsquoeacutetape preacuteceacutedente Indiquez eacutegalement un nom du nœud

Note vous pouvez retrouver les informations lieacutees agrave votre Bot Slack agrave partir de

lrsquoURL suivante httpsvotre_slack_groupslackcomappsmanage puis laquo Custom

Integration raquo laquo Bots raquo puis cliquez sur lrsquoicocircne en face de votre bot Slack

__ 3 Dans la palette cateacutegorie laquo IBM_Watson raquo retrouvez le nœud laquo Conversation raquo et glissez-le sur lrsquoespace de travail Creacuteez un lien entre le nœud Slack et le nouveau nœud Conversation

__ 4 Double cliquez sur le nœud Conversation et renseignez les paramegravetres demandeacutes

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 30: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 30 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Notes

__ a Les laquo Username raquo et laquo Password raquo sont deacutefinis au niveau du service Conversation que vous avez creacuteeacute agrave lrsquoeacutetape 1 Le laquo Workspace ID raquo est deacutefini dans lrsquooutil de configuration du service Conversation (utiliseacute agrave lrsquoeacutetape 2 de cet exercice) Vous pouvez retrouver tous ces eacuteleacutements agrave partir de lrsquooutil de configuration du service Conversation Ouvrez la page de votre navigateur correspondant agrave de lrsquooutil de configuration du service Conversation Cliquez sur le workspace ID pour lrsquoouvrir A partir du menu laquo burger raquo de gauche seacutelectionnez laquo Deploy gt Credentials raquo

__ b Copiez Username Password et Workspace ID et collez les dans le noeud Node-RED Conversation

__ 5 Cliquez sur le bouton laquo Done raquo pour valider la creacuteation de ce nouveau nœud Node-RED

__ 6 Cliquez sur laquo Deploy raquo pour deacuteployer votre Flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 31: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 31 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Si vous ouvrez la page de votre navigateur correspondant agrave votre Team Slack (ou groupe- Slack vous devez maintenant voir lrsquoutilisateur correspondant agrave votre Bot Slack connecteacute (point vert)

Section 4 Creacuteation du flux ndash eacutetape 2

Nous allons maintenant creacuteer les autres nœuds du flux

1 Reacutecupeacuteration du texte saisi dans Slack (deacutejagrave creacuteeacute)

2 Appel du service Conversation qui identifie les intentions les entiteacutes et megravene le dialogue (deacutejagrave creacuteeacute agrave lrsquoeacutetape 1)

3 Test de la variable ACTION dans le contexte de la conversation en cours

a Si contextACTION = CPU construction et appel de lrsquoAPI IBM i pour retrouver la charge CPU courante (6)

b Si contextACTION = ASP construction et appel de lrsquoAPI IBM i pour retrouver lrsquooccupation de lrsquoASP Systegraveme (6)

c Sinon renvoi du texte geacuteneacutereacute par le service Conversation agrave lrsquoutilisateur Slack (5)

4 Dans le contexte de la conversation en cours extraction du texte agrave retourner agrave lrsquoutilisateur Slack

5 Renvoi drsquoun texte agrave lrsquoutilisateur de Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

1

2

3

4

6

5

7

8

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 32: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 32 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Selon le type drsquoinformation agrave retrouver sur lrsquoIBM i (CPU ou ASP) construction des URLs drsquoappel de lrsquoAPI sur lrsquoIBM i

7 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

8 Extraction de la valeur du JSON et reacuteponse au service Conversation

__ 1 Test de la variable ACTION

La variable ACTION que vous avez creacuteeacutee preacuteceacutedemment se retrouve dans lrsquoobjet JSON laquo msg raquo eacutechangeacute entre les nœuds Node-RED dans lrsquoobjet laquo payload raquo Vous allez donc pouvoir tester sa valeur A partir de la palette glissezdeacuteposez un nœud de type laquo switch raquo et reliez le agrave la sortie du nœud Conversation

Configurez-le de la maniegravere suivante

3 sorties seront creacuteeacutees pour ce nœud

__ 2 A partir du contexte de la conversation en cour extraction du texte agrave retourner agrave lrsquoutilisateur Slack

Srsquoil nrsquoy a aucune action agrave exeacutecuter il faut extraire et formater le texte (laquo outputtext raquo) renvoyeacute par le service Conversation pour lrsquoutilisateur Slack Il se trouve dans lrsquoobjet laquo msgpayload raquo eacutechangeacute entre les nœuds Node-RED

A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la 3e sortie du nœud preacuteceacutedent laquo Action raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 33: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 33 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Copiez le texte suivant (code Javascript)hellip

msgpayload = msgpayloadoutputtextjoin(n)

return msg

hellip et donnez un nom au nœud de maniegravere agrave obtenir

__ 3 Renvoi drsquoun texte agrave lrsquoutilisateur Slack (en fait renvoi au Bot Slack qui interagit avec les utilisateurs Slack)

A partir de la palette glissezdeacuteposez un nœud de type laquo Slack Bot Out raquo et reliez-le agrave la sortie du nœud laquo rebuild slack payload raquo

Configurez-le agrave lrsquoaide des paramegravetres de votre Bot Slack (comme le nœud Slack preacuteceacutedent) de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 34: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 34 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 4 Vous allez maintenant traiter les cas ougrave il faut appeler une API REST sur lrsquoIBM i pour obtenir les valeurs de CPU ou drsquoASP

__ a Pour construire lrsquoURL du web service permettant de retrouver la valeur courante de lrsquoutilisation CPU glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la premiegravere sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemcpu

msgurl = url

return msg

Vous devez obtenir

__ b Pour construire lrsquoURL du web service permettant de retrouver le taux drsquoutilisation de lrsquoASP systegraveme glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la deuxiegraveme sortie du nœud laquo Action raquo (switch)

Ouvrez le nœud donnez-lui un nom et copiez le code suivant

var url

url = httpcaplonsgprd-2integrationibmcloudcom15329systemasp

msgurl = url

return msg

Vous devez obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 35: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 35 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Note lrsquoURL utiliseacutee ne correspond agrave pas aux hostname de lrsquoIBM i car il nrsquoest pas accessible agrave partir drsquoInternet Vous utilisez ici la translation drsquoadresse (laquo NAT raquo) fournie par un service Bluemix drsquointeacutegration Secure Gateway Sa configuration est la suivante

Pour plus drsquoinformation sur la Secure Gateway httpsconsolengbluemixnetdocsservicesSecureGatewaysecure_gatewayhtml

__ 5 Appel de lrsquoAPI IBM i et reacutecupeacuteration du reacutesultat (format JSON)

A partir de la palette glissezdeacuteposez un nœud de type laquo http request raquo et reliez-le aux sorties des nœuds laquo Build CPU URL raquo et laquo Build ASP URL raquo

Ouvrez le nœud et configurez-le de maniegravere agrave obtenir

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 36: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 36 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Extraction de la valeur du JSON et reacuteponse au service Conversation

LrsquoAPI IBM i renvoie un objet JSON (Exemple SYSTEM_ASP_USED 2748 )

mais nous devons renvoyer une valeur numeacuterique au service Conversation Nous allons donc lrsquoextraire du JSON A partir de la palette glissezdeacuteposez un nœud de type laquo function raquo et reliez-le agrave la sortie du nœud laquo Call IBMi raquo

Ouvrez le nœud et copiez le code suivant

var FirstKey

for (var key in msgpayload)

if (msgpayloadhasOwnProperty(key))

FirstKey = msgpayload[key]

break

msgpayload = FirstKey

return msg

Note sans rentrer dans les deacutetails ce code permet drsquoextraire la valeur drsquoun objet JSON composeacute drsquoune seul paire cleacutevaleur Il est neacutecessaire car selon lrsquoAPI appeleacutee la cleacute de la paire nrsquoest pas la mecircme (SYSTEM_ASP_USED vs

ELAPSED_CPU_USED)

Il faudrait eacutegalement geacuterer le cas ougrave lrsquoAPI renvoie un code drsquoerreurhellip mais cela ne sera pas abordeacute dans cet exercice

Vous devez obtenir

Connectez la sortie de ce nœud agrave lrsquoentreacutee du nœud Conversation pour prendre en compte cette valeur comme une entreacutee utilisateur

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 37: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 37 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 7 Nous avons fini lrsquoimpleacutementation de notre flux Cependant avant de le tester nous allons voir comment ajouter une trace pour eacuteventuellement debugger le flux

A parti de la palette glissezdeacuteposez un nœud de type laquo Debugraquo et reliez-le agrave la sortie du nœud laquo Extract Value raquo

A partir du menu laquo burger raquo en haut agrave droite afficher le panneau des messages de debug lors de lrsquoexeacutecution vous y verrez apparaicirctre les messages en sortie du nœud laquo Extract Value raquo et donc ce qui est renvoyeacute au nœud Conversation

__ 8 Deacuteployez votre flux

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 38: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 38 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

4 Slack test du dialogue

__ 1 Ouvrez la page de votre navigateur positionneacutee sur les messages Slack de votre

team (httpsslack_groupslackcommessages)

__ 2 A partir du channel deacutedieacute dialoguez avec votre chatbot

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 39: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 39 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

5 Option - IBM i creacuteation des APIs REST en NodeJS

__ 1 Ouvrez une nouvelle fenecirctre dans votre navigateur et entrez lrsquoURL suivante

httpsgithubcomclaleveeIBMi-API

Crsquoest ce laquo repository Git raquo que vous allez deacuteployer sur lrsquoIBM i

Section 1 Connection OpenVPN

__ 1 Connectez-vous au Datacenter heacutebergeant lrsquoIBM i agrave lrsquoaide du logiciel OpenVPN (icocircne dans la barre des taches Windows)

Click bouton droit puis laquo Connect raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 40: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 40 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Utiliser lrsquoidentifiant OpenVPN et le mot de passe attribueacutes agrave votre team et donneacute en annexe 1 de ce document

Une fois connecteacute lrsquoicocircne OpenVPN passe au vert

Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)

__ 1 Connectez-vous en ssh agrave lrsquoIBM i

Vous pouvez utiliser le plugin Firefox FireSSH ou Putty

__ a FireSSH cliquez sur lrsquoicocircne FireSSH dans la barre drsquoadresse de Firefox

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 41: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 41 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Configurez lrsquoadresse IP = 1035452 et votre identifiant = studxx (ougrave xx est votre numeacutero de team) Le mot de passe est laquo password raquo

Cliquez sur le bouton laquo Connexion raquo vous ecirctes connecteacute

__ b Putty cliquez sur lrsquoicocircne Putty se trouvant sur le bureau et configurez une nouvelle connexion ssh comme ci-dessous

bull Adresse IP 1035452

bull Identifiant studxx (ougrave xx est votre numeacutero de team)

bull Mot de passe password

__ 2 Dans la session ssh si vous le souhaitez lancez un shell bash pour un environnement plushellip laquo user-friendly raquo

$ bash

bash-43$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 42: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 42 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Positionnez-vous dans le reacutepertoire laquo homeorion raquo puis agrave lrsquoaide de la commande Git ci-dessous clonez le projet claleveeIBMi-API dans le reacutepertoire studxx (ougrave xx est votre numeacutero de team)

$ cd homeorion

$ git clone -c httpsslVerify=false httpsgithubcomclaleveeIBMi-API

stud01

Cloning into stud01

remote Counting objects 81 done

remote Compressing objects 100 (5151) done

remote Total 81 (delta 31) reused 69 (delta 19) pack-reused 0

Unpacking objects 100 (8181) done

La syntaxe de la commande est

git clone URL_Source Reacutepertoire_Local_Cible

(-c httpsslVerify=false est lagrave pour geacuterer un problegraveme de certificat IBM i auto-

signeacutehellip)

__ 4 Positionnez-vous dans le reacutepertoire homeorionstuxx (ougrave xx est votre numeacutero de team) puis agrave lrsquoaide de la commande npm ci-dessous installez les deacutependances du programme Nodejs (les deacutependances sont deacuteclareacutees dans le fichier packagejson)

$ cd stud01

$ npm install

express4134 node_modulesexpress

escape-html103

array-flatten111

utils-merge100

accepts1213 (negotiator053 mime-types2115)

serve-static1103 (send0132)

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 43: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 43 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 5 Afin que vous puissiez eacutediter agrave lrsquoaide de lrsquoeacutediteur Web Orion les fichiers se trouvant dans ce reacutepertoire vous allez donner les droits au profil QTMHHTTP

$ system CHGAUT OBJ(homeorionstud01) USER(QTMHHTTP) DTAAUT(RWX)

OBJAUT(ALL) SUBTREE(ALL)

Section 3 Modification du code Nodejs

__ 1 Vous allez maintenant utiliser Orion pour customiser le code Nodejs cloneacute Orion est une application en ligne de la fondation Eclipse dont le but est de fournir un environnement de deacuteveloppement inteacutegreacute en mode heacutebergeacute permettant par exemple de deacutevelopper directement sur le cloud Le but que sest fixeacute leacutequipe deacuteveloppant Orion est de permettre le deacuteveloppement dapplications web sur le web (httpswikieclipseorgOrion) Dans notre cas lapplication est installeacutee sur lrsquoIBM i (5733OPS Opt 8)

Note si vous ne souhaitez pas utiliser Orion vous pouvez eacutegalement utiliser Notepad++ agrave partir de votre poste de travail Pour cela consulter lrsquoannexe 2 de ce document

Dans une nouvelle fenecirctre de votre navigateur connectez-vous agrave lrsquoURL suivante http10354522025

__ 2 Cliquez sur le bouton

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 44: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 44 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Entrez un identifiant identique agrave votre identifiant IBM i (studxx) et un mot de passe contenant un chiffre et un caractegravere speacutecial

Note Les identifiants Orion ne sont pas les USRPRF de lrsquoIBM i De plus nous nrsquoavons pas limiteacute la creacuteation de compte aux seuls administrateurs Crsquoest pourquoi vous pouvez vous-mecircme vous creacuteer votre identifiant Orion

__ 4 Lrsquoeacutediteur srsquoouvre

__ 5 A partir du menu laquo File raquo ouvrez le reacutepertoire que nous venons de cloner laquo New raquo gt laquo Link to Server raquo

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 45: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 45 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 6 Donnez un nom au nouveau projet laquo Node-API raquo et initialisez le laquo Server path raquo avec le chemin du reacutepertoire dans lequel vous venez de cloner le repository Git laquo homeorionstudxx raquo (ougrave xx est votre numeacutero de team)

__ 7 Vous pouvez maintenant eacutediter le fichier laquo appjs raquo

__ 8 Retrouvez le code du web service 1

Web Service 1 ------------------------------------------------------

appget(systemcpu function(req res next)

replace following line with you Web Service code

resjson(204)

)

hellip et modifier le de la maniegravere suivante

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 46: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 46 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une API REST (meacutethode GET) permettant de retrouver le pourcentage processeur utiliseacute via une simple requecircte SQL et de le renvoyer format JSON Retrouvez en deacutebut de programme ce qui permet drsquoexeacutecuter du SQL sur DB2 for i agrave partir de Nodejs

__ 9 Retrouvez le code du web service 2

Web Service 2 ------------------------------------------------------

appget(systemasp function(req res next)

replace following line with you Web Service code

resjson(204)

)

et modifier le de la maniegravere suivante

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 47: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 47 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

Analysez ce code qui expose une deuxiegraveme API REST permettant de retrouver le pourcentage drsquoASP systegraveme utiliseacute via une simple requecircte SQL et de le renvoyer au format JSON

__ 10 Vous allez maintenant modifier le port TCP sur lequel se mettra agrave lrsquoeacutecoute votre programme

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

Remplacez le numeacutero de port par 19880 + votre numeacutero de team (19881 pour le team 1 19882 pour le team 2 etchellip)

Section 4 Exeacutecution du programme Nodejs et test

__ 1 Retournez agrave votre interface SSH (Firefox FireSSH ou Putty) et positionnez-vous dans le reacutepertoire de votre application

$ cd homeorionstud01

$

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 48: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 48 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 2 Exeacutecutez le programme agrave lrsquoaide la commande laquo npm start raquo (ou laquo node appjs raquo)

$ npm start

gt Nodejs4iStarterApp001 start homeorionstud01

gt node appjs

DB2 init done

DB2 connect done

Server starting on 19881

__ 3 Ouvrez une nouvelle fenecirctre de votre navigateur et saisissez lrsquoURL suivante http1035452ltvotre_numero_de_portgtsystemcpu

Vous devez obtenir le reacutesultat suivant

De la mecircme maniegravere testez la deuxiegraveme API Quelle est son URL

Vous avez termineacute la mise en œuvre des 2 REST APIs en Nodejs sur IBM i

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 49: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 49 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

6 Conclusion

Feacutelicitation

Vous avez termineacute cet exercice Lrsquoeacutetape suivante serait la configuration du service drsquointeacutegration Bluemix la Secure Gateway afin de prendre en compte la translation du nouveau port TCP que vous avez mis en œuvre Mais cela ne fait pas partie de cet exercice Parlez-en avec lrsquoinstructeur si vous voulez plus drsquoinformations

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 50: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 50 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

7 Annexe 1 identifiants OpenVPN

expired

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 51: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 51 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

8 Annexe 2 Utilisation de Nodepad++

Si vous ne souhaitez pas utiliser Orion pour pouvez utiliser le logiciel Windows Nodepad++ installeacute sur votre poste de travail et configureacute avec le plugin NppFTP permettant lrsquoeacutedition de fichiers agrave distance

__ 1 Ouvrez le programme Nodepad++ agrave partir du menu Windows

__ 2 A partir du menu laquo Plugins raquo gt laquo NppFTP raquo gt laquo Show NppFTP Windows raquohellip

hellip ouvrez la fenecirctre de configuration des profils laquo Profile settings raquo

hellip et configurez la connexion agrave lrsquoIBM i de la maniegravere suivante Fermez cette fenecirctre

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 52: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 52 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

__ 3 Vous pouvez maintenant vous connecter agrave lrsquoIBM i

__ 4 A partir de lrsquoexplorer de droite seacutelectionnez le fichier agrave eacutediter

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 53: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 53 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

9 Annexe 3 Code source programme Nodejs IBM i

----------------------------------------------------------------------------

nodejs starter application for IBM i

----------------------------------------------------------------------------

This application uses express as its web server

for more info see httpexpressjscom

var express = require(express)

create a new express server

var app = express()

serve the files out of public as our main files

appuse(expressstatic(__dirname + public))

Connect to DB2 for i ----------------------------------------------------

DB2 for i driver

var db = require(QOpenSysQIBMProdDataOPSNode4os400db2ilibdb2)

dbinit(function()

dbserverMode(true) Enable Server Mode if needed

)

consolelog (DB2 init done)

dbconn(LOCAL)

consolelog (DB2 connect done)

Web Service 1 -----------------------------------------------------------

appget(systemcpu function(req res next)

var result =

var sql = SELECT elapsed_cpu_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 54: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 54 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

Web Service 2 -----------------------------------------------------------

appget(systemasp function(req res next)

var result =

var sql = SELECT system_asp_used FROM QSYS2SYSTEM_STATUS_INFO

try

consolelog(SQL + sql)

dbexec(sql function(rs)

consolelog (JSONstringify(rs))

if(rslength = 0)

resjson(rs[0])

else

resjson(204)

)

catch(e) Exception handler

consolelog(Error + e)

resjson(500)

)

---------------------------------------------------------------------------

hereunder replace 19880 by TCP port you want to use

var ServerPort = 19880

start server on the specified port and binding host

applisten(ServerPort 0000 function()

print a message when the server starts listening

consolelog(Server starting on + ServerPort)

)

Handle exit events --------------------------------------------------------

processon(SIGINT function ()

consolelog(SIGINT fired)

processexit(1)

)

processon(exit function ()

consolelog(Exit fired)

consolelog (Close DB connection)

dbclose()

)

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 55: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 55 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i
Page 56: Chatbot pour IBM i - Université IBM i 2017 · 2017-05-26 · Chatbot pour IBM i v1.2 Ce hands-on vous permet de découvrir comment développer un prototype de chatbot permettant

IBM Universiteacute IBM i 2017 | Bois-Colombes France

copy Copyright IBM Corp2017 56 Materials may not be reproduced in whole or in part

without the prior written permission of IBM

  • Preacutesentation du Hands-on
  • 0 Connection au poste de travail
  • 1 Bluemix deacuteploiement et configuration de Watson Conversation
    • Section 1 Connexion et configuration Bluemix
    • Section 2 Deacuteploiement de Watson Conversation
    • Section 3 Configuration initiale de Conversation
    • Section 4 Gestion des intentions
      • 2 Slack creacuteation et configuration drsquoun team
        • Section 1 Creacuteation drsquoun team Slack
        • Section 2 Creacuteation drsquoun bot Slack
          • 3 Bluemix deacuteploiement de Node-RED
            • Section 1 Deacuteploiement et exeacutecution drsquoun boilerplate Node-RED
            • Section 2 Configuration de lrsquoenvironnement Node-RED
            • Section 3 Creacuteation du flux ndash eacutetape 1
            • Section 4 Creacuteation du flux ndash eacutetape 2
              • 4 Slack test du dialogue
              • 5 Option - IBM i creacuteation des APIs REST en NodeJS
                • Section 1 Connection OpenVPN
                • Section 2 Connexion ssh agrave lrsquoIBM i et clonage du code (Git)
                • Section 3 Modification du code Nodejs
                • Section 4 Exeacutecution du programme Nodejs et test
                  • 6 Conclusion
                  • 7 Annexe 1 identifiants OpenVPN
                  • 8 Annexe 2 Utilisation de Nodepad++
                  • 9 Annexe 3 Code source programme Nodejs IBM i

Recommended