根据MediaResponse
的说法,我正在尝试使用actions-on-google Node SDK v2返回一个带有MediaObjects数组的this documentation.对象。
在我的手机上,我只是得到一个通用的“现在没有响应”错误,在控制台中没有任何特定的显示,但在模拟器上运行我看到这个错误:
UnparseableJsonResponse API Version 2:
Failed to parse JSON response string with 'INVALID_ARGUMENT' error: "(expected_inputs[0].input_prompt.rich_initial_prompt.items[1].media_response.media_objects[0]) media_objects: Cannot find field.".
这是我正在尝试运行的代码:
return conv.ask('<speak>some text</speak>')
.add(new MediaResponse({
objects: [
new MediaObject({
url: '{url}',
name: '{title}'
})
],
type: 'AUDIO'
})
)
如果我只是将MediaObject
发送回而不将其包装在MediaResponse中,它可以工作,但我希望能够在一个响应中传递多个MediaObjects。
我不太确定你的代码片段来自哪里。文档表明提供媒体响应的正确方法是:
if (!conv.surface.capabilities.has('actions.capability.MEDIA_RESPONSE_AUDIO'))
{
conv.ask('Sorry, this device does not support audio playback.');
return;
}
conv.ask(new MediaObject({
name: 'Jazz in Paris',
url: 'https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3',
description: 'A funky Jazz tune',
icon: new Image({
url: 'https://storage.googleapis.com/automotive-media/album_art.jpg',
alt: 'Album cover of an ccean view',
}),
}));
正如所指出的,在任何给定时间只能返回一个媒体对象。您无法提供任何大于1的任何大小的对象数组。
正如在Actions On Google documentation上看到的:
媒体响应支持单个媒体对象。
因此,在开发Actions时不能使用多个媒体响应。考虑用户是否没有屏幕,他们如何知道有多少媒体回复已经返回,或者他们如何选择要播放哪一个?
如果要播放多个声音或图层音效,可以尝试使用SSML。你显然会有时间和大小限制(120秒最大持续时间,5兆字节文件大小限制)但它在播放选项方面更灵活。
Here's a great article使用SSML在Leon Nicholls的AoG平台上构建复杂的声音成分。
编辑:它不使用一个媒体对象的原因可能是缺乏建议芯片。正如Actions On Google documentation所述
如果回复不是最终回复,您的行动必须包括建议筹码。
基本上,如果您不打算结束对话,则需要在回复中添加建议筹码。
另一个原因可能是协议错误。再次,从文档:
必须将要播放的媒体文件指定为HTTPS URL。
如果您正在为您的mp3文件使用HTTP网址,则无法播放。