Google Assistant : Dialogue avec Actions SDK

Notre dernier article Google Home : Initiation à Actions SDK nous a permis de développer une application très rudimentaire. Dans cet article, nous allons voir comment dialoguer avec Google Home, c’est à dire qu’il retienne nos précédentes réponses à des questions.

Le projet que nous développerons dans cet article

Dans cet article, nous allons développer une application avec trois intéractions :

  1. Réveil : Il s’agira simplement d’indiquer que nous souhaitons parler avec notre application. Nous dirons « OK Google, parle avec Monsieur Animaux » et l’assistant répondra : « Très bien, de quel animal souhaitez vous avoir plus d’informations ? »
  2. Enregistrement de l’animal : L’utilisateur répondra alors le nom d’un animal, des réponses telles que « Le lièvre », « Parle moi du porc », … Ce à quoi l’application répondra, « Très bien, souhaitez vous connaître le nom de la femelle, ou bien le nom du petit du lièvre ? ». Si l’application ne connaît pas l’animal, elle répondra simplement : « Désolé, je n’ai pas compris votre demande. Peut-être que je ne connais pas encore cet animal. »
  3. Envoi de l’information : L’utilisateur répondra alors « Je souhaite connaître son cri », ou bien alors « le petit », et l’application répondra : « Le petit du lièvre est le levraut ».

Ainsi, notre application devra se souvenir du nom de l’animal indiqué lors de l’étape 2 pour fournir l’information concernant cet animal à l’étape 3.

Bien entendu, cette interface est contre-productive d’un point de vue UX, il serait bien plus intéressant pour l’utilisateur de répondre à une simple question direct du genre « Quel est le petit du lièvre ? », mais notre volonté ici est uniquement de voir comment dialoguer, pas comment développer l’application avec la meilleure UX.

Actions SDK

Une fois que vous avez installé le client gactions, créer un nouveau répertoire que vous nommerez MisterAnimals. Dans ce répertoire, créez un répertoire que vous nommerez gactions, puis rendez-vous dans ce répertoire via votre terminal :

 mkdir MisterAnimals && cd MisterAnimals

Une fois que ceci est fait, nous pouvons initialiser notre application :

 gactions init

Nous allons désormais éditer le fichier actions.json pour y inclure notre invocation de réveil de l’application. Ce qui nous donne le contenu suivant :
Pour plus d’informations sur le contenu de ce fichier, veuillez-vous reporter au précédent article : Google Home : Initiation à Actions SDK

Et voilà, c’est tout ce que nous aurons à faire à propos du SDK. Nous nous occuperons de deployer l’application après avoir déployé le Webservice.

Webservice (bêta)

Mise en place

Pour commencer, créez un projet dans la console Firebase que vous nommerez MisterAnimals.

Toujours dans notre répertoire MisterAnimals, nous allons initialiser un nouveau conteneur Firebase.

firebase init functions

Lorsque cela vous est demandé, choisissez votre projet MisterAnimals, et choisissez d’installer les dépendances.

Une fois que ceci est fait, nous allons installer le package actions-on-google.

cd functions && npm install actions-on-google --save && cd ..

Réponse au réveil

Dans l’article précédent, nous nous contentions de répondre sans attendre de réponse. Cela se fait en utilisant la méthode ActionsSdkApp.tell(). Cette fois-ci, nous allons attendre de l’utilisateur qu’il nous réponde quelque chose (le nom de l’animal). Du coup, pour se faire, nous allons utiliser ActionsSdkApp.ask(). Du coup, notre fichier index.js devient :

On voit tout de suite le premier problème de ce script. Il va se contenter de répondre « Très bien, de quel animal souhaitez vous avoir plus d’informations ? » en attendant la réponse de l’utilisateur, et ce en boucle. Il faut donc spécifier que nous souhaitons envoyer cette réponse uniquement lors d’une invocation de réveil, en gros, uniquement en réponse à l’action nommée MAIN.

Pour se faire, nous allons ajouter une fonction mainIntent() contenant notre code, et associer cette méthode à l’Intent MAIN qui est un Intent standard de la bibliothèque actions-on-google. Ainsi notre code devient :

Réponse à l’annonce de l’animal

Nous avons vu l’intent MAIN, maintenant, il existe un second intent standard : TEXT. Cela correspond justement à la réponse que donnera l’utilisateur après un ActionsSdkApp.ask(). Du coup, nous allons l’utiliser pour répondre une fois que l’utilisateur aura donné le nom de l’animal. Notre fichier index.js devient donc :

La création d’une fonction n’est là que pour préparer la suite, et pouvoir différencier le traitement de réponse entre la réponse « animal », et la réponse « type d’information sur l’animal ».

Maintenant, nous allons pouvoir tester cette première version de l’application.

Test (bêta)

Deploiement Firebase

Nous allons commencer par déployer notre fonction animals sur Firebase :

firebase deploy --only functions

Mise à jour de actions.json

Ensuite, maintenant que le déploiement nous a fourni l’url de notre fonction, nous allons pouvoir mettre à jour actions.js

Très bien, maintenant, il ne nous reste plus qu’à déployer notre application

gactions update --project misteranimals-6d663

Test de l’application

Nous pouvons désormais tester notre application dans le simulateur :

Google Home test

Webservice

Nous allons désormais mettre à jour notre Webservice afin de développer l’application finale.

Ajout des animaux

Notre application nous répond tout le temps par une erreur. Nous allons désormais ajouter les animaux, afin qu’elle puisse différencier les animaux qu’elle connaît des animaux qu’elle ne connaît pas.

Une fois les animaux ajoutés, il ne nous restera plus qu’à voir si l’un des animaux enregistrés apparaît dans la réponse de l’utilisateur.

Maintenant, nous allons devoir faire trois choses :

  1. Sauvegarder l’objet animal correspondant à la requête de l’utilisateur
  2. Différencier les réponse de type « animal » et les réponses de types « informations sur l’animal »
  3. Répondre à la demande « informations sur l’animal »

C’est parti

Sauvegarder une donnée

Pour sauvegarder des données, nous allons nous servir de Firebase une nouvelle fois. Pour se faire, nous allons ajouter la bibliothèque firebase à notre fonction :

cd functions && npm install firebase --save && cd ..

Ensuite, nous allons ajouter la configuration Firebase. Pour se faire, ajoutez les lignes suivantes à la suite des imports dans votre fichier index.js :

Note importante : pour la suite de ce tutoriel, j’ai indiqué que la base de données firebase était publique en écriture et lecture. Il s’agit ici d’un tutoriel qui ne sert que de test, et qui ne contiendra jamais d’informations sensibles. Prenez garde à bien spécifier vos règles de base de données en fonction de votre usage !

Maintenant, il ne nous reste plus qu’à écrire la donnée dans notre base Firebase. Mais avant cela, il va falloir être capable d’identifier la conversation. Pour se faire, nous allons utiliser la méthode ActionsSdkApp.getConversationId() qui nous renvoit un identifiant unique pour la conversation.

Nous allons sauvegarder cette donnée dans un noeud conversations-data, et ainsi, le code de la méthode respondToAnimal devient :

Différencier les réponses de l’utilisateur

Pour différencier les réponses de l’utilisateur, cela va également être assez facile. Dans la méthode textIntent(), nous allons nous contenter de voir si un noeud existe dans conversations-data avec l’identifiant de la conversation.

Répondre à la demande d’informations

Dernière étape, répondre à la demande d’informations sur l’animal. Pour se faire, nous allons distinguer plusieurs demandes possibles pour les informations :

Maintenant, nous allons développer les deux méthodes getChild() et getFemale() qui vont retourner sous forme de string la réponse aux demandes respectives d’informations sur les animaux.

Il nous reste une ultime étape, à savoir développer la méthode respondToInformation() :

Nous y voilà. À cette étape, votre fichier index.js devrait être semblable à celui-ci :

Il ne vous reste plus qu’à déployer le script :

 firebase deploy --only functions

Et vous pouvez maintenant à nouveau tester votre application.

Google Home Simulator

Conclusion

Ainsi, nous venons de voir comment dialoguer avec Google Home. Dans un prochain article, nous ajouterons une information, le cri de l’animal. Cela nous permettra de voir comment jouer avec les sons produits par Google Home, à savoir manipuler sa façon de parler, ou bien jouer des sons.

En attendant, le code de la version de l’application telle qu’elle est à la fin de cet article est disponible au tag v0.1 du dépôt GitHub MisterAnimals.

Twitter
Vous avez aimé cet article ? N’hésitez pas à me suivre sur Twitter pour être informé des prochains.
Développeur Android freelance depuis Avril 2016, je partage sur mon blog aussi bien que dans des meetups.

Laisser un commentaire

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