Overview

Skill Level: Intermediate

Assistant Virtuel de réservation avec NodeJS, Database et Messenger.

Réservation de chambres d’Hôtel au Palais de l'Oiseau de Jade.

Ingredients

 

 

 

Mise à jour:

02-20
Cognos Analytics
NodeJs sur AWS et en local
Assistant V2
03-19 
MariaDB sur AWS
Suppression de la région à la connexion IBM Cloud
Ajout d'une interface web
12-18
Migration vers cloud.ibm.com
10-18
Suppression de Watson Analytics

Step-by-step

  1. Présentation

    Le Palais de l’Oiseau de Jade est un hôtel de luxe situé en Bretagne. Il souhaite améliorer son service en proposant à ses clients de réserver des chambres grâce à un assistant virtuel. L’application permettra d’enregistrer dans une base de données les réservations et de les analyser sur Cognos Analytics.

     

    Pages de l’assistant virtuel suceptibles de changement : 
    https://www.facebook.com/PalaisDelOiseaudeJade
    https://ibm-poj-4-quiet-tiger.eu-de.mybluemix.net/b

     

     schema2020-2

  2. Watson Assistant

     

    • Créer un service Watson Assistant nommé palais de l oiseau de jade Watson Assistant . Le nom du service est reconnu dans le manifest pour le déploiement avec IBM Cloud.
    • Accéder à l’outil de lancement.

     

    watson

     

     

     

    skill

     

    •  Explorer l’interface. J’ai utilisé les propositions de “Content Catalog” pour élaborer cet assistant virtuel.
    •  Essayer l’assistant virtuel. On pourra tester des phrases avec des mots clefs comme blague, bonjour, contact, horaire et réservation.

     

    try

     

    •  Modifier le message obtenu lorsqu’on demande les horaires.

     

    watsona3

     

    • réaliser un nouvel assistant
    • relier l’assistant au skill créé précédement

    assistantv2-2

     

  3. Test de l'API Watson Assistant

    • Récuperer l’url et les identifiants de l’API Watson Assistant.

     assistantv2-1-1

     

    • Utiliser une application REST comme Postman  pour tester votre assistant virtuel avec les identifiants fournis.

     

    Méthode POST 
    Dans Authorization ->Basic auth-> apikey et {votre api key}
    Dans Body -> raw -JSON-> {"input":{"text":"coucou"}}
    • Obtenir un id de session avec une url de la forme (ajouter la variable http version)
      https://api.eu-gb.assistant.watson.cloud.ibm.com/instances/{instance id}/v2/assistants/{assistant id}/sessions?version=2019-02-28
    • Envoyer un message coucou avec le numero de la session obtenue et une url de la forme
      https://api.eu-gb.assistant.watson.cloud.ibm.com/instances/{instance id}/v2/assistants/{assistant id}/sessions/{idesssion}/message?version=2019-02-28
    • L’assistant virtuel répond “Bonjour, en quoi puis-je vous aider ?”.

     

    postmanv2-1

     

     

  4. MySQL sur IBM Cloud

    • Créer un service compose for Mysql sur IBM Cloud
    •  Se connecter grâce à Adminer à l’instance Mysql avec vos identifiants et l’adresse de l’instance
    • Créer la base de données poj

     

     maria3

     

     

  5. MariaDB sur AWS

    • Créer un service RDS MariaDB gratuit accessible publiquement en se dirigeant vers la console AWS

     

    rds-2

    rds2

     

    • Modifier le groupe de sécurité pour autoriser l’adresse ip 0.0.0.0/0 à se connecter. (On autorise toutes les adresses, à éviter !)

     

    maria2

     

    • Se connecter grâce à Adminer à l’instance MariaDB avec vos identifiants RDS et l’adresse du point de terminaison.
    • Créer la base de données poj

     

     maria3

     

     

  6. Application NodeJS en local

     

    • Installer NodeJS
    var watsonApiKey = "";
    //s'arreter avant v2
    var watsonURL ="https://api.eu-gb.assistant.watson.cloud.ibm.com/instances/ba3e7f27-4e83-4906-86eb";
    //assistant id
    var watsonID='';

    var myRDSHost ="database-2.eu-west-3.rds.amazonaws.com";
    var myRDSLogin ="admin";
    var myRDSPassword ="";
    • Dans le répertoire de l’application, executer npm install pour déployer les paquets nécessaires
    • Executer npm start pour lancer l’application.

     

    • Une fois déployée, accéder à l’application depuis http://localhost:3000 . Vous obtenez l’interface suivante et pouvez tester l’assistant virtuel. Inspecter la console du serveur NodeJS et la console du navigateur.

     

    watsonhtml

  7. Application NodeJS sur IBM Cloud

      

    deploy

    • Créer l’API Key et déployer.

     

    deploiement1

    • Observer le déploiement dans la chaine de distribution

    chatbot4

     

    • Echec sur le déploiement de l’application, c’est normal.

     

    deploy2

     

    • Modifier les variables suivantes du fichier app.js dans le dépot GIT de la chaine d’outils. 
    var watsonApiKey = "";
    //s'arreter avant v2
    var watsonURL ="https://api.eu-gb.assistant.watson.cloud.ibm.com/instances/ba3e7f27-4e83-4906-86eb";
    //assistant id
    var watsonID='';

    var myRDSHost ="database-2.eu-west-3.rds.amazonaws.com";
    var myRDSLogin ="admin";
    var myRDSPassword ="";

     

    git

     

    • L’application se redeploie automatiquement au commit de Git.

     

    • Une fois déployée, accéder à l’application depuis votre tableau de bord.
    • Vous obtenez l’interface suivante et pouvez tester l’assistant virtuel.

     

    watsonhtml

     

     

    Optionnel – Déploiement en ligne de commande

     

    Si l’étape précédente ne fonctionne pas ou pour découvrir un autre moyen de déployer son application.

    • Télécharger le code depuis le dépôt Github et le décompresser.
    • Modifier app.js avec les identifiants.
    • Installer le client IBM Cloud
    • Ouvrir une invite de commande (CMD sous windows) et se connecter à IBM Cloud.
    bx login
    • En se placant dans le répertoire contenant le code, executer :
    bx cf push

     

    deploiement7

     

     

     

     Debogage – Journaux de l’app

    • Installer le client IBM Cloud
    • Ouvrir une invite de commande (CMD sous windows) et se connecter à IBM Cloud.
    bx login
    • Afficher les logs de l’application en remplacant le nom de celle-ci dans la ligne de commande. On observe dans le cadre l’affichage de la réponse de Watson Assistant.
      • vert pour nodejs
      • jaune pour l’assistant
    bx cf logs palais-de-l-oiseau-de-jade-nodejs --recent

     

    assistantconsole

     

  8. Application NodeJS sur AWS

     

    • Réaliser une instance Ligthsail NodeJS sur AWS

     light

     

    • Connectez vous à l’instance en ssh

     

    nodejs

     

     

    var watsonApiKey = "";
    //s'arreter avant v2
    var watsonURL ="https://api.eu-gb.assistant.watson.cloud.ibm.com/instances/ba3e7f27-4e83-4906-86eb";
    //assistant id
    var watsonID='';

    var myRDSHost ="database-2.eu-west-3.rds.amazonaws.com";
    var myRDSLogin ="admin";
    var myRDSPassword ="";
    • Dans le répertoire /opt/bitnami/apps/myapp/htdocs, déployer les fichiers app.js, index.html et package.json (on pourra faire des copier- coller, sudo nano monfichier  ou  sudo rm monfichier)

      

    • Dans le repertoire de l’application, executer sudo npm install pour déployer les paquets nécessaires
    • Executer npm start pour lancer l’application.

     

    • Une fois déployée, accéder à l’application depuis son IP. Vous obtenez l’interface suivante et pouvez tester l’assistant virtuel. Inspecter la console du serveur NodeJS et la console du navigateur.

     

    watsonhtml

  9. Cognos Analytics

    Remarque : Il est possible de relier une base de données hébergées sur IBM Cloud directement à Cognos Analytics. Nous ne pouvons pas créer d’instance Mysql avec le compte d’essai. de même, il n’est pas possible de se connecter à une base de données depuis Cognos avec la version d’essai de celui ci.

    cognos2

     

    • Utiliser l’assistant Cognos en anglais pour générer les graphiques suivants :
      • Le nombre de chambres réservées par catégorie
      • Le nombre de réservation par date
      • Le nombre de chambres réservées depuis 1 an par date

    cognos

  10. Facebook Messenger

     Uniquement pour une application avec un domaine, dans notre cas IBM Cloud.

    • Réaliser une page Facebook dédiée à l’assistant virtuel.
    • Se connecter à Facebook Developer.
    • Ajouter une application.
    • Ajouter le service Messenger.

    messenger1

     

    • Générer un token en selectionant votre page, accepter les autorisations.

     

    messenger2-1

     

    • Ajouter ce token à myFacebookToken dans app.js en accédant à votre dépôt Git (menu devOps). Le token est dépendant de la page Facebook.
    •  Sauvegarder le fichier. L’application se redéploit automatiquement à la sauvegarde. On pourra vérifier le bon fonctionnement dans la pipeline de distribution. Pour AWS, relancer l’application.
    • Configurer les webhooks, ajouter l’url de votre application  avec /webhook à la fin et cocher les cases correspondantes.

     

     

     

    messenger3

     

    messenger4

     

    Si l’url webhook ne fonctione pas :

    • Vérifier que l’application nodeJs fonctionne.
    • Vérifier que /webhook est bien renseigné à la fin de l’url.
    • Vérifier que le token Facebook est enregistré dans app.js et que l’application est redeployée.

     

    webhookerreur

    webhookerreur

     

     

     

    •  Ajouter une image pour l’application.
    •  Ajouter une URL de politique de confidentialité pour publier votre application . https://frebourg.es/cgu

     

    messenger9

     

     

     

     

    • L’assistant virtuel répond au message. On pourra vérifier les logs (section debogage).
      • bleu pour messenger
      • vert pour nodejs
      • jaune pour l’assistant

     

    facbookconsole

     

     

     

     

  11. Demandes de l'hôtel

    Problème dans le processus de réservation

    Le Palais de l’Oiseau de Jade est obligé de rappeler les clients pour obtenir le nombre de jours de chaque réservation. Améliorer le processus de réservation.

    • Améliorer l’application en prenant en compte le nombre de jours de réservation.
      • Modifier le dialogue de ‘assistant virtuel pour prendre en compte cette nouvelle variable.
      • Ajouter une variable de contexte à la reconnaissance de la variable numérique.
      • Tester l’assistant virtuel.
      • Modifier le fichier app.js de l’application NodeJs depuis le dépôt Git.
      • Réaliser une réservation via Messenger.
      • Vérifier l’ajout du nombre de jours dans la base de données.

    Exemple d’ajout d’une variable de context, en cliquant sur JSON editor, insérer le code encadré au bon endroit dans le dialogue.nbj1

     

    • Proposer des options comme Assurance annulation, Pack Romantique , Bouquet de fleurs, Accès au SPA, Massage, Repas Gourmand ou Location de vélos.
      • Ajouter une entité des différentes options dans l’assistant virtuel.
      • Modifier le dialogue pour prendre en compte cette entité en ajoutant une variable de context.
      • Tester l’assistant virtuel.
      • Ajouter une colonne option dans la table reservation de la base de données (Mariadb).
      • Modifier le fichier app.js pour inserer l’option choisie.
      • Réaliser une réservation via Messenger.
      • Vérifier l’ajout de l’option dans la base de données.

     

    Une application réaliste

    Pour être à la hauteur des exigences de ses clients, le Palais de l’Oiseau de Jade doit proposer un Chat-bot performant. Il semble nécessaire d’afficher le prix des options et de la réservation du client avant la confirmation. L’application doit également récupérer les coordonnées des clients, voir les enregistrer pour une future réservation avec un numéro que l’on devra leur fournir.

    • Ajouter un prix par option.
      • Modifier la base de données en ajoutant une nouvelle table option avec les prix.
    • CREATE TABLE IF NOT EXISTS `options` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `libelle` varchar(50) DEFAULT NULL,
      `prix` double NOT NULL,
      PRIMARY KEY (`id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

      INSERT INTO `options` (`id`, `libelle`, `prix`) VALUES
      (1, 'Assurance annulation', 50),
      (2, 'Pack Romantique', 60),
      (3, 'Bouquet de fleurs', 15),
      (4, 'Massage', 90),
      (5, 'Repas Gourmand', 150),
      (6, 'Location de vélos', 40);alter table reservation add column id_options int;
      • Modifier l’application pour renvoyer le prix correspondant à l’assistant virtuel. 
      • Modifier l’assistant virtuel pour afficher le prix.
      • Insérer l’option choisi dans la table réservation.
    • Donner le prix de la réservation au client et enregistrer celui-ci dans la base.
      • Modifer la base de données en ajoutant une table de liaison qui enregistre les options choisies pour une réservation.
      • Modifier l’application pour calculer le prix total.
      • Modifier l’assistant virtuel pour afficher le prix.
      • Insérer les options en fonction de la réservation dans la base depuis l’application après la confirmation.

     

    • Permettre l’ajout des prix des chambres selon la catégorie.

     

  12. What else ?

    Ces tutoriels peuvent vous intéresser :
    https://developer.ibm.com/recipes/author/l-frebourg/

    https://frebourg.es/#cloud

     

Join The Discussion