Biblioteca para desenvolvimento fácil de Alexa Skill com AWS Lambda.
Instalação | ? Como funciona | ? Uso | Referência da API | ? Como contribuir | ⚖️ Licença |
---|
Alexa Skill Kit está disponível como um módulo Node.js no NPM. Para instalá-lo, execute o seguinte comando em um projeto Node.js existente:
npm install alexa-skill-kit --save
Alexa Skill Kit é uma biblioteca que simplifica o desenvolvimento de Alexa Skills com Node.js e AWS Lambda. Não requer nenhum estilo de implantação específico, pode funcionar com funções Lambda criadas manualmente, implantação via Claudia.js, etc.
Como eu recomendo Claudia.js por causa de sua simplicidade, todos os exemplos a seguir irão utilizá-lo. Você pode obtê-lo no NPM aqui: npmjs.com/package/claudia.
Depois de instalar o Alexa Skill Kit do NPM, solicite-o em seu código:
const alexaSkillKit = require ( 'alexa-skill-kit' )
ou com sintaxe import
*:
import alexaSkillKit from 'alexa-skill-kit'
* A sintaxe import
não é suportada no Node.js, você precisa usar uma biblioteca adicional como Babel para fazê-la funcionar.
Depois de solicitá-lo, você simplesmente precisa passar o evento e o contexto da função Lambda, ao lado de event
e function
, você precisa passar uma função manipuladora como o último parâmetro.
Por exemplo:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
// Do something
} )
}
Alexa Skill Kit simplifica a resposta às solicitações de Alexa. Existem algumas coisas que você pode fazer:
| Respondendo com um texto simples | ? Respondendo com um objeto | ? Respostas mais complexas | ⏳ Respostas assíncronas | | ----- | ----- | ----- | ----- | ----- |
Continue lendo e todos eles serão explicados a seguir.
Se você quiser que Alexa responda com um texto simples, basta retornar o texto em uma função de manipulação. Alexa Skill Kit envolverá o texto em um objeto válido.
Por exemplo:
const alexaSkillKit = require ( 'alexa-skill-kit' )
exports . handler = function ( event , context ) {
alexaSkillKit ( event , context , parsedMessage => {
return 'Hello'
} )
}
Um exemplo acima responderá ao Alexa com o seguinte objeto:
{
"version" : " 1.0 " ,
"response" : {
"shouldEndSession" : true ,
"outputSpeech" : {
"type" : " PlainText " ,
"text" : " Hello "
}
}
}
Como você pode ver, a sessão será fechada por padrão. Para manter a sessão aberta ou responder a solicitações mais complexas você pode enviar um objeto em vez do texto.
Se você quiser manter a sessão aberta ou retornar algo mais do que uma simples fala de saída, você pode enviar um objeto e o Alexa Skill Kit não o modificará.
Por exemplo:
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 é difícil e chato. Eu recomendo usar o módulo Alexa Message Builder para simplificar a construção de respostas mais complexas.
Alexa Message Builder está disponível no NPM e você pode adicioná-lo ao seu projeto com o seguinte comando:
npm install alexa-message-builder --save
Depois disso, basta solicitá-lo com Alexa Skill Kit assim:
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 ( )
} )
}
O exemplo acima é igual ao exemplo da seção "Respondendo com um objeto".
Por que o Alexa Message Builder não faz parte do Alexa Skill Kit?
Bem, sem um motivo real, o Alexa Message Builder foi desenvolvido antes do Alexa Skill Kit, e são módulos separados caso alguém precise de apenas um deles sem o outro.
Alexa Skill Kit usa promessas para lidar com respostas assíncronas. Para poder responder de forma assíncrona basta retornar a promessa e resolvê-la com um texto ou objeto e o Alexa Skill Kit aplicará as mesmas regras acima.
Por exemplo:
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á com o texto:
`Here's an info from the server: ${ processedResult } `
Alexa Skill Kit ( function
) recebe os seguintes atributos:
object
, obrigatório) — um objeto não modificado recebido do Amazon Alexa. Se sua função Lambda receber um objeto que não seja uma solicitação válida do Amazon Alexa, ela não o analisará e sua função manipuladora nunca será chamada.object
, obrigatório) — um objeto de contexto recebido no AWS Lambda, é recomendado não modificá-lo, mas Alexa Skill Kit usará apenas as funções context.succeed
e context.fail
, para que você possa passar um objeto personalizado que contenha esses dois funções de um objeto de contexto original.function
, require) — uma função que recebe o evento analisado e retorna uma resposta que será passada para o Amazon Alexa.Função manipuladora é uma função que recebe evento analisado e pode retornar string, objeto ou uma promessa que retornará string ou objeto quando for resolvido.
Caso você não queira que Alexa responda, simplesmente retorne null
ou não retorne de jeito nenhum.
Objeto analisado é um objeto que contém as seguintes propriedades:
null
null
{}
)O corpo principal do código está no diretório lib.
Os testes estão no diretório spec e devem seguir a estrutura dos arquivos fonte correspondentes. Todos os nomes de arquivos de teste executáveis devem terminar com -spec
, para que sejam automaticamente obtidos pelo npm test
. Quaisquer arquivos de projeto adicionais, classes auxiliares, etc. que não devam ser executados diretamente pelo executor de teste não devem terminar com -spec
. Você pode usar o diretório spec/helpers para armazenar auxiliares Jasmine, que serão carregados antes de qualquer teste ser executado.
Usamos Jasmine para testes unitários e de integração. A menos que haja um motivo muito convincente para usar algo diferente, continue usando o Jasmine para testes. Os testes existentes estão na pasta spec. Aqui estão alguns atalhos de comando úteis:
Execute todos os testes:
npm test
Execute apenas alguns testes:
npm test -- filter=prefix
Obtenha relatórios detalhados de nomes de testes hierárquicos:
npm test -- full
Usamos ESLint para consistência de sintaxe e as regras de linting estão incluídas neste repositório. A execução npm test
também verificará as regras de linting. Certifique-se de que seu código não contenha erros de linting antes de enviar uma solicitação pull.
MIT - Veja LICENÇA