Développez votre première application NodeJS avec le SDK Actions on Google

Aujourd’hui je vous propose de voir la suite de notre série consacrée à Action on Google. Dans ce billet nous apprendrons à construire une application NodeJs en utilisant le SDK Actions on Google. Nous verrons ensuite comment la déployer et la tester.

Nous ne nous attarderons pas trop longtemps sur la mise en place des outils permettant de développer en Node. Si vous n’êtes pas à l’aise avec cette technologie et que vous souhaitez en apprendre un peu plus, rendez-vous à cet article où nous avons abordé plus spécifiquement ce sujet.

 

Pourquoi utiliser ce SDK ?

Avant toutes choses, il est légitime de se poser la question pourquoi ? Quels sont les intérêts d’une telle solution qui justifie l’investissement que cela peut représenter?

La réponse tien en un mot, flexibilité. En effet, si vous choisissez cette option pour construire votre chatbot vous serez beaucoup moins limité. En effet, vous pourrez simplement intégrer de nouvelles commandes et/ou de nouveaux produits non pris en charge nativement. Vous pouvez très simplement passer outre de nombreuses limitations dont une dont nous avons déjà parlé, qui se situe au niveau de la gestion des retours d’informations.

Plus concrètement, à l’heure actuelle, vous ne devriez pas avoir de soucis à intégrer le déclenchement d’objet connecté. Par exemple, l’intégration de lampes pilotables via du 433Mhz à Google assistant est assez simple grâce à Home-assistant. Cependant, si vous avez un thermomètre bricolé, accessible via une API, il n’y a pas de solution simple pour construire une commande du type « Ok Google, qu’elle est la température de mon salon ? ». Vous pouvez toujours jouer avec le déclenchement du cast et la synthèse vocale. Cependant, cette solution n’est pas très fiable…

Avec la solution présentée aujourd’hui, ce type de cas est facile à couvrir. En effet, vous serez en mesure de gérer aussi bien des commandes complexes que des retours complexes. La seule limite viendra de votre code 😉

 

Pré-requis

Avant d’entrer dans le vif du sujet, vous devez créer votre projet Actions on Google. Pour ce faire, rendez-vous ici. En cas de problème, vous pouvez vous inspirer du premier article de ce dossier.

Cependant beaucoup de choses ont changé depuis qu’il a été écrit. En effet, la plateforme évolue très vite et embarque très régulièrement de nouvelles fonctionnalités afin de pouvoir profiter des dernières nouveautés des assistants. Ainsi, on trouve depuis peu des outils beaucoup plus performants pour ce qui est de l’affichage par exemple. Ainsi, vous avez dès à présent la possibilité de tirer pleinement parti des capacités de Google assistant et des futurs produits combinant le contrôle vocal et l’affichage comme  par exemple le Lenovo smart display.

 

Préparation de votre environnement de développement

Pour la suite de cet article, il est conseillé d’utiliser un IDE. Comme dans l’article consacrée à NodeJs et Express, j’utiliserai Visual studio code dans les exemples ci-dessous.

Initialisation du projet

Créer un dossier qui contiendra tous les fichiers de votre projet. Téléchargez le cli gaction disponible ici. Ce dernier vous permettra d’initialiser et de déployer vos applications Actions on Google. Ensuite, Si vous êtes sous Linux ou MacOs exécutez la commande suivante.

[shell]chmod +x gaction[/shell]

Maintenant, nous allons initialiser notre projet. Pour ce faire, lancez

[shell]./gactions init[/shell]

Ceci aura  pour effet de créer un fichier action.json qui définira toutes les caractéristiques de votre future application.

Préparation de votre application NodeJs

Assurez-vous que vous avez bien NodeJs d’installer sur votre machine. Si ce n’est pas le cas vous trouverez ce qu’il vous faut ici ou référez-vous à notre article NodeJs et Express  qui traite du sujet.

Une fois que vous êtes certain que tout est bon du côté de Node, initialisez votre application en exécutant la commande

[shell]npm init[/shell]

Ensuite, nous allons télécharger toutes les dépendances que nous utiliserons dans notre projet. Pour ce faire, exécutez la commande

[shell]npm install actions-on-google body-parser express –save[/shell]

Ngrok pour faciliter vos tests

Le dernier outil à installer est ngrok. Il est optionnelle mais peut vous permettre d’économiser beaucoup de temps. En effet, notre application devra obligatoirement être accessible via internet pour que les services cloud de Google qui animent Google Assistant puissent interagir avec votre création. On voit de suite la perte de temps que des déploiements à répétitions pourraient entraîner… Pour éviter ceci, cet outil nous propose d’ouvrir sur internet n’importe quelle service qui tourne sur votre machine.

Téléchargez ngrok sur le site https://ngrok.com/ et suivez les instructions présentes sur le site. Une fois installé, lancez ngrok grâce à la commande suivante

[shell]./ngrok http PORT[/shell]

Dans la suite de l’article, nous utiliserons le port 3000. Vous pouvez donc dès maintenant utiliser ngrok avec cette valeur. Une fois lancé, vous devriez avoir à votre écran une liste d’adresses du type xxxx.ngrok.io. Conservez celle qui commence par https, nous en aurons besoin plus tard.

Attention, cette méthode ouvre une partie de votre machine sur le net. Cela peut donc la rendre vulnérable à certaines attaques. Il est donc nécessaire d’utiliser cet outil avec un minimum de précautions.

Créez votre application

Maintenant que tout est prêt, nous pouvons passer au vif du sujet, la conception et le développement de l’application. Il est impossible de tout voir dans un seul article, je vous propose donc aujourd’hui de rester sur un cas simple, le but étant d’avoir un message « d’accueil » et une réponse définit à une sollicitation particulière.

Contrairement à beaucoup d’articles et à la documentation, nous allons voir comment créer une application que vous pourrez héberger n’importe où. En effet, on rencontre très régulièrement des exemples utilisant firebase function qui est une solution très intéressante. Cependant, en version gratuite, elle empêche les appels sortants qui ne sont pas destinés à utiliser des services Google.

Configurez vos actions

Dans un premier temps, nous allons nous intéresser à la partie description de l’application. En effet, vous devez complétez le fichier action.json en fonction de votre application et des interactions que vous souhaitez mettre en place afin que google assistant soit capable de déclencher les bonnes actions que nous implémenterons plus tard dans l’article.

Template action.json

Template action.json – Voir un exemple sur Github

Comme vous pouvez le voir ci-dessus, vous avez trois éléments au premier niveau :

Actions

C’est ici que vous devrez définir les actions. Pour ce faire, plusieurs éléments vous sont demandés. Certains assez descriptifs (description, nom), d’autres permettront de relier votre code à votre application Actions on Google (fulfillment) et enfin vous donneront l’occasion de décrire comment se comporte l’action (intent).

Attardons nous sur ce dernier pour bien les comprendre. Vous avez ici plusieurs éléments :

  • Le nom name qui est très important dans certains cas car c’est grâce à lui que nous ferrons le lien entre ce fichier et votre code.
  • Le trigger qui permet de décrire comment l’action se déclenchera. Ici vous pouvez mettre des mots, des phrases voir des patterns plus complexes

Dans notre cas, nous n’utiliserons que actionssdk et nous n’aurons qu’une seule action à compléter dans ce fichier.

Conversation

Ce bloc permet de configurer des éléments techniques. Ainsi, c’est ici que vous devez renseigner l’adresse de votre application Node (celle que vous a donné ngrok précédemment par exemple).

Attention, chaque fois que vous relancez ngrok, une adresse différente sera générée, vous serez donc obligé de mettre à jour cette partie du fichier.

Locale

Il s’agit le la langue pour laquelle ce fichier est conçu. Si vous souhaitez déployer plusieurs langues, vous devrez copier le fichier action.json et l’adapter à chaque fois.

Mise à jour de la plateforme

Chaque modification de ce fichier doit être publiée pour que votre application fonctionne correctement. Pour ce faire, nous allons utiliser le gactions cli en lançant la commande

[shell]./gactions update –action_package action.json –project PROJECT_ID[/shell]

N’oubliez pas de remplacer PROJECT_ID par la valeur que vous trouverez dans vos paramètres de projet

 

Paramètre projet Actions on Google

La première fois que vous lancerez cette commande, un code vous sera demandé. Pour l’obtenir rien de plus simple. Cliquez sur le lien qui sera affiché à ce moment et connectez-vous avec votre compte google. Un code apparaîtra, copiez/collez le. A ce moment, un fichier creds.data devrait apparaître. Veillez bien à l’ajouter à votre .gitignore si vous publiez votre code car il doit rester secret.

 

Application NodeJs

Il ne nous reste plus qu’à travailler autour de notre application NodeJs. Elle sera assez simple dans notre cas. Notre but sera d’avoir une application qui nous dit bonjour et qui répond à une requête. Tout ceci ne demande que quelques lignes de code très simple. Créez un fichier index.js et construisez-le en prenant exemple sur le code suivant

Exemple de code NodeJS - voir sur gitHub

Exemple de code NodeJS – voir sur gitHub

Dans un premier temps, ce code récupère les éléments dont vous aurez besoin avec des require. Vous avez ici express pour construire des API, body-parser pour travailler avec le body des requêtes http et actions-on-google pour tout ce qui concerne le sdk.

Ensuite, il initialise une constante nommée app dont nous allons ensuite définir des comportements en fonction de l’intent déclenché. Comme nous n’en avons déclaré qu’un seul dans le fichier action.json, nous n’avons que deux intent à gérer. MAIN qui est le point d’entrée et TEXT qui est, tout le reste.

C’est donc dans la fonction handleTextIntent que vous aurez le plus gros du travail si vous construisez une application complexe.

Enfin, la dernière ligne permet de lancer un serveur http sur le port 3000 pour faire tourner votre app.

 

Testez votre application

Maintenant vous pouvez lancer la commande

[shell]node index.js[/shell]

Ceci aura pour effet d’exécuter votre application sur le port 3000. Si vous ne l’avez pas encore fait, lancez ngrok et mettez à jour votre application grâce à gactions et à l’url que vous venez de générer.

Rendez-vous dans le simulateur de Actions on Google et comme par magie votre bot prend vie !

Simulateur Actions on Google

Simulateur Actions on Google

 

Déploiement

Vous l’aurez compris, ngrok dépanne bien mais n’est pas viable pour une solution durable. Pas de panique cependant il existe plein de services cloud assez simples pour héberger un application Node. Vous pouvez notamment regarder du côté d’openshift, aws, heroku ou encore du français clervercloud.

 

Conclusion

Nous avons vu aujourd’hui un cas très simple mais les possibilités offertes par ce type de solution sont très vastes. En effet, vous allez pouvoir déclencher des appels apis, développer des actions complexes, etc. Beaucoup de limitations qui peuvent être frustrantes dans Google Assistant se trouvent donc fortement réduites.

Cependant, si vous êtes un minimum critique, vous pouvez commencer à vous dire « Il est bien gentil mais pour faire une vrai conversation je vais devoir développer une sacrée machine à gaz ».

En effet, avec cette technique, le nombre de possibilités à gérer est assez important. Pour pallier à ce problème et revenir à quelque chose de plus raisonnable, il existe une méthode qui allie DialogFlow et ce SDK. Ceci permet de profiter de la puissance de déduction et d’entrainement de DialogFlow couplé à la flexibilité vu aujourd’hui.

Qui sais, si cet article vous a intéressé, nous l’aborderons peut-être dans la suite de ce dossier 😉

Bonne journée et à bientôt.

5 réponses

  1. pacific_boy dit :

    Article très très intéressant et je serais très intéressé de voir le fonctionnement avec DialogFlow et du code un peu plus complexe car j’ai actuellement deux API pour géré ma TV Samsung et mon home cinéma Yamaha. Ceci me permettrai donc de me passer d’iftt et d’avoir quelque chose de beaucoup plus souple !!

    Si tu as des liens brut sur lesquels tu te base je suis preneur pour avoir un premier aperçu.

    • Bonjour,
      Heureux que le sujet intéresse 🙂 Si tu souhaites utiliser la méthode exposée ici tu peux très simplement appeler une api en utilisant la méthode présentée dans cet article Votre première application nodeJs / express dans les différentes partie de la méthode handleInputText.

      Concernant le fonctionnement hybride dialogFlow/SDK je n’ai pas encore trop regardé mais il semble y avoir des limites quand à la porté des requêtes que tu peux faire avec un compte gratuit. Apparemment seul l’appel d’Apis liée à un service Google est possible. C’est à vérifier mais c’est ce que j’en ai compris pour le moment.

      Bonne journée.

  2. Damien BARONNET dit :

    Merci je vais regarder ça !

  3. François dit :

    Merci pour ce tuto très bien fait qui m’a permis de contrôler ma domotique sans devoir utiliser IFTTT ! 🙂
    As-tu des nouvelles concernant le fonctionnement hybride dialogFlow/SDK ?
    Car c’est clair que ne pas pouvoir exploiter la puissance du NLU avec Dialogflow en plus de Actions SDK serait bien dommage :/
    Je vais chercher un peu de mon côté 😉
    Merci encore

    • Bonjour,
      Je n’ai malheuresement pas encore eu l’occasion d’aller explorer plus en détail cet aspect de la solution cependant les premières recherche que j’avais effectué tendait à me faire croire que les possibilités était plutôt mince si vous ne voulez pas mettre la main à la poche. Cependant entre temps j’ai découvert ceci au Devoxx qui à l’air pas mal pour exploiter la puissance d’un système NLP https://voyages-sncf-technologies.github.io/tock/fr/
      En tous cas si vous avancez sur le sujet n’hésitez pas à nous faire par de vos découverte / projet!
      Bon courage à bientôt 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.