Директива об аудиоплеере Alexa - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь создать навык Alexa, который может воспроизводить аудиофайл.Я пытаюсь отправить директиву Audio Player Play в Запросе на запуск, но когда я использую этот код, я не получаю ответ от моего Alexa.Выглядит ли это правильно?

const LaunchRequestHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
  },
  handle(handlerInput) {
    console.log('IN LAUNCHREQUEST');
    return handlerInput.responseBuilder
        .addDirective({
            type: 'AudioPlayer.Play',
            playBehavior: 'REPLACE_ALL',
            audioItem: {
                stream: {
                    token: "0",
                    url: "myurlhere",
                    offsetInMilliseconds: 0
                }
            }
        })
    }
};

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Если вы используете alexa sdk v2 (https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs), вы можете использовать встроенные методы для воспроизведения аудио. Для воспроизведения аудио в полной форме доступны следующие методы.

addAudioPlayerPlayDirective(playBehavior: interfaces.audioplayer.PlayBehavior, url: string, token: string, offsetInMilliseconds: number, expectedPreviousToken?: string, audioItemMetadata? : AudioItemMetadata): this;
addAudioPlayerStopDirective(): this;
addAudioPlayerClearQueueDirective(clearBehavior: interfaces.audioplayer.ClearBehavior): this;

Более подробную информацию можно получитьнайдено в https://ask -sdk-for-nodejs.readthedocs.io / en / latest / Building-Response.html

Ниже приведен фрагмент кода, который я использую в своей лямбде для воспроизведенияаудио.

//Create Image to be displayed with song

const metadata = {
    title: 'Stopwatch Audio',
    art: {
        sources: [{
            url: imageUrl
        }]
    }
};
handlerInput.responseBuilder.speak(speechText).addAudioPlayerPlayDirective("REPLACE_ALL", audiofile, audiofile, 0, null, metadata).withShouldEndSession(true).getResponse();
0 голосов
/ 22 ноября 2018

Вы должны вернуть «встроенный» ответ в обработчик.Так что в вашем случае код будет:

const LaunchRequestHandler = {
  canHandle(handlerInput) {
    return handlerInput.requestEnvelope.request.type === 'LaunchRequest';
  },
  handle(handlerInput) {
    console.log('IN LAUNCHREQUEST');
    return handlerInput.responseBuilder
        .addDirective({
            type: 'AudioPlayer.Play',
            playBehavior: 'REPLACE_ALL',
            audioItem: {
                stream: {
                    token: "0",
                    url: "myurlhere",
                    offsetInMilliseconds: 0
                }
            }
        })
        .getResponse();
        // ^^^ add this line
    }
};
...