Biblioteca para el desarrollo sencillo de habilidades de Alexa con AWS Lambda.
Instalación | ? como funciona | ? Uso | Referencia API | ? Como contribuir | ⚖️ Licencia |
---|
Alexa Skill Kit está disponible como módulo Node.js en NPM. Para instalarlo, ejecute el siguiente comando en un proyecto Node.js existente:
npm install alexa-skill-kit --save
Alexa Skill Kit es una biblioteca que simplifica el desarrollo de Alexa Skills con Node.js y AWS Lambda. No requiere ningún estilo de implementación específico, puede funcionar con funciones Lambda creadas manualmente, implementación a través de Claudia.js, etc.
Como recomiendo Claudia.js por su simplicidad, todos los siguientes ejemplos lo utilizarán. Puede obtenerlo de NPM aquí: npmjs.com/package/claudia.
Después de instalar el Alexa Skill Kit de NPM, solicítelo en su código:
const alexaSkillKit = require ( 'alexa-skill-kit' )
o con import
* sintaxis:
import alexaSkillKit from 'alexa-skill-kit'
* La sintaxis import
no es compatible con Node.js, es necesario utilizar una biblioteca adicional como Babel para que funcione.
Después de solicitarlo, simplemente necesita pasar el evento y el contexto de la función Lambda, además event
y function
, debe pasar una función de controlador como último parámetro.
Por ejemplo:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
// Do something
} )
}
Alexa Skill Kit simplifica la respuesta a las solicitudes de Alexa. Hay algunas cosas que puedes hacer:
| Responder con un texto simple | ? Responder con un objeto | ? Respuestas más complejas | ⏳ Respuestas asíncronas | | ----- | ----- | ----- | ----- | ----- |
Sigue leyendo y te los explicaremos todos a continuación.
Si desea que Alexa responda con un texto simple, simplemente debe devolver el texto en una función de controlador. Alexa Skill Kit envolverá el texto en un objeto válido.
Por ejemplo:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return 'Hello'
} )
}
Un ejemplo anterior responderá a Alexa con el siguiente objeto:
{
"version" : " 1.0 " ,
"response" : {
"shouldEndSession" : true ,
"outputSpeech" : {
"type" : " PlainText " ,
"text" : " Hello "
}
}
}
Como puede ver, la sesión se cerrará de forma predeterminada. Para mantener la sesión abierta o responder a una solicitud más compleja puedes enviar un objeto en lugar del texto.
Si desea mantener la sesión abierta o desea devolver algo más que un simple discurso de salida, puede enviar un objeto y Alexa Skill Kit no lo modificará.
Por ejemplo:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return {
version : '1.0' ,
response : {
shouldEndSession : false ,
outputSpeech : {
type : 'PlainText' ,
text : 'Hello'
} ,
card : {
type : 'Simple' ,
title : 'Simple Card' ,
content : 'An example for a simple card reply'
}
}
}
} )
}
Construir objetos manualmente es difícil y aburrido. Recomiendo usar el módulo Alexa Message Builder para simplificar la creación de respuestas más complejas.
Alexa Message Builder está disponible en NPM y puede agregarlo a su proyecto con el siguiente comando:
npm install alexa-message-builder --save
Después de eso, simplemente solicítelo con Alexa Skill Kit como este:
const alexaSkillKit = require ( 'alexa-skill-kit' )
const AlexaMessageBuilder = require ( 'alexa-message-builder' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return new AlexaMessageBuilder ( )
. addText ( 'Hello' )
. addSimpleCard ( 'Simple Card' , 'An example for a simple card reply' )
. keepSession ( )
. get ( )
} )
}
El ejemplo anterior es el mismo que el de la sección "Responder con un objeto".
¿Por qué Alexa Message Builder no forma parte del Alexa Skill Kit?
Bueno, sin una razón real, Alexa Message Builder se desarrolló antes que Alexa Skill Kit, y son módulos separados en caso de que alguien necesite solo uno de ellos sin el otro.
Alexa Skill Kit utiliza promesas para manejar respuestas asíncronas. Para poder responder de forma asincrónica, simplemente devuelve la promesa y resuélvela con un texto o un objeto y Alexa Skill Kit aplicará las mismas reglas anteriores.
Por ejemplo:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return fetchSomethingFromTheServer ( )
. then ( result => doSomethingWithTheResult ( result ) )
. then ( processedResult => {
return `Here's an info from the server: ${ processedResult } `
} )
} )
}
Alexa Skill Kit responderá con el texto:
`Here's an info from the server: ${ processedResult } `
Alexa Skill Kit ( function
) recibe los siguientes atributos:
object
, requerido): un objeto no modificado recibido de Amazon Alexa. Si su función Lambda recibe un objeto que no es una solicitud válida de Amazon Alexa, no lo analizará y nunca se llamará a su función de controlador.object
, requerido): un objeto de contexto recibido en AWS Lambda, se recomienda no modificarlo, pero Alexa Skill Kit usará las funciones context.succeed
y context.fail
únicamente, por lo que puede pasar un objeto personalizado que contenga esos dos. funciones de un objeto de contexto original.function
, requerido): una función que recibe un evento analizado y devuelve una respuesta que se pasará a Amazon Alexa.La función controladora es una función que recibe un evento analizado y puede devolver una cadena, un objeto o una promesa que devolverá una cadena u un objeto cuando se resuelva.
En caso de que no desee que Alexa responda, simplemente devuelva null
o no responda en absoluto.
El objeto analizado es un objeto que contiene las siguientes propiedades:
null
null
{}
)El cuerpo principal del código está en el directorio lib.
Las pruebas están en el directorio de especificaciones y deben seguir la estructura de los archivos fuente correspondientes. Todos los nombres de archivos de prueba ejecutables deben terminar con -spec
, por lo que npm test
los recogerá automáticamente. Cualquier archivo de proyecto adicional, clases auxiliares, etc. que el ejecutor de pruebas no deba ejecutar directamente no debe terminar con -spec
. Puede utilizar el directorio spec/helpers para almacenar los ayudantes de Jasmine, que se cargarán antes de ejecutar cualquier prueba.
Usamos Jasmine para pruebas unitarias y de integración. A menos que haya una razón muy convincente para usar algo diferente, continúe usando Jasmine para las pruebas. Las pruebas existentes están en la carpeta de especificaciones. A continuación se muestran algunos atajos de comandos útiles:
Ejecute todas las pruebas:
npm test
Ejecute solo algunas pruebas:
npm test -- filter=prefix
Obtenga informes jerárquicos detallados sobre los nombres de las pruebas:
npm test -- full
Usamos ESLint para mantener la coherencia de la sintaxis y las reglas de linting se incluyen en este repositorio. Al ejecutar npm test
también se comprobarán las reglas de linting. Asegúrese de que su código no tenga errores de linting antes de enviar una solicitud de extracción.
MIT - Ver LICENCIA