【问题标题】:AudioPlayer "PlaybackNearlyFinished" Request of Alexa Skills Kit, Not WorkingAlexa Skills Kit 的 AudioPlayer“PlaybackNearlyFinished”请求,不工作
【发布时间】:2017-05-29 04:52:29
【问题描述】:

我编写了一个 Alexa Skill,它使用 Lambda 函数从给定的 URL 播放独特的音频。

名为“PlayAudio”的 Intent 正在工作并播放我们 JSON 格式 API 中的第一个音频项目。

名为“PlaybackNearlyFinished”的 Intent 不起作用,也就是无法播放我正在喂它的音频文件。任何人都可以破解为什么这不起作用?

这是我的 Lambda 函数的一部分,其中包含两个 Intent:

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 } );
    },

【问题讨论】:

    标签: aws-lambda alexa alexa-skills-kit


    【解决方案1】:

    您的回复中似乎包含了 outputSpeech。

    这对于常规意图是可以的,但对于 AudioPlayer 请求则不行,根据此页面: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/custom-audioplayer-interface-reference

    特别是这个注释:

    查看确切的有效负载也会有所帮助。您可以使用在本地对其进行测试并获得这些: https://bespoken.tools/blog/2016/08/24/introducing-bst-proxy-for-alexa-skill-development

    您应该会看到来自 Alexa 的附加请求 SystemExceptionEncountered,该请求应提供有关问题所在的更多信息。当对 AudioPlayer 请求的响应不正确时,它将发送此消息。

    【讨论】:

    • 嗨,约翰。我感谢您的帮助。我在“PlayAudio”意图中使用 outputSpeech,但在处理“PlaybackNearlyFinished”请求时我没有使用它。所以我认为这不是问题。
    • 嗯....好吧,我不认为 REPLACE_ALL 是问题的原因,但是您是否考虑过使用 ENQUEUE 代替?您还需要包含 expectedPreviousToken 然后作为流对象的一部分。这会将流设置为下一个播放,而不是停止当前流并启动新流。此外,您是否从 Alexa 收到错误消息,例如 SystemExceptionEncountered?这应该包含更多信息。
    • 嗯...实际上再看一遍,您是否将第二个响应包装在指令数组中?看来这可能是问题所在。
    • 谢谢。我刚刚尝试了 ENQUEUE 并从第一个音频流中输入令牌,但它没有用。当第一个音频流接近完成时,PlaybackNearlyFinished 请求是否会自动发送到技能?如何查看我的技能是否收到此请求?此外,它是否与设置 PLAY_MODE 或在播放第一个音频流后会话自行结束有关。谢谢。
    • 你看到我的 cmets 关于指令数组了吗?对 PlaybackNearlyFinished 的响应需要包含一个指令数组,就像您对 Play 意图的响应一样。我链接的代理工具将允许您在您的机器上本地调试您的技能,包括查看所有来回的请求和响应。
    猜你喜欢
    • 1970-01-01
    • 2016-04-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多