如何让Alexa技能将mp3流式传输到设备

时间:2017-10-05 20:11:13

标签: alexa alexa-skills-kit alexa-skill alexa-voice-service

我正在研究一种试图从公共可访问的S3存储桶中传输mp3文件的Alexa技能。我的lambda函数工作正常,并返回一个audio指令。我使用的是npm包alexa-sdk。

然而,当响应被发送回Echo设备时,我收到了#34的一般错误;您的技能响应出错。"我用Google搜索某种类型的Alexa响应lintet来尝试验证我的响应对象。

下面是我的lambda函数IntentHandler,以及从所述函数返回的响应对象。有人可以看看并指出他们看到的任何错误吗?非常感谢。

var handlers = {
'LaunchRequest': function () {
    this.emit(':tell', 'Hello');
},
GetVoiceMailIntent: function(){
    this.response.audioPlayerPlay('REPLACE_ALL', 'https://s3.amazonaws.com/romevm/call_1001.mp3', 'vmtoken', 0);
    this.emit(':responseReady');
},
SessionEndedRequest: function () {
console.log('session ended!');
} 
} //end intent handlers

*********** RESPONSE **************
{
  "version": "1.0",
  "response": {
   "speechletResponse": {
     "directives": [
    {
      "playBehavior": "REPLACE_ALL",
      "audioItem": {
        "stream": {
          "expectedPreviousToken": "0",
          "token": "vmtoken",
          "url": "https://s3.amazonaws.com/romevm/call_1001.mp3",
          "offsetInMilliseconds": 0
        }
      }
    }
  ],
  "shouldEndSession": true
  }
 },"sessionAttributes": {}
}

1 个答案:

答案 0 :(得分:0)

根据AudioPlayer Directives Documentation,在向服务器发送AudioPlayer指令时,必须设置类型属性并将其包含在响应的指令数组中。根据你的例子,你没有这样做。

在您的示例中,在键 playBehavior 之前,您应该添加以下键:

"type": "AudioPlayer.Play",

另外,请确保您的音频符合亚马逊的要求:

  

支持的音频文件格式包括AAC / MP4,MP3,HLS,PLS和M3U。比特率:16kbps至384kbps。