Fermer

octobre 31, 2019

Construisez votre première compétence Alexa avec NativeChat


Découvrez étape par étape comment créer votre premier chat qui peut communiquer via le traitement du langage naturel à l'aide d'Alexa d'Amazon.

Au cours des dernières années, les assistants vocaux ont modifié la manière dont nous interagissons avec nos appareils. Pour certaines personnes, il s’agissait d’une expérience quelque peu étrange, mais beaucoup d’entre elles estimaient qu’il s’agissait d’une manière plus naturelle d’interagir avec la plupart des services fournis par nos téléphones et nos ordinateurs. et ont fourni certaines de leurs fonctionnalités principales via un ensemble de commandes vocales, ce qui leur a permis de devenir plus convivial et de renforcer leur marque.

Les chatbots vocaux sont non seulement populaires parce qu’il est facile de parler à un appareil, mais ils viennent aussi très handy lorsque vos mains sont occupées (par exemple, lorsque vous cuisinez) ou plus important encore lorsque vos yeux devraient être focalisés sur ailleurs (par exemple, lorsque vous conduisez).

In this article, vous apprendrez à créer votre propre assistant vocal. Vous utiliserez NativeChat pour créer un compétence Alexa .

Scénarios

Pour créer quelque chose de valable, nous avons besoin d'un "réel" client et d'un ensemble de "vrais" scénarios.

Une entreprise de télécommunications appelée C-Mobile fournit divers services à ses clients.

Scénario n ° 1: consulter mon solde

En tant que client, je souhaite pouvoir aider les clients du paiement par répartition à divers services afin d’alimenter leurs comptes et d’acheter des ensembles de données. demander à mon appareil Alexa de vérifier mon solde.

Alexa devrait indiquer le montant de crédit qu'il me reste sur mon compte, ainsi que les minutes, les textes et les données restants.

Scénario n ° 2 – complément

En tant que client, je souhaite pouvoir recharger mon compte.

Alexa devrait me guider tout au long des étapes requises, fournir une liste d'options et, à la fin, indiquer le crédit mis à jour sur le compte.

Scénario # 3 – acheter un paquet de données

En tant que client, je veux pouvoir acheter des paquets de données supplémentaires.

Alexa devrait me guider à travers les étapes à suivre, me fournir une liste de paquets de données à payer. pour les crédits sur le compte.

Hypothèses / simplification du scénario

Habituellement, Lorsque vous créez des applications pour des services comme celui-ci, vous disposez d'une fonctionnalité qui permet à votre utilisateur de se connecter à son compte spécifique. Dans le cas des assistants vocaux, cette opération est généralement gérée via le portail administrateur, qui associe ensuite automatiquement le compte de l'utilisateur à leur application.

Il s'agit d'un sujet à part entière, que je prévois de couvrir dans un autre billet de blog. Pour les besoins de cette démonstration, nous allons coder en dur l'identifiant de l'utilisateur dans le projet.

API

C-Mobiles vous fournit une API très simple vous permettant de gérer des comptes individuels. 19659003] Vous pouvez accéder à tous les appels suivants https://demoapis.com/cmobile/012345678/ :

Veuillez noter que tous les appels d'API attendent un paramètre id . . Choisissez un nombre compris entre 9 et 11 chiffres et utilisez-le pour tous vos appels. Ainsi, lorsque vous rechargez un compte puis que vous demandez son statut, le solde sera mis à jour.

De même, si vous utilisez un numéro que quelqu'un d'autre utilise également (ce n'est pas très probable, sauf si vous utilisez la démo id), choisissez un numéro différent et tout ira bien.

Voici la liste des fonctions disponibles:

getAccountStatus

getAccountStatus vous permet de demander le solde du compte, minutes, SMS et données.

Signature:

Vous devez indiquer votre compte sélectionné id .

Exemple:

Voici un compte rendu Exemple d'obtention du solde du compte pour id 012345678

https://demoapis.com/cmobile/012345678/getAccountStatus

Résultat:

 {
  "solde": 12,
  "minutes": 100,
  "SMS": 200,
  "mégaoctets": 29,
  "data": "29 MB"
} 

topUp

topUp vous permet de recharger le solde de votre compte. En conséquence, le solde augmente et le statut de votre compte est mis à jour.

Signature: [19659040] / topUp? Val = {montant} & card = {4 chiffres}

Vous devez fournir le compte sélectionné id .

De plus, vous devez fournir deux paramètres de requête: [19659043] val – avec le montant que vous souhaitez recharger.

  • card – Les 4 derniers chiffres de la carte à utiliser, ce paramètre n’est utilisé à rien, mais il est là pour simuler le scénario. 19659045] Exemple:

    Voici un exemple de la façon dont l’identifiant de compte 012345678 avec doit être top avec la carte se terminant par 9876 ( ne vous inquiétez pas, il n'y aura pas de paiement par carte 1965).

    https://demoapis.com/cmobile/012345678/topUp?val=10&card=9876

    Résultat: [19659036] {
      "SMS": 200,
      "solde": 22,
      "minutes": 100,
      "data": "29 MB",
      "mégaoctets": 29
    }

    availableCards

    availableCads vous permet de rechercher toutes les cartes de paiement associées au compte.

    Signature:

    Vous devez indiquer le compte que vous avez sélectionné id .

    Exemple:

    Voici un exemple de vérification des cartes de paiement associées au numéro de compte 012345678 .

    https : //demoapis.com/cmobile/012345678/availableCards

    Résultat:

     [
      {
        "card": "6575",
        "val": 6575
      },
      {
        "card": "3688",
        "val": 3688
      }
    ]  

    resetAccount

    resetAccount vous permet de réinitialiser votre compte. Cela peut s'avérer utile lorsque vous souhaitez recommencer à zéro.

    Signature:

    Vous devez indiquer votre compte sélectionné id .

    Exemple: [1945] 19659003] Voici un exemple de réinitialisation de l'ID de compte 012345678 .

    https://demoapis.com/cmobile/012345678/resetAccount

    . :

     {
      "solde": 12,
      "minutes": 100,
      "SMS": 200,
      "mégaoctets": 29,
      "data": "29 MB"
    } 

    dataPackages

    dataPackages vous permet d'afficher les packages de données disponibles à l'achat.

    Pour chaque package, vous recevrez un nom, une taille de données formatée, des mégaoctets et un prix.

    ] Signature:

    Aucun paramètre requis.

    Exemple:

    Voici un exemple de la procédure d'affichage des ensembles de données disponibles.

    https: // demoapis.com/cmobile/012345678/dataPackages

    [19459010HERRESULT :[19659036HER1919909299

    buyData

    buyData vous permet d'acheter davantage de données pour votre compte. En conséquence, davantage de données seront ajoutées au compte et le prix du colis sera déduit du solde.

    Signature:

    Vous devez indiquer le compte que vous avez sélectionné id .

    De plus, vous devez fournir un paramètre de requête dataPack avec le nom du paquet que vous voulez acheter.

    Exemple:

    Voici un exemple. exemple d'achat d'un pack de données moyen pour le compte id 012345678 .

    https://demoapis.com/cmobile/012345678/buyData?dataPack=tiny

    Résultat:

     {
      "SMS": 200,
      "solde": 5,
      "minutes": 100,
      "data": "0,5 Go",
      "mégaoctets": 541
    } 

    Le déroulement du didacticiel

    Nous allons aborder ce projet en deux étapes.

    • Phase 1 – Prise en main – Vous construirez une partie intelligente de la conversation (scénario: Check my balance ), puis testez-le dans le cadre d'une compétence Alexa. Cette partie vise principalement à vérifier que votre environnement est correctement configuré et à obtenir une réponse d'une compétence Alexa.
    • Phase 2 – Ajoutez d'autres conversations – Vous ajouterez les conversations restantes. Cette partie se concentre plus sur la gestion du flux de conversation et la réalisation des scénarios fournis.

    Phase 1 – Mise en route

    La ​​mise en route est aussi simple que 1,2,3, ce qui peut être fait en ces étapes très simples. 19659092] Étape 1 – Créez un nouveau projet NativeChat

    Tout d'abord, vous devez vous connecter à NativeChat Console .

    Si vous n'avez pas encore de compte, vous pouvez le créer ici . Ne vous inquiétez pas, vous pouvez commencer gratuitement.

    Après vous être connecté, vous pouvez créer un nouveau chatbot.
    Appuyez sur le bouton [+ New bot] :

     créez un nouveau bot

    1. Appelez le projet cmobile .
    2. Conservez le langage de bot comme . ] English et Commencez par en tant que Bot vierge .
    3. Appuyez sur le bouton [Create] .

     nouvelle configuration de bot

    Cela créera un simple chatbot, avec quelques conversations super basiques.

    Test

    Pour le tester, appuyez sur le bouton [Test] . Puis, quand le chatbot se charge:

    • Type: hi
    • Le chatbot devrait répondre par un message de bienvenue
    • Cliquez sur l'un des boutons ou tapez: Conversation 1 [19659099] Le chatbot devrait répondre avec quelque chose comme: Ceci est la conversation 1

    Étape 2 – Créez votre première conversation – vérifiez mon solde

    Maintenant que vous avez un chatbot actif, il est temps de mettre en œuvre la première. conversation, qui concerne le scénario de vérifier ma balance .

    Lorsque l'utilisateur dit "Vérifier mon solde" le chatbot doit appeler la fonction getAccountStatus puis imprimez le message avec l'état renvoyé par l'API.

    Êtes-vous prêt? Allons-y.

    Ajouter une nouvelle conversation

    Dans l'onglet Cognitive Flow (qui est l'onglet par défaut), il y a à droite une liste de toutes les conversations. ce projet. Cliquez sur conversationTwo qui vous mènera à cette conversation.

    À la fin du json contenant conversationTwo ajoutez une virgule et dans la nouvelle début de ligne en tapant con cela devrait déclencher une petite fenêtre avec une liste d'extraits de code.

    Les extraits de code sont vraiment utiles dans la construction de votre chatbot, car ils vous aident à générer le JSON. dans le bon format, ils vous font également gagner beaucoup de temps.

    Sélectionnez l’extrait de conversation-objectif et appuyez sur entrée. Cela devrait générer le code suivant:

     "nom-conversation": {
      "type": "objectif",
      "étapes": [
    
      ]
    } 

    Remplacer "nom-conversation" par "solde-check-balance" .

    Ajoutez un message de réponse à la conversation

    Ensuite, vous devez ajouter un message dans la conversation

    Astuce: Si vous appuyez sur l'onglet le curseur sautera dans le tableau étapes [ ] .

    steps [ ] array, commencez à taper step (ou stme pour step message ) et sélectionnez le step-message . . Cela devrait produire le code suivant:

     {
      "type": "message",
        "messages": [
          "Your message"
      ]
    } 

    Modification "Votre message" en "Je vérifie votre solde" .

    La conversation avec le check-my-balance devrait ressembler à ceci :

     "check-my-balance": {
      "type": "objectif",
      "étapes": [
        {
          "type": "message",
          "messages": [
            "I am checking your balance"
          ]
        }
      ]
    } 

    Voici comment procéder:

     créer mon solde

    Entraînez le chatbot à savoir quand utiliser votre nouvelle conversation

    Ensuite, vous devez vous entraîner le chatbot doit comprendre quand déclencher cette conversation.

    Accédez à l'onglet Formation cliquez sur Conversation intégrée puis appuyez sur le bouton [Add value] .

    . Définissez la valeur sur "check-my-balance" – comment le moteur de chatbot sait quelle conversation déclencher

    Ajoutez les expressions suivantes – ceci vous indiquez au moteur du chatbot quand déclencher la conversation:

    • Vérifier mon solde
    • Quel est mon solde?

    Appuyez sur le bouton [Save] .

    Test

    ] Pour tester cette nouvelle conversation, appuyez sur le bouton [Test] et tapez: Vérifier mon solde

    Le chatbot devrait répondre avec votre message. .

    Voici comment procéder:

     formation vérifier mon solde

    Mettre à jour la conversation pour retourner le statut du compte

    Maintenant que la conversation fonctionne, elle Il est temps de le changer pour qu'il renvoie les données réelles .

    Mettez à jour la conversation pour appeler l'API et imprimer un message

    Supprimez l'étape de message afin que les "étapes": [ ] le tableau est vide.

    Commencez à taper stwe et sélectionnez step-webhook . Supprimez toutes les propriétés de la source de données mais conservez le point final .

    Ajouter une propriété "entité" (il est préférable de la placer sous "type": "webhook", ) et appelez-la "statut" – le résultat de l'appel API sera stocké dans le statut .

    Enfin, vous devez ajouter une propriété "messages" à cette étape, qui contiendra le message à être imprimé lorsque l'API renvoie le résultat, comme suit:

     "messages": [
      "Let's have a look at your account. You have {{status.balance}} dollars left."
    ]

    Conseil: Vous pouvez également créer une réponse sur plusieurs lignes – ce qui n'est pas très important avec les chatbots vocaux, car ceux-ci ont tendance à lire la totalité du résultat, comme une ligne, mais cela semble mieux lorsque nous le testons dans la console.

    Pour ajouter une réponse multiligne, nous devons utiliser un tableau de tableaux.

    Voici deux exemples:

    Un tableau

     "messages": [
      "Line 1",
      "Line 2",
      "Line 3"
    ] 

    Ceci produira une des lignes imprimées (ou parlées) au hasard.

    Deux tableaux

     "messages": [
      [
        "Line 1",
        "Line 2",
        "Line 3"
      ]
    ] 

    Toutes les lignes sont imprimées (ou parlées).

    Voici les messages contenant toutes les données renvoyées à partir de l'API getAccountStatus :

    . ] "messages": [
      [
        "Let's have a look at your account. You have:",
        "{{$currency status.balance 'USD'}}",
        "{{status.minutes}} minutes, {{status.SMS}} text messages",
        "and {{status.data}} left"
      ]
    ] 

    L'ensemble de la conversation check-my-balance devrait ressembler à ceci:

     "check-my-balance": {
      "type": "objectif",
      "étapes": [
        {
          "type": "webhook",
          "entity": "status",
          "data-source": {
            "endpoint": "https://demoapis.com/cmobile/012345678/getAccountStatus"
          },
          "messages": [
            [
              "Let's have a look at your account. You have:",
              "{{$currency status.balance 'USD'}}",
              "{{status.minutes}} minutes, {{status.SMS}} text messages",
              "and {{status.data}} left"
            ]
          ]
        }
      ]
    } 

    Test

    Pour tester cette nouvelle conversation, appuyez sur le bouton [Test] et tapez: Quel est mon solde?

    Le chatbot doit répondre avec votre message.

    ] Voici comment procéder:

     création de mon solde

    (Facultatif) Rangez les messages initiaux

    Avant de poursuivre, il est judicieux de nettoyer les messages initiaux.

    Votre projet chatbot a 3 conversations d’assistance:

    • welcome – cette conversation est déclenchée lorsque vous commencez à parler avec votre chatbot. Cette conversation déclenche la conversation help .
    • help – cette conversation est déclenchée lorsque le chatbot pense que vous pourriez avoir besoin d'aide.
    • restart – cette conversation est déclenchée lorsque vous tapez / say "redémarrer" . Cette conversation déclenche la conversation de bienvenue .

    Mettez à jour le message de bienvenue

    Trouvez la conversation de bienvenue : "Ceci est une conversation bienvenue pour votre chatbot " texte pour " Bienvenue dans le libre-service c-mobile. "

    Mettez à jour le message d'aide et la liste des actions proposées

    Retrouvez le . ] help conversation et supprimez la ligne "Si vous êtes bloqué, vous pouvez toujours reprendre la conversation en tapant" redémarrer "", . De cette façon, la conversation d'introduction sera beaucoup plus courte.

    De plus, vous devez modifier les options d'affichage de de de "Conversation 1", "Conversation 2" à "Check mon solde "," Recharger "," Acheter des données ". Vous implémenterez les recharges et les données d'achat plus tard mais il est bon de disposer déjà de ces options.

    Votre accueil et aide ] les conversations devraient ressembler à ceci:

     "welcome": {
      "type": "support",
      "étapes": [
        {
          "type": "message",
          "messages": [
            "Welcome to the c-mobile self-service."
          ]
        },
        {
          "type": "conversation",
          "conversation": "aide",
          "conditions": [
            "{{$not ($has conversation) }}"
          ]
        }
      ]
    },
    "Aidez-moi": {
      "type": "support",
      "étapes": [
        {
          "type": "message",
          "messages": [
            [
              "Here is what I can do for you:"
            ]
          ],
          "afficher": {
            "type": "réponse rapide",
            "data": [
              "Check my balance",
              "Top up",
              "Buy data"
            ]
          }
        }
      ]
    }, 

    Test

    Pour tester cette nouvelle configuration, appuyez sur le bouton [Test] et tapez: Bonjour

    Le message de bienvenue doit être différent.

    Supprimer les conversations un / deux [19659105] De plus, vous pouvez supprimer ConversationOne et ConversationTwo car ils ne sont plus nécessaires.

    Cette opération doit être effectuée en deux étapes:

    • Supprimez le json à partir du flux cognitif – vous pouvez le faire en cliquant sur le petit panneau - situé en regard de la conversation que vous souhaitez supprimer, puis mettez en surbrillance la ligne en dessous et supprimez-la.
    • Supprimez les phrases du Entraînement à la conversation – ouvrez l'onglet Formation accédez à Conversation puis appuyez sur la corbeille icon next à ConversationOne et ConversationTwo .

    Le code

    L'ensemble du cognit ive flow devrait ressembler à ceci:

     {
      "conversations": {
        "Bienvenue": {
          "type": "support",
          "étapes": [
            {
              "type": "message",
              "messages": [
                "Welcome to the c-mobile self service."
              ]
            },
            {
              "type": "conversation",
              "conversation": "aide",
              "conditions": [
                "{{$not ($has conversation) }}"
              ]
            }
          ]
        },
        "Aidez-moi": {
          "type": "support",
          "étapes": [
            {
              "type": "message",
              "messages": [
                [
                  "Here is what I can do for you:"
                ]
              ],
              "afficher": {
                "type": "réponse rapide",
                "data": [
                  "Check My Balance",
                  "Top up",
                  "Buy more data"
                ]
              }
            }
          ]
        },
        "redémarrer": {
          "type": "support",
          "étapes": [
            {
              "type": "message",
              "messages": [
                "Your conversation is restarted."
              ]
            },
            {
              "type": "conversation",
              "conversation": "bienvenue"
            }
          ]
        },
        "check-my-balance": {
          "type": "objectif",
          "étapes": [
            {
              "type": "webhook",
              "entity": "status",
              "data-source": {
                "endpoint": "https://demoapis.com/cmobile/012345678/getAccountStatus"
              },
              "messages": [
                [
                  "Let's have a look at your account. You have:",
                  "{{$currency status.balance 'USD'}}",
                  "{{status.minutes}} minutes, {{status.SMS}} text messages",
                  "and {{status.data}} left"
                ]
              ]
            }
          ]
        }
      },
      "paramètres": {
        "invalid-replies": [
          "I am not sure I understood what you said."
        ],
        "échec général": [
          "We are experiencing technical difficulties at this moment."
        ],
        "messages de conversation précédents": [
          "I am going back to the {{ conversationDisplayName }} now."
        ]
      },
      "commandes": {
        "PAGE SUIVANTE": [
          "Next 5"
        ],
        "REDÉMARRAGE": [
          "restart"
        ]
      }
    } 

    Étape 3 – Connectez-vous à la console Alexa

    Maintenant que vous avez un chatbot qui fonctionne, il est temps de commencer à lui parler avec des commandes vocales réelles. La meilleure chose à faire est que vous n'avez même pas besoin d'un appareil Alexa pour le faire.

    Vous avez uniquement besoin d'une console de développeur Alexa configurée et de la compétence NativeChat Proxy . [19659207] Amazon Alexa Console

    Ensuite, vous devez accéder à la Alexa Developer Console et ouvrir le simulateur Alexa Test.

    Pour ouvrir le simulateur, vous devez utiliser une compétence Alexa. Si vous en avez déjà une, allez à l'onglet Test et vous êtes prêt à partir.

    Si vous ne possédez pas encore de compétence Alexa, voici ce que vous devez faire: 19659107]
        

    Dans la console de développeur Alexa appuyez sur le bouton Créer une compétence .

    Remarque: vous pourrez utiliser cette compétence plus tard, lorsque vous serez prêt à publier votre chatbot en tant que compétence Alexa.

        

  •     

    Appelez la compétence C Mobile et sélectionnez Modèle personnalisé et configurez votre propre méthode d'hébergement puis appuyez sur le bouton Créer une compétence .

        

  •     

    Sélectionnez le modèle "Partir à zéro" puis appuyez sur le bouton Choisissez .

        

  •     

    Ouvrez le JSON Editor et trouvez "Amazon.FallbackIntent" et définissez les échantillons sur "Sample" (à ce niveau). il peut y avoir n'importe quel mot, nous avons juste besoin de quelque chose à l'intérieur), il devrait ressembler à ceci:

     {
        "name": "AMAZON.FallbackIntent",
        "échantillons": [
            "Sample"
        ]
    },  

        

        

  •     

    Appuyez sur le bouton Build Model et attendez un peu.

        

  •     

    Enfin, ouvrez l'onglet Test et faites passer les tests de compétences de au au développement .

        

  • Voici comment procéder:

    Compétence NativeChat Proxy


    NativeChat Proxy
    est une compétence conçue pour se connecter facilement à vos chatbots NativeChat sans avoir à en publier une nouvelle. compétence. Cela fonctionne comme une compétence sandbox, qui relaie tous les messages de l'utilisateur au chatbot NativeChat connecté.

    Vous pouvez l'installer à l'aide de la console Alexa Developer. Il suffit de taper:
    enable nativechat proxy

    Note: la compétence NativeChat Proxy fonctionne dans les langues suivantes:

    • anglais (AU) 1945
    • Anglais (CA)
    • Anglais (IN)
    • Anglais (UK)
    • Anglais (US) ??

    Utiliser un proxy

    Maintenant, pour compléter la boucle, il vous suffit d'obtenir l'ID de proxy et de le transmettre à la compétence NativeChat Proxy .

    Dans . ] NativeChat développez les options du test puis choisissez le test dans la console Alexa de développeur . Cela vous donnera des instructions sur la façon de le faire fonctionner.

    Vous devriez voir quelque chose comme ceci:

     Écran du proxy NativeChat

    Copiez le dernier message contenant l'identifiant du proxy . (indice. vous pouvez cliquer sur la petite icône à côté de celle-ci.)

    Retournez à la console Alexa Developer :

    • Type: nativechat proxy et appuyez sur Entrée. 19659099] Collez la commande de procuration et appuyez sur entrée.

    Et voilà, votre chat est prêt à vous écouter et à vous répondre.

    Voici comment procéder: [19659241] Parlez-moi

    Il y a deux façons d'interagir avec les chatbots dans la console Alexa Developer .

    • Vous pouvez tout taper, comme vous le feriez dans une interface textuelle.
    • Vous pouvez lui parler, tout comme vous vous attendriez à utiliser le vrai appareil, sauf que vous n'avez pas à dire le mot-clé "Alexa" . Pour ce faire, cliquez sur l'icône du microphone et maintenez-la enfoncée, puis relâchez-la lorsque vous avez terminé la commande.

    Remarque: si vous rechargez la page Alexa Developer Console ou si vous la fermez et l'ouvrez à nouveau, la console se déconnectera du proxy NativeChat compétence. Tout ce que vous avez à faire est de dire: "NativeChat Proxy" et vous serez de retour à l'endroit où vous l'avez laissé (inutile de fournir à nouveau l'identifiant du proxy).

    Test

    Pour entendre la bienvenue message, dites: "salut"

    Puis dites: "Vérifiez mon solde"

    Et juste comme ça, vous venez de parler à votre premier chatbot NativeChat par le biais d'un Alexa

    Bien fait, vous méritez une tape dans le dos:

     une tape dans le dos

    Que se passe-t-il ici

    La façon dont cela fonctionne est assez simple.

    • Chaque fois que vous parlez, Alexa utilisera la reconnaissance vocale pour convertir votre parole en texte.
    • Il l'envoie à NativeChat – via la compétence NativeChat Proxy.
    • NativeChat exécute ses algorithmes pour décider d'une réponse, qui est renvoyée à Alexa.
    • Enfin, Alexa lit le message à voix haute et attend la réponse de l'utilisateur.

    Speaking Challenges

    L'un des défis les plus difficiles que vous puissiez rencontrer est la voix. reconnaissance.

    Il peut arriver que vos utilisateurs essaient de dire des choses comme: "Payer maintenant" alors qu’Alexa pourrait le comprendre comme étant "Joue maintenant" . Cela peut être assez problématique lorsque votre chatbot attend un élément spécifique.

    Pour contourner ce problème, vous devez le former pour qu'il comprenne différentes manières de dire la même chose – cela inclut des phrases différentes, mais aussi des mots différents qui sonnent de la même manière – donc qu'il répondrait avec la même action, quelle que soit la manière dont quelqu'un pourrait prononcer ses commandes.

    Débogage de conversations

    Dans le cas de ce chatbot, un utilisateur pouvait dire: "Check my balance" qui Alexa pourrait comprendre "Shake my balance" . Ceci est encore assez proche, donc NativeChat pourrait l'accepter.

     conversations de débogage

    Toutefois, si vous avez des difficultés avec certaines commandes vocales, vous pouvez déterminer quels messages sont envoyés à NativeChat et comment. interprété. Cela sera particulièrement utile lorsque vous commencerez à utiliser vos chatbots en dehors de la console de développeur Alexa.

    Sur le portail NativeChat, accédez à l'onglet History . Trouvez la conversation qui vous posait problème et cliquez dessus.

    Astuce: vous pouvez ajouter un filtre pour afficher uniquement les conversations ayant une date précise ou Alexa uniquement.

    À partir de cet emplacement, vous pouvez voir tous les messages envoyés et reçus. Si vous cliquez sur l'entrée utilisateur, vous verrez comment cela a été interprété par NativeChat. Dans le cas de "Shake my balance" NativeChat était sûr à 75% que vous vouliez vérifier votre solde, donc tout va bien.

     NativeChat compréhension

    Pour 100%, vous devez ajouter "Shake my balance" à la formation à la conversation pour check-my-balance .

    Finition de l'application

    Maintenant que connectez votre chatbot à Alexa, vous pouvez alors mettre en œuvre les conversations restantes, "Recharger" et "Acheter des données".

    Cette fois, vous pourrez éditer les conversations et les tester immédiatement avec des commandes vocales. Pas besoin de configurer l'identifiant du proxy, ou quoi que ce soit d'autre. Tous les changements seront disponibles dans Alexa dès que vous les aurez sauvegardés.

    Conversation: complément

    Dans cette conversation, le chat devrait demander à l'utilisateur:

    • pour le montant qu'il souhaite. complétez avec
    • quel paiement carte ils veulent utiliser
    • à pour confirmer leur sélection

    Enfin, vous devez exécuter la recharge (si elle est confirmée) ou annuler le processus (si la confirmation est rejetée).

    API

    Pour cette conversation, vous devez utiliser les appels d'API suivants:

    • availableCards – Permet d'obtenir une liste des cartes de paiement associées au compte.
          
    • topUp – utilisé pour effectuer le rechargement
          

    Rappel: pour éviter tout conflit avec d'autres utilisateurs de cette API, veuillez utiliser un identifiant de compte différent de celui utilisé dans l'exemple (012345678).

    Ajout d'une nouvelle conversation

    Premièrement, vous devez créer une nouvelle conversation appelée complémentaire comme vous l'avez fait avec le check-my-balance .

    Ajouter check-my-balance [19659288] Accédez à l'onglet Flux cognitif et recherchez la fin du code du "check-my-balance" .

  • Ajoutez une virgule et une nouvelle ligne. 19659099] Commencez à taper con sélectionnez l'extrait conversation-goal et appuyez sur entrée.
  • Changement "nom-conversation" en "complément" .
  • Ajouter un exemple de démarche

    Juste pour voir si la conversation fonctionne, vous devrait ajouter un exemple de message step.

    1. Dans le tableau steps commencez à taper step et sélectionnez l'extrait de message step-message .
    2.     

    Définissez le message sur "Travaux complémentaires" .

    La conversation devrait ressembler à ceci:

     "complément": {
      "type": "objectif",
      "étapes": [
        {
          "type": "message",
          "messages": [
            "top-up works"
          ]
        }
      ]
    }  

        

        

    Entraînez le chatbot à savoir quand utiliser votre nouvelle conversation

    Enfin, entraînez-le à comprendre quand déclencher cette conversation.

    1. Accédez à l'onglet Training cliquez sur l'onglet. Conversation intégrée puis appuyez sur le bouton [Add value] .
    2. Définissez la valeur sur "complémentaire"
    3.     

      Ajoutez les expressions suivantes:

          

    4.     

      Appuyez sur le bouton [Save] .

          

    Test

    Pour le vérifier, accédez à Console développeur Alexa et dites Rechargez ou Ajoutez des fonds

    Alexa devrait répondre avec votre message.

    Note n ° 1

    Si Alexa ne comprend pas vos expressions, comme lorsque vous dites "rechargez" vous pourriez peut-être le comprendre comme "top pop" vous pouvez ensuite ajouter cette expression à la formation.

    Note # 2

    Vous devriez pouvoir continuer à utiliser votre chatbot via l'application proxy. Mais si vous ne dites pas simplement "NativeChat Proxy".

    Implémentez la conversation

    Maintenant que vous avez la conversation complémentaire il est temps de la mettre en œuvre avec la logique appropriée. 19659003] Notez que vous devez tester la conversation à chaque fois que vous ajoutez une nouvelle étape.

    Nettoyage

    Commencez par supprimer l'exemple de message Step afin que le tableau Steps est vide, comme ceci

     "complément": {
      "type": "objectif",
      "étapes": [
        
      ]
    } 

    Demander une valeur complémentaire

    La première étape de cette conversation consiste à demander à l'utilisateur combien il souhaite recharger.

    Dans le tableau steps commencez à taper étape et sélectionnez l'extrait étape-question .

    Le code suivant devrait vous être présenté:

     {
      "type": "question",
      "entité": "nom-entité",
      "type d'entité": "",
      "messages": [
        "How to ask for entity?"
      ]
    } 

    Voici ce que signifie son tout:

    • entité – le nom de la variable où la réponse de l'utilisateur va être stockée. Notez que ce ne sera pas l'expression entière que l'utilisateur dira, mais la valeur réelle que vous recherchez.
          
      • l'a mis à: "valeur complémentaire"
      •     

    • entity-type — the type of the entity that you are after, this is how the chatbot will know what to find the value that you are after
          
    • messages — the expression your chatbot will use to ask for user input
          
      • set it to: "How much would you like to top up?"
      •     

    Your step should look like this:

    {
      "type": "question",
      "entity": "top-up-value",
      "entity-type": "Number",
      "messages": [
        "How much would you like to top up?"
      ]
    }

    Press the [Save] button and test.

    Test

    Now, when you say:

    • "Top up"
    • and then "Make it twenty five"

    Alexa will not say anything after you provide the answer. Don't worry, that is OK, as you don't need to confirm the answers provided to the chatbot questions.

    Adding a reaction

    Note, that the chatbot can recognize entity values at any time during the conversation. For example, when you say "Top up twenty five"the chatbot will understand that:

    • you want to top-up
    • the top-up-value is25

    In this case, the chatbot should respond with a confirmation that it understood the extra entity value. This is done with acknowledgements.

    After the end of messages array, add a comma, then add the following code:

    "reactions": {
      "acknowledgements": [
        "I understand that you want to top up {{$currency top-up-value 'USD'}}"
      ]
    }

    Press the [Save] button and test.

    Test

    Now, when you say: "Top up twenty five"

    Alexa should respond with: "I understand that you want to top up $25.00"

    The full step should look like this:

    {
      "type": "question",
      "entity": "top-up-value",
      "entity-type": "Number",
      "messages": [
        "How much would you like to top up?"
      ],
      "reactions": {
        "acknowledgements": [
          "I understand that you want to top up {{$currency top-up-value 'USD'}}"
        ]
      }
    },

    Ask for the card number

    The next step should be to ask the user to provide the payment card they want to use.

    In the case of the c-mobile API, you only need to provide the last 4 digits of the card, which is already stored in the system. You can see all available cards by calling: https://demoapis.com/cmobile/012345678/availableCards.

    Go to the Cognitive Flow tab, and find the end of the top-up-value question step.

    Add a comma, and start typing stq and select the step-question snippet.

    Set the properties to:

    • entity: card
    • entity-type: Number
    • messages: Which card would you like to use?

    Make it explicit

    Additionally, to avoid the number in the card ending clashing with the top-up-valueyou need to make this question explicit. This means that when the user is asked for the card number, no other entities of type Number can be updated.

    Add a new line after entity-type and add "is-explicit": true,

    Provide possible values

    To help the user choose the right value, you can call availableCardsand provide the users with the possible values.

    After the messages array, add a comma and then add the following code:

    Reminder: to avoid conflicting with other people using this API, please change account id

    "display": {
      "type": "quick-reply",
      "data-source": {
        "endpoint": "https://demoapis.com/cmobile/012345678/availableCards"
      },
      "template": "ending **{{card}}"
    }

    Press the [Save] button and test.

    Test

    Now try to say:

    • "Top up 20"
    • "use card ending 1234"

    Alexa truncating leading zeroes

    Note, when you tell Alexa a number that starts with leading zeroes, Alexa will skip these digits.

    For example, input: Use card 0020will be captured as Use card 20.

    Make sure to be aware of this behavior, so that when you expect a 4 digits card or PIN, and if you receive less, you should be safe to assume that the missing digits are zeroes.

    (Optional) Validation

    If you would like to make this conversation more robust and make sure that the user always provides a card number that is actually stored on the system, you could use a validation.

    There are various types of validations, which allow you to validate that a provided value is a telephone number, or that it matches a specific regular expression, and many more. You can read all about validation rules in the docs.

    The validation that you need to use in this scenario is a custom webhook validation. This validation allows you to execute a query, then validate that the entity value matches the _response returned from the query.

    Add the following code after the display section:

    Reminder: remember to update your account id

    "reactions": {
      "validations": [
        {
          "type": "custom",
          "parameters": {
            "data-source": {
              "endpoint": "https://demoapis.com/cmobile/012345678/availableCards",
              "selector": "$[:].val"
            },
            "condition": "{{$in card _response}}",
          },
          "error-message": [
            "Card number {{card}} not found on the system."
          ]
        }
      ]
    }

    Here is how to understand this code:

    •     

      data-source

          

      •         

        endpoint: contains the URL with a query

      • selector: parses the response to a specific format, it uses JSON Path Expressions to do the job.

      In this case, the response from /availableCards query will look something like this:

      [
        {
          "card": "6575",
          "val": 6575
        },
        {
          "card": "3688",
          "val": 3688
        }
      ]

          

          

      While you just want to check if the card value matches one of the val values.

      To do that $.[:] will give you all objects from the response, while .val will return all values of val. As a result $:[:].val will return:

          
          

    •     

      condition: the expression to test the validation.

      $in card _response checks if the value of card exists in the parsed _response

          

    •     

      error-message: the error message, you can use {{card}} to tell the user what card number doesn't seem to work.

          

    Press the [Save] button and test.

    Test

    Now try to say:

    • "Top up 20"
    • "use card ending "
      • the chatbot should respond with an error message, and ask for input again
      •     

    • "use card ending [correct number]"
          
      • the chatbot should continue
      •     

    The full step should look like this:

    {
      "type": "question",
      "entity": "card",
      "entity-type": "Number",
      "is-explicit": true,
      "messages": [
        "Which card would you like to use? "
      ],
      "display": {
        "type": "quick-reply",
        "data-source": {
          "endpoint": "https://demoapis.com/cmobile/012345678/availableCards"
        },
        "template": "ending **{{card}}"
      },
      "reactions": {
        "validations": [
          {
            "type": "custom",
            "parameters": {
              "condition": "{{$in card _response}}",
              "data-source": {
                "endpoint": "https://demoapis.com/cmobile/012345678/availableCards",
                "selector": "$[:].val"
              }
            },
            "error-message": [
              "Card number {{card}} not found on the system."
            ]
          }
        ]
      }
    }

    Ask to confirm the values

    Before, the chatbot performs the top-up operation, it should ask the user to confirm the top-up-value and the card.

    This can be done with a Confirmation step.

    Go to the end of the card question step, add a comma and start typing stco and select the step-confirmation snippet. The snippet should look like this.

    {
      "type": "confirmation",
      "entity": "result-entity-name",
      "messages": [
        "Confirm action?"
      ]
    }

    Set the properties to:

    • entity: top-up-confirmation,
    • messages: Just to confirm. Do you want to top up {{$currency top-up-value 'USD'}} with the card ending with {{card}}?

    Press the [Save] button and test.

    Test

    Now try to say:

    • "Top up 20"
    • "use card ending [correct number]"
          
      • the chatbot should ask the confirmation question including the top-up-value and the card number.
      •     

    • "Yes"

    The full step should look like this:

    {
      "type": "confirmation",
      "entity": "top-up-confirmation",
      "messages": [
        "Just to confirm. Do you want to top up {{$currency top-up-value 'USD'}} with the card ending with {{card}}?"
      ]
    }

    Display cancellation message

    If the user rejects the confirmation, then the chatbot should respond with a message confirming the choice.

    This can be done by simply adding a new message step.

    However, you want this step to only trigger when top-up-confirmation is false. This can be done with the help of the conditions property.

    You can learn more about Conditions in the docs.

    Add a new message step at the end of the conversation, start typing stme and select the step-message snippet.

    Set the messages to Top-up has been cancelled.

    Add the conditions property with the following (self-explanatory) condition:

    "conditions": [
      "{{$not top-up-confirmation}}"
    ]

    Press the [Save] button and test.

    Test

    Start the chat, and say "No" when you get asked to confirm.

    The chatbot should respond with the cancellation message.

    The full step should look like this:

    {
      "type": "message",
      "messages": [
        "Top-up has been cancelled"
      ],
      "conditions": [
        "{{$not top-up-confirmation}}"
      ]
    },

    Execute the top-up

    The final step is to execute the top-up call, by calling the cmobile API topUp function. This operation can be done with a Webhook step.

    However, once again you don't want this step to be executed every time. You want this step to be executed when top-up-confirmation is true.

    Add a new Webhook step at the end of the conversation, start typing stwe and select the step-webhook snippet. The snippet should look like this:

    {
      "type": "webhook",
      "data-source": {
        "endpoint": "https://",
        "method": "POST",
        "headers": {
          "header name": "header value"
        },
        "payload": {
          "key": "value"
        }
      }
    }

    Data Source

    You don't need the methodheaders and payload properties, so just delete them. Then update the endpoint to call the topUp API function and pass top-up-value as vallike this:

    "data-source": {
      "endpoint": "https://demoapis.com/cmobile/012345678/topUp?val={{top-up-value}}"
    },

    Condition

    To make sure that this step is only triggered when the user confirms they want to proceed, add the following conditions property to the step (not inside the data-source):

    "conditions": [
      "{{top-up-confirmation}}"
    ]

    Confirmation message

    Finally, you need to display a message confirming that the transaction is complete.

    To do that you need to add two properties: entity and messages.

    Add an entity property called top-up-response (it is best to add it below type)

    "entity": "top-up-response",

    Add a messages property with the following message (it is best to add it below conditions:

    "messages": [
      "Your new balance is {{$currency top-up-response.balance 'USD'}}"
    ]

    The full step should look like this:

    {
      "type": "webhook",
      "entity": "top-up-response",
      "data-source": {
        "endpoint": "https://demoapis.com/cmobile/012345678/topUp?val={{top-up-value}}"
      },
      "conditions": [
        "{{top-up-confirmation}}"
      ],
      "messages": [
        "Your new balance is {{$currency top-up-response.balance 'USD'}}"
      ]
    }

    Press the [Save] button and test.

    Test

    Go through the chat conversation, and say "Yes" when you get asked to confirm. The chatbot should execute the Top-Up API call and respond with updated balance value. It should be increased by the amount specified in the first step.

    The code

    The whole top-up conversation should look like this:

    "top-up": {
      "type": "goal",
      "steps": [
        {
          "type": "question",
          "entity": "top-up-value",
          "entity-type": "Number",
          "messages": [
            "How much would you like to top up?"
          ],
          "reactions": {
            "acknowledgements": [
              "I understand that you want to top up {{$currency top-up-value 'USD'}}"
            ]
          }
        },
        {
          "type": "question",
          "entity": "card",
          "entity-type": "Number",
          "is-explicit": true,
          "messages": [
            "Which card would you like to use? "
          ],
          "display": {
            "type": "quick-reply",
            "data-source": {
              "endpoint": "https://demoapis.com/cmobile/012345678/availableCards"
            },
            "template": "ending **{{card}}"
          },
          "reactions": {
            "validations": [
              {
                "type": "custom",
                "parameters": {
                  "data-source": {
                    "endpoint": "https://demoapis.com/cmobile/012345678/availableCards",
                    "selector": "$[:].val"
                  },
                  "condition": "{{$in card _response}}"
                },
                "error-message": [
                  "Card number {{card}} not found on the system."
                ]
              }
            ]
          }
        },
        {
          "type": "confirmation",
          "entity": "top-up-confirmation",
          "messages": [
            "Just to confirm. Do want to top up {{$currency top-up-value 'USD'}} with the card ending with {{card}}?"
          ]
        },
        {
          "type": "message",
          "messages": [
            "Top up has been cancelled"
          ],
          "conditions": [
            "{{$not top-up-confirmation}}"
          ]
        },
        {
          "type": "webhook",
          "entity": "top-up-response",
          "data-source": {
            "endpoint": "https://demoapis.com/cmobile/012345678/topUp?val={{top-up-value}}"
          },
          "conditions": [
            "{{top-up-confirmation}}"
          ],
          "messages": [
            "Your new balance is {{$currency top-up-response.balance 'USD'}}"
          ]
        }
      ]
    }

    Conversation: Buy data

    In this conversation the chatbot should:

    • List available data-packs and ask the user which data-pack they want to buy
    • Execute the data purchase, and provide the updated data

    API

    For this conversation, you should use the following API calls:

    • dataPackages — used to get a list of available data packs
          
    • buyData — used to purchase the selected data pack
          

    Reminder: to avoid conflicting with other people using this API, please use a different account id to the one used in the example (012345678).

    Adding a new conversation

    First, you need to create a new conversation called buy-datawhich is done just like you did it with the top-up.

    Add buy-data

    Go to the Cognitive Flow tab, and find the end of the "top-up" code.

    1. Add a comma, and add a new line.
    2. Start typing conand select the conversation-goal snippet and press enter.
    3. Change "conversation-name" to "buy-data".
    4. Leave the "steps" array empty.

    Train the chatbot to know when to use your new conversation

    Finally, train the chatbot to understand when to trigger this conversation.

    1. Navigate to the Training tab, click on Conversation built-inand then press the [Add value] button.
    2. Set the value to "buy-data"
    3.     

      Add the following expressions:

          

    4.     

      Press the [Save] button.

    Adding DataPack entity

    For the chatbot to allow the user to select a Data Packyou need to train it, so that it understands what Data Packs are available, and how to extract it from a sentence.

    For example, when a user says: "I want a small data pack"

    The chatbot should understand that smallis the name of the required Data Pack.

    Add DataPack to the Entity training list

    Creating new entities is quite simple.

    Open the Training tab and press the [Add new] button and set:

    • The name to DataPack – this will be the name of your new Entity Type
    • The Lookup Strategy to Keyword – this means that there is a specific list of expected values
    • The Training data source to Dynamic – this means that the list of values can be loaded dynamically
    • The Endpoint URL to https://demoapis.com/cmobile/012345678/dataPackages – this is the URL where the data is coming from
    • The Value template to {{name}} – this indicates which field should be used for training of the Entity Type

    Press the [Test] button, which should display a list of possible values.

    If everything looks fine, then press the [Create] button.

    NativeChat will pull the data, and train the data model to understand the values for DataPack.

    Implement the conversation

    Now, that you have the buy-data conversation wired up, and a data model for DataPackit is time to implement the logic.

    Ask for data-pack

    The first step should be to provide the user with the list of available data packs and ask them to select one.

    In the steps array, start typing stq and select the step-question snippet. Set:

    • The entity to data-pack
    • The entity-type to DataPack
    • The messages to "Which data pack would you like?"

    At this point, your code should look like this:

    {
      "type": "question",
      "entity": "data-pack",
      "entity-type": "DataPack",
      "messages": [
        "Which data pack would you like?"
      ]
    },

    This should be enough to let the user choose a Data Pack, however, we should let user what Data Packs are available.

    Provide possible values

    To help the user choose a DataPack, you can call dataPackagesand provide the users with the possible values.

    After the messages array, add a comma and then add the following code:

    "display": {
      "type": "quick-reply",
      "data-source": {
        "endpoint": "https://demoapis.com/cmobile/012345678/dataPackages"
      },
      "template": "{{name}} {{data}} for {{$currency price 'USD'}}"
    }

    Press the [Save] button and test.

    The full step should look like this:

    {
      "type": "question",
      "entity": "data-pack",
      "entity-type": "DataPack",
      "messages": [
        "Which data pack would you like?"
      ],
      "display": {
        "type": "quick-reply",
        "data-source": {
          "endpoint": "https://demoapis.com/cmobile/012345678/dataPackages"
        },
        "template": "{{name}} {{data}} for {{$currency price 'USD'}}"
      }
    },

    Execute the buy data

    The final step is to execute the buy data call, by calling the cmobile API buyData function. This operation can be done with a Webhook step.

    Add a new Webhook step at the end of the conversation, start typing stwe and select the step-webhook snippet.

    Data Source

    You don't need the methodheaders and payload properties, so just delete them.

    Then update the endpoint to call the buyData API function and pass data-pack as dataPacklike this:

    "data-source": {
      "endpoint": "https://demoapis.com/cmobile/012345678/buyData?dataPack={{data-pack}}"
    },

    Confirmation message

    Finally, you need to display a message confirming that the transaction is complete. To do that you need to add two properties: entity and messages.

    Add an entity property called buy-data-response (it is best to add it below type)

    "entity": "buy-data-response",

    Add a messages property with the following message (it is best to add it below conditions:

    "messages": [
      "Your purchase is complete. You now have {{buy-data-response.data}}. Your balance is {{$currency buy-data-response.balance 'USD'}}"
    ]

    The full step should look like this:

    {
      "type": "webhook",
      "entity": "buy-data-response",
      "data-source": {
        "endpoint": "https://demoapis.com/cmobile/012345678/buyData?dataPack={{data-pack}}"
      },
      "messages": [
        "You now have {{buy-data-response.data}}. Your balance is {{$currency buy-data-response.balance 'USD'}}"
      ]
    }

    Press the [Save] button and test.

    Test

    Say: "Add Data"

    The chatbot should list the available packages.

    Say: "Lite"

    The chatbot should execute the Buy Data API call and respond with updated data and balance values.

    The code

    The whole buy-data conversation should look like this:

    "buy-data": {
      "type": "goal",
      "steps": [
        {
          "type": "question",
          "entity": "data-pack",
          "entity-type": "DataPack",
          "messages": [
            "Which data pack would you like?"
          ],
          "display": {
            "type": "quick-reply",
            "data-source": {
              "endpoint": "https://demoapis.com/cmobile/012345678/dataPackages"
            },
            "template": "{{name}} {{data}} for {{$currency price 'USD'}}"
          }
        },
        {
          "type": "webhook",
          "entity": "buy-data-response",
          "data-source": {
            "endpoint": "https://demoapis.com/cmobile/012345678/buyData?dataPack={{data-pack}}"
          },
          "messages": [
            "You now have {{buy-data-response.data}}. Your balance is {{$currency buy-data-response.balance 'USD'}}"
          ]
        }
      ]
    }

    Congratulations

    Just like that, you have created a fully functioning Alexa Skill! It can communicate using Natural Language Processing (NLP) while connecting with the cmobile API to provide the users with the ability to check their account status, top up and buy more data.

    There is still more to learn. You can learn more from the NativeChat documentation.




    Source link