Google Actions SDK assistant не получает ввод пользователя во время встроенного диалога?

У меня возникают проблемы при получении метода getRawInput() для захвата ввода пользователя после его первоначального вызова. Я хотел бы, чтобы пользователь выбрал и действие, а затем помощник, чтобы ответить на вопрос, на который пользователь должен ответить, чтобы двигаться вперед. Например, пользователь хотел бы перевести деньги с текущего счета на сберегательный счет и сказал бы: "Я хотел бы сделать перевод". Помощник спросит: "С какого аккаунта вы хотели бы перейти". Пользователь ответит учетной записью, с которой он хочет перейти. Кажется, проблема в том, что помощник не принимает второй ввод, и я получаю сообщение об ошибке: "Действие: {имя моего действия} не отвечает прямо сейчас. Попробуйте еще раз в ближайшее время". Пожалуйста, дайте мне знать, если есть лучший способ или более подходящий метод для вызова встроенных диалогов.

Вот код, который я пытаюсь выполнить:

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);
    }

1 ответ

Вы не указали, используете ли вы API.AI или API действий напрямую, но похоже, что вы используете API действий. Кроме того, похоже, что вы пишете функцию линейно - как будто вы ожидаете assistant.ask() остановить программу и дождаться ответа от пользователя. Это не как assistant.ask()или действия в общем-то работают.

Думайте о Google Home как о веб-браузере, и ваше действие будет выполняться где-то на веб-сервере. assistant.ask() эквивалентно отправке сообщения обратно в браузер и закрытию соединения (но не закрытию микрофона). Там нет никакой дополнительной обработки, которая может быть выполнена, поэтому наличие операторов после ask() не имеет смысла.

Если вы используете API-интерфейс действий напрямую, вам необходимо отслеживать, в каком месте разговора вы находитесь (состояние - или какие вопросы уже заданы и какие ответы вы получили) и соответствующим образом выполнять различные пути кода.,

Возможно, вас больше заинтересует API.AI, который позволит вам строить диалоги более интерактивно и указывать только те команды, которые понадобятся вам для отправки информации. Используя API.AI, вашей логике программирования не нужно отслеживать, где вы находитесь в диалоге - вы строите конечный автомат и путь диалога через API.AI.

Другие вопросы по тегам