在 google 对话流中自动播放媒体直到时间结束

Autoplay media until time's up in google dialogflow

我最近在处理 google 动作。我需要播放 url 的 mp3 x 分钟(这是从用户那里收到的,例如播放 abc 30 分钟。)。我的问题是我的 mp3 url 只有 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,但它也不起作用。

您需要处理一些问题。

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

第二个是此代码将 运行 在您的服务器上,而不是在用户的设备上,并且 Actions 在对话 back-and-forth 模型中工作。因此,一旦您向用户发送了一些内容,您需要等到用户(或用户的设备)向您发送另一条您可以回复的消息。

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

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