Я впервые работаю над 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
}
}';
Следуйте приведенному выше документу:
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.
Вам нужно дождаться запроса AudioPlayer.PlaybackNearlyFinished от Alexa. В этот момент вы можете поставить в очередь следующую дорожку для воспроизведения. Он приблизится к завершению воспроизведения текущей воспроизводимой дорожки.
Информация об этом здесь:
https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/custom-audioplayer-interface-reference#playbacknearlyfinished-request
При ответе с директивой PlaybackNearlyFinished убедитесь, что:
Вы устанавливаете PlayBehavior на ENQUEUE
Это приведет к запуску следующей дорожки после окончания текущей
Вы НЕ включаете поле outputSpeech
outputSpeech не допускается, когда вне сеанса. Сеанс заканчивается, когда начинается воспроизведение первого потока.
В этом посте, который я написал, более подробно рассматриваются подходы к разработке и тестированию интерфейса AudioPlayer:
https://bespoken.tools/blog/2016/10/10/unit-testing-alexa-skills