Criando meu skill para Alexa e integração com Azure Functions
Olá pessoal, faz uns anos que eu já uso a Alexa em meu dia a dia.
Alexa para quem não sabe, é um assistente virtual com inteligência artificial que através de sua voz, você consegue como por exemplo perguntar sobre a temperatura ou saber de sua agenda, ou executar alguns comandos como tocar uma música, ou ligar sua televisão.
Para quem quiser, você pode saber mais sobre no site da Amazon
Com a Alexa em mãos, podemos criar skills personalizados utilizando dotnet e Azure
Como um exemplo para ser simples e direto, vamos criar uma skill para retornar a temperatura do momento. Para isso vamos utilizar a API do Clima Tempo
Para você usar a API, você precisa-se cadastrar, e gerar um token, para você utilizar em suas aplicações.
A rota que iremos usar será essa: http://apiadvisor.climatempo.com.br/api/v1/weather/locale/{idCidade}/current?token={token}
O IdCidade, na documentação da API Clima Tempo, você conseguirá obter a cidade que você quer.
Agora, vamos criar uma solução Azure Functions
Abra o Visual Studio e selecione Azure Functions
Depois selecione essas opções, conforme imagem abaixo
Na solução terá classe, onde estará a função que iremos criar para obter a temperatura via API
Antes de alterar a classe, vamos incluir via nuget, a biblioteca para integração da Alexa.
PM> install-package Alexa.NET
Como a Alexa, irá fazer requisições via Rest, para nossa function, que está no Azure,essa biblioteca auxilia no request para verificar o que o Alexa está pedindo para ser retornado. Como por exemplo, obter o comando que vamos solicitar a Alexa: Alexa, qual a temperatura?
Sendo assim, sabemos que o comando é para obter a temperatura, e assim no método invocamos a API do Clima tempo, para obter a temperatura e retornar o valor para a Alexa.
Depois de instalado a biblioteca, vamos modificar nossa function, dessa forma;
Veja que a Alexa, envia um json, mais ou menos como esse:
Onde o comando que iremos executar estará nessa parte do json:
"request": {
"type": "IntentRequest",
"requestId": "EdwRequestId.2",
"intent": {
"name": "AddIntent" },
"locale": "en-US",
"timestamp": "2017-11-26T19:07:16Z"
}
Mas isso vamos configurar dentro da plataforma da Alexa, quais comandos irão ser enviados.
Voltando ao código, temos no método ProcessRequest que de acordo com a requisição da Alexa, irá retornar o que foi solicitado. Vejam que temos 3 tipos de solicitação:
- LauchRequest: Essa solicitação será quando eu disser a Alexa: “Alexa, abra o dotnet marraia”.
Comando irá abrir a nossa skill para ser utilizada. Quando isso acontecer o Azure Function irá retornar: “Welcome a Dotnet Marraia temperature. Create By Fernando Mendes” e a Alexa irá me falar essa frase.
- IntentRequest: Essa solicitação será quando eu disser a Alexa, logo após ter aberto a skill “dotnet marraia”: “Now Jundiaí”
Comando irá executar a API do Clima tempo, e me retornar a temperatura do momento em Jundiaí. Quando o método for executado, o Azure Function irá retornar: “The temperature in jundiaí at this moment is 20 degrees” e a Alexa irá me falar essa frase.
- SessionEndedRequest: Essa solicitação será quando eu disser a Alexa: “Fechar”
Comando irá fechar a skill “dotnet marraia”. Quando o método for executado, o Azure Function irá retornar: “Bye Bye Marraia!!” e a Alexa irá me falar essa frase.
Mas para isso tudo acontecer, temos que fazer o deploy de nossa function, no Azure
Depois selecione para realizar o deploy:
Depois selecione Azure Functions App
E escolha o seu Azure Function
Depois de escolhido, faça o deploy!
Mas depois de ter feito o deploy no Azure, temos que ir no console da Alexa, e configurar a nossa Skill.
Vá até o portal da Alexa, caso vc não tenha um usuário, você poderá criar um usuário no portal.
Na tela principal, clique em “Create Skill”
Depois coloque um nome para a sua skill, selecione uma linguagem, e depois clique em “Create Skill”
Importante dizer, que você pode criar skills em vários idiomas. Mas, no meu caso, a minha Alexa, ela só tem o idioma em inglês, por isso os meus exemplos vão ser na linguagem em inglês.
Depois disso, selecione no menu lateral a opção: “Invocation”
Onde vamos colocar o comando que a Alexa irá entender para abrir a nossa skil, por isso preencha o campo “Skill Invocation Name”
Depois de preencher o campo, salve as alterações, no botão “Save Model”
Logo após salvar, clique no menu lateral a opção: “Interation Model > Intents”
Vamos aqui adicionar um comando de intenção para Alexa nos responder. Para isso clique no botão “Add Intent”
Coloque um nome para a sua intenção.
Logo após, adicionar a intenção, irá abrir essa tela:
Onde vamos colocar o comando que iremos solicitar a Alexa, para que o Azure Functions, retorne o valor da temperatura atual de Jundiaí.
Depois disso, clique no botão “Save Model” e depois em “Build Model”.
Agora temos que adicionar o endereço do Azure Functions em nossa skill.
Clique no menu lateral a opção: “Assets > Endpoints”
Coloque o seu endereço do Azure Functions, e selecione a opção, conforme a imagem.
Logo após isso, podemos ir na opção “Test”, e fazer um teste pelo console
Agora, para quem tem a Alexa, conseguimos usar essa nossa skill pela Alexa.
Acesse o site: https://alexa.amazon.com.br/
Faça o login com seu usuário, e no menu lateral clique em “Skills” e depois clique em “Suas Skills”
Veja a sua skill, na seção “Skill de desenv”
Agora no vídeo abaixo, mostrarei eu dialogando com a Alexa, utilizando a nossa skill.
Bom pessoal, espero que vocês possam ter gostado desse artigo!
Segue o fonte desse exemplo, em meu Github
Até a próxima!