Criando meu skill para Alexa e integração com Azure Functions

Fernando Mendes
JunDevelopers
Published in
6 min readOct 14, 2020

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!

--

--

Fernando Mendes
JunDevelopers

Software Architect .NET C# | Microsoft MVP 🏆🏆 | Co-Founder community JunDevelopers