Подтвердить асинхронное действие для Google Assistant - PullRequest
0 голосов
/ 01 ноября 2018

Я создаю действие для помощника Google, получающего некоторые данные из REST API. Действие запускает запрос http, затем анализирует ответ, чтобы создать результирующую речь действия, вся эта обработка выполняется с использованием Promise для выполнения его асинхронно. В результате пользователь получает ответ на действие в течение определенного периода времени.

Есть ли способ сначала сказать предложение-подтверждение типа "хорошо, я ищу", а затем, как только обработан http-ответ, завершить действие вторым предложением?

Ниже приведен скелет асинхронного намерения:

app.intent('IntentName', (conv, {params}) => {

    // ==> Provide here an acknowledgement to the user <==

    // return a promise to handle this intent asynchronously
    return new Promise(function (resolve, reject) {
        http.get(httpOptions, function (resp) {
            processing...
            conv.close(strSpeech);
        });
    });
});

1 Ответ

0 голосов
/ 02 ноября 2018

Не так прямо, как вы ожидаете, нет.

Действия в Google и Dialogflow работают очень разговорным образом. Только с некоторыми исключениями, когда ваше действие отправляет ответ, вы не можете ничего отправлять пользователю, пока он не отправит вам другой запрос.

Одним из таких исключений является то, что вы можете отправить уведомление через помощника своему пользователю. Уведомления доступны только на некоторых поверхностях и не очень подходят, если ответ придет в течение нескольких секунд, поэтому в вашем случае это может быть не очень хорошим решением.

Лучше, хотя и немного взломать, немедленно отправить обратно ответ, который включает Media Response , который включает несколько секунд «удержания музыки». Во время воспроизведения музыки удержания вы можете иметь свой код, определяющий ответ и сохраняющий результат в кэше. В конце музыки ваше действие будет вызвано снова, чтобы показать, что аудио закончено. Если к тому времени у вас есть ответ, вы можете его вернуть. Если нет, вы можете запустить еще несколько секунд удержания музыки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...