Автозапуск мультимедиа до истечения времени в диалоговом потоке Google
Я работаю над действиями Google в последнее время. Мне нужно воспроизвести URL-адрес mp3 в течение x минут (это получит от пользователя, такого как воспроизведение abc в течение 30 минут). Моя проблема в том, что мой mp3-адрес всего 1,30 минуты. Как я могу играть в нее до х минут. Я использую файл dialogflow index.js для кода. Вот что я пытаюсь
app.intent('soundplay', (conv, {soundreq, duration}) => {
conv.ask(new Suggestions('Exit'));
conv.ask(new SimpleResponse({
speech: 'xxx',
text: 'xxx',
}));
conv.ask(sound);
var d = duration.milliseconds;
setTimeout(sound, d);
});
Я пытаюсь использовать setTimeout, но он также не работает.
1 ответ
Есть несколько вопросов, с которыми вам нужно разобраться.
Во-первых, это sound
довольно расплывчато из вашего примера кода. Вы используете это в setTimeout()
Это говорит о том, что это функция, но вы также передаете ее conv.ask()
что говорит о том, что это MediaResponse
или какой-то другой объект.
Во-вторых, этот код будет выполняться на вашем сервере, а не на устройстве пользователя, а действия будут выполняться в диалоговой модели. Поэтому, когда вы отправляете что-то пользователю, вам нужно подождать, пока пользователь (или устройство пользователя) не отправит вам другое сообщение, с которым вы можете ответить.
Решение состоит в том, чтобы включить MediaObject как часть создаваемого вами ответа. Это будет включать в себя URL аудио, которое вы хотите воспроизвести, а также название и некоторую другую информацию.
Когда воспроизведение аудио закончится, ваш агент Dialogflow получит сообщение с actions_intent_MEDIA_STATUS
Событие. Вы можете создать Intent, который обрабатывает это событие, и в обработчике Intent для него в своем веб-крюке проверить, истекло ли время. Если это так, вы можете запросить, что делать сейчас или завершить разговор или что-либо еще. Если срок его действия не истек, вы можете снова воспроизвести звук с помощью другого объекта MediaObject.