У меня есть действие Google, в котором воспроизводятся некоторые записи перед записью.Я использую mediaObject для их воспроизведения.Что-то вроде:
conv.ask(new MediaObject({
name: title,
url: storia,
description: autore,
image: new Image({
url: largeImageUrl,
alt: title,
}),
}));
Я, поскольку некоторые истории длиннее, чем 4 минуты, я разделил их на две части и использую управление статусом мультимедиа:
app.intent('Media Status', (conv) => {
const mediaStatus = conv.arguments.get('MEDIA_STATUS');
if (mediaStatus && mediaStatus.status === 'FINISHED') {
console.log(`track finished: ${conv.user.storage.track}`);
console.log(`storia2: ${conv.data.storia2}`);
if (conv.data.storia2 !== undefined) {
secondaParte = `<audio src="` + randomPhrase(continuaFavola) + `">
<desc>Vediamo come va a finire...</desc>
</audio>`;
storia = conv.data.storia2;
conv.data.storia2 = undefined;
conv.ask(new SimpleResponse('<speak>' + secondaParte +'</speak>'));
} else {
conv.close(new SimpleResponse('<speak>' + goodnight +'</speak>'));
}
} else {
conv.ask('Media Status ignoto');
}
});
Работает.
Проблема в том, что иногда, когда воспроизводится мультимедийный объект, если я говорю команду «стоп», мультимедийный объект останавливается, но намерение остановки не срабатывает (должно быть сказано «Хорошо, до свидания» изакрыть действие), поэтому действие остается в ожидании приглашения.Вторая остановка фактически выполняет намерение остановки.Поэтому в основном мне нужно остановить его дважды.
В журнале я не вижу ни следа первой команды остановки (которая была явно получена после остановки медиа-объекта), а только второй.
Еще хуже, когда я играю вторую половину истории, на этот раз команда должна закрыться:
conv.close(new MediaObject({ ... );
Если я скажу "ОК, Google, остановись", вместо остановкивоспроизведения, действие заканчивается, но медиа-объект продолжает воспроизводиться (я знаю, что действие прекращено, потому что я могу давать стандартные команды, такие как «сколько времени» или «установить будильник».
Что за беспорядок.
Так есть ли способ закрыть действие и принудительно остановить любой воспроизводимый в данный момент медиа-объект?