我最近正在研究 Google Actions。我需要播放 mp3 的 url x 分钟(这是从用户处收到的,例如播放 abc 30 分钟。)。我的问题是我的 mp3 网址只有 1.30 分钟长。我怎样才能玩到x分钟。我使用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 但它也不起作用。
最佳答案
您需要处理一些问题。
首先,您的代码示例中的声音
非常模糊。您在 setTimeout()
中使用它,这表明它是一个函数,但您还将它传递给 conv.ask()
,这表明它是一个 MediaResponse
或其他对象。
第二个是此代码将在您的服务器上运行,而不是在用户的设备上运行,并且操作以对话式来回模型运行。因此,一旦您向用户发送了某些内容,您就需要等待,直到用户(或用户的设备)向您发送另一条您可以回复的消息。
解决方案是包含 MediaObject作为您构建的响应的一部分。这将包括您要播放的音频的 URL,以及标题和一些其他信息。
音频播放完毕后,您的 Dialogflow 代理将收到一条包含 actions_intent_MEDIA_STATUS
事件的消息。您可以创建一个处理此事件的 Intent,并在 Webhook 中的 Intent Handler 中检查时间是否已过期。如果有,您可以提示现在要做什么或结束对话或采取任何适当的措施。如果尚未过期,您可以使用另一个 MediaObject 再次播放音频。
关于node.js - 自动播放媒体直到谷歌对话流中的时间到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53099327/