Crie um aplicativo do Google Home com as funções do PubNub

Aplicativos de voz com inteligência artificial se tornaram um participante importante no recente movimento de casas inteligentes. Com o Dialogflow do Google, os desenvolvedores podem criar rapidamente aplicativos de conversação que facilitam as tarefas dos usuários. O que o Dialogflow não oferece, no entanto, é um servidor facilmente implementável que permite aos desenvolvedores executar certas funções com dados do usuário.

Nesta demonstração, utilizaremos as funções do PubNub juntamente com o Dialogflow para criar um aplicativo de amostra que reproduza a música certa para um usuário, com base no seu humor atual. O Dialogflow não fornece nenhum meio de analisar o sentimento da entrada de fala de um usuário, mas através do PubNub Functions e do nosso Amazon Comprehend BLOCK , os desenvolvedores podem facilmente analisar o sentimento da entrada de fala do usuário e realizar uma determinada ação dependendo desse resultado.

Demonstração do MoodTunes

Visão geral do tutorial

Assim que o nosso aplicativo de demonstração MoodTunes for ativado, ele perguntará ao usuário “Ei, e aí?”. O usuário responderá com uma frase ou duas descrevendo seu humor geral. O aplicativo irá então obter a entrada de fala do usuário e analisá-lo para determinar o humor do usuário usando o Comprehend BLOCK.

Finalmente, categorizará o humor como realmente positivo, ligeiramente positivo, ligeiramente negativo ou realmente negativo. O diagrama a seguir exibe a estrutura do aplicativo e uma resposta de teste.

Configuração inicial

Nosso primeiro passo será criar um novo agente no console do Dialogflow . O agente é o termo para seu aplicativo, pois ajuda o usuário a executar uma determinada ação.

Vamos nomear nosso agente Mood Tunes .

Esse novo agente terá duas intenções por padrão: Intenção de Retorno Padrão e Intenção de Boas-Vindas Padrão . Pense em uma intenção como uma parte específica de toda a conversa que é acionada quando o usuário diz determinada frase. A intenção de boas-vindas padrão é acionada quando o usuário chama seu aplicativo dizendo "Fale com (nome do agente)" e a Intenção de Fallback padrão é acionada quando o usuário diz algo que o aplicativo não entende ou não está treinado para responder.

Para nossa demonstração, usaremos apenas duas intenções: intenção de boas-vindas padrão e outra intenção que criaremos chamada Get_Emotion. Em nossa intenção de boas-vindas padrão, adicionaremos uma resposta de texto padrão "Hey, e aí?", Que fará com que o usuário descreva como está se sentindo em uma frase ou duas.

Este novo discurso irá acionar nossa nova intenção Get_Emotion. Para criar uma nova intenção, clique no botão mais na barra de navegação lateral do seu console. Queremos que nosso usuário seja capaz de dizer qualquer tipo de sentença sem um padrão específico para acionar nossa intenção Get_Emotion. Assim, devemos especificar isso em nossa seção Frases de Treinamento da intenção. Faremos isso clicando no ícone ” para alterá-lo para um ícone @ e digitando @ sys.any: any.

Por fim, precisamos ir até a seção de preenchimento e clicar no botão de alternância para ativar as chamadas do webhook para a intenção Get_Emotion. A chamada do webhook é o que nos permitirá estabelecer a conexão entre nosso aplicativo Dialogflow e nosso servidor de funções PubNub, para que nossa função possa ser ativada depois que o usuário descrever como está se sentindo.

Agora vamos para o PubNub Admin Dashboard , para criar um novo projeto chamado MoodTunes. Neste novo projeto, navegaremos para a barra lateral e clicaremos em funções. Aqui, vamos criar um módulo chamado Music Player e dentro do módulo criar uma função onRequest , que chamamos de playmusic . Clique no botão Copiar URL para copiar o caminho da função. Em seguida, colaremos esse URL na guia de preenchimento do aplicativo Dialogflow, em Webhook, onde ele diz URL.

Agora, configuramos com sucesso nosso aplicativo Dialogflow e sua conexão através do webhook à nossa função PubNub. No restante deste tutorial, vamos escrever o código JavaScript do nosso aplicativo no editor de funções PubNub.

Função PubNub

Podemos dividir nossa função PubNub em três partes.

  1. Recebendo a solicitação do webhook do Dialogflow
  2. Processando dados da solicitação
  3. Formando resposta para enviar para o Dialogflow

Na nossa função PubNub, temos dois parâmetros, request e response . A solicitação do Dialogflow será na forma de JSON e contém a entrada de fala do usuário que devemos extrair. A estrutura da solicitação JSON está no seguinte formato, de acordo com a documentação do Google.

Para obter o valor queryText dessa solicitação, devemos primeiro analisar seu corpo para que ele esteja no formato JSON adequado. Faremos isso usando JSON.parse() . Agora que está no formato JSON adequado, podemos extrair o valor queryResult e, em seguida, o valor queryText . Isso é mostrado na linha a seguir.

 var text = JSON.parse (request.body) .queryResult.queryText; 

Agora, que temos uma referência à entrada de fala do usuário, o próximo passo é processar esses dados. Faremos isso passando-o ao nosso Amazon Comprehend BLOCK. Para adicionar o bloco ao seu projeto, clique no botão mais e você será solicitado a adicionar uma função ao seu módulo. Vamos nomear nossa função Amazon Comprehend e definir o tipo de evento como onRequest . Em seguida, defina o caminho da URL para amazoncomprehend . O código padrão do Amazon Comprehend BLOCK é para um manipulador de publicação anterior. No entanto, queremos que o nosso bloco seja um manipulador OnRequest, então copie e cole este código em seu editor.

Em seguida, faremos uma conta da AWS, se você ainda não tiver uma. Precisamos obter as seguintes credenciais: Compreender chave de acesso e chave secreta ( descubra como aqui ). Assim que tivermos essas credenciais, elas serão inseridas no armazenamento de valores-chave do My Secrets do PubNub. Você pode encontrar isso no lado esquerdo da visualização do módulo em um botão grande chamado "Meus segredos". A chave para a chave de acesso deve ser AWS_access_key e a chave para a chave secreta deve ser AWS_secret_key . Em seguida, insira os valores correspondentes e clique em Salvar , para saber que suas credenciais estão corretas na referência do seu cofre no código de função.

Com a nossa configuração Amazon Comprehend Function, devemos agora fazer uma solicitação HTTP usando o módulo xhr , fornecido pelas funções PubNub. Com o método xhr.fetch , podemos fazer uma solicitação HTTP para uma URL especificada, além de passar um objeto que define o tipo, os parâmetros do corpo e os parâmetros de cabeçalho. Obtenha o URL no botão Copiar URL na função Amazon Compreend e armazene-o em uma variável, amazon_url . Nossas amazon_request_options , no código abaixo, definem os parâmetros necessários para a solicitação HTTP.

Nós passamos o texto que queremos analisar na chave, speechInput . Devemos também especificar dentro de um campo chamado comprehend , o language e location das chaves. A linguagem é simplesmente a língua em que o texto está (en para inglês) e a localização é o nome da chave na requisição que contém o texto a ser analisado (no nosso caso speechInput). Também devemos especificar o tipo da solicitação que é POST, como o valor da chave do method . Passando os objetos amazon_url e amazon_request_options para o método xhr.fetch, usamos uma promessa para obter a resposta JSON para a solicitação HTTP, quando ela estiver pronta.

Agora que temos nossa resposta armazenada na variável sentiment_response , devemos agora analisá-la para que possamos obter a medida de quão positiva foi a entrada de fala do usuário. O corpo da resposta JSON deve conter um sentiment campo, que conterá a chave SentimentScore , que conterá uma chave Positive . Você pode ver isso se usar o console para registrar o corpo da resposta. Assim, para obter este valor numérico de 0 a 1, que mostra como a entrada de fala do usuário foi positiva, devemos usar a seguinte linha de código.

Em seguida, usaremos esse valor e lógica if-else para escolher qual música tocar para o usuário. Como explicado anteriormente, se positive_measure for maior que 0.75, tocaremos nossa música realmente positiva. No caso de estar entre 0.5 e 0.75, tocaremos nossa música um pouco positiva. Se estiver entre 0,25 e 0,5, tocaremos nossa música levemente negativa e será menos de 0,25, tocamos nossa música realmente negativa. Todas as músicas respectivas estão hospedadas no meu projeto do GitHub sob os URLs mostrados no snippet de código abaixo.

Com nossa análise da entrada de fala do usuário feita, estamos prontos para a etapa final do nosso aplicativo, que está formando a resposta a ser enviada ao Dialogflow. Nesta resposta, precisamos passar o URL que reproduzirá a música certa no dispositivo doméstico do Google. Conforme especificado na Documentação do Google, essa resposta deve se assemelhar ao formato a seguir.

Em nosso caso, a chave expectUserResponse deve ter valor falso, já que a reprodução da música é o fim da conversa de um usuário com nosso aplicativo. Além disso, teremos o nosso simpleResponse , que o usuário saiba que sua música está sendo tocada. mediaResponse também um campo mediaResponse , que conterá uma matriz mediaObjects , com name , description e contentUrl .

O nome e a descrição das teclas serão para a visualização do player de música que aparece quando um usuário usa nosso aplicativo em um dispositivo do Google Assistente com uma exibição. O contentUrl será o URL da nossa música para tocar (vamos definir isso para a nossa variável song_url que definimos antes). Por dentro da richResponse, devemos incluir uma matriz de suggestions , de acordo com a documentação do Google. Como não é pertinente ao nosso aplicativo, no entanto, vamos torná-lo uma matriz vazia. Essa resposta JSON deve ser uma string, já que response.send só aceita strings, portanto, usaremos o método JSON.stringify . Isso tudo é mostrado no código a seguir.

Parabéns!

Agora que obtivemos a entrada de fala do usuário por meio da solicitação webhook do Dialogflow, analisamos o sentimento usando o Amazon Comprehend BLOCK da função PubNub e formamos uma resposta reproduzindo uma música que corresponde ao humor do usuário, concluímos o MoodTunes.

Se você estiver testando seu aplicativo, assegure-se de ter iniciado seu módulo de funções, para que o código do lado do servidor esteja em execução e implementado. Para testar seu aplicativo em um dispositivo doméstico do Google, verifique se você concluiu essas etapas . Clique aqui para o código fonte completo .