AudioPlayer.stop — бэкленд Alexa с PHP

Я пытаюсь разработать бэкэнд 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
      }
    }';
}

Это прекрасно работает.

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

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?


person PeterPan    schedule 10.08.2017    source источник
comment
Привет, какую библиотеку php вы использовали для отправки запросов Alexa и получения от API.   -  person Gowri    schedule 14.03.2018


Ответы (1)


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

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

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

person Jim Rush    schedule 11.08.2017