Nic Raboy

Nic Raboy é um defensor das modernas tecnologias de desenvolvimento móvel e da Web. Ele tem experiência em Java, JavaScript, Golang e uma variedade de estruturas, como Angular, NativeScript e Apache Cordova. Nic escreve sobre suas experiências de desenvolvimento relacionadas a tornar o desenvolvimento móvel e da Web mais fácil de entender.

Recentemente, escrevi um tutorial sobre Criando um AWS Lambda que se comunicava com a função Couchbase banco de dados NoSQL usando a linguagem de programação Go. Este tutorial anterior foi baseado em um desenvolvimento sem servidor padrão, mas e se quiséssemos levar as coisas para o próximo nível? Por exemplo, os dispositivos acionados pelo Amazon Alexa, na maioria das circunstâncias, utilizam o AWS Lambda para funcionar. Então, o que seria necessário para tornar nossa função compatível com o Alexa?

Neste tutorial, veremos como trabalhar com solicitações do Amazon Alexa e responder adequadamente para que o Alexa transmita uma mensagem de áudio de volta ao usuário. Os dados com os quais responderemos virão do nosso banco de dados e serão gerenciados com a linguagem de programação Go.

 

Criação de uma função Lambda com suporte ao Amazon Alexa

Se você ainda não viu meu tutorial anteriorsugiro que dê uma olhada antes de continuar a leitura. O tutorial anterior é curto e fornecerá alguma perspectiva sobre o desenvolvimento de funções Lambda com Go e Couchbase.

Em seguida, crie um projeto em seu **$GOPATH** com um arquivo **main.go** nele. Na linha de comando, execute o seguinte para baixar nossas dependências:

 

Das nossas dependências, estamos baixando o AWS Lambda SDK para Go, bem como o Couchbase SDK para Go. Também estamos baixando um pacote UUID para gerar valores exclusivos para representar nossas chaves de documento, que é o que tínhamos em nosso tutorial anterior. No entanto, desta vez, estamos baixando outro pacote que contém modelos para cada uma de nossas solicitações e respostas. O Alexa espera que as solicitações e as respostas estejam em um determinado formato JSON, que é praticamente a única finalidade do pacote Alexa.

No arquivo **main.go**, adicione o seguinte código padrão:

Então, o que está acontecendo no código acima?

Depois de importar as dependências baixadas, podemos criar um arquivo Todo que armazenará nossos dados. Da mesma forma que no exemplo anterior, vamos armazenar as informações da lista de tarefas e consultar essas informações.

No principal estamos estabelecendo uma conexão com nossa instância do Couchbase e abrindo nosso bucket. É importante que nossa instância do Couchbase esteja hospedada em algum lugar porque o Lambda precisa ser capaz de interagir com ela. Isso significa que você provavelmente não poderá testar com o Couchbase em execução em seu host local.

Quando se trata da Alexa, as coisas acontecem com base em ações conhecidas como intenções. Essas ações são normalmente uma solicitação à Alexa. Em qualquer habilidade, você pode interagir com a Alexa de várias maneiras, portanto, com várias intenções. Nossa habilidade terá uma Sobre a intenção para obter informações, um CreateTodoIntent para salvar dados, e um GetTodosIntent para consultar nossos dados e retorná-los ao usuário. Essas intenções serão controladas pelo nosso IntentDispatcher função.

A ideia por trás de nossa IntentDispatcher é uma solicitação que virá da Alexa. Dentro da solicitação, a Amazon descobrirá a intenção correta e poderemos usar essas informações. Essas informações de intenção serão definidas mais adiante. Usando as informações de intenção, podemos chamar a função correta.

Então, vamos dar uma olhada no Sobre a intenção função:

Se a função for chamada, poderemos usar o pacote Alexa para formatar nossa resposta como JSON correto e retorná-la. A resposta terá um título e um texto para ser falado de volta ao usuário.

Agora vamos dar uma olhada no CreateTodoIntent função:

Se nosso expedidor escolher a função acima, pegaremos os dados dinâmicos, conhecidos como slot, e os inseriremos no Couchbase. Os dados do slot serão analisados pela Amazon e incluídos na solicitação, assim como a intenção. Os dados do slot serão retornados e falados pela Alexa quando terminarmos.

A função final é mais longa, mas não muito mais complicada:

No HandleGetTodosIntent estamos consultando o balde aberto usando N1QL. Com os resultados, estamos formando uma cadeia de dados a ser retornada ao usuário e falada pela Alexa.

Com o código concluído, podemos nos concentrar na implantação.

Implementação e teste da função Lambda como uma habilidade da Alexa

Antes de podermos implementar no Skill Store, precisamos preparar nosso código de função para o Lambda. Da mesma forma que no exemplo anterior, precisamos compilar nosso aplicativo para Linux, que é o que o Lambda usa.

Na linha de comando, execute o seguinte:

Certifique-se de alterar o nome binário com o nome do seu arquivo binário real criado a partir do comando de compilação anterior. Se não for possível executar o comando zíper vá em frente e arquive o arquivo da forma que fizer mais sentido.

Com o arquivo **handler.zip** em mãos, acesse o Lambda Management Dashboard (https://console.aws.amazon.com/lambda) e crie uma nova função usando os padrões. Apenas certifique-se de que esteja usando um projeto Go.

Para o acionador, escolha **Alexa Skills Kit** e faça o upload do arquivo ZIP. Para o **Handler**, certifique-se de fornecer o nome do seu arquivo binário, não o nome do seu arquivo ZIP.

A última coisa a ser observada é o seu ID ARN. Esse valor de ARN será necessário quando configurarmos a Alexa.

Agora, acesse o Alexa Developer Console (https://developer.amazon.com/alexa/console) para que possamos criar uma nova habilidade. Como parte do processo de criação, você precisará fazer quatro coisas:

 

  1. Nome da invocação
  2. Intenções, amostras e slots
  3. Modelo de construção
  4. Ponto final

O nome da invocação não precisa corresponder ao nome da sua Skill, mas deve ser uma palavra real que possa ser pronunciada com todos os sotaques. Se você começar a inventar palavras ou usar palavras complicadas, terá sorte se a Alexa entender o que as pessoas disseram.

O endpoint é o ARN que você copiou na etapa anterior do console do Lambda. Certifique-se de colá-lo.

A maior parte de nosso trabalho será em torno da criação de intents, exemplos de enunciados e nossos dados de slots dinâmicos. Precisamos criar três intents para corresponder ao que temos em nosso código Golang. Cada uma de nossas intenções deve ter uma lista de frases que ativam a intenção.

Por exemplo, o GetTodosIntent pode ter os seguintes exemplos de enunciados:

 

Quanto mais frases de exemplo você tiver, melhor será o desempenho da sua habilidade. Basicamente, os exemplos ajudam a Alexa a determinar qual intenção acionar em seu código. A CreateTodoIntent é onde as coisas ficarão um pouco complicadas porque estamos esperando dados dinâmicos.

Dê uma olhada nos exemplos de enunciados a seguir:

 

Observe que eu tenho {todo} nas amostras acima, que corresponde à do slot no meu código. O {todo} é, na verdade, uma variável para informações dinâmicas. Essas informações serão salvas em nosso banco de dados. No entanto, precisamos definir que tipo de dados {todo} é.

 

Crie um tipo de slot personalizado e atribua a ele alguns valores. Por exemplo, eu adicionei:

Você não precisa de uma lista exaustiva, mas ela é um dado de aprendizado para a Alexa e ajuda a Alexa a identificar quais tipos de informações devem ser consideradas informações de slot. O fato de o texto não constar na lista não significa que a Alexa não o pegará.

Neste momento, você deve conseguir criar sua habilidade. Vá em frente e digite algumas frases de exemplo no portal de teste para vê-lo em ação antes de tentar implementar.

Conclusão

Você acabou de ver como criar uma Amazon Alexa Skill usando Golang e Servidor Couchbase. Essa foi uma extensão de um tutorial anterior que escrevi, intitulado, Desenvolvimento de funções AWS Lambda com Golang e Couchbase NoSQL.

Há também algo a ser observado sobre nossa habilidade. A Amazon tem várias intenções obrigatórias que devem estar presentes para serem aprovadas. Por exemplo, é necessário que haja intenções para interromper e cancelar ações. Nós não as adicionamos, mas elas seguiriam a mesma estratégia.

Se você quiser ver outro exemplo de desenvolvimento de uma habilidade com a Golang, confira meu tutorial intitulado, Crie uma habilidade para Alexa com Golang e AWS Lambda.

Autor

Postado por Laura Czajkowski, gerente da comunidade de desenvolvedores, Couchbase

Laura Czajkowski é a Snr. Developer Community Manager da Couchbase, supervisionando a comunidade. Ela é responsável pelo nosso boletim informativo mensal para desenvolvedores.

Deixar uma resposta