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.
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
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.
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.
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).
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
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
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 !
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.
Cadre en informatique dans une multinationale je suis un touche-à-tout passionné de nouvelles technologies.
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.
Merci je vais regarder ça !
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 🙂