chatbot pour ibm i - université ibm i 2017 · 2017-05-26 · chatbot pour ibm i v1.2 ce hands-on...
TRANSCRIPT
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-
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
-