AudioPlayer.stop — Alexa backlend с переполнением стека

Я пытаюсь разработать бэкэнд PHP для моего навыка Alexa. Ничего большого, только для обучения.

Что я хочу сделать:
Я хочу сыграть музыку, как только навык начнется. Я решил, что следующим образом:

if ($RequestMessageType == "LaunchRequest") {
$ReturnValue = '
{
"version": "1.0",
"sessionAttributes": {},
"response": {
"outputSpeech": {
"type": "PlainText",
"text": null
},
"card": {
"type": "Simple",
"title": "Play Audio",
"content": ""},
"reprompt": {
"outputSpeech": {
"type": "PlainText",
"text": null
}
},
"directives": [
{
"type": "AudioPlayer.Play",
"playBehavior": "REPLACE_ALL",
"audioItem": {
"stream": {
"token": "33|fdd9052a-717f-414f-a438-1072a64d0f49|831",
"url": "hereismyurl",
"offsetInMilliseconds": 0
}
}
}
],
"shouldEndSession": true
}
}';
}

Это работает просто отлично.

Кроме того, я хочу, чтобы навык прекратил играть музыку, если я скажу: «Алекса, остановись». Это не похоже на работу. Я попробовал следующее:

if ($RequestMessageType == "AMAZON.StopIntent" ) {
$ReturnValue = '{
"card": {
"type": "Simple",
"title": "Stop Audio",
"content": "Bla bla"},
"directives": [
{
"type": "AudioPlayer.Stop",
}
],
"shouldEndSession": true
} }';

}

if ($RequestMessageType == "AMAZON.CancelIntent"){
$ReturnValue = '{
"card": {
"type": "Simple",
"title": "Stop Audio",
"content": "Bla bla"},
"directives": [
{
"type": "AudioPlayer.Stop",
}
],
"shouldEndSession": true
} }';
}

Я всегда получаю «Плохой ответ»: навык вернул неверный ответ.

Мой SessionEndedRequest выглядит следующим образом:

   if ($RequestMessageType == "SessionEndedRequest") {
$ReturnValue = '{
"type": "SessionEndedRequest",
"requestId": "$RequestId",
"timestamp": "' . date("c") . '",
"reason": "USER_INITIATED "}';
}

Кто-нибудь знает, как правильно остановить AudioPlayer?

1

Решение

Вам не нужно переопределять намерение, потому что ваш навык не активен во время запроса. Когда потоковое аудио и пользователь запрашивает остановку, вы получите событие уведомления AudioPlayer.PlaybackStopped, и Alexa перестанет запрашивать ваш аудиопоток. Обработка это не является обязательным.

От страница справки.
Отправляется, когда Alexa прекращает воспроизведение аудиопотока в ответ на голосовой запрос или директиву AudioPlayer.

Вы можете самостоятельно остановить звук с помощью функции AudioPlayer.Stop, но процесс вызова будет таким: Alexa, my_skillname, stop.

1

Другие решения

Других решений пока нет …