Google Action无法使用MediaResponse解析JSON

时间:2019-02-20 12:06:58

标签: node.js actions-on-google

根据this documentation.,我正尝试使用Google动作Node SDK v2返回一个MediaResponse对象的MediaObjects数组。

在我的手机上,我仅收到一个通用的“立即不响应”错误,控制台中没有任何具体显示,但是在模拟器上运行时,我看到了此错误:

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中,则可以使用它,但是我希望能够在一个响应中传递多个MediaObject。

2 个答案:

答案 0 :(得分: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的对象数组。

答案 1 :(得分:0)

Actions On Google documentation上看到:

  

媒体响应支持单个媒体对象。

因此,在开发“动作”时不能使用多个媒体回复。考虑用户是否没有屏幕,他们如何知道返回了多少媒体响应或如何选择播放哪个媒体响应才是合理的?

如果要播放多种声音或分层声音效果,可以尝试使用SSML。您显然会受到时间和大小的限制(最长持续时间为120秒,文件大小限制为5兆字节),但在播放选项方面更加灵活。

Here's a great article,作者Leon Nicholls使用SSML在AoG平台上构建了复杂的声音作品。

编辑:不适用于一个媒体对象的原因可能是缺少建议筹码。如Actions On Google documentation

中所述
  

如果响应不是最终响应,则您的操作必须包含建议筹码。

基本上,如果您不打算结束对话,则需要在响应中添加建议芯片。

另一个原因可能是协议错误。再次,从文档中:

  

用于播放的媒体文件必须指定为HTTPS URL。

如果您在mp3文件中使用的是HTTP网址,则该文件将无法播放。