3

我第一次在Alexa上工作,我正在开发一个音乐应用程序。我需要添加一位艺术家的多个曲目并连续播放。我无法这样做。但是,一首歌曲工作正常,但无法添加和播放多首歌曲。

这是我的代码,

$response = '{
        "version" : "1.0",

        "response" : {
            "outputSpeech": {
              "type": "PlainText",
              "text": "Playing song for Acon"
            },
            '.$card.',
            "directives": [
              {
                "type": "AudioPlayer.Play",
                "playBehavior": "REPLACE_ALL",
                "audioItem": {
                  "stream": {
                "token": "track1",
                "url": "https://p.scdn.co/mp3-preview/9153bcc4d7bef50eb80a809fa34e694f2854e539?cid=null",
                "offsetInMilliseconds": 0
                  }
                }
              }
            ],
            "shouldEndSession" : true
        }
    }';
4

2 回答 2

2

您需要等待来自 Alexa 的 AudioPlayer.PlaybackNearlyFinished 请求。此时,您可以将要播放的下一首曲目排入队列。它将接近当前播放曲目的播放结束。

有关它的信息在这里:
https ://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/custom-audioplayer-interface-reference#playbacknearlyfinished-request

在回复 PlaybackNearlyFinished 指令时,请确保:

  • 您将 playBehavior 设置为 ENQUEUE
    这将导致下一首曲目在当前曲目完成后开始

  • 您不包括 outputSpeech 字段
    outputSpeech is not allowed when out of session 。当第一个流开始播放时会话结束。

我写的这篇博客文章更详细地介绍了 AudioPlayer 界面的开发和测试方法:
https ://bespoken.tools/blog/2016/10/10/unit-testing-alexa-skills

于 2017-01-13T19:34:00.653 回答
1

按照上面的文档: https ://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/custom-audioplayer-interface-reference#playbacknearlyfinished-request

然后执行此操作以将第二首歌曲排入队列

在 PHP 中,您处理其他请求的方式也可以处理 AudioRequest。例如。

$data       = file_get_contents("php://input");
$jsonData   = json_decode($data);

if($jsonData->request->type === "AudioPlayer.PlaybackNearlyFinished")
{ 
    $response = '{
        "version" : "1.0",
        "response" : {
            "directives": [
              {
                "type": "AudioPlayer.Play",
                "playBehavior": "ENQUEUE",
                "audioItem": {
                  "stream": {
                "token": "track2",
                "expectedPreviousToken": "track1",
                "url": "Your URL",
                "offsetInMilliseconds": 3
                  }
                }
              }
            ],
            "shouldEndSession" : true
        }
    }';
    echo $response;
} 

这是您可以处理所有 AudioRequest 的方式。

于 2017-01-18T07:05:27.530 回答