Google Assistant : Initiation à Actions SDK

Dans le précédent article, nous avons vu comment développer une application de A à Z pour Google Home avec API.AI. Dans cet article, nous allons faire la même chose, mais en utilisant le Actions SDK.

Le projet que nous développerons dans cet article

Dans le précédent article, j’ai souhaité montré un exemple de véritable application potentielle, très simple. Dans cet article, le but est simplement de donner une initiation à Actions SDK. Le projet que nous allons développer sera donc très simple, et consistera simplement à nous donner le nom de la femelle de certains animaux.

Webservice (initialisation)

Pour développer notre application, nous aurons besoin d’un webservice pour traiter les requêtes effectuées via l’application. Du coup, même si nous n’allons rien mettre dedans, nous allons initialiser un conteneur Firebase afin d’avoir l’url de ce dernier :

npm install -g firebase-tools
firebase login
firebase init functions

Il vous faudra choisir d’ajouter les dépendances npm lorsque cela vous sera demandé.

Maintenant, modifiez le fichier functions/index.js en décommantant les trois lignes du helloWorld

Maintenant, déployez le tout :

firebase deploy --only functions

La commande vous renverra l’url de votre fonction, à savoir une url du type : https://us-central1-femelles-e5335.cloudfunctions.net/helloWorld. Retenez bien la première partie de cette url (la partie avant helloWorld)

Actions SDK

Répondre à une invocation

Notre premier but va être de répondre à une invocation. Grosso modo, l’utilisateur va dire « Ok Google, quelle est la femelle du lièvre » et notre programme va répondre « La femelle du lièvre est la hase. ».

Installation de client Actions for Google

Avant tout, nous allons récupérer le client Actions for Google en le téléchargeant ici.

Une fois téléchargé, déplacez le fichier dans un répertoire que vous ajouterez à votre variable d’environnement PATH.

Initialisation du projet

cd FemellesAnimaux
gactions init

Ces deux commandes vont créer un premier fichier nommé action.json, avec le format suivant :

Conversations

Dans la partie conversations, nous allons ajouter le ou les webservices qui seront en charge de traiter les requêtes effectuées sur l’application. Pour le moment, mettez l’url d’un conteneur firebase dans la partie conversations :

Le suffixe femelles dans l’url désigne une fonction node.js que nous développerons par la suite.

Actions

Les actions définissent ce que doit faire l’assistant (appeler un webservice, …). Ici, nous souhaitons simplement appeler le webservice de la conversation femelles lors d’une invocation. Nous allons donc le spécifier dans la partie fulfillment :

Nous en avons profité pour supprimer la description.

Intents

Comme vu dans le précédent article, les Intents définissent les intentions de l’utilisateur. Une intention est déjà définie dans actions.json, nous allons donc la compléter. Il est conseillé d’inclure une dizaine de queryPatterns, c’est donc ce que nous allons faire :

Voilà, notre fichier actions.json est maintenant complété.

Création du projet sur la console Actions on Google

Nous allons maintenant créer notre projet sur la console Actions on Google.

Cliquez sur Add/import project, et sélectionnez votre projet Firebase correspondant. Puis cliquez sur Import Project. Dans la nouvelle fenêtre, cliquez sur Actions SDK.

Il ne vous reste plus qu’à retourner dans le terminal (sans fermer le navigateur), dans le répertoire contenant votre fichier actions.json, et exécuter la commande suivante :

gactions update --project femelles-e5335

Retournez dans le navigateur, et maintenant, on vous invite à sélectionner les détails de votre application. Voici les données que j’ai renseignées :

  • Nom de l’application : Monsieur Femelles
  • Prononciation : monsieur femelle
  • You can use this app to : connaître le nom des femelles des animaux
  • Assistant Voice : Mâle 1
  • Short Descritpion : Monsieur Femelles vous permet de connaître le nom des femelles des animaux
  • Long Description : Monsieur Femelles vous permet de connaître le nom des femelles des animaux
  • Simple invocation : Quelle est la femelle du lièvre ?

Vous pouvez vous arrêter là et cliquer sur le bouton Save en bas de la page.

Webservice (version bêta)

Maintenant que nous avons effectué la partie Google Home, nous allons nous attarder sur le webservice. Nous allons uniquement développer le cas d’échec dans un premier temps afin de pouvoir tester rapidement notre application.

Dans un premier temps, nous allons installer le package actions-on-google.

Pour se faire, retournez dans le dossier racine de votre projet Firebase, et exécutez les commandes suivantes :

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

Maintenant, nous allons nous contenter de faire un Webservice qui répond : « Il y a sûrement une femelle pour cet animal, mais je ne connais pas son nom. ». Pour se faire, nous allons modifier le code de notre fichier index.js comme suit :

Ne pas oublier l’import avec le require à la ligne 2

Enfin, il ne nous reste plus qu’à déployer ce que nous venons de faire

firebase deploy --only functions

Test de la version bêta

Nous pouvons maintenant tester notre version bêta. Retournez sur la console Actions on Google

Cliquez sur votre projet, puis sur Simulator dans le menu de gauche.

Il ne vous restera plus qu’à tester votre application en écrivant directement vos invocations dans le champs de saisie en bas à gauche.

Google Home Simulator

Alors oui, ce n’est pas très intuitif, mais l’impossibilité de publier des applications en français, ni même de les tester sur vos équipements français, rend pour le moment la chose compliquée lorsque l’on développe des applications dans la langue de Molière. À la date d’écriture de cet article, nous ne ferons pas mieux niveau expérience utilisateur.

Prise en compte de l’invocation de l’utilisateur

Certes, notre application fonctionne, elle répond correctement, mais elle ne remplit pas l’objectif que l’on s’est fixé au départ, à savoir donner le nom de la femelle d’un animal.

Pour récupérer ce qu’a dit l’utilisateur, nous allons nous contenter d’utiliser app.getRawInput().

En ajoutant une Regexp pour détecter l’animal dont l’utilisateur souhaite connaître la femelle, nous arrivons au code suivant (le but de cet article n’étant pas de se pencher sur Node.js, je ne détaillerai pas le code plus que ça) :

Nous pouvons maintenant tester notre application avec le bon webservice.

Conclusion

Il y a beaucoup de choses qui manquent dans cet article, comme par exemple les dialogues entre l’application et l’utilisateur qui seront l’objet du prochain article sur Google Assistant. En effet, il peut être frustrant de constater que « Quelle est la femelle du lièvre ? » fonctionne, de même que « Donne moi la femelle du porc », mais que « Quelle est la femelle du porc ? », ou bien « Donne moi la femelle du lièvre » ne fonctionnent pas.

Cela est du au fait que pour simplifier cet article, je ne me suis concentré que sur l’appel de réveil de l’application, qui ne comprend que des phrases strictes, sans possibilité de les adapter.

Bref, il y a encore beaucoup à dire sur le développement d’applications pour Google Home, mais cet article est déjà bien assez long comme ça, chaque chose en son temps !

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.

2 réponses sur “Google Assistant : Initiation à Actions SDK”

  1. Bonjour, merci pour ces excellents articles.
    Je trouve le fonctionnement des actions particulier :
    Lorsque l’on pose une question, par exemple « quelle est le femelle du loup ? », google assistant nous demande d’abord si on veut utiliser l’application, une fois que l’on répond oui, il nous donne la réponse.
    Y a t il un moyen de s’affranchir de cette validation ? J’aimerais dire « quelle est le femelle du loup ? » et que google assistant me réponde de manière transparente que c’est la louve.
    Est-ce possible ?

    1. Tout dépend, en anglais, il est possible de s’affranchir de cette vérification tant que l’invocation correspond bien au pattern du MAIN renseigné dans le action package, et dans la liste des invocations de la description de l’application.
      Vous ne pourrez par contre pas vous passez de « Voici la version test de … », qui ne disparaîtra qu’à la publication.
      Par contre, les pattern d’invocation sont stricts et limités, donc difficilement adaptables à la liste de tous les animaux

Laisser un commentaire

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