Aws lambda “音频播放器”;“播放即将完成”;请求Alexa技能工具包,不起作用
我编写了一个Alexa Skill,它使用Lambda函数播放给定URL中的唯一音频 名为“PlayAudio”的意图正在发挥作用,并播放JSON格式API中的第一个音频项 名为“PlaybackNearlyFinished”的意图不起作用,也就是说,不播放我正在传送的音频文件。有人能确切地解释为什么这不起作用吗 以下是我的Lambda函数的一部分,其中包含两个意图: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
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的响应需要包含一个指令数组,就像您对播放意图的响应一样。我链接到的代理工具将允许您在机器上本地调试您的技能,包括查看所有来回的请求和响应。