Есть несколько вопросов, с которыми вам нужно разобраться.
Во-первых, sound
довольно расплывчато из вашего примера кода. Вы используете его в setTimeout()
, который предполагает, что это функция, но вы также передаете его в conv.ask()
, который предполагает, что это MediaResponse
или какой-то другой объект.
Во-вторых, этот код будет запускаться на вашем сервере, а не на устройстве пользователя, а действия будут выполняться в диалоговой модели. Поэтому, когда вы отправляете что-то пользователю, вам нужно подождать, пока пользователь (или устройство пользователя) не отправит вам другое сообщение, с которым вы можете ответить.
Решение состоит в том, чтобы включить MediaObject как часть создаваемого вами ответа. Это будет включать в себя URL-адрес аудио, которое вы хотите воспроизвести, а также заголовок и некоторую другую информацию.
Когда воспроизведение аудио закончится, ваш агент Dialogflow получит сообщение с событием actions_intent_MEDIA_STATUS
. Вы можете создать Intent, который обрабатывает это событие, и в обработчике Intent для него в своем веб-крюке проверить, не истекло ли время. Если это так, вы можете запросить, что делать сейчас или завершить разговор или что-либо еще. Если срок его действия не истек, вы можете снова воспроизвести звук с помощью другого объекта MediaObject.