El día de hoy, el miembro de la comunidad Oliver González nos comparte un sencillo ejemplo de una radio para Amazon Alexa, esto mediante de unos sencillos pasos que a continuación les comparto (mismos que se encuentran en su repositorio):
Paso 1: Generamos una Skill en el idioma Spanish (MX), el modelo sera Custom y el aprovisionamiento del back-end sera Alexa-Hosted(Node.js), susodicha llevara por nombre “Radio Patito”.
Paso 2: Después vamos a JSON Editor, eliminamos lo que esta pre-cargado y pegamos lo que tenemos en el archivo JSON es-MX (ver repositorio).
Guardamos el modelo y hacemos la construcción del mismo (Build Model).
Paso 3: Después debemos ir a INTERFACES y activar AUDIO PLAYER.
Paso 4: Posteriormente nos pasamos a la pestaña de Code y usamos el código NodeJS del archivo index.js (reemplazamos todo)
Paso 5: Guardamos y hacemos Deploy, aquí el funcionamiento:
Listo, con esto hemos terminado nuestra Skill.
Nota: recordemos que haciendo uso del emulador no brindara el sonido esperado, para esto deberemos de hacer la prueba en un dispositivo físico, puesto que nos brindara una advertencia como la siguiente:
Extra: Si no les funciono o tienen algún comentario, favor de dejarlo en la caja de los mismos.
Más información:
Código Fuente: GitHub Oliv3rs
Propiedad Intelectual: Oliver González
Pingback: Primer Calendario de Adviento Alexa Skills en Español – Vicente G. Guzmán Lucio
HOLA BUENAS Increible el post muchas gracias!! solo tengo una duda, en el code hay que cambiar algo o asi se queda?? saludos
Gracias Jorge!.. necesitas hacerle unos cambios leves, pero así como lo deje te debe de funcionar…
Excelente!!
Muchas gracias 😊 ☺️
Muchas gracias, hice todo, pero al momento de pedirle a Alexa que inicie la skill lo hace pero solo suena un par de segundos y no se vuelve a escuchar. ¿Alguna sugerencia de qué hacer?
Gracias.
Hola Richard,
Esto puede ser a que no cuentes con los permisos necesarios de tu URL, es decir, de la radio como tal.
Saludos!
Lo he hecho con varias emisoras y suena un pequeño instante para luego quedar en silencio
¿Qué debo poner en Token? Es lo único que no supe cómo reemplazar. ¿Estará ahí el problema?
Este es el link del stream:
https://manager2.creativradio.com:1810/vrindavana/1/itunes.pls
(He notado que no funcionan si no son https)
Que tal Maharichard,
En efecto, debe de ser https, es necesario por seguridad.
Saludos!
Hola Lucio, ya solucioné el problema.
Puedes rechazar los comentarios.
Que tal amigo,
¿Cuál era el problema?, puedes compartir tu solución para que otros puedan saber si se les presenta.
Saludos!
Como lo hiciste que me pasa igual 1segundo y se para
Hola, prodias decir como lo solucionaste que a mi se me para tambien al segundo
Hola Maharichard, por favor serias tan amable de compartir como lo solucionaste? Me pasa algo similar, en los Echo Show 5 se reproduce 2 segundos y luego se silencia, en el momento en que cambia la pantalla, en los echo dot si funciona perfectamente
Cómo lo ha solucionado?
Hi very good article.
Thanks for sharing. Keep up the good work.
Visit our site: https://www.msystraining.com/
Hola, solamente tengo la duda que poner en Token, ya que solamente se escucha un par de segundos y se detiene. gracias.
Hola, cambié el index.js a esto y me funcionó, ya no se detiene a los 2 segundos:
const Alexa = require(‘ask-sdk-core’);
const soundURL = ‘url’;
let token = «token_» + Math.random();
const STREAMS = [
{
«metadata» : {
«title»: «titulo»,
«subtitle»: «subtitulo»,
«art»: {
«sources»: [
{
«contentDescription»: «descripcion»,
«url»: «url»,
«widthPixels»: 512,
«heightPixels»: 512
}
]
},
«backgroundImage»: {
«sources»: [
{
«contentDescription»: «descripcion»,
«url»: «url»,
«widthPixels»: 1200,
«heightPixels»: 800
}
]
}
}
}
];
const LaunchRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === ‘LaunchRequest’;
},
handle(handlerInput) {
let stream = STREAMS[0];
return handlerInput.responseBuilder
.speak(`Reproduciendo ${stream.metadata.title}`)
.addAudioPlayerPlayDirective(‘REPLACE_ALL’, soundURL, token, 0, null,stream.metadata)
//.withSimpleCard(‘Example’, ‘Example’)
.getResponse();
}
};
const StartSoundHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === ‘IntentRequest’
&& handlerInput.requestEnvelope.request.intent.name === ‘StartSoundHandler’;
},
handle(handlerInput) {
let stream = STREAMS[0];
return handlerInput.responseBuilder
.addAudioPlayerPlayDirective
(‘REPLACE_ALL’, soundURL, token, 0, null,stream.metadata)
//.withSimpleCard(‘Example’, ‘Example’)
.getResponse();
}
};
const ExitHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === ‘IntentRequest’ &&
(request.intent.name === ‘AMAZON.StopIntent’ ||
request.intent.name === ‘AMAZON.CancelIntent’);
},
handle(handlerInput) {
return handlerInput.responseBuilder
.addAudioPlayerStopDirective()
.getResponse();
}
};
const SessionEndedRequestHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === ‘SessionEndedRequest’;
},
handle(handlerInput) {
//any cleanup logic goes here
return handlerInput.responseBuilder.getResponse();
}
};
const PausePlaybackHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === ‘IntentRequest’ &&
request.intent.name === ‘AMAZON.PauseIntent’;
},
handle(handlerInput) {
return handlerInput.responseBuilder
.speak(`Adios, vuelve pronto`)
.addAudioPlayerStopDirective()
//.withSimpleCard(‘Example’, ‘Bye!’)
.getResponse();
},
};
const AudioPlayerEventHandler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === ‘AudioPlayer.PlaybackStarted’ ||
request.type === ‘AudioPlayer.PlaybackStopped’ ||
request.type === ‘AudioPlayer.PlaybackNearlyFinished’ ||
request.type === ‘AudioPlayer.PlaybackFailed’;
},
handle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
switch (request.type) {
case ‘AudioPlayer.PlaybackStarted’:
token = request.token;
return handlerInput.responseBuilder
.getResponse();
case ‘AudioPlayer.PlaybackFinished’:
return handlerInput.responseBuilder
.getResponse();
case ‘AudioPlayer.PlaybackStopped’:
return handlerInput.responseBuilder
.getResponse();
case ‘AudioPlayer.PlaybackNearlyFinished’:
return handlerInput.responseBuilder
.addAudioPlayerPlayDirective
(‘ENQUEUE’, soundURL, ‘sometoken’, 0, token)
.getResponse();
case ‘AudioPlayer.PlaybackFailed’:
console.log(‘Playback Failed’);
break;
}
return handlerInput.responseBuilder.getResponse();
},
};
const ErrorHandler = {
canHandle() {
return true;
},
handle(handlerInput, error) {
console.log(`Error handled: ${error.message}`);
return handlerInput.responseBuilder
.getResponse();
}
};
exports.handler = Alexa.SkillBuilders.custom()
.addRequestHandlers(
LaunchRequestHandler,
StartSoundHandler,
ExitHandler,
SessionEndedRequestHandler,
PausePlaybackHandler,
AudioPlayerEventHandler)
.addErrorHandlers(ErrorHandler)
.lambda();
Como me puedo contactar contigo para que me orientes
Hola Andres,
Me puedes enviar un mensaje en Twitter, mi usuario es LucioMSP
Saludos!