自动播放媒体,直到GoogleDialogflow中的时间到

时间:2018-11-01 10:25:09

标签: node.js dialogflow actions-on-google

我最近正在研究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,但是它也不起作用。

1 个答案:

答案 0 :(得分:0)

您需要处理一些问题。

首先是sound在您的代码示例中非常模糊。您正在setTimeout()中使用它,这表明它是一个函数,但是您也将其传递给conv.ask(),这表明它是一个MediaResponse或其他对象。

第二个是该代码将在您的服务器上运行,而不是在用户的设备上运行,并且Actions在对话式往返模型中运行。因此,一旦向用户发送了一些消息,就需要等到用户(或用户的设备)向您发送另一封邮件以进行回复。

解决方案是在构建的响应中包含MediaObject。这将包括您要播放的音频的URL,以及标题和其他一些信息。

音频播放完毕后,您的Dialogflow代理将收到一条带有actions_intent_MEDIA_STATUS事件的消息。您可以创建一个处理该事件的Intent,并在Webhook中的Intent Handler中检查该时间是否已到。如果有的话,您可以提示现在要做什么或结束对话或适当的选择。如果尚未过期,则可以使用另一个MediaObject再次播放音频。