Aws lambda “音频播放器”;“播放即将完成”;请求Alexa技能工具包,不起作用

Aws lambda “音频播放器”;“播放即将完成”;请求Alexa技能工具包,不起作用,aws-lambda,alexa,alexa-skills-kit,Aws Lambda,Alexa,Alexa Skills Kit,我编写了一个Alexa Skill,它使用Lambda函数播放给定URL中的唯一音频 名为“PlayAudio”的意图正在发挥作用,并播放JSON格式API中的第一个音频项 名为“PlaybackNearlyFinished”的意图不起作用,也就是说,不播放我正在传送的音频文件。有人能确切地解释为什么这不起作用吗 以下是我的Lambda函数的一部分,其中包含两个意图: Fact.prototype.intentHandlers = { "PlayAudio": function (eve

我编写了一个Alexa Skill,它使用Lambda函数播放给定URL中的唯一音频

名为“PlayAudio”的意图正在发挥作用,并播放JSON格式API中的第一个音频项

名为“PlaybackNearlyFinished”的意图不起作用,也就是说,不播放我正在传送的音频文件。有人能确切地解释为什么这不起作用吗

以下是我的Lambda函数的一部分,其中包含两个意图:

Fact.prototype.intentHandlers = {
    "PlayAudio": function (event, context, response) {
          fetchEnseParse("/latest", function(body) {
            if(body == "error") {
            } 
            else {
                var directives = body.enses.map(function(ense) {
                    var a = ense[1].fileUrl;
                    return {
                         'playBehavior': 'REPLACE_ALL', 
                         'audioItem': 
                             {
                                 'stream': 
                                     {
                                         'url': 'https://s3.amazonaws.com/media.ense.nyc/enses/2017_01_13T16_57_20.190Z/30312/0', 
                                         'token': '33529', 
                                         'offsetInMilliseconds': 0
                                     }
                             }, 
                             'type': 'AudioPlayer.Play'
                    };
                })
            }
            var jsonresponse = {
                'outputSpeech': {
                     'text': '', 
                     'type': 'PlainText'
                    }, 
                'directives': [directives[0]]
            };     
            response.justUseThisJsonPlease( { response: jsonresponse } );
        });
    },


    "AudioPlayer.PlaybackNearlyFinished" : function(event, context, response) {
            var second = 
            {
              "type": "AudioPlayer.Play",
              "playBehavior": "REPLACE_ENQUEUED",
              "audioItem": {
                "stream": {
                  "url": "https://s3.amazonaws.com/media.ense.nyc/enses/violetindigoviolet/30034/0",
                  "token": "33530",
                  "offsetInMilliseconds": 0
                }
              }
            }
            response.justUseThisJsonPlease( { response: second } );
    },

看起来你的回复中包含了outputSpeech

根据本页,这对于常规意图是可以的,但对于音频播放器请求则不行:

本说明具体如下:

看到准确的有效载荷也会有所帮助。您可以使用在本地对其进行测试,并获取以下信息:


您应该会看到Alexa的另一个请求,SystemExceptionEncountered,它应该提供更多关于错误的信息。当对音频播放器请求的响应不正确时,它将发送此消息

嗨,约翰。我感谢你的帮助。我在“PlayAudio”中使用outputSpeech,但在处理“PlaybackNearlyFinished”请求时没有使用它。所以我不认为这是问题所在。嗯……好吧,我不认为所有的替换都是问题的原因,但是你考虑过使用排队吗?您还需要将expectedPreviousToken作为流对象的一部分包含在内。这将设置流为下一个播放,而不是停止当前流并启动新流。此外,您是否从Alexa处收到错误,例如SystemExceptionEncountered?这应该包含更多的信息。嗯……事实上,再看一遍,您是否将第二个响应包装在指令数组中?看来这可能就是问题所在。谢谢。我只是尝试排队并输入来自第一个音频流的令牌,但没有成功。当第一个音频流接近完成时,PlaybackNearlyFinished请求是否会自动发送给技能?我怎样才能知道我的技能是否收到了这个请求?此外,它可能与设置PLAY_模式有关,或者与在播放第一个音频流后会话自行结束有关。谢谢。你看到我对指令数组的评论了吗?对PlaybackNearlyFinished的响应需要包含一个指令数组,就像您对播放意图的响应一样。我链接到的代理工具将允许您在机器上本地调试您的技能,包括查看所有来回的请求和响应。