Concrete Logo
Hamburger button

Amazon Alexa – Construindo o seu primeiro skill para Amazon Echo

  • Blog
  • 19 de Maio de 2016
Share

Há alguns meses, a Amazon lançou uma série de dispositivos que pretendem mudar a forma como você interage com produtos digitais. São eles: o Amazon Dot, o Amazon Echo, Amazon Tap e, implicitamente, a Alexa.

Aqui tem um vídeo exemplificando como a Amazon imaginou que a experiência com dispositivos desse tipo aconteceria e, após alguns dias usando, devo dizer que em alguns casos ela é bastante útil.

Conheça a Alexa

A Alexa é a inteligência por trás de todos os três devices. Com ela, você pode usar comandos por voz para concluir tarefas e obter informações de uma forma mais natural, como se você estivesse falando com uma máquina.

A Alexa já possui algumas skills. Por exemplo, se você falar: “Hey Alexa, play a Beatles song”, ela já sabe que alguém está chamando e que ela precisa tocar uma música dos Beatles. Ou ainda “Hey Alexa, set a timer for 10 minutes” ou “Hey Alexa, what’s the weather in São Paulo today?”. Todos esses e muitos outros comandos já estão disponíveis automaticamente quando você compra o seu Amazon Echo. Entretanto, um fator interessante é que é possível que desenvolvedores produzam os seus próprios comandos. Eles são chamados de skills, ou habilidades, que você pode complementar a Alexa e inclusive deixar disponível para outros usuários a partir de uma “Skill Store”.

O objetivo desse post não é ensinar propriamente como construir uma skill para o Amazon Echo (apesar de que compartilhamos no github o código fonte para fazer uma skill que permite que ele te conte fatos importantes sobre o Chuck Norris), mas sim discutir algumas nuances sobre o desenvolvimento para esse tipo de interface.

Conversational UI e os novos desafios…

A primeira coisa que é pertinente quando você está desenvolvendo é pensar nas implicações de como o usuário irá interagir com o seu skill por voz. Por exemplo, qual será o nome para invocar a sua Skill? A Alexa permite a seguinte interação:

“Hey Alexa, ask <nome do meu skill> <resto do comando é passado para o meu skill interpretar>”

ou

“Hey Alexa, tell <nome do meu skill> <resto do comando é passado para o meu skill interpretar>”.

O nome que você dá para a invocação do seu skill é muito importante do ponto de vista de experiência do usuário. Use um nome do qual ele não se lembre e essa skill dificilmente vai ser invocada.

No nosso caso, usamos carinhosamente o invocation name de “Chuck”. Então, quando você diz:

“Hey Alexa, ask Chuck <resto do comando>” a Alexa sabe que precisa começar a executar o meu skill.

Um ponto relacionado ao tema acima é como o usuário descobre quais comandos ele pode passar para o skill. No nosso caso, se você perguntar para a Alexa:

“Hey Alexa, talk to Chuck”, o Chuck vai responder: “Hey, just tell me to give you a fact”.

Esse tipo de diálogo resolve o problema de descoberta de funcionalidades relacionadas a uma skill.

A segunda parte pertinente sobre implementar uma Conversational UI é levar em conta todas as ramificações possíveis que a conversa pode ter, além de pensar na forma mais natural que o usuário poderia ter ao interagir com a sua skill.

image01

No nosso caso, eu optei pela seguinte interação:

“Hey Alexa, ask Chuck to give me a fact”

image00

Isso é chamado de Utterances, a menor unidade de uma fala com início e fim. Eu posso configurar diversas outras utterances, inclusive com variáveis, como por exemplo:

“Hey Alexa, ask Chuck to give me a roundhouse kick related fact”

“Hey Alexa, ask Chuck to give me a fact I’ve never heard before”

A resposta também tem as suas nuances, por exemplo, para obter os fatos sobre o Chuck Norris eu utilizei uma API na ICNDB (Internet Chuck Norris Database – sim, isso existe =)). Ou seja, quando você chama a Alexa e pede para que ela dê um fato sobre o Chuck Norris, a skill que desenvolvemos em Node.JS tem aquele pedaço de código executado no Lambda da AWS que, por sua vez, faz um request para a API acima, recebe a resposta e então separa o conteúdo da frase e manda a Alexa dizer para o usuário.

O tempo de resposta aqui é essencial e, apesar de na maioria das vezes o Amazon Echo ser utilizado dentro de casa em um contexto no qual provavelmente existe uma internet banda-larga, a experiência do usuário é extremamente afetada se a resposta demorar muito para aparecer.

De qualquer maneira, ainda existe a questão sobre como vamos comunicar a resposta para o usuário. Decidimos pela seguinte forma:

“Did you know that <fato engraçado sobre o Chuck Norris>”.

A ideia é  simular uma conversa, na qual você pergunta para alguém sobre um fato do Chuck Norris e ele responde com um “você sabia que…”, que é um flow mais natural de conversação, mais parecido com uma conversa que você teria com um humano. A Amazon tem um material bem relevante sobre Voice Interaction Design que deve mudar a forma como UX Designers participam nesse tipo de produto. Talvez um background de linguística comece a ser necessário, assim como era comum bibliotecários com arquitetos de informação a alguns anos atrás.

Lidando com erros

Logo nos primeiros experimentos ficou muito claro que é extremamente difícil você falhar graciosamente para o seu usuário. Por exemplo, quando um request para a API do Chuck Norris falha ou encontra algum outro tipo de problema, como comunicar para o usuário com uma experiência fluida e dando a ele alguma possibilidade de se recuperar do problema? A solução que temos hoje é a seguinte:

“I am sorry, but I couldn’t reach Chuck Norris wisdom on the web. Try again later. “.

E no final da mensagem eu adicionei a mensagem técnica do erro (para motivos de debug enquanto desenvolvia), pois de certa forma é extremamente complicado debugar de forma sistemática código desse tipo rodando em lugares tão diferentes quanto AWS Lambda, Amazon Echo, Alexa e todo o stack de Node.JS.

Show me the code

O código para a skill está disponível no github e é fortemente baseado em samples que são fornecidos pela própria Amazon.

O resultado final…

Dúvidas? Aproveite o campo abaixo!

Quer saber mais sobre os produtos que desenvolvemos? Entre em contato com nossa área comercial.