我最近正在研究Google动作。我需要播放x分钟的mp3网址(这是从用户那里收到的,例如播放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,但是它也不起作用。
答案 0 :(得分:0)
您需要处理一些问题。
首先是sound
在您的代码示例中非常模糊。您正在setTimeout()
中使用它,这表明它是一个函数,但是您也将其传递给conv.ask()
,这表明它是一个MediaResponse
或其他对象。>
第二个是该代码将在您的服务器上运行,而不是在用户的设备上运行,并且Actions在对话式往返模型中运行。因此,一旦向用户发送了一些消息,就需要等到用户(或用户的设备)向您发送另一封邮件以进行回复。
解决方案是在构建的响应中包含MediaObject。这将包括您要播放的音频的URL,以及标题和其他一些信息。
音频播放完毕后,您的Dialogflow代理将收到一条带有actions_intent_MEDIA_STATUS
事件的消息。您可以创建一个处理该事件的Intent,并在Webhook中的Intent Handler中检查该时间是否已到。如果有的话,您可以提示现在要做什么或结束对话或适当的选择。如果尚未过期,则可以使用另一个MediaObject再次播放音频。