Google Action无法使用MediaResponse解析JSON

问题描述 投票:0回答:2

根据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。

node.js actions-on-google
2个回答
2
投票

我不太确定你的代码片段来自哪里。文档表明提供媒体响应的正确方法是:

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的任何大小的对象数组。


0
投票

正如在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网址,则无法播放。

© www.soinside.com 2019 - 2024. All rights reserved.