Créer des actions pour l'Assistant Google à l'aide du SDK Actions (niveau 2)

La plate-forme pour les développeurs dédiée à l'Assistant Google vous permet de créer des logiciels visant à étendre les fonctionnalités de cet assistant personnel virtuel sur plus d'un milliard d'appareils (enceintes intelligentes, téléphones, voitures, téléviseurs, casques audio, etc.). Cet assistant simplifie la vie des utilisateurs qui lui demandent d'accomplir des tâches (par exemple, faire des courses, réserver un chauffeur, etc.). En tant que développeur, vous pouvez utiliser cette plate-forme pour créer et gérer facilement des échanges agréables et efficaces entre les utilisateurs et votre propre service de traitement tiers.

Cet atelier de programmation aborde les concepts de niveau intermédiaire du développement avec l'Assistant Google et s'appuie sur l'action créée dans l'atelier de niveau 1. Nous vous recommandons vivement de suivre l'atelier de niveau 1 avant de commencer celui-ci.

L'action que vous créez dans cet atelier de programmation prédit aux utilisateurs leur avenir concernant leur quête dans les terres légendaires de Gryffinberg, en fonction de l'aide qu'ils choisissent.

Objectifs de l'atelier

Dans cet atelier de programmation, vous allez créer une action conversationnelle sophistiquée qui intègre les fonctions suivantes :

  • Collecter des données auprès de l'utilisateur et modifier les invites de conversation en fonction de la valeur
  • Répondre à des questions complémentaires pour poursuivre la conversation
  • Créer une boucle de jeu pour que l'utilisateur puisse interagir à nouveau avec l'action après avoir obtenu une prédiction

Avant de commencer à créer cette action, vous pouvez interagir avec l'action en direct sur votre appareil avec l'Assistant Google intégré en disant Hey Google, parle à Fate and Fortune. La conversation par défaut via cette action pour un utilisateur connu ressemble à l'interaction suivante :

dd6f5c61296b8b50.png

eba043f546aa8c51.png

Points abordés

  • Utiliser des emplacements pour collecter des données auprès de l'utilisateur
  • Utiliser des conditions pour ajouter une logique à une scène
  • Ajouter une boucle de jeu
  • Ajouter un déroulement de conversation

Prérequis

Les prérequis pour cet atelier de programmation sont les suivants :

  • Un IDE/éditeur de texte de votre choix
  • Un terminal pour exécuter des commandes d'interface système, avec NodeJS, npm et git installés
  • Un navigateur Web tel que Google Chrome
  • Un projet Actions de niveau 1 terminé

Une connaissance de JavaScript (ES6) est vivement recommandée, mais non obligatoire, pour comprendre le code de traitement utilisé dans cet atelier de programmation.

(Facultatif) Obtenir l'exemple de code

Si vous le souhaitez, vous pouvez récupérer le code complet du projet de niveau 1 depuis ce dépôt GitHub ou celui du projet de niveau 2 via ce dépôt GitHub.

Dans le premier atelier de programmation, vous avez créé une action conversationnelle simple avec une seule scène, Start.

Dans celui-ci, vous allez enrichir la conversation associée à votre action. Dans les sections suivantes, vous allez configurer l'action pour effectuer les opérations suivantes :

  • Passer à une nouvelle scène Fortune lorsque l'utilisateur souhaite connaître son avenir
  • Demander à l'utilisateur l'aide qu'il souhaite choisir pour sa quête
  • Proposer une prédiction personnalisée en fonction du choix de l'utilisateur

Ajouter une transition vers Fortune et créer cette scène

Dans cette section, vous allez exécuter les opérations suivantes :

  • Supprimer l'invite existante de la scène Start, qui répond à l'utilisateur et met fin à la conversation
  • Définir la transition entre la scène Start et la scène Fortune
  • Créer la scène Fortune

Pour modifier la scène Start et ajouter une transition vers la scène Fortune, procédez comme suit :

  1. Dans votre éditeur de texte, ouvrez votre projet Actions à partir de l'atelier de programmation de niveau 1.
  2. Ouvrez le fichier custom/scenes/Start.yaml.
  3. Mettez à jour le handler de l'intent yes pour que votre code corresponde à l'extrait ci-dessous :

Start.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: I understand, stranger. Best of luck on your quest! Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Enregistrez le fichier.

Pour créer une scène appelée Fortune, procédez comme suit :

  1. Dans le terminal, accédez au projet Actions de l'atelier de programmation de niveau 1.
  2. Créez un fichier nommé Fortune.yaml dans le répertoire scenes :
touch custom/scenes/Fortune.yaml

Vous modifierez ce fichier dans la section suivante.

Définir une logique de conversation pour la scène Fortune

Dans cet atelier de programmation, vous allez configurer votre scène Fortune pour demander à l'utilisateur What do you choose to help you on your quest, a dragon, a translator, or a compass? (Que choisissez-vous pour vous aider dans votre quête : un dragon, un traducteur ou une boussole ?). Vous pouvez utiliser la fonctionnalité appelée remplissage d'emplacements pour recueillir les informations nécessaires auprès de l'utilisateur avant de continuer.

Votre action propose des prédictions pour trois aides : un dragon, un traducteur et une boussole. Pour configurer votre action afin d'identifier ces trois options dans les entrées utilisateur, vous devez créer un type.

Vous pouvez vous servir des types à l'étape de remplissage d'emplacements d'une scène pour définir les informations que vous souhaitez recueillir auprès de l'utilisateur. Lorsque le moteur NLU détecte qu'un emplacement correspond à une entrée utilisateur, il l'extrait en tant que paramètre saisi afin que vous puissiez exécuter la logique dans une scène.

Créer le type available_options

Dans cette section, vous allez créer un type appelé available_options, qui spécifie les trois options que les utilisateurs peuvent choisir (dragon, traducteur et boussole) en réponse à l'invite. Vous allez également définir quelques synonymes pour ces options, au cas où l'utilisateur prononcerait un mot similaire. Dans une section ultérieure, vous ajouterez le type available_options à un emplacement pour indiquer que vous voulez obtenir le choix de l'utilisateur.

Pour créer le type available_options, procédez comme suit :

  1. Créez un répertoire appelé types :
mkdir custom/types
  1. Créez un fichier nommé available_options.yaml dans le répertoire types :
touch custom/types/available_options.yaml
  1. Ouvrez custom/types/available_options.yaml dans votre éditeur de texte.

Les types sont configurés en tant que paires clé/valeur, où la clé correspond au nom du type et les valeurs sont des synonymes de cette clé. Lorsque vous définissez la clé, celle-ci est automatiquement ajoutée en tant que valeur. Avec le SDK Actions, vous représentez les clés en tant que entities et les valeurs en tant que synonyms.

Pour ajouter les trois options que l'utilisateur peut choisir, procédez comme suit :

  1. Ajoutez les éléments entities et synonyms suivants dans le fichier available_options.yaml :

available_options.yaml

synonym:
  entities:
    dragon:
      synonyms:
      - dragon
      - hydra
      - lizard
    translator:
      synonyms:
      - translator
      - communicator
      - machine
      - decoder
      - translate
    compass:
      synonyms:
      - compass
      - direction
      - guide
      - navigator
  matchType: EXACT_MATCH
  1. Enregistrez le fichier.

Votre action comprend désormais que les options available_options sont un dragon, un traducteur et une boussole, et elle reconnaît quelques synonymes.

Configurer le remplissage d'emplacements

Vous devez ensuite configurer le remplissage d'emplacements dans la scène Fortune. Pour configurer la logique de remplissage d'emplacements, procédez comme suit :

  1. Ouvrez custom/scenes/Fortune.yaml dans votre éditeur de texte.
  2. Ajoutez les données slots suivantes au fichier Fortune.yaml :

Fortune.yaml

slots:
- commitBehavior:
    writeSessionParam: chosenOptions
  name: chosenOptions
  promptSettings:
    initialPrompt:
      staticPrompt:
        candidates:
        - promptResponse:
            firstSimple:
              variants:
              - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass?
            suggestions:
            - title: Dragon
            - title: Translator
            - title: Compass
  required: true
  type:
    name: available_options
  1. Enregistrez le fichier.

Vous venez d'ajouter le type available_options à l'emplacement, qui indique à votre action les informations que vous devez collecter auprès de l'utilisateur (son choix d'aide) avant de continuer. Vous avez également configuré une invite dans l'emplacement, qui est ajoutée à la file d'attente d'invites lorsque l'utilisateur atteint l'étape de remplissage d'emplacements de la scène.

Lorsque vous nommez l'emplacement chosenOptions, le champ writeSessionsParam est mis à jour avec le même nom ($session.params.chosenOptions). Vous pouvez accéder à ce paramètre à l'aide de ce nom dans l'invite et dans votre traitement via la bibliothèque cliente.

Ajouter une condition

Maintenant que vous avez ajouté un emplacement nécessitant l'aide choisie par l'utilisateur, vous pouvez ajouter une condition pour vérifier que les données concernant l'emplacement ont été obtenues avant que l'utilisateur puisse poursuivre la conversation.

Dans cette section, vous allez ajouter la condition scene.slots.status == "FINAL", qui vérifie que le remplissage d'emplacements est terminé. Une fois que tous les emplacements ont été remplis, la condition ajoute une invite (You picked $session.params.chosenOptions.) à la file d'attente d'invites.

Pour configurer la condition scene.slots.status == "FINAL", procédez comme suit :

  1. Ouvrez custom/scenes/Fortune.yaml dans votre éditeur de texte.
  2. Ajoutez les données conditionalEvents au début du fichier Fortune.yaml :

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: You picked $session.params.chosenOptions.
  1. Enregistrez le fichier.

Tester votre action dans le simulateur

À ce stade, vous avez défini les options que l'utilisateur devrait sélectionner pour remplir l'emplacement. Après avoir obtenu ces informations auprès de l'utilisateur, votre action devrait fournir une invite en rapport avec l'option qu'il a choisie.

Pour tester votre action, procédez comme suit :

  1. Dans le terminal, exécutez la commande suivante :
gactions deploy preview

Le résultat devrait ressembler à ceci :

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copiez l'URL fournie et collez-la dans un navigateur.
  2. Saisissez Talk to my test app ou cliquez dessus dans le champ Input (Entrée), puis appuyez sur Entrée.
  3. Saisissez Yes dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui).

a899d45c542668f6.png

  1. Saisissez ou dites dragon, ou cliquez sur ce mot. Vous devriez obtenir l'invite You picked dragon(Vous avez choisi le dragon).

Dans la section suivante, vous allez personnaliser les invites pour chaque aide que l'utilisateur peut sélectionner.

Personnaliser les invites à l'aide de conditions

Dans cette section, vous allez ajouter des conditions pour chaque option que l'utilisateur peut choisir, ainsi qu'une invite personnalisée pour chaque condition.

Personnaliser la prédiction pour dragon

Pour mettre à jour la condition et personnaliser l'invite qui se déclenche lorsqu'un utilisateur opte pour le dragon, procédez comme suit :

  1. Ouvrez custom/scenes/Fortune.yaml dans votre éditeur de texte.
  2. Remplacez les données conditionalEvents par l'extrait de code suivant dans le fichier Fortune.yaml :

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  1. Enregistrez le fichier.

Désormais, lorsqu'un utilisateur dit dragon ou un synonyme, votre action fournit une prédiction basée sur ce choix. Vous allez maintenant personnaliser les deux options restantes.

Personnaliser les prédictions pour translator et compass

Pour ajouter les conditions et personnaliser les invites lorsqu'un utilisateur dit translator (traducteur) ou compass (boussole), procédez comme suit :

  1. Dans le fichier custom/scenes/Fortune.yaml, ajoutez les deux autres conditions sous la condition dragon :

Fortune.yaml

- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  1. Enregistrez le fichier.

Tester votre action dans le simulateur

À ce stade, votre action devrait proposer à l'utilisateur une prédiction personnalisée en fonction de son choix.

Pour tester votre action, procédez comme suit :

  1. Dans le terminal, exécutez la commande suivante :
gactions deploy preview

Le résultat devrait ressembler à ceci :

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copiez l'URL fournie et collez-la dans un navigateur.
  2. Saisissez Talk to my test app dans le champ Input (Entrée), puis appuyez sur Entrée.
  3. Saisissez "Yes" (Oui) dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui).
  4. Saisissez ou dites Translator, ou cliquez sur ce mot.

29e17f950bd0dd71.png

Vous devriez recevoir la bonne prédiction pour l'option "translator" (traducteur).

Dans cette section, vous allez configurer votre action afin que l'utilisateur puisse sélectionner une autre option et entendre une prédiction différente après avoir effectué son choix. Cette alternative est basée sur le même principe que le message Do you want to play again? (Voulez-vous rejouer ?) à la fin d'un jeu. Pour créer cette boucle, vous pouvez réutiliser les intents yes et no créés précédemment, puis les ajouter à une nouvelle scène appelée Again.

Créer une scène Again

Dans cette section, vous allez créer une scène Again et ajouter une invite demandant à l'utilisateur s'il souhaite choisir une autre option.

Pour créer et configurer la scène Again, procédez comme suit :

  1. Créez un fichier nommé Again.yaml dans le répertoire scenes :
touch custom/scenes/Again.yaml
  1. Ouvrez custom/scenes/Again.yaml dans votre éditeur de texte.
  2. Ajoutez les données onEnter suivantes à Again.yaml :

Again.yaml

onEnter:
  staticPrompt:
    candidates:
    - promptResponse:
        firstSimple:
          variants:
          - speech: That is what I see for you. Would you like to choose a different option and explore another future?
        suggestions:
        - title: "Yes"
        - title: "No"
  1. Enregistrez le fichier.

Ajouter une transition de la scène Fortune à la scène Again

Une fois que l'utilisateur a reçu sa prédiction, la conversation doit passer à la nouvelle scène Again.

Pour ajouter une transition de la scène Fortune à la scène Again, procédez comme suit :

  1. Ouvrez custom/scenes/Fortune.yaml dans votre éditeur de texte.
  2. Ajoutez transitionToScene: Again à chaque condition, comme illustré dans l'extrait de code suivant :

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The people of Gryffinberg will be awestruck by the beauty and
                power of the ancient dragon. Much to your dismay, the townspeople
                fall into dispute over who will receive the honor of riding the dragon
                first. You return home from your quest without everlasting glory or
                a dragon.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: With the help of the translator, the rival factions in Gryffinberg
                are finally able to communicate with each other and resolve their
                disputes. You will complete your quest to restore peace in the town.
                The translator will be used on many other journeys across the
                earth. After its work is done, it retires honorably to a premier location
                in the Gryffinberg History Museum.
  transitionToScene: Again
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: The compass will help you find the mystical and ancient Library
                of Gryffinberg. Among its infinite stacks of dusty books, you find
                one entitled "Wisdom of the Ages". By the time you've read the 50,000-page
                tome, the townspeople have forgotten their problems. You will write
                a second edition of "Wisdom of the Ages", but have limited commercial
                success.
  transitionToScene: Again
  1. Enregistrez le fichier.

Tester votre action dans le simulateur

À ce stade, votre action doit fournir l'invite suivante après que l'utilisateur a reçu sa prédiction : "That is what I see for you. Would you like to choose a different option and explore another future?" (C'est ce que je prédis pour vous. Voulez-vous choisir une autre option et découvrir un autre avenir ?).

Pour tester votre action, procédez comme suit :

  1. Dans le terminal, exécutez la commande suivante :
gactions deploy preview

Le résultat devrait ressembler à ceci :

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copiez l'URL fournie et collez-la dans un navigateur.
  2. Saisissez Talk to my test app dans le champ Input (Entrée), puis appuyez sur Entrée.
  3. Saisissez Yes dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui).
  4. Saisissez ou dites dragon, ou cliquez sur ce mot.

b299e9fed9aedb69.png

Vous devriez recevoir la prédiction correspondant au dragon et l'invite Again.

Ajouter des intents et passer à la scène Again

Dans cette section, vous allez ajouter les intents yes et no à la scène Again pour que votre action comprenne si l'utilisateur souhaite choisir une nouvelle option ou non. Vous allez également ajouter les transitions appropriées pour les intents yes et no. L'intent yes permet de passer à la scène Fortune, tandis que l'intent no permet de passer à la scène système End conversation.

Pour ajouter des intents et passer à la scène Again, procédez comme suit :

  1. Ouvrez custom/scenes/Again.yaml dans votre éditeur de texte.
  2. Ajoutez les données intentEvents au début du fichier Again.yaml, avant OnEnter :

Again.yaml

intentEvents:
- intent: "yes"
  transitionToScene: Fortune
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: It pleases me that you are satisfied with your choice. Best
                of luck on your quest. Farewell.
  intent: "no"
  transitionToScene: actions.scene.END_CONVERSATION
  1. Enregistrez le fichier.

Tester votre action dans le simulateur

Votre action comprend désormais si l'utilisateur souhaite choisir une nouvelle option ou mettre fin à la conversation.

Pour tester l'intent yes, procédez comme suit :

  1. Dans le terminal, exécutez la commande suivante :
gactions deploy preview

Le résultat devrait ressembler à ceci :

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copiez l'URL fournie et collez-la dans un navigateur.
  2. Saisissez Talk to my test app dans le champ Input (Entrée), puis appuyez sur Entrée.
  3. Saisissez Yes dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui).
  4. Saisissez ou prononcez l'une des options, ou cliquez dessus.
  5. Saisissez Yes dans le champ "Input" (Entrée), puis appuyez sur Entrée.

5d0690332efe2e29.png

Vous devriez obtenir l'invite What do you choose to help you on your quest, a dragon, a translator, or a compass? (Que choisissez-vous pour vous aider dans votre quête : un dragon, un traducteur ou une boussole ?).

Pour tester l'intent no, procédez comme suit :

  1. Saisissez ou prononcez l'une des options, ou cliquez dessus.
  2. Tapez No dans le champ de saisie, puis appuyez sur Entrée.

Vous devriez obtenir l'invite End conversation : It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell. (Je suis ravi que vous soyez satisfait de votre choix. Bonne chance pour votre quête ! Adieu.).

Vous venez de créer l'interaction principale que la plupart des utilisateurs connaîtront dans votre action. Toutefois, l'utilisateur peut répondre à l'invite de la scène Fortune, What do you choose to help you on your quest, a dragon, a translator, or a compass? (Que choisissez-vous pour vous aider dans votre quête : un dragon, un traducteur ou une boussole ?), par un choix qui ne correspond à aucune des options proposées.

Dans cette section, vous allez configurer votre action pour qu'elle comprenne lorsqu'un utilisateur prononce les mots magic (magie), money (argent), horse (cheval) ou phone (téléphone), et qu'elle invite à nouveau l'utilisateur à choisir l'une des trois options initiales. Pour configurer cette logique, vous devez créer un type qui contient ces autres choix et un intent other_option qui est ciblé lorsqu'un utilisateur prononce l'une de ces options. Vous devez aussi annoter les expressions d'entraînement de l'intent other_option pour identifier et extraire les paramètres d'intent.

Lorsque le moteur NLU détecte qu'un paramètre correspond à une entrée utilisateur, il extrait la valeur en tant que paramètre saisi afin que vous puissiez exécuter la logique dans une scène. Dans cet atelier de programmation, vous allez configurer votre action de façon à extraire l'aide sélectionnée par l'utilisateur et à faire référence à ce choix dans une invite.

Créer le type unavailable_options

Vous pouvez à présent créer le type unavailable_options contenant différentes options pour que votre action puisse identifier ces données dans l'entrée utilisateur.

Pour créer le type unavailable_options, procédez comme suit :

  1. Créez un fichier nommé unavailable_options.yaml dans le répertoire types :
touch custom/types/unavailable_options.yaml
  1. Ouvrez custom/types/unavailable_options.yaml dans votre éditeur de texte.
  2. Ajoutez les données synonyms suivantes au fichier unavailable_options.yaml :

unavailable_options.yaml

synonym:
  entities:
    money:
      synonyms:
      - money
      - cash
      - gold
    horse:
      synonyms:
      - horse
      - stallion
      - steed
    magic:
      synonyms:
      - magic
      - enchanted
      - spells
    phone:
      synonyms:
      - phone
      - cell
      - apps
  matchType: EXACT_MATCH
  1. Enregistrez le fichier.

Créer l'intent other_option

Créez ensuite un intent appelé other_option et ajoutez des expressions d'entraînement qui incluent les options du type unavailable_options. Cet intent est ciblé lorsque l'utilisateur choisit une option contenue dans le type unavailable_options.

Pour créer et configurer l'intent other_option, procédez comme suit :

  1. Créez un fichier nommé other_option.yaml dans le répertoire intents :
touch custom/intents/other_option.yaml
  1. Ouvrez custom/intents/other_option.yaml dans votre éditeur de texte.
  2. Ajoutez les données parameters et trainingPhrases suivantes au fichier other_option.yaml :

other_option.yaml

parameters:
- name: chosenUnavailableOption
  type:
    name: unavailable_options
trainingPhrases:
- I want to use ($chosenUnavailableOption 'spells' auto=true)
- I really really want to use a ($chosenUnavailableOption 'phone' auto=true)
- ($chosenUnavailableOption 'magic' auto=true)!
- ($chosenUnavailableOption 'cash' auto=true)
- I want to ride a ($chosenUnavailableOption 'horse' auto=true)

Ici, vous annotez manuellement les expressions d'entraînement avec les options non disponibles que vous avez spécifiées dans la section précédente. Le paramètre d'intent chosenUnavailableOption vous permet d'extraire le nom de l'option et d'utiliser cette option dans une invite, comme vous le verrez dans la section suivante.

  1. Enregistrez le fichier.

Ajouter l'intent other_option à la scène Fortune

Vous disposez à présent d'un intent, other_option, qui peut gérer le fait que l'utilisateur a choisi une option autre que celles proposées au départ. Dans cette section, vous allez ajouter l'intent other_option à la scène Fortune. Vous allez utiliser le paramètre d'intent pour personnaliser l'invite en fonction de l'entrée utilisateur.

Pour ajouter l'intent other_option à la scène Fortune, procédez comme suit :

  1. Ouvrez custom/scenes/Fortune.yaml dans votre éditeur de texte.
  2. Ajoutez les données intentEvents suivantes entre les données conditionalEvents et slots :

Fortune.yaml

intentEvents:
- handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech:  I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey.
  intent: other_option
  1. Enregistrez le fichier.

L'expression $intent.params.chosenUnavailableOption fait référence à l'objet du paramètre d'intent et $intent.params.chosenUnavailableOption.original désigne la valeur de cet objet. La propriété original correspond à l'entrée brute spécifiée par l'utilisateur.

Lorsqu'un utilisateur prononce une option figurant dans le type unavailable_options durant la scène Fortune, l'intent other_option est ciblé et ajoute une invite à la file d'attente d'invites. Comme aucune transition n'est spécifiée, la boucle d'exécution de la scène se poursuit en réévaluant l'étape des conditions. L'emplacement chosenOptions ajoute alors son invite à la file d'attente d'invites, qui est transmise à l'utilisateur.

Tester votre action dans le simulateur

Votre action répond à présent de manière appropriée lorsqu'un utilisateur choisit l'une des options répertoriées dans le type unavailable_options et spécifie l'aide qu'il souhaite obtenir. Elle redemande ensuite à l'utilisateur de choisir l'une des options initiales (un dragon, un traducteur ou une boussole).

Pour tester votre action dans le simulateur, procédez comme suit :

  1. Dans le terminal, exécutez la commande suivante :
gactions deploy preview

Le résultat devrait ressembler à ceci :

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copiez l'URL fournie et collez-la dans un navigateur.
  2. Saisissez Talk to my test app dans le champ Input (Entrée), puis appuyez sur Entrée.
  3. Saisissez Yes dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui).
  4. Saisissez magic dans le champ Input (Entrée), puis appuyez sur Entrée.

3a42c33eca435f32.png

Vous avez peut-être remarqué que l'invite n'est pas correcte lorsque l'utilisateur choisit magic (magie) en raison de l'article "a" (une) placé devant ce nom. Vous allez résoudre ce problème dans les sections suivantes.

Ajouter le gestionnaire unavailable_options

Pour placer l'article "a" (un/une) avant les choix appropriés du type unavailable_options, vous pouvez configurer un gestionnaire d'événements dans votre logique de traitement pour vérifier si l'option choisie par l'utilisateur nécessite cet article. Commencez par configurer votre action pour appeler le gestionnaire à partir de la scène Fortune.

Pour ajouter le gestionnaire unavailable_options à la scène Fortune, procédez comme suit :

  1. Ouvrez custom/scenes/Fortune.yaml dans votre éditeur de texte.
  2. Mettez à jour le fichier Fortune.yaml avec les données intentEvents suivantes :

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. Enregistrez le fichier.

Mettre à jour et déployer le traitement

Maintenant que vous avez configuré votre action pour appeler le gestionnaire d'événements unavailable_options, vous pouvez le mettre à jour dans votre traitement et le déployer.

Pour mettre à jour le traitement, procédez comme suit :

  1. Ouvrez webhooks/ActionsOnGoogleFulfillment/index.js dans votre éditeur de texte.
  2. Ajoutez le code suivant à index.js sous le gestionnaire greeting :

index.js

app.handle('unavailable_options', conv => {
  const option = conv.intent.params.chosenUnavailableOption.original;
  const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
  let message = 'I have seen the future and ';
  if(optionsNeedA.has(optionKey)){
    message = message + 'a ';
  }
  message = message + `${option} will not aid you on your journey. `;
  conv.add(message);
});
  1. Ajoutez le code suivant sous const app = conversation({debug:true}); :

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. Enregistrez le fichier.

Comprendre le code

Le gestionnaire unavailable_options effectue les opérations suivantes :

  • Il récupère les données option de l'objet conv et attribue option à la propriété original, qui est l'entrée brute de l'utilisateur.
  • Il attribue optionKey à la propriété resolved, qui est la clé du type unavailable_options.
  • Il vérifie si optionKey est l'une des options nécessitant l'article "a" (un/une). Si c'est le cas, le message est créé avec cet article.
  • Il ajoute le message via conv.add(message).

Mettre à jour les gestionnaires

Pour autoriser l'action à utiliser unavailable_options, ajoutez le gestionnaire unavailable_options à webhooks/ActionsOnGoogleFulfillment.yaml.

  1. Ajoutez le nom du gestionnaire unavailable_options à ActionsOnGoogleFulfillment.yaml :

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. Enregistrez le fichier.

Tester votre action dans le simulateur

Votre action doit à présent adapter l'invite selon que l'option choisie par l'utilisateur dans le type unavailable_options nécessite l'article "a" (un/une) ou non.

Pour tester votre action, procédez comme suit :

  1. Dans le terminal, exécutez la commande suivante :
gactions deploy preview

Le résultat devrait ressembler à ceci :

✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
  1. Copiez l'URL fournie et collez-la dans un navigateur.
  2. Saisissez Talk to my test app ou cliquez dessus dans le champ Input (Entrée), puis appuyez sur Entrée.
  3. Saisissez Yes dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui).
  4. Saisissez magic dans le champ Input (Entrée), puis appuyez sur Entrée. Saisissez ensuite horse dans le champ Input (Entrée), puis appuyez sur Entrée.

54ee24c5c3c56e.png

Votre action doit ajouter l'article "a" (un) avant "horse" (cheval), tout en créant l'invite sans l'article "a" (une) pour "magic" (magie).

Le SDK Actions est compatible avec l'IDE Web Actions Builder, intégré à la console Actions. Vous pouvez transférer votre système de fichiers local vers le brouillon de votre action dans la console à l'aide de la commande gactions push. La console Actions fournit une représentation visuelle de la configuration de votre action. Visualiser votre action peut être utile pendant le développement et n'a aucune incidence sur l'action proposée pour le test.

Pour transférer votre projet Actions et l'afficher dans la console Actions, procédez comme suit :

  1. Dans le terminal, exécutez la commande suivante pour transférer votre projet vers la console Actions :
gactions push

Le résultat devrait ressembler à ceci :

✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
  1. Copiez l'URL fournie et collez-la dans un navigateur.
  2. Dans la Console Actions, cliquez sur Develop (Développer) dans la barre de navigation supérieure.
  3. Cliquez sur la flèche du menu déroulant à côté de Scenes (Scènes), puis sur Start (Démarrer). Vous devriez voir une représentation visuelle de la scène Start de votre action, comme le montre cette capture d'écran :

cae526c647f8d40f.png

Félicitations !

Vous disposez désormais des compétences intermédiaires nécessaires pour créer des actions pour l'Assistant Google avec le SDK Actions.

Sujets abordés

  • Développer des actions conversationnelles à l'aide de la bibliothèque de traitement Node.js
  • Utiliser des emplacements pour collecter des données auprès de l'utilisateur
  • Utiliser des conditions pour ajouter une logique à la scène
  • Ajouter une boucle de jeu
  • Ajouter un déroulement de conversation

Autres ressources de formation

Pour en savoir plus sur la création d'actions pour l'Assistant Google, consultez les ressources suivantes :

Suivez-nous sur Twitter (@ActionsOnGoogle) pour connaître les dernières informations, et envoyez un tweet à #AoGDevs pour montrer votre création.

Effacer votre projet (recommandé)

Pour éviter que des frais vous soient facturés, supprimez les projets que vous ne comptez pas utiliser. Pour appliquer cette recommandation dans cet atelier de programmation, procédez comme suit :

  1. Suivez la procédure décrite dans la section Arrêter (supprimer) des projets pour supprimer le projet Cloud et ses ressources.
  1. Facultatif : suivez la procédure décrite dans la section Supprimer un projet pour supprimer immédiatement votre projet de la console Actions. Si vous ne le faites pas, votre projet sera supprimé automatiquement après un délai de 30 jours environ.

Enquête

Avant de partir, veuillez répondre à une courte enquête sur votre expérience.