1. Avant de commencer
Dans cet atelier de programmation, vous allez apprendre à créer un chatbot pour le secteur de la vente au détail avec Dialogflow CX, une plate-forme d'IA conversationnelle (CAIP) permettant de créer des UI conversationnelles. Dialogflow CX peut implémenter des agents virtuels, tels que des chatbots, des voicebots et des passerelles téléphoniques. Il est compatible avec plusieurs canaux dans plus de 50 langues différentes.
Cet atelier de programmation vous explique comment créer un chatbot pour un site Web de vente au détail. L'entreprise fictive pour laquelle nous créons le chatbot s'appelle G-Records. G-Records est un label de rock basé en Californie. Le label a signé quatre groupes de rock : Alice Googler, G's N' Roses, The Goo Fighters et The Google Dolls. G-Records vend des produits dérivés du groupe à tous les fans de rock.
À la fin de cet atelier de programmation, vous pourrez utiliser le chatbot pour commander des t-shirts ou de la musique, ou pour poser des questions sur votre commande.

Points abordés
Vous allez découvrir les avantages de Dialogflow CX par rapport à Dialogflow ES en pratiquant. Il inclut les concepts suivants :
- Créer un agent virtuel Dialogflow CX dans Google Cloud
- Découvrir comment créer des flux
- Découvrir comment créer des entités
- Découvrir comment créer des intentions
- Découvrez comment créer des pages et des pages de transition avec des gestionnaires d'état.
- Faire passer des pages avec des routes d'intent
- Découvrez comment faire passer les pages avec des paramètres et des routes de condition
- Découvrez comment renvoyer des réponses conditionnelles avec des fonctions système.
- Découvrir comment créer des messages de remplacement
- Découvrir comment utiliser le simulateur
- Découvrez comment créer des scénarios de test et une couverture de test.
La conception finale de l'agent Dialogflow CX se présentera comme suit :

Prérequis
- Pour créer un agent Dialogflow CX, vous devez disposer d'une identité Google ou d'une adresse Gmail.
- Accès à Google Cloud.
2. Configuration de l'environnement
Créer un projet Google Cloud
Étant donné que Dialogflow CX s'exécute dans Google Cloud, vous devez créer un projet Google Cloud. Un projet permet d'organiser toutes vos ressources Google Cloud. Il comprend un ensemble de collaborateurs, des API activées (et d'autres ressources), des outils de surveillance, des informations de facturation, ainsi que des services d'authentification et de contrôle des accès.
Lorsque vous créez un projet, vous devez saisir un nom de projet. Vous devrez l'associer à un compte de facturation et à une organisation existants.
Un compte de facturation sert à déterminer qui assume les frais pour un ensemble de ressources donné. Il peut être associé à un ou plusieurs projets. Les frais d'utilisation du projet sont imputés au compte de facturation associé. Dans la plupart des cas, vous configurez la facturation lorsque vous créez un projet. Pour en savoir plus, consultez la documentation sur Cloud Billing. Assurez-vous que la facturation est activée pour votre projet Cloud.

Activer l'API Dialogflow
Pour utiliser Dialogflow, vous devez activer l'API Dialogflow pour votre projet.
- Sélectionnez le projet pour lequel vous souhaitez activer l'API, puis cliquez sur Continuer.
- Réduisez le menu "API et services", puis cliquez sur Créer des identifiants.
- Cliquez sur Données d'application.
- Sélectionnez Non, je ne les utilise pas, car vous n'utilisez pas Kubernetes Engine, App Engine ni Cloud Functions pour le moment.
- Cliquez sur Terminé.

Créer un agent Dialogflow CX
Pour créer un agent Dialogflow CX, commencez par ouvrir la console Dialogflow CX :
- Choisissez le projet Google Cloud créé précédemment.
- Cliquez sur Create agent (Créer un agent).
Remplissez le formulaire pour les paramètres de base de l'agent :
- Vous pouvez choisir n'importe quel nom à afficher.
- Pour l'emplacement, choisissez us-central1.
- Sélectionnez le fuseau horaire de votre choix.
- Sélectionnez en-English comme langue par défaut.
Cliquez sur Créer.

Très bien, tout est prêt. Nous pouvons enfin commencer à modéliser notre agent virtuel.
3. Flux
Les boîtes de dialogue complexes impliquent souvent plusieurs sujets de conversation. Dans le cas du chatbot que nous créons pour G-Records afin de vendre des produits dérivés du groupe, nous aurons des dialogues sur le catalogue de produits, le paiement, l'état des commandes et les questions du service client. Nous pouvons diviser ces sujets de conversation en flux.

Les flux permettent aux équipes de travailler sur des chemins de conversation individuels. Une bonne pratique consiste à simplifier le flux pour qu'il s'adapte facilement à un écran et qu'il soit plus modulaire.
Les flux sont un nouveau concept dans Dialogflow CX. Dialogflow Essentials propose le concept de méga-agents, qui sont en quelque sorte similaires aux flux. Toutefois, vous utiliserez les flux beaucoup plus souvent.
Plus tard dans cet atelier, nous utiliserons des gestionnaires d'état qui peuvent mettre fin à un flux (pour revenir à un flux suivant ou précédent) ou à la session complète de l'agent.
Allons-y et créons des flux.
Créer des flux
- Dans Dialogflow CX, cliquez sur l'icône + > Créer un flux.
- Spécifiez le nom :
Catalog, puis appuyez sur Entrée.

Votre premier flux Catalog a été créé. Créez maintenant les autres flux :
Order ProcessMy OrderCustomer Care

Plus tard dans cet atelier, nous allons définir des gestionnaires d'état de page. Cela permettra de s'assurer que la visualisation ressemble à ceci :

Simulateur
Sur la droite de la console Dialogflow CX, vous pouvez tester l'agent virtuel à l'aide du simulateur intégré. Vous pouvez tester la conversation depuis le début ou à partir d'un flux spécifique.
- Cliquez sur le bouton Tester l'agent en haut à droite de l'écran.
- Dans le champ "Parler à un agent", saisissez
Hello. L'agent virtuel répondra par un message d'accueil par défaut : Bonjour ! En quoi puis-je vous être utile ?

Modifions ce texte de bienvenue par défaut.
Flux de démarrage par défaut
Commençons par créer une route d'intent qui se déclenchera lorsque vous saluerez l'agent virtuel.
- Dans la barre latérale de gauche Créer > Flux, cliquez sur Flux de démarrage par défaut, puis sélectionnez le nœud d'arborescence Démarrer.
La page Démarrer s'ouvre. La page de démarrage a été sélectionnée automatiquement dans la section de la barre latérale Build > Pages.
- Dans Démarrer > Routes, cliquez sur Intent d'accueil par défaut.
Un intent permet de catégoriser l'intention exprimée par un utilisateur final durant un tour de conversation. Dans Dialogflow CX, les intents peuvent faire partie d'un gestionnaire d'état pour acheminer la prochaine page active ou le prochain fulfillment.
- Supprimez toutes les entrées L'agent dit et ajoutez le texte suivant :
Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?
Pour simplifier la conversation, nous aurons également besoin de boutons de réponse rapide / chips de suggestion.
- Cliquez sur Add dialogue option > Custom payload (Ajouter une option de dialogue > Charge utile personnalisée), puis utilisez l'extrait de code ci-dessous.
- Utilisez l'extrait de code ci-dessous comme charge utile personnalisée, puis cliquez sur Enregistrer.
Pour en savoir plus sur les charges utiles personnalisées, consultez la documentation.
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}

- Testez l'intent de bienvenue dans le simulateur.
Vous vous demandez probablement pourquoi vous ne voyez aucun contenu enrichi. En effet, le contenu enrichi, comme les chips de suggestions, dépend d'une intégration. Les étapes suivantes nécessitent un compte de facturation, mais vous pouvez les ignorer si vous n'en avez pas.
- Dans la barre latérale de gauche, cliquez sur Gérer > Intégrations.
- Sélectionnez Dialogflow Messenger, puis cliquez sur Connecter.
- Dans le pop-up, cliquez sur Activer.

Une autre fenêtre pop-up s'affiche, cette fois avec le code JavaScript d'intégration que vous pouvez coller sur votre site Web pour y intégrer le composant Dialogflow Messenger. Comme nous n'avons pas encore de site Web, nous allons tester l'agent virtuel directement dans l'outil.

- Cliquez sur le lien Essayer.
- Cliquez sur l'icône du chatbot en bas à droite pour ouvrir la fenêtre de chat. Saisissez
Hellopour démarrer la conversation.

Pour le moment, lorsque vous cliquez sur les chips de suggestions, l'agent virtuel ne comprend pas ce que vous voulez dire. En effet, notre agent virtuel ne bascule pas encore entre les états. Nous pouvons le faire dans Dialogflow CX avec les pages. Continuons l'atelier. Nous allons d'abord créer des entités et des intentions.
4. Types d'entités
Les types d'entité permettent de contrôler la manière dont les données des entrées de l'utilisateur final sont extraites. Les types d'entités Dialogflow CX sont très semblables aux types d'entités Dialogflow ES. Dialogflow fournit des entités système prédéfinies correspondant à de nombreux types de données courants. Par exemple, il existe des entités système pour la mise en correspondance des dates, des heures, des couleurs, des adresses e-mail, etc. Vous pouvez également créer vos propres entités pour la mise en correspondance de données personnalisées.
Commençons par préparer toutes les entités personnalisées avant de pouvoir concevoir les pages d'un flux. Nous allons créer les entités suivantes :

Créer des entités
Créons une entité Artist.
- Cliquez sur Manage > Entity Types (Gérer > Types d'entités).
- Cliquez sur + Create (+ Créer).
- Nom à afficher :
Artist - Entités :
The Google Dolls(avec le synonyme :Google Dolls)The Goo Fighters(avec le synonyme :Goo Fighters)G's N' Roses(avec le synonyme :Gs and Roses)Alice Googler- Cliquez sur "Options avancées", puis cochez la case Correspondance partielle. (Si vous orthographiez mal le nom du groupe, il est possible qu'il soit quand même associé à la bonne entité.)
- Dans les options avancées, cochez également Masquer dans le journal. (Si vous orthographiez mal le nom du groupe, il sera corrigé dans le journal.)
- Cliquez sur Enregistrer.
Nous aurons également besoin d'une entité pour l'élément Merch :
- Cliquez sur Manage > Entity Types (Gérer > Types d'entités).
- Cliquez sur + Create (+ Créer).
- Nom à afficher :
Merch - Entités :
T-shirtLongsleeve(avec le synonyme :Longsleeve shirt)Tour MovieDigital Album(avec le synonyme :MP3 Album,MP3)CD(avec les synonymesDisc,Physical CD)
- Cliquez sur Enregistrer.
Nous aurons également besoin d'une entité pour l'album :
- Cliquez sur Manage > Entity Types (Gérer > Types d'entités).
- Cliquez sur + Create (+ Créer).
- Nom à afficher :
Album - Entités :
LiveGreatest Hits(avec le synonyme :Hits)
- Cliquez sur Enregistrer.
Nous aurons également besoin d'une entité pour les tailles de vêtements :
- Cliquez sur Manage > Entity Types (Gérer > Types d'entités).
- Cliquez sur + Create (+ Créer).
- Nom à afficher :
ShirtSize - Entités :
XS(avec le synonyme :Extra Small)S(avec le synonyme :Small)M(avec le synonyme :Medium)L(avec le synonyme :Large)XL(avec le synonyme :Extra Large)2XL(avec le synonyme :Extra Extra Large)3XL
- Cliquez sur Enregistrer.
Et une entité pour les numéros de commande, qui sont généralement composés de quatre caractères alphanumériques et de trois chiffres. (comme ABCD123)
- Cliquez sur Manage > Entity Types (Gérer > Types d'entités).
- Cliquez sur + Create (+ Créer).
- Nom à afficher :
OrderNumber - Entités d'expression régulière
- Entité : [A-Z]{4}[0-9]{3}
- Cliquez sur Enregistrer.
La configuration de votre entité doit ressembler à ce qui suit :
@Artiste : 
@Merch : 
@Album : 
@ShirtSize: 
@OrderNumber: 
Une fois les entités personnalisées préparées, nous pouvons préparer les intents. Poursuivons l'atelier.
5. Intents
Un intent permet de catégoriser l'intention exprimée par un utilisateur final durant un tour de conversation. Elles ont été considérablement simplifiées dans Dialogflow CX et ne constituent plus un élément de base pour le contrôle des conversations. Dialogflow CX n'utilise les intents que pour faire correspondre ce que disent les utilisateurs. Dans Dialogflow ES, vous deviez associer tous les éléments à un intent (paramètres, événements, traitement, etc.). Les intents dans Dialogflow CX ne contiennent que des expressions d'entraînement et sont donc réutilisables. Il ne contrôle plus la conversation. La création d'intents sera donc simple :
Les phrases d'entraînement dans les intentions peuvent utiliser des entités pour extraire des entrées "variables". C'est pourquoi il est recommandé de créer vos types d'entités à l'avance, comme nous l'avons fait à la page précédente des étapes de l'atelier.
Créer des intentions
Commençons par préparer toutes les intentions avant de concevoir les pages d'un flux.
- Cliquez sur Gérer > Intents.
- Cliquez sur + Créer.
Utilisez les informations suivantes :
- Nom à afficher :
redirect.artists.overview - Description
Artists overview: The bands supported by the label

Faites défiler la page vers le bas et créez les phrases d'entraînement suivantes :
Which bands are signed?Which bandsWhich artistsWhich artists are part of the record labelWho is part of the labelFrom which bands can I buy merchandiseBand merchandiseWhich music do you have?I would like to know who are signed to the labelWho are supported by the labelFrom who can I buy shirtsWhat music can I orderCan I get an overview of all the artists

- Cliquez sur Enregistrer.
- Maintenant, continuons et créons tous les autres intents. Faites preuve d'imagination pour trouver d'autres expressions d'entraînement. La bonne pratique consiste à définir au moins 10 phrases d'entraînement par intention pour couvrir les différentes façons dont un utilisateur peut déclencher cette intention. Pour cet atelier, vous pouvez également en avoir moins.
Voici quelques éléments à prendre en compte :
- Notez que Dialogflow CX annotera automatiquement vos entités à mesure que vous saisirez votre phrase d'entraînement. Si ce n'est pas le cas, vous devrez peut-être mettre à jour votre entité (en ajoutant un synonyme) ou annoter manuellement la phrase d'entraînement.
- Phrases d'entraînement plus courtes : le système NLU de Dialogflow peut également fonctionner avec des phrases d'entraînement plus courtes. Nous vous en fournissons quelques exemples ici.
- Surentraînement : un trop grand nombre d'expressions d'entraînement pour un intent peut entraîner un surentraînement et un résultat moins souhaitable. Il est recommandé d'utiliser des tests itératifs et incrémentaux, et d'ajouter des phrases d'entraînement si aucun intent n'est mis en correspondance.
Nom à afficher | Phrases d'entraînement |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Maintenant que nos éléments réutilisables (flux, entités et intentions) sont prêts, nous pouvons les combiner en créant des pages et des gestionnaires d'état.
6. Pages et gestionnaires d'état
Une conversation (session) Dialogflow CX peut être décrite et visualisée en tant que machine à états finis. Prenons l'exemple d'un distributeur automatique, qui peut être modélisé comme une machine à états finis. Il comporte les états suivants : "En attente de pièces", "Sélectionner un bonbon", "Donner un bonbon". Il passe d'un état à l'autre en fonction d'un ensemble d'entrées. Par exemple, l'insertion d'une pièce fait passer le distributeur automatique de l'état "En attente de pièces" à l'état "Sélectionner une friandise". Les pages nous permettent de modéliser ces états pour un agent virtuel Dialogflow CX.
Lorsqu'un utilisateur final interagit avec Dialogflow CX dans une conversation, celle-ci passe d'une page à l'autre. À un moment donné, une seule page est la page actuelle, qui est considérée comme active. Le flux associé à cette page est également considéré comme actif.
Pour chaque flux, vous définissez de nombreuses pages dans lesquelles vos pages combinées peuvent gérer une conversation complète sur les sujets pour lesquels le flux est conçu. Chaque flux dispose d'une page de démarrage spéciale. Lorsqu'un flux devient initialement actif, la page d'accueil devient la page actuelle. À chaque tour de conversation, la page actuelle reste la même ou passe à une autre page. Ce concept vous permettra de créer des agents plus volumineux avec de nombreuses pages et plusieurs tours de conversation.
Les pages contiennent des fulfillments (dialogues d'entrée statiques et/ou webhooks), des paramètres et des gestionnaires d'état. Le contrôle des conversations s'effectue par le biais de gestionnaires d'état, ce qui vous permet de créer différentes routes de transition pour passer à une autre page Dialogflow CX, y compris en les rendant conditionnelles (pour l'arborescence des conversations).
L'état d'une conversation est contrôlé par la gestion des transitions entre les pages avec trois types de routes différents :
- Routes d'intent : lorsqu'un intent doit être mis en correspondance (par exemple, changer de page en fonction de ce que dit un utilisateur final). (Lignes bleues dans le schéma visuel.)
- Routes de condition : lorsqu'une condition doit être vérifiée (par exemple, changer de page en fonction de certains paramètres stockés dans la session) (lignes orange dans le diagramme visuel).
- Gestionnaires d'événements : lorsqu'un certain événement de secours doit être géré (par exemple, la gestion de l'absence d'entrée ou de correspondance, afin de lever l'ambiguïté pour l'utilisateur final entre un intent et un itinéraire de condition) (lignes vertes dans le diagramme).
Les énoncés de conversation (c'est-à-dire le contenu ou la réponse à l'utilisateur) sont définis par le fulfillment, qui peut être statique ou dynamique :
- Fulfillment statique : quand une réponse de fulfillment statique est fournie
- Fulfillment dynamique : lorsqu'un webhook de fulfillment est appelé pour des réponses dynamiques
Pour notre bot de vente au détail, nous allons créer des routes d'intention et fournir des réponses de fulfillment d'entrée statique, qui seront présentées à l'utilisateur dès qu'une page sera activée. Nous créerons ensuite des paramètres avec des routes de conditions pour collecter les informations dont vous aurez besoin pour passer une commande de produits dérivés.
Routes d'intent de page
Créer les pages dans le flux de démarrage par défaut
Voici un organigramme du flux de démarrage par défaut :

Cliquons ensemble sur :
- Cliquez sur Build > Default Start Flow (Créer > Flux de démarrage par défaut).
- Cliquez sur Start Page (Page de démarrage).
- Cliquez sur l'icône + à côté de Routes.
- Ajoutez redirect.artists.overview.
- Faites défiler la page jusqu'à Transition, puis passez au flux Catalogue.
- Cliquez sur Enregistrer.
- Répétez les étapes ci-dessus pour
redirect.product.overviewet les 11 autres lignes de ce tableau :
Page (dans le flux) | Routes > Intent | Routes > Transition vers |
Démarrer |
| - |
Démarrer |
| Flux : catalogue |
Démarrer |
| Flux : catalogue |
Démarrer |
| Flux : catalogue |
Démarrer |
| Flux : catalogue |
Démarrer |
| Flux : catalogue |
Démarrer |
| Flux : catalogue |
Démarrer |
| Parcours : Service client |
Démarrer |
| Parcours : Service client |
Démarrer |
| Parcours : Service client |
Démarrer |
| Flux : Ma commande |
Démarrer |
| Flux : Ma commande |
Démarrer |
| Flux : Ma commande |
Démarrer |
| Page : Mettre fin à la session |

Le flux de démarrage par défaut fonctionne comme un menu d'options lorsque vous appelez un centre d'appels. Toutefois, dans cet agent virtuel, il est entraîné avec le langage naturel, avec les phrases d'entraînement dans les intents. L'interaction est donc axée sur la conversation et non sur les options DTMF. Elle est plus naturelle et plus humaine.

Créer les pages dans le flux de catalogue
La transcription de chat suivante appartient au flux de catalogue :
> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!
We sell shirts, music or the tour movie.
Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.
Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"
La boîte de dialogue sera différente selon que vous choisissez Musique ou Film de tournée. Pour la musique, elle se présentera comme suit :
> "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"
Pour le film de la visite, le dialogue se présente comme suit :
> "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?
Voici un organigramme de toutes les pages du flux de catalogue :

Notez la complexité de ce flux :
- Je peux ignorer la question sur les artistes et demander immédiatement "Quels produits dérivés sont disponibles ?"
- À partir du flux de démarrage par défaut, je peux demander "Je veux acheter le t-shirt The Google Dolls" ou "Je veux acheter quelque chose". Cela signifie que l'agent virtuel posera des questions de suivi pour remplir les emplacements de ces paramètres obligatoires. Il redirige directement vers la page du produit.
- La boîte de dialogue "Prix" provient de la page "Prix" qui sera réutilisée.
- Bien que le dialogue du film de la visite guidée semble le plus simple, nous allons en fait faire quelque chose de spécial avec lui. Nous réutiliserons cette partie du dialogue. Les utilisateurs finaux pourront également la saisir directement pour l'un des autres produits, s'ils spécialisent toutes les informations en même temps :
> "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"
Commençons par associer les pages.
- Cliquez sur Compiler > Catalogue.
- Cliquez sur Start Page (Page de démarrage).
- Cliquez sur l'icône + à côté de Routes.
- Ajoutez redirect.artists.overview.
- Faites défiler la page jusqu'à Transition, sélectionnez Page, puis choisissez + new Page (Nouvelle page).
- Utilisez le nom de la page :
Artist Overview, puis cliquez sur Enregistrer.
Terminons le reste du flux :
- Vous pouvez répéter les étapes précédentes avec les pages, les intents et les fulfillments suivants. Prends cette table. Page correspond à la page que vous sélectionnerez dans le flux. Routes > Transition vers correspond au nouveau flux ou à la nouvelle page que vous allez créer et vers laquelle vous allez effectuer la transition.
Page (dans le flux) | Routes > Intent | Routes > Transition vers |
Début du catalogue |
| Présentation des artistes |
Début du catalogue |
| Produit |
Début du catalogue |
| Présentation du produit |
Début du catalogue |
| Présentation du produit |
Début du catalogue |
| Chemises |
Début du catalogue |
| Musique |
Début du catalogue |
| Mettre fin à la session |
Début du catalogue |
| Mettre fin à un flux |
Présentation des artistes |
| Présentation du produit |
Continuons et ajoutons d'autres réponses statiques.
- Dans le flux de catalogue, cliquez sur la page Vue d'ensemble de l'artiste.
- Cliquez sur Modifier le fulfillment dans la section Fulfillment de la saisie.
- Utilisez les réponses statiques suivantes (l'agent dit) :
The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
- Cliquez sur Enregistrer.
- Dans le flux de catalogue, cliquez sur la page Aperçu des produits.
- Cliquez sur Modifier le fulfillment dans la section Fulfillment de la saisie.
- Utilisez le texte statique suivant pour le traitement (L'agent dit) :
We sell shirts, music or the tour movie.
- Cliquez sur Enregistrer.
Paramètres de la page
Les paramètres sont utilisés pour capturer et mentionner des valeurs ayant été fournies par l'utilisateur final au cours d'une session. Chaque paramètre possède un nom et un type d'entité. @Artist et @Merch sont les paramètres minimaux que nous devons collecter pour traiter une commande de produits dérivés. Pour les T-shirts ou les manches longues, vous devez également collecter @ShirtSize. Si vous souhaitez commander de la musique, vous aurez également besoin d'un nom @Carrier et @Album.
Ces paramètres devront être marqués comme obligatoires. Une fois que cela est nécessaire, vous devez fournir des requêtes personnalisées pour vous souvenir de votre utilisateur final et fournir les bonnes réponses afin de collecter ces paramètres. Dialogflow CX propose plusieurs mécanismes pour vous aider.
Par exemple, vous pouvez fournir des messages de fulfillment statique personnalisés dans la section Paramètre. Si le paramètre est obligatoire, ces fulfillments de paramètres s'affichent. Ces messages de réponse seront ajoutés à la file d'attente de réponses. Lors du tour d'un agent, il est possible (et parfois souhaitable) d'appeler plusieurs fulfillments, chacun pouvant générer un message de réponse. Dialogflow conserve ces réponses dans une file d'attente de réponses. Pour en savoir plus sur le cycle de vie des pages et l'ordre dans lequel ces fulfillments seront ajoutés à la file d'attente de réponses, consultez la documentation sur les pages Dialogflow CX.
Créer les paramètres sur la page "Vue d'ensemble de l'artiste"
Définissons quelques paramètres de page :
- Dans le flux Catalogue, cliquez sur la page Vue d'ensemble de l'artiste.
- Cliquez sur + dans le bloc Paramètres. Ajoutez le paramètre artist :
- Nom à afficher :
artist - Type d'entité :
@Artist - Obligatoire : cochez la case.
- Masquer dans le journal : cocher
- Nous allons maintenant ajouter des messages de réponse pour les paramètres personnalisés. Si le paramètre artist n'a pas encore été collecté par l'agent virtuel, la réponse suivante de l'agent sera ajoutée à la file d'attente de réponses pour l'utilisateur final :
From which of these artists would you like to order merchandise?
- Ajoutez une deuxième option de boîte de dialogue qui fournit des chips de suggestions enrichies. Cliquez sur Ajouter une option de dialogue et utilisez ce code (au format JSON) :
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
Il est possible de gérer différentes invites de traitement de remplacement en fonction du nombre de tentatives de réponse de l'utilisateur final. Pour ce faire, utilisez des gestionnaires d'événements de paramètres. Vous pouvez choisir parmi différents gestionnaires d'événements intégrés, tels que Paramètres non valides, Énoncés trop longs, Aucune entrée, Aucune entrée (1re tentative), 2e tentative ou Aucune correspondance. La différence entre "aucune entrée" et "aucune correspondance" est qu'avec "aucune entrée", l'utilisateur n'a jamais fourni de réponse, tandis qu'avec "aucune correspondance", l'utilisateur a fourni une réponse, mais Dialogflow CX n'a pas pu la faire correspondre à une page.
- Faites défiler la page jusqu'à la section Reprompt event handlers (Gestionnaires d'événements de re-prompt).
- Cliquez sur Ajouter un gestionnaire d'événements, puis sélectionnez l'événement :
No-match default - Utilisez le fulfillment textuel statique d'événement suivant :
I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Cliquez sur Enregistrer.
- Cliquez sur Ajouter un gestionnaire d'événements, puis sélectionnez l'événement :
No-input default. - Utilisez le fulfillment textuel statique d'événement suivant :
I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- Cliquez sur Enregistrer.
Routes de conditions de page
Les paramètres sont très efficaces lorsqu'ils sont combinés aux routes conditionnelles de page. Lorsqu'une condition renvoie la valeur "true", la route de page associée est appelée. Une condition peut être Un paramètre est égal à une valeur spécifique, Un paramètre ne peut pas être manquant, Un formulaire a été rempli, etc. Pour en savoir plus sur les paramètres et les conditions, consultez la documentation Dialogflow CX.
Pour notre agent virtuel de vente au détail, nous devons collecter une séquence de paramètres. Nous devons donc créer une condition pour vérifier si un formulaire a été rempli. Un formulaire est une liste de paramètres à collecter auprès de l'utilisateur final de la page. L'agent virtuel interagit avec l'utilisateur final pendant plusieurs tours de conversation, jusqu'à ce qu'il ait collecté tous les paramètres de formulaire requis, également appelés paramètres de page.
Dialogflow CX définit automatiquement les valeurs de paramètre fournies par l'utilisateur final lors du remplissage du formulaire. Pour vérifier si le formulaire complet de la page actuelle est rempli, utilisez la condition suivante : $page.params.status = "FINAL"
Créer les routes conditionnelles sur la page "Vue d'ensemble de l'artiste"
Créons une route conditionnelle qui passera à la page suivante une fois l'artiste connu :
- Sur la page Vue d'ensemble de l'artiste, cliquez sur l'icône + dans la section Routes.
- Faites défiler la page jusqu'à la section Condition.
- Sélectionnez Au moins un (OU)
- Ensuite, nous allons écrire une expression qui
- Paramètre :
$page.params.status - Opérateur :
= - Valeur :
"FINAL"
- Nous allons maintenant créer un message d'exécution statique spécifique sur la route, confirmant le choix de l'utilisateur final. Faites défiler la page jusqu'au bloc Fulfillment et saisissez les messages de fulfillment suivants :
$session.params.artist, great choice! Rock on!You want to rock with $session.params.artist merchandise. Awesome!
- Lorsque la condition est vraie, vous devez passer à la page Product Overview (Présentation du produit). Faites défiler la page jusqu'à la section Transition, puis utilisez la page suivante :
Product Overview. - Cliquez sur Enregistrer.

Créer les routes sur la page "Présentation du produit"
Maintenant que vous savez comment créer des paramètres et des routes conditionnelles, créons d'autres paramètres pour les pages suivantes :
Présentation du produit
- Créez un paramètre
artistsur la page Présentation du produit :
- Nom à afficher :
artist - Type d'entité :
@Artist - Obligatoire : cochez la case.
- Masquer dans le journal : cocher
- Fulfillment de la requête initiale :
From which of these artists would you like to order merchandise?
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Gestionnaire d'événements >
No-match default:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from? - Charge utile personnalisée :
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Gestionnaire d'événements >
No-input default:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention? - Charge utile personnalisée :
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- Créez un paramètre
merch:
- Nom à afficher :
merch - Type d'entité :
@Merch - Obligatoire : cochez la case.
- Masquer dans le journal : cocher
- Fulfillment :
Which merchandise item do you want? - Cliquez sur Ajouter une option de dialogue > Charge utile personnalisée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Gestionnaire d'événements >
No-match default - Fulfillment du gestionnaire d'événements :
We sell Shirts, Music or the Tour movie. Which of these items do you want? - Charge utile personnalisée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Gestionnaire d'événements >
No-input default - Fulfillment du gestionnaire d'événements :
I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want? - Charge utile personnalisée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- Créez un itinéraire qui passera à la page Product lorsque
artistet l'élémentmerchseront fournis.
- Condition :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$session.params.artist != null - Expression :
$session.params.merch != null - Fulfillment :
Alright! $session.params.merch of $session.params.artist, let's go! - Transition : page :
Product
- Créez un itinéraire pour lorsque l'utilisateur dit "Chemises"
- Intent : redirect.shirts
- Transition : page :
Shirts
- Créez une route pour lorsque l'utilisateur dit "Musique".
- Intent : redirect.music
- Transition : page :
Music
- Créer un itinéraire lorsque l'utilisateur demande des informations sur les prix
- Intent : redirect.price
- Transition : créer une page :
Price
Une fois la configuration ci-dessus définie, une visualisation semblable à l'image ci-dessous s'affiche. Notez que les routes d'intention sont bleues dans le diagramme, tandis que les routes de condition sont orange. Bien qu'ils ne soient pas représentés, les gestionnaires d'événements sont verts. Lorsque plusieurs types de routes effectuent une transition vers une page, la ligne est grise.

Vous avez appris à créer des flux, des entités, des intents et des pages avec des gestionnaires d'état tels que les routes d'intent et les routes conditionnelles basées sur des paramètres. Plus loin dans cet atelier, nous utiliserons des branchements conditionnels dans le traitement pour fournir différents dialogues en fonction de l'entrée.
Vous pouvez utiliser les configurations suivantes pour finaliser notre agent virtuel.
Page "Chemises" :
- Créez les configurations suivantes sur la page T-shirts :
- Fulfillment d'entrée :
Do you want a longsleeve or a t-shirt? - Charge utile personnalisée pour le fulfillment d'entrée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
},
{
"text": "Price?"
}
]
}
]
]
}
- Créez une route d'intent :
redirect.priceavec une transition vers la pagePrice. - Créez le paramètre suivant :
- Paramètre :
merch– Type d'entité :@Merch,RequiredetRedact in log - Paramètre > Gestionnaire d'événements >
No-match default - Paramètre > Fulfillment du gestionnaire d'événements :
You can choose between a t-shirt or a longsleeve. Which of these do you want? - Paramètre > Charge utile personnalisée de fulfillment du gestionnaire d'événements :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- Paramètre > Gestionnaire d'événements >
No-input default - Paramètre > Fulfillment du gestionnaire d'événements :
I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want? - Paramètre > Charge utile personnalisée de fulfillment du gestionnaire d'événements :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- Cliquez sur l'entrée de fulfillment et faites défiler la page jusqu'à Préréglages des paramètres. Chaque fois que la page "T-shirts" devient active, le paramètre de catégorie est défini sur t-shirts :
Paramètre | Valeur |
|
|
- Ajouter un itinéraire conditionnel :
- Correspondance avec au moins une règle (OU)
- Expression :
$session.params.merch = "T-shirt" - Expression :
$session.params.merch = "Longsleeve" - Transition vers une nouvelle page :
Shirt Size
Page des tarifs :
Étant donné que les messages concernant les prix dépendront de l'article ou de la catégorie de produits choisis (musique ou t-shirts), nous corrigerons cette partie plus tard dans l'atelier. Pour le moment, il vous suffit de saisir un espace réservé.
- Créez les configurations suivantes sur la page Prix :
- Fulfillment d'entrée :
PRICE TODO
Comme vous pouvez demander le prix à différents endroits de la conversation, il doit toujours vous donner une réponse et vous rediriger vers la partie précédente du dialogue pour continuer la commande. Dans l'arborescence de dialogue, vous pouvez accéder à des informations sur les prix à cinq endroits différents. (T-shirt, Taille du t-shirt, Musique, Transporteur et aussi directement via une route d'intention). Nous aurons donc besoin de routes conditionnelles pour revenir en arrière :
- Ajoutez un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$session.params.category = "shirts" - Expression :
$session.params.merch = "null" - Transition vers une nouvelle page :
Shirts
- Ajouter un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$session.params.category = "shirts" - Expression :
$session.params.size = "null" - Transition vers une nouvelle page :
Shirt Size
- Ajouter un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$session.params.category = "music" - Expression :
$session.params.album = "null" - Transition vers une nouvelle page :
Music
- Ajouter un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$session.params.category = "music" - Expression :
$session.params.merch = "null" - Transition vers une nouvelle page :
Carrier
- Ajouter un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$session.params.category = "null" - Transition vers une nouvelle page :
Product Overview
Page sur la taille des chemises :
- Créez les configurations suivantes sur la page Taille de t-shirt :
- Fulfillment d'entrée :
What shirt size do you want? - Charge utile personnalisée pour le fulfillment d'entrée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Créez une route d'intent :
redirect.priceavec une transition vers la pagePrice. - Créez le paramètre suivant :
- Paramètre :
shirtsize– Type d'entité :@ShirtSize–Required,Redact In Log - Paramètre > Gestionnaire d'événements >
No-match default - Paramètre > Fulfillment du gestionnaire d'événements :
Please tell me the shirt size, such as XL. - Paramètre > Charge utile personnalisée de fulfillment du gestionnaire d'événements :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Paramètre > Gestionnaire d'événements >
No-input default - Paramètre > Fulfillment du gestionnaire d'événements :
I couldn't understand the shirt size. What size do you want? - Paramètre > Charge utile personnalisée de fulfillment du gestionnaire d'événements :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- Ajouter un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$page.params.shirtsize != "null" - Transition vers la page :
Product
Page Musique :
- Créez les configurations suivantes sur la page Musique :
- Fulfillment d'entrée :
We have a Greatest Hits Album or the Live Album. Which one do you want? - Charge utile personnalisée pour le fulfillment d'entrée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
},
{
"text": "Price?"
}
]
}
]
]
}
- Créez une route d'intent :
redirect.priceavec une transition vers la page :Price. - Créez le paramètre suivant :
- Paramètre :
album– Type d'entité :@Album–Required,Redact In Log - Paramètre > Gestionnaire d'événements >
No-match default - Paramètre > Fulfillment du gestionnaire d'événements :
You can choose between Greatest Hits and Live Album. Which of these do you want? - Paramètre > Charge utile personnalisée de fulfillment du gestionnaire d'événements :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- Paramètre > Gestionnaire d'événements >
No-input default - Paramètre > Fulfillment du gestionnaire d'événements :
I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want? - Paramètre > Charge utile personnalisée de fulfillment du gestionnaire d'événements :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- Cliquez sur l'entrée "Fulfillment" (Traitement), puis faites défiler la page jusqu'à Parameter presets (Préréglages des paramètres). Chaque fois que la page "Music" (Musique) devient active, le paramètre de catégorie est défini sur music :
Paramètre | Valeur |
|
|
- Ajouter un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$page.params.album != "null" - Transition vers la page :
Carrier
Page de l'opérateur :
- Créez les configurations suivantes sur la page Transporteur :
- Fulfillment d'entrée :
Do you want this album on CD or MP3? - Charge utile personnalisée pour le fulfillment d'entrée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
},
{
"text": "Price?"
}
]
}
]
]
}
- Créez une route d'intent :
redirect.pricequi effectue une transition vers la pagePrice. - Créez le paramètre suivant :
- Paramètre :
merch– Type d'entité :@Merch–Required,Redact In Log - Paramètre > Gestionnaire d'événements >
No-match default - Paramètre > Fulfillment du gestionnaire d'événements :
Do you want a physical CD or the digital album? - Paramètre > Fulfillment du gestionnaire d'événements : charge utile personnalisée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "Digital Album"
}
]
}
]
]
}
- Paramètre > Gestionnaire d'événements >
No-input default - Paramètre > Fulfillment du gestionnaire d'événements :
I couldn't understand if you mean CD or MP3. Which one do you want? - Paramètre > Fulfillment du gestionnaire d'événements : charge utile personnalisée :
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
}
]
}
]
]
}
- Ajouter un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$page.params.merch != "null" - Transition vers la page :
Product
Page produit :
- Créez les paramètres suivants :
Nom à afficher du paramètre | Type d'entité de paramètre | Vérifications |
|
| Obligatoire, Masquer dans le journal |
|
| Obligatoire, Masquer dans le journal |
- Le paramètre artist nécessite la réponse initiale suivante, qui s'affiche lorsque l'artiste n'est pas connu :
You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help?
{
"richContent": [
[
{
"options": [
{
"text": "Which artists?"
}
],
"type": "chips"
}
]
]
}
- Ajoutez également un gestionnaire d'événements
No-input defaultavec fulfillment :I couldn't understand what you just said. Ask me which artists are signed. - Et un gestionnaire d'événements
No-match defaultavec fulfillment :I missed that. Please ask me which artists are signed.
- Le paramètre merch nécessite également des gestionnaires d'événements de nouvelle invite.
- Ajoutez un gestionnaire d'événements
No-input defaultavec fulfillment :I couldn't understand what you just said. Which merchandise item do you want? - Et un gestionnaire d'événements
No-match defaultavec fulfillment :I missed that. Which merchandise item do you want?
L'itinéraire suivant redirige l'utilisateur vers la page de confirmation lorsque l'artiste est connu et qu'il choisit un "film de tournée".
- Ajouter un itinéraire conditionnel :
- Correspondance avec TOUTES les règles (AND)
- Expression :
$session.params.artist != null - Expression :
$session.params.merch = "Tour Movie" - Préréglages des paramètres Ajouter un paramètre >
price = 25 - Transition vers une nouvelle page :
Confirmation
La route suivante passera à la page de confirmation lorsque l'artiste est connu et que l'utilisateur choisit un T-shirt et sa taille.
- Ajouter un itinéraire conditionnel :
- Expression personnalisée :
$session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null - Préréglages des paramètres Ajouter un paramètre >
price = 25 - Transition vers la page :
Confirmation
La route suivante redirige l'utilisateur vers la page de confirmation lorsque l'artiste est connu et que l'utilisateur choisit un t-shirt à manches longues et la taille du t-shirt.
- Ajouter un itinéraire conditionnel :
- Expression personnalisée :
$session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null - Préréglages des paramètres Ajouter un paramètre >
price = 30 - Transition vers la page :
Confirmation
La route suivante passera à la page de confirmation lorsque l'artiste est connu et que l'utilisateur choisit un "CD" et le nom de l'album.
- Ajouter un itinéraire conditionnel :
- Expression personnalisée :
$session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null - Préréglages des paramètres Ajouter un paramètre >
price = 15 - Transition vers la page :
Confirmation
L'itinéraire suivant passera à la page de confirmation lorsque l'artiste sera connu et que l'utilisateur aura choisi un "album numérique" et le nom de l'album.
- Ajouter un itinéraire conditionnel :
- Expression personnalisée :
$session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null - Préréglages des paramètres Ajouter un paramètre >
price = 10 - Transition vers la page :
Confirmation
Nous allons maintenant créer des conditions avancées avec des invites qui détectent les informations manquantes. La prochaine route reviendra à la page de musique lorsque l'artiste est connu et que l'utilisateur choisit un "CD" ou un "album numérique", mais que le nom de l'album n'a pas été choisi.
- Ajouter un itinéraire conditionnel :
- Expression personnalisée :
$session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null - Fulfillment :
I would also need to know which album you would like to buy! - Transition vers la page :
Music
La dernière route redirige vers la page de confirmation lorsque l'artiste est connu et que l'utilisateur choisit un t-shirt ou un t-shirt à manches longues, mais que la taille du t-shirt n'a pas été choisie.
- Ajoutez un itinéraire conditionnel :
- Expression personnalisée :
$session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null - Fulfillment :
I would also need to know which shirt size you need! - Transition vers la page :
Shirt Size
Dans la partie suivante de l'atelier, nous utiliserons des traitements conditionnels pour fournir différents messages de traitement en fonction de l'entrée.
7. Réponses conditionnelles
Certaines réponses renverront un dialogue différent en fonction de l'entrée. Les dialogues se ramifieront, c'est ce que nous appelons les réponses conditionnelles. Cela peut devenir intéressant lorsque vous n'utilisez pas de fulfillment de webhook, où les réponses conditionnelles ont été déterminées sur le backend. Voici un exemple :
if [condition]
[response]
elif [condition]
[response]
elif [condition]
[response]
else
[response]
endif
- Voici un exemple de [condition] :
$session.params.user-age >= 21. Il utilise une mise en forme semblable à celle des conditions dans les routes. - Une [réponse] reprend la réponse textuelle statique
- Les réponses conditionnelles commencent toujours par
if - Les blocs
elifetelsesont facultatifs.
Dialogflow CX peut également utiliser des fonctions système intégrées. Par exemple, pour mettre en forme une date ou une heure, ou pour afficher l'heure actuelle ($sys.func.NOW())
Finalisons le flux Catalog en corrigeant les pages Confirmation et Price.
Page de confirmation :
Nous allons maintenant créer la page de confirmation. Elle présente les exigences suivantes :
- Si le produit dérivé est un CD ou un album numérique. Les champs suivants s'afficheront dans la confirmation : artist, merch, album et price.
- Si merch est défini sur T-shirt ou Manches longues. Les champs suivants s'afficheront dans la confirmation : artist, merch, size et price.
- Sinon (et donc si merch est Tour Movie). Les champs suivants s'afficheront dans la confirmation : artist, merch et price.
- Cliquez sur la page Confirmation.
- Cliquez sur Modifier le fulfillment > Réponses de l'agent > option Ajouter un dialogue > Réponse conditionnelle :
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
- Create the following Custom payload:
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Yes, confirm"
}
],
"type": "chips"
}
]
]
}
Next, create two intent routes:
confirm.proceed.ordertransitions to:Order ProcessFlow.decline.proceed.ordertransitions toEnd Flow
When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.
- In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:
Parameter | Value |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notice that we have created an additional parameter called restart. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.
- Click on the Default Start Flow, Start Page, and create another Conditional Route:
$session.params.restart = "true"- Fulfillment:
"Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?" - Custom payload:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- Select the Start Page and click on the
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day!
Price Page:
Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:
- Delete the Agent Says entry fulfillment.
- Create a new Conditional Response:
if $session.params.category = "shirts"
A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
A CD costs $15. The digital album on MP3 costs $10.
else
A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif

Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:
8. Wrapping up the agent
We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.
Creating the My Order Flow
- Go to the My Order Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
My Order Start |
| My Order |
My Order Start |
| My Order Status |
My Order Start |
| My Order Cancellation |
My Order Start |
| End Session |
My Order Start |
| End Flow |
My Order |
| My Order Status |
My Order |
| My Order Cancellation |
Default Start Flow |
| Flow: My Order |
Default Start Flow |
| Flow: My Order |
- Let's create the following entry fulfillment for the My Order Page:
- Entry fulfillment:
I can look up the status of your order, or I can cancel an order.
- In the My Order Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required: checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL" - Fulfillment:
And do you want to Cancel your order, or should I look up the status?
- Click on Add state handler > Event Handlers and create the Event Handler:
No-input default
- Fulfillment:
I'm sorry, what was that? Would you like me to cancel an order or look up the status? - Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- Create the Event Handler:
No-match default
- Fulfillment:
Would you like me to cancel an order or lookup the status? - Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- In the My Order Status Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Status Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null - Fulfillment:
Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items. - Add dialogue option > Text:
Is there anything else I can help you with?
- In the My Order Cancelation Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Cancelation Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null - Fulfillment:
Your order $session.params.ordernumber has been canceled. - Add dialogue option > Text:
Is there anything else I can help you with?
- Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"
And:
>"What's the status of order DEFG222"
- Select the Start Page and click on the
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day! - Select the Start Page and click on the
redirect.homeintent. Create the following parameter preset:restart = true
Default Negative intents (Fallback)
When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.
- Try in the simulator:
I don't like Alice Googler.
You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.
- Go to Manage > Intents and select the Default Negative Intent.
- Add the following training phrases that will trigger the No-match event.
I don't like Alice GooglerI am not a fan of G's N' RosesI can't stand the music of the Google Dolls
- Hit Save and test the following sentence in the simulator:
I am really not a fan of the Goo Fighters
This time the No-match event was triggered, you stayed on the Start Page.
Default Fallback Messages
- Click the Default Start Flow, select the
sys.no-input-defaultevent handler.
The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:
- Remove all answers, and add these text dialogues:
I'm sorry, I didn't receive an answer. Can you say it again?I missed your answer, can you say it again?Sorry, I didn't hear anything. Can you say it again?I couldn't hear what you were saying, what was that?I'm sorry, I missed your answer. What were you trying to say?
Don't forget to click Save.
- Click the Default Start Flow, select the
sys.no-match-defaultevent handler.
The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.
- Remove all answers, and add these text dialogues:
Sorry, I didn't get that. Can you please rephrase?I'm sorry, I don't understand. Can you please rephrase?I don't understand, please rephrase.Sorry, I didn't get that. What was that?I didn't get that, can you please rephrase?
Don't forget to click Save.
- It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.
Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.
Creating the Order Process Flow
- Go to the Order Process Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
Order Process Start |
| End Session |
Order Process Start |
| End Flow |
Order Process Start |
| New Page: Shipping Details |
- Let's create the following entry fulfillment for the Shipping Details Page:
- Entry fulfillment:
To complete your order I will first need to collect your shipping details.
- Create the following parameters:
These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.
Parameter Display name | Entity | Required? | Initial prompt fulfillment | No-match default | No-input default |
| @sys.person | Required |
|
|
|
| @sys.person | Required |
|
|
|
| @sys.address | Required |
|
|
|
| @sys.any | Required |
|
|
|
| @sys.geo-city | Required |
|
|
|
| @sys.geo-country | Required |
|
|
|
| @sys.email | Required |
|
|
|
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL" - Transition to new Page:
Payment Details
- Create the following entry fulfillment.
Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:
- Agent Says:
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
- Conditional Response
if $session.params.merch != "Digital Album"
Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
Your merchandise will be shipped to:
$session.params.firstname $session.params.lastname
$session.params.address
$session.params.zipcode $session.params.city
$session.params.country
To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
The total costs will be: $$session.params.price.
After purchasing the digital album, you will receive an email with the download link.
To continue the order process please explicitly say "I confirm".
Do you want to confirm your $session.params.artist $session.params.merch order?
endif
- Créez la route d'intent suivante.
- Intent :
confirm.proceed.order - L'agent dit :
Thank you for your order! Your merchandise will be shipped today! - Ajouter une option de dialogue > Texte :
Here's the order number: ABCD123. - Ajouter une option de dialogue > Texte :
Have a good day! - Transition :
End Session
- Sélectionnez la page Start (Démarrer), puis cliquez sur l'intent
redirect.end. Créez le fulfillment suivant :Thank you for contacting G-Records! Have a nice day!. - Sélectionnez la page Start (Démarrer), puis cliquez sur l'intent
redirect.home. Créez le préréglage de paramètre suivant :restart = true
Formidable ! Nous disposons maintenant d'un chatbot pour un marchand réel qui fonctionne parfaitement. Dans le prochain atelier, nous allons tester les performances de l'agent virtuel.
9. Tester votre agent virtuel
Vous pouvez utiliser le simulateur intégré pour tester les dialogues de votre agent virtuel. L'avantage de tester les flux dans le simulateur est que vous obtenez un aperçu clair des flux, des pages, des paramètres et des événements (DTMF) collectés par le simulateur lors de l'exécution de vos flux. Cela facilite les tests par rapport à un test direct dans une intégration, car ces types d'informations seront masqués pour l'utilisateur final. Vous pouvez même créer des scénarios de test, les enregistrer et les réutiliser. C'est très logique, car lorsque vous gérez ou modifiez vos flux au fil du temps, vous voulez être sûr qu'aucune de vos modifications ne casse votre travail précédent.
Il est également possible d'exporter et d'importer des scénarios de test précédemment créés en les stockant dans Google Cloud Storage ou localement. L'exportation d'un test permet de télécharger un fichier blob. Pour en savoir plus sur le simulateur et les scénarios de test, consultez la documentation sur le simulateur et les scénarios de test.
Avant de créer des cas de test, finalisons le reste de notre agent virtuel :
Créer le flux du service client
- Accédez au flux Service client et créez les transitions d'intention suivantes :
Page (dans le flux) | Routes > Intent | Routes > Transition vers |
Premiers pas avec le service client |
| Livraison |
Premiers pas avec le service client |
| Remboursement |
Premiers pas avec le service client |
| Échange |
Premiers pas avec le service client |
| Mettre fin à un flux |
Premiers pas avec le service client |
| Mettre fin à la session |

- Créez les fulfillments d'entrée suivants pour la page Livraison :
Shipping physical merchandise items can take up to 2 weeks.Is there anything else I can help you with?
- Créez les exécutions d'entrée suivantes pour la page Remboursement :
We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.Is there anything else I can help you with?
- Créez les exécutions d'entrée suivantes pour la page Échange :
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.Is there anything else I can help you with?
- Sélectionnez la page Start (Démarrer), puis cliquez sur l'intent
redirect.end. Créez le fulfillment suivant :Thank you for contacting G-Records! Have a nice day!. - Sélectionnez la page Start (Démarrer), puis cliquez sur l'intent
redirect.home. Créez le préréglage de paramètre suivant :restart = true
Créer des scénarios de test
- Cliquez sur le bouton Tester l'agent à droite de l'écran.
Lorsque vous ouvrez le simulateur pour la première fois, vous devez sélectionner un environnement pour l'agent et un flux actif. Dans la plupart des cas, vous devez utiliser l'environnement brouillon et le flux de démarrage par défaut.
- Type :
Hi

- Question :
Which artists are signed with your label? - Dites :
The Google Dolls - Dites :
I am interested in buying a shirt - Dites :
A t-shirt - Dites :
Medium - Cliquez maintenant sur le bouton "Enregistrer le scénario de test". Vous le trouverez en haut du simulateur (à côté de la flèche "Rétablir" et de l'icône de la corbeille de réinitialisation).

- Fournissez-lui les informations suivantes :
- Nom du scénario de test :
Buy Google Dolls t-shirt size M - Tags : #catalog, #shirts, #t-shirt, #TheGoogleDolls
- Cliquez sur Enregistrer.
Créons d'autres scénarios de test.
- Commencez par effacer la boîte de dialogue actuelle en cliquant sur l'icône Réinitialiser (corbeille).
- Créez les scénarios de test suivants :
Acheter le t-shirt Alice Googler :
>"Buy the Alice Googler t-shirt."
>"XL"
- Nom du scénario de test :
Buy the Alice Googler t-shirt - Tags :
#catalog, #shirts, #t-shirt, #AliceGoogler
Acheter un t-shirt de taille M : (notez que le nom de l'artiste n'a pas été mentionné, mais vous souhaitez ignorer les pages de présentation des groupes, des produits, des t-shirts et des tailles de t-shirts)
>"Buy a t-shirt size M"
>"The Google Fighters"
- Nom du scénario de test :
Buy a t-shirt size M - Tags :
#catalog, #shirts, #t-shirt, #TheGoogleFighters - Description : (Notez que le nom de l'artiste n'a pas été mentionné, mais vous souhaitez ignorer les pages de présentation des groupes, des produits, des t-shirts et des tailles de t-shirts)
Acheter de la musique de Guns N' Roses (remarque : vous passerez les pages de présentation des groupes et des produits)
>"Purchase music of G's N' Roses"
>"Live"
>"CD"
- Nom du scénario de test :
Purchase music of G's N' Roses - Tags :
#catalog, #music, #CD, #GsNRoses, #live - Description : (Notez que vous passerez ainsi les pages de présentation des bracelets et des produits.)
Consultez les informations tarifaires :
>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
- Nom du scénario de test :
Price info - Tags :
#catalog, #music, #tourmovie, #shirts - Description : tester les informations sur les prix à différents moments de la conversation
Tester les scénarios de test préenregistrés
- Dans le menu principal Dialogflow de gauche, sélectionnez Gérer > Cas de test.
- Sélectionnez tous les scénarios de test, puis cliquez sur le bouton Exécuter au-dessus du tableau.
Dialogflow CX exécutera tous les scénarios de test sélectionnés par rapport à l'enregistrement qui a été enregistré en tant que "scénario de test de référence". Si les résultats sont identiques à ceux que vous avez enregistrés, les tests sont réussis. - Si des éléments ont changé dans les flux (par exemple, des pages mal configurées ou des intentions qui vous ont redirigé vers les mauvaises pages), les tests échoueront.

- Dans le simulateur, posez la question suivante :
How long will shipping take? - Notez le résultat et enregistrez le scénario de test sous le nom
Shippingavec le tag#shipping. - Accédez au panneau "Gérer" > "Scénarios de test", puis appuyez sur le bouton Exécuter en haut à droite de la grille pour n'exécuter que le scénario de test
Shipping.
Ce test devrait réussir.
- Revenez au flux du service client, sélectionnez la page Start (Démarrer), puis cliquez sur l'en-tête Routes (Itinéraires).
Un écran avec une grille affichant tous les itinéraires s'affiche.
- Supprimez
redirect.shipping.info route. - Accédez au panneau "Gérer" > "Scénarios de test", puis appuyez sur le bouton Exécuter en haut à droite de la grille pour n'exécuter que le scénario de test
Shipping.
Ce test devrait échouer.
- Vous pouvez cliquer sur le test ayant échoué pour afficher les détails de l'échec.
Dans ce cas, le test a échoué avec le message d'erreur ci-dessous :
Page: Page mismatch:
Expected: Shipping
Actual: Start Page
En effet, la page n'existe plus dans le flux. Nous nous attendions à ce que la page Shipping s'affiche, mais nous n'avons jamais quitté la page Start. (ou vos utilisateurs finaux recevraient un message de remplacement).
En d'autres termes, il s'agit d'une demande manquée, c'est-à-dire d'un résultat de test faux négatif. Le test a échoué. Nous nous attendions à ce que la page Livraison s'affiche, mais rien ne se passe ou un message de remplacement s'affiche.
- Revenez au parcours du service client et ajoutez
redirect.shipping.infoen tant que routage d'intent à la page Start. N'oubliez pas de passer à la page Livraison et de cliquer sur Enregistrer. - Dans le simulateur, enregistrez le scénario de test suivant :
I want to swap my item, puis enregistrez-le sous le nomSwapping#swapping. - Ouvrez Gérer > Intentions > redirect.refund.info et ajoutez l'expression d'entraînement suivante :
I want to swap this item for a refund
Sans cette expression d'entraînement, lorsqu'un utilisateur demanderait à échanger un article contre un remboursement, l'intention redirect.swapping.info serait déclenchée. Or, nous ne voulons pas fournir d'informations sur l'échange d'articles, mais sur les remboursements.
- Créez le scénario de test de référence suivant :
I want to swap this item for a refunddans le simulateur, puis enregistrez-le sous le nomSwap for Refund#refund. - Revenez à l'intention Gérer > Intentions > redirect.refund.info et supprimez la ligne
I want to swap this item for a refund. - Revenez à Gérer > Scénarios de test, sélectionnez le scénario de test Échange contre remboursement, puis cliquez sur Exécuter.
Votre dernier test a échoué. Le message d'erreur suivant s'affiche :
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
Page: Page mismatch:
Expected: Refund
Actual: Swapping
En d'autres termes, il s'agit d'une demande mal comprise, d'un résultat de test faux positif. Le test a échoué. Nous nous attendions à ce que la page Remboursement s'affiche, mais c'est la page Échange qui s'est activée.
Couverture
Dans Dialogflow CX, la couverture des tests est une mesure utilisée pour décrire le degré d'exécution du dialogue de l'agent virtuel (pages et intents) lorsqu'une suite de tests spécifique est exécutée. Un agent virtuel avec une couverture de test élevée, mesurée en pourcentage, a exécuté davantage de ses dialogues lors des tests. Cela suggère qu'il est moins susceptible de contenir des bugs non détectés (comme des demandes mal comprises) qu'un agent virtuel avec une couverture de test faible.
- Pour afficher un rapport sur la couverture de test pour tous les scénarios de test, cliquez sur Coverage (Couverture).
- Cliquez sur l'onglet Transitions.
Vous verrez alors la couverture de test pour toutes les transitions de page.

- Cliquez sur l'onglet Intents.
La couverture des tests pour tous les intents s'affiche.

Félicitations ! Vous avez créé et testé un exemple complet et concret de bot pour un marchand. Accédez à la page suivante de l'atelier pour lire la conclusion et trouver des références utiles.
10. Conclusion
Dialogflow CX est une plate-forme d'IA conversationnelle (CAIP) permettant de créer des agents virtuels tels que des chatbots ou des voicebots. Dialogflow CX permet à votre équipe de créer plus rapidement des expériences conversationnelles de niveau entreprise grâce à des outils visuels de création de bots, des intents réutilisables et la possibilité de gérer des conversations en plusieurs tours.
Dans cet atelier de programmation, vous avez appris à créer un agent virtuel de vente au détail réel. Nous avons abordé les concepts suivants :
- Flux
- Paramètres, entités personnalisées et système
- Pages
- Gestionnaires d'état tels que les routes d'intent et les routes de condition
- Messages de fulfillment statiques et réponses conditionnelles
- Intents de remplacement
- Simulateur, cas de test et couverture

Références
Pour en savoir plus sur Dialogflow CX, consultez les blogs et la documentation suivants :