Google Actions:在dialogflow中停止所有mediaObjects

时间:2018-12-08 17:30:09

标签: dialogflow actions-on-google google-home

我有一个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,请停止”,而不是停止播放,操作将结束,但媒体对象将继续播放(我知道操作已退出,因为我可以发出标准命令,例如“几点了”或“设置警报”。

真是一团糟。

那么有没有办法关闭动作,并强制停止任何当前正在播放的媒体对象?

0 个答案:

没有答案