node.js - 自动播放媒体直到谷歌对话流中的时间到

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

我最近正在研究 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/

相关文章:

javascript - 使用 GraphicsMagick 输出多个文件

javascript - 连接ECONNREFUSED 127.0.0.1 :21 error in node js

google-oauth - 如何在 Google Actions 中启用 token 刷新?

javascript - 请求内递归函数调用的异步问题

javascript - setInterval 中的 Promise

node.js - Sequelize 获取最近的位置获取点

javascript - 仅当光标位于输入字段时禁用回车键回发

python - 如何通过 Python 中的 Dialogflow fulfillment 从 google assistant 发送推送通知

node.js - Google 如何为我的 Google Assistant 创建音乐播放器

authentication - 无法在 Google 操作中使用隐式/授权流程来授权用户