2017-03-06 1 views
0

J'ai des difficultés à obtenir la méthode getRawInput() pour capturer l'entrée de l'utilisateur après son appel initial. Je voudrais que l'utilisateur choisisse et actionne, puis l'assistant répond avec une question, à laquelle l'utilisateur doit répondre pour aller de l'avant. Par exemple, un utilisateur souhaite transférer de l'argent d'un compte chèque à un compte d'épargne dirait «Je voudrais faire un transfert." L'assistant vous demandera "De quel compte souhaitez-vous transférer". L'utilisateur répond avec le compte à partir duquel il souhaite transférer. Le problème semble être que l'assistant ne prend pas la deuxième entrée, et j'obtiens l'erreur "Action: {nom de mon action} ne répond pas en ce moment. Réessayez bientôt." S'il vous plaît laissez-moi savoir s'il y a un meilleur moyen ou une méthode plus appropriée pour appeler des dialogues en ligne.Actions Google L'Assistant SDK n'obtient aucune entrée utilisateur pendant le dialogue en ligne?

Voici le code que je suis en train d'exécuter:

else if (assistant.getRawInput() === 'I want to make a transfer') { 
    let inputPrompt = assistant.buildInputPrompt(true, 'Sure, which account would you like to transfer from? You can say checking or savings.'); 
    assistant.ask(inputPrompt); 
    if(assistant.getRawInput() === 'checking') { 
     let transFrom = 'checking'; 
     let transTo = 'savings'; 
     let inputPrompt = assistant.buildInputPrompt(true, 'You are going to make a transfer from your ' + transFrom + ' account to your ' + transTo + ' account. What is the amount you would like to transfer?'); 
     assistant.ask(inputPrompt); 
     let amtInput = assistant.getRawInput(); 
     let amt = parseInt(amtInput); 
     transferMoney(transFrom, transTo, amt); 
     inputPrompt = assistant.buildInputPrompt(true, 'Cool, you have transfered ' + amt + ' dollars from your ' + transFrom + ' account to your ' + transTo + ' account. Your new balance is ' + customer1.chkBal + ' dollars in your ' + transFrom + ' account and ' + customer1.savBal + ' in your ' + transTo + ' account.'); 
     assistant.ask(inputPrompt); 
    } else if (assistant.getRawInput() === 'savings') { 
     let transFrom = 'savings'; 
     let transTo = 'checking'; 
     let inputPrompt = assistant.buildInputPrompt(true, 'You are going to make a transfer from your ' + transFrom + ' account to your ' + transTo + ' account. What is the amount you would like to transfer?'); 
     assistant.ask(inputPrompt); 
     let amtInput = assistant.getRawInput(); 
     let amt = parseInt(amtInput); 
     transferMoney(transFrom, transTo, amt); 
     inputPrompt = assistant.buildInputPrompt(true, 'Cool, you have transfered ' + amt + ' dollars from your ' + transFrom + ' account to your ' + transTo + ' account. Your new balance is ' + customer1.chkBal + ' dollars in your ' + transFrom +' account and ' + customer1.savBal + ' in your ' + transTo + ' account.'); 
     assistant.ask(inputPrompt); 
    } 

Répondre

1

Vous n'avez pas indiqué si vous utilisez API.AI ou les actions API directement, mais il semble que vous utilisez les actions API Il semble également que vous écrivez la fonction linéairement - comme si vous attendiez assistant.ask() pour arrêter le programme et attendre une réponse de l'utilisateur. Ce n'est pas comme cela que fonctionne assistant.ask(), ou Actions en général. Pensez à Google Home en tant que navigateur Web et votre action sera exécutée sur un serveur Web quelque part. assistant.ask() équivaut à renvoyer un message au navigateur et à fermer la connexion (mais pas à fermer le microphone). Il n'y a pas de traitement supplémentaire qui peut être fait, donc avoir des instructions après le ask() n'a pas de sens. Si vous utilisez l'API Actions directement, vous devez garder la trace de l'endroit où vous êtes dans la conversation (l'état - ou les questions qui ont été posées jusqu'à présent et les réponses que vous avez obtenues) et exécuter différents chemins de code de manière appropriée. Vous pouvez être plus intéressé par API.AI, qui vous permet de construire les conversations de manière plus interactive et d'indiquer seulement quelles commandes auront besoin d'envoyer votre webhook l'information. En utilisant API.AI, votre logique de programmation n'a pas besoin de garder trace de l'endroit où vous vous trouvez dans la conversation - vous construisez la machine d'état et le chemin de conversation via API.AI.