1
votes

Comment désactiver certaines intentions dans la compétence Alexa personnalisée?

...
CountryIntent{ ... };
CityIntent{ ... };
YesIntent{ ... };
FallBackIntent{ ... };
...
I'm building custom Alexa skill. User calls CityIntent from CountryIntent. But, if user accidentally says YES, he'll call YesIntent from CountryIntent; that will be incorrect logic. 
How to disable YesIntent so that user calls FallBackIntent when he accidentally says YES?

0 commentaires

3 Réponses :


1
votes

Vous ne pouvez pas désactiver les intentions. En créant des intentions, vous apprenez à comprendre des phrases / mots spécifiques prononcés par un humain - et une fois appris, c'est difficile à oublier.

En fait, vous pouvez créer une machine à états et conserver l'état actuel de votre conversation dans SessionAttribute . Ensuite, dans chaque intention, vous devez vérifier dans quel état se trouve la conversation et agir selon votre logique - donc dans votre cas, lorsque vous vous attendez à une ville et que quelqu'un dit "Oui", votre compétence devrait à nouveau poser des questions sur la ville et ignorer le "oui "réponse.


0 commentaires

1
votes

D'accord avec @slawciu. La meilleure façon de gérer les réponses oui / non est de garder une trace de la dernière intention dans le attributs de session

Dans votre cas, vous pouvez activer la validation de l'intention de la ville pour n'accepter que des noms de ville valides, éliminant ainsi le besoin de traiter une réponse incorrecte.


0 commentaires

0
votes

Vous pouvez activer N'IMPORTE QUEL gestionnaire que vous avez codé pour gérer la YesIntent en l'ajoutant comme condition vraie dans le canHandle pour le gestionnaire et vous pouvez le faire correspondre avec des valeurs de session pour le rendre possible pour différents gestionnaires à utiliser en fonction du contexte.

Voici un exemple.

let attributes = await handlerInput.attributesManager.getSessionAttributes();

    return ((Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest'
      && Alexa.getIntentName(handlerInput.requestEnvelope) === 'CityIntent')
      || (Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && 
         Alexa.getIntentName(handlerInput.requestEnvelope) === 'AMAZON.YesIntent' &&
         attributes.last === "City"));

Donc, s'ils frappent explicitement le CityIntent, ou ils l'ont frappé avant (et vous l'avez stocké dans attributes.last ) mais a répondu "Oui", il est déclenché.

Utiliser FallbackIntent quand vous savez qu'ils pourraient répondre "oui" est un anti-pattern. Il est destiné à être utilisé lorsqu'ils disent quelque chose auquel vous ne vous attendez pas . Vous vous attendez à "oui", alors gérez-le de manière proactive.


0 commentaires