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 :
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èneFortune
- 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 :
- Dans votre éditeur de texte, ouvrez votre projet Actions à partir de l'atelier de programmation de niveau 1.
- Ouvrez le fichier
custom/scenes/Start.yaml
. - Mettez à jour le
handler
de l'intentyes
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
- Enregistrez le fichier.
Pour créer une scène appelée Fortune
, procédez comme suit :
- Dans le terminal, accédez au projet Actions de l'atelier de programmation de niveau 1.
- Créez un fichier nommé
Fortune.yaml
dans le répertoirescenes
:
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 :
- Créez un répertoire appelé
types
:
mkdir custom/types
- Créez un fichier nommé
available_options.yaml
dans le répertoiretypes
:
touch custom/types/available_options.yaml
- 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 :
- Ajoutez les éléments
entities
etsynonyms
suivants dans le fichieravailable_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
- 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 :
- Ouvrez
custom/scenes/Fortune.yaml
dans votre éditeur de texte. - Ajoutez les données
slots
suivantes au fichierFortune.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
- 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 :
- Ouvrez
custom/scenes/Fortune.yaml
dans votre éditeur de texte. - Ajoutez les données
conditionalEvents
au début du fichierFortune.yaml
:
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: You picked $session.params.chosenOptions.
- 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 :
- 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
- Copiez l'URL fournie et collez-la dans un navigateur.
- Saisissez
Talk to my test app
ou cliquez dessus dans le champ Input (Entrée), puis appuyez sur Entrée. - Saisissez
Yes
dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui).
- 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 :
- Ouvrez
custom/scenes/Fortune.yaml
dans votre éditeur de texte. - Remplacez les données
conditionalEvents
par l'extrait de code suivant dans le fichierFortune.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.
- 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 :
- Dans le fichier
custom/scenes/Fortune.yaml
, ajoutez les deux autres conditions sous la conditiondragon
:
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.
- 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 :
- 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
- Copiez l'URL fournie et collez-la dans un navigateur.
- Saisissez
Talk to my test app
dans le champ Input (Entrée), puis appuyez sur Entrée. - 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).
- Saisissez ou dites
Translator
, ou cliquez sur ce mot.
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 :
- Créez un fichier nommé
Again.yaml
dans le répertoirescenes
:
touch custom/scenes/Again.yaml
- Ouvrez
custom/scenes/Again.yaml
dans votre éditeur de texte. - 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"
- 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 :
- Ouvrez
custom/scenes/Fortune.yaml
dans votre éditeur de texte. - 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
- 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 :
- 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
- Copiez l'URL fournie et collez-la dans un navigateur.
- Saisissez
Talk to my test app
dans le champ Input (Entrée), puis appuyez sur Entrée. - Saisissez
Yes
dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui). - Saisissez ou dites
dragon
, ou cliquez sur ce mot.
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 :
- Ouvrez
custom/scenes/Again.yaml
dans votre éditeur de texte. - Ajoutez les données
intentEvents
au début du fichierAgain.yaml
, avantOnEnter
:
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
- 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 :
- 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
- Copiez l'URL fournie et collez-la dans un navigateur.
- Saisissez
Talk to my test app
dans le champ Input (Entrée), puis appuyez sur Entrée. - Saisissez
Yes
dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui). - Saisissez ou prononcez l'une des options, ou cliquez dessus.
- Saisissez
Yes
dans le champ "Input" (Entrée), puis appuyez sur Entrée.
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 :
- Saisissez ou prononcez l'une des options, ou cliquez dessus.
- 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 :
- Créez un fichier nommé
unavailable_options.yaml
dans le répertoiretypes
:
touch custom/types/unavailable_options.yaml
- Ouvrez
custom/types/unavailable_options.yaml
dans votre éditeur de texte. - Ajoutez les données
synonyms
suivantes au fichierunavailable_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
- 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 :
- Créez un fichier nommé
other_option.yaml
dans le répertoireintents
:
touch custom/intents/other_option.yaml
- Ouvrez
custom/intents/other_option.yaml
dans votre éditeur de texte. - Ajoutez les données
parameters
ettrainingPhrases
suivantes au fichierother_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.
- 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 :
- Ouvrez
custom/scenes/Fortune.yaml
dans votre éditeur de texte. - Ajoutez les données
intentEvents
suivantes entre les donnéesconditionalEvents
etslots
:
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
- 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 :
- 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
- Copiez l'URL fournie et collez-la dans un navigateur.
- Saisissez
Talk to my test app
dans le champ Input (Entrée), puis appuyez sur Entrée. - Saisissez
Yes
dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui). - Saisissez
magic
dans le champ Input (Entrée), puis appuyez sur Entrée.
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 :
- Ouvrez
custom/scenes/Fortune.yaml
dans votre éditeur de texte. - Mettez à jour le fichier
Fortune.yaml
avec les donnéesintentEvents
suivantes :
Fortune.yaml
intentEvents: - handler: webhookHandler: unavailable_options intent: other_option
- 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 :
- Ouvrez
webhooks/ActionsOnGoogleFulfillment/index.js
dans votre éditeur de texte. - Ajoutez le code suivant à
index.js
sous le gestionnairegreeting
:
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);
});
- Ajoutez le code suivant sous
const app = conversation({debug:true});
:
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- 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'objetconv
et attribueoption
à 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 typeunavailable_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
.
- Ajoutez le nom du gestionnaire
unavailable_options
àActionsOnGoogleFulfillment.yaml
:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- 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 :
- 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
- Copiez l'URL fournie et collez-la dans un navigateur.
- Saisissez
Talk to my test app
ou cliquez dessus dans le champ Input (Entrée), puis appuyez sur Entrée. - Saisissez
Yes
dans le champ Input (Entrée), puis appuyez sur Entrée. Vous pouvez également cliquer sur le chip de suggestion Yes (Oui). - Saisissez
magic
dans le champ Input (Entrée), puis appuyez sur Entrée. Saisissez ensuitehorse
dans le champ Input (Entrée), puis appuyez sur Entrée.
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 :
- 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.
- Copiez l'URL fournie et collez-la dans un navigateur.
- Dans la Console Actions, cliquez sur Develop (Développer) dans la barre de navigation supérieure.
- 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 :
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 :
- Documentation sur le développement d'actions pour l'Assistant Google
- Page GitHub Actions on Google, pour des exemples de code et des bibliothèques
- Communauté Reddit officielle des développeurs qui travaillent sur l'Assistant Google
- Consignes pour concevoir des conversations, afin de connaître les bonnes pratiques et les consignes sur les actions conversationnelles
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 :
- Suivez la procédure décrite dans la section Arrêter (supprimer) des projets pour supprimer le projet Cloud et ses ressources.
- 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.