Действия Google: в диалоговом потоке останавливаются все медиаобъекты - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть действие 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, остановись", вместо остановкивоспроизведения, действие заканчивается, но медиа-объект продолжает воспроизводиться (я знаю, что действие прекращено, потому что я могу давать стандартные команды, такие как «сколько времени» или «установить будильник».

Что за беспорядок.

Так есть ли способ закрыть действие и принудительно остановить любой воспроизводимый в данный момент медиа-объект?

...