在 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 再次播放音频。
我最近在处理 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 再次播放音频。