我有一个Google Action,可以播放一些预录故事。我使用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');
}
});
有效。
问题在于,有时在播放媒体对象时,如果我说“ stop”命令,则媒体对象会停止,但不会触发停止意图(它应该说“ Ok,再见”并关闭动作),因此操作仍在等待提示。第二个停止实际上执行停止意图。所以基本上我需要停止两次。
在日志中,我看不到第一个停止命令(由于媒体对象已停止,因此已清晰地接收到)的任何痕迹,只有第二个。
更糟糕的是,当我播放故事的下半部分时,这次命令应该关闭:
conv.close(new MediaObject({ ... );
如果我说“ OK Google,请停止”,而不是停止播放,操作将结束,但媒体对象将继续播放(我知道操作已退出,因为我可以发出标准命令,例如“几点了”或“设置警报”。
真是一团糟。
那么有没有办法关闭动作,并强制停止任何当前正在播放的媒体对象?