Criando habilidades de voz para o Google Assistant e Amazon Alexa

Publicados: 2022-03-10
Resumo rápido ↬ Os assistentes de voz estão saindo da tecnologia emergente e entrando na vida cotidiana. Como desenvolvedor front-end, você já tem as habilidades para criar um, então vamos mergulhar nas plataformas.

Na última década, houve uma mudança sísmica em direção a interfaces de conversação. À medida que as pessoas atingem a 'tela de pico' e até começam a reduzir o uso do dispositivo com recursos de bem-estar digital sendo incorporados à maioria dos sistemas operacionais.

Para combater a fadiga da tela, os assistentes de voz entraram no mercado para se tornar a opção preferida para recuperar informações rapidamente. Uma estatística bem repetida afirma que 50% das pesquisas serão feitas por voz no ano de 2020. Além disso, à medida que a adoção aumenta, cabe aos desenvolvedores adicionar “Interfaces de conversação” e “Assistentes de voz” ao seu cinto de ferramentas.

Projetando o invisível

Para muitos, embarcar em um projeto de interface de usuário de voz (VUI) pode ser um pouco como entrar no Desconhecido. Saiba mais sobre as lições aprendidas por William Merrill ao projetar para voz. Leia um artigo relacionado →

O que é uma interface de conversação?

Uma Interface Conversacional (às vezes abreviada para CUI, é qualquer interface em uma linguagem humana. É uma interface mais natural para o público em geral do que a GUI da Interface Gráfica do Usuário, que os desenvolvedores front-end estão acostumados a construir. Uma GUI requer humanos para aprender suas sintaxes específicas da interface (pense em botões, controles deslizantes e menus suspensos).

Essa diferença fundamental no uso da linguagem humana torna a CUI mais natural para as pessoas; requer pouco conhecimento e coloca o ônus da compreensão no dispositivo.

Comumente, os CUIs vêm em duas formas: Chatbots e assistentes de voz. Ambos tiveram um aumento maciço na aceitação na última década, graças aos avanços no Processamento de Linguagem Natural (PNL).

Entendendo o jargão de voz

(Visualização grande)
Palavra-chave Significado
Habilidade/Ação Um aplicativo de voz, que pode cumprir uma série de intenções
Intenção Ação pretendida para a habilidade cumprir, o que o usuário deseja que a habilidade faça em resposta ao que ele diz.
Enunciado A frase que um usuário diz ou pronuncia.
Acordar Palavra A palavra ou frase usada para iniciar a escuta de um assistente de voz, por exemplo, 'Hey google', 'Alexa' ou 'Hey Siri'
Contexto Os pedaços de informação contextual dentro de um enunciado, que ajudam a habilidade a cumprir uma intenção, por exemplo, 'hoje', 'agora', 'quando eu chegar em casa'.
Mais depois do salto! Continue lendo abaixo ↓

O que é um assistente de voz?

Um assistente de voz é um software capaz de NLP (Natural Language Processing). Ele recebe um comando de voz e retorna uma resposta em formato de áudio. Nos últimos anos, o escopo de como você pode se envolver com um assistente está se expandindo e evoluindo, mas o cerne da tecnologia é a linguagem natural, muita computação, a linguagem natural.

Para quem procura um pouco mais de detalhes:

  1. O software recebe uma solicitação de áudio de um usuário, processa o som em fonemas, os blocos de construção da linguagem.
  2. Pela magia da AI (Specifically Speech-To-Text), esses fonemas são convertidos em uma string da solicitação aproximada, esta é mantida dentro de um arquivo JSON que também contém informações extras sobre o usuário, a solicitação e a sessão.
  3. O JSON é então processado (geralmente na nuvem) para descobrir o contexto e a intenção da solicitação.
  4. Com base na intenção, uma resposta é retornada, novamente em uma resposta JSON maior, como uma string ou como SSML (mais sobre isso posteriormente)
  5. A resposta é processada de volta usando IA (naturalmente o inverso - Text-To-Speech) que é então devolvida ao usuário.

Há muita coisa acontecendo lá, a maioria das quais não requer um segundo pensamento. Mas cada plataforma faz isso de maneira diferente, e são as nuances da plataforma que exigem um pouco mais de compreensão.

(Visualização grande)

Dispositivos habilitados para voz

Os requisitos para que um dispositivo possa ter um assistente de voz integrado são bastante baixos. Eles exigem um microfone, uma conexão com a Internet e um alto-falante. Alto-falantes inteligentes como o Nest Mini e o Echo Dot fornecem esse tipo de controle de voz de baixa fidelidade.

O próximo na classificação é voz + tela, conhecido como dispositivo 'Multimodal' (mais sobre isso posteriormente) e são dispositivos como o Nest Hub e o Echo Show. Como os smartphones possuem essa funcionalidade, eles também podem ser considerados um tipo de dispositivo multimodal habilitado para voz.

Habilidades de voz

Em primeiro lugar, cada plataforma tem um nome diferente para suas 'Habilidades de Voz', a Amazon vai com habilidades, que vou usar como um termo universalmente entendido. O Google opta por 'Ações' e a Samsung opta por 'cápsulas'.

Cada plataforma tem suas próprias habilidades incorporadas, como perguntar a hora, o clima e os jogos esportivos. As habilidades criadas pelo desenvolvedor (de terceiros) podem ser invocadas com uma frase específica ou, se a plataforma gostar, podem ser invocadas implicitamente, sem uma frase-chave.

Invocação explícita : "Ok Google, fale com <nome do aplicativo>."

É explicitamente declarado qual habilidade está sendo solicitada:

Invocação Implícita : "Ei Google, como está o clima hoje?"

Está implícito no contexto da solicitação qual serviço o usuário deseja.

Quais são os assistentes de voz?

No mercado ocidental, os assistentes de voz são uma corrida de três cavalos. Apple, Google e Amazon têm abordagens muito diferentes para seus assistentes e, como tal, atraem diferentes tipos de desenvolvedores e clientes.

Siri da Apple

Nome do dispositivo : "Siri"

Frase de despertar : "Ei Siri"

A Siri tem mais de 375 milhões de usuários ativos, mas por uma questão de brevidade, não vou entrar em muitos detalhes sobre a Siri. Embora possa ser globalmente bem adotado e incorporado à maioria dos dispositivos da Apple, exige que os desenvolvedores já tenham um aplicativo em uma das plataformas da Apple e sejam escritos em swift (enquanto os outros podem ser escritos no favorito de todos: Javascript). A menos que você seja um desenvolvedor de aplicativos que queira expandir a oferta de seus aplicativos, atualmente você pode pular a apple até que eles abram sua plataforma.

Google Assistente

Nomes de dispositivos : "Google Home, Nest"

Frase de ativação : "Ok Google"

O Google tem a maioria dos dispositivos dos três grandes, com mais de 1 bilhão em todo o mundo, isso se deve principalmente à massa de dispositivos Android que possuem o Google Assistant, com relação aos alto-falantes inteligentes dedicados, os números são um pouco menores. A missão geral do Google com seu assistente é encantar os usuários, e eles sempre foram muito bons em fornecer interfaces leves e intuitivas.

Seu objetivo principal na plataforma é usar o tempo – com a ideia de se tornar uma parte regular da rotina diária dos clientes. Como tal, eles se concentram principalmente na utilidade, diversão em família e experiências agradáveis.

As habilidades criadas para o Google são melhores quando são peças de engajamento e jogos, concentrando-se principalmente na diversão familiar. A recente adição de canvas para jogos é uma prova dessa abordagem. A plataforma do Google é muito mais rígida para envios de habilidades e, como tal, seu diretório é muito menor.

Amazon Alexa

Nomes de dispositivos : “Amazon Fire, Amazon Echo”

Frase de despertar : “Alexa”

A Amazon ultrapassou 100 milhões de dispositivos em 2019, isso vem predominantemente das vendas de seus alto-falantes inteligentes e telas inteligentes, bem como seu alcance 'fire' ou tablets e dispositivos de streaming.

As habilidades criadas para a Amazon tendem a ser direcionadas à compra de habilidades. Se você está procurando uma plataforma para expandir seu e-commerce/serviço ou oferecer uma assinatura, a Amazon é para você. Dito isto, o ISP não é um requisito para o Alexa Skills, eles suportam todos os tipos de usos e são muito mais abertos a envios.

Os outros

Existem ainda mais assistentes de voz por aí, como o Bixby da Samsung, o Cortana da Microsoft e o popular assistente de voz de código aberto Mycroft. Todos os três têm seguidores razoáveis, mas ainda são minoria em comparação com os três Golias da Amazon, Google e Apple.

Construindo no Amazon Alexa

O Amazons Ecosystem para voz evoluiu para permitir que os desenvolvedores desenvolvam todas as suas habilidades no console Alexa, então, como um exemplo simples, vou usar seus recursos integrados.

(Visualização grande)

Alexa lida com o Processamento de Linguagem Natural e, em seguida, encontra um Intent apropriado, que é passado para nossa função Lambda para lidar com a lógica. Isso retorna alguns bits de conversação (SSML, texto, cartões e assim por diante) para o Alexa, que converte esses bits em áudio e recursos visuais para serem exibidos no dispositivo.

Trabalhar na Amazon é relativamente simples, pois eles permitem que você crie todas as partes de sua habilidade no Alexa Developer Console. A flexibilidade existe para usar a AWS ou um endpoint HTTPS, mas para habilidades simples, executar tudo no console do Dev deve ser suficiente.

Vamos construir uma habilidade simples de Alexa

Vá para o console do Amazon Alexa, crie uma conta se você não tiver uma e faça login,

Clique em Create Skill e dê um nome a ela,

Escolha custom como seu modelo,

e escolha Alexa-Hosted (Node.js) para seu recurso de back-end.

Depois que o provisionamento for concluído, você terá uma habilidade básica do Alexa, sua intenção será criada para você e algum código de back-end para você começar.

Se você clicar no HelloWorldIntent em seus Intents, verá alguns enunciados de exemplo já configurados para você, vamos adicionar um novo no topo. Nossa habilidade é chamada hello world, então adicione Hello World como um enunciado de amostra. A ideia é capturar qualquer coisa que o usuário possa dizer para acionar essa intenção. Pode ser "Olá, Mundo", "Olá, Mundo", e assim por diante.

O que está acontecendo no cumprimento JS?

Então, o que o código está fazendo? Aqui está o código padrão:

 const HelloWorldIntentHandler = { canHandle(handlerInput) { return Alexa.getRequestType(handlerInput.requestEnvelope) === 'IntentRequest' && Alexa.getIntentName(handlerInput.requestEnvelope) === 'HelloWorldIntent'; }, handle(handlerInput) { const speakOutput = 'Hello World!'; return handlerInput.responseBuilder .speak(speakOutput) .getResponse(); } };

Isso está utilizando o ask-sdk-core e está essencialmente construindo JSON para nós. canHandle está informando que o ask pode lidar com intents, especificamente 'HelloWorldIntent'. handle pega a entrada e constrói a resposta. O que isso gera é assim:

 { "body": { "version": "1.0", "response": { "outputSpeech": { "type": "SSML", "ssml": " Hello World! " }, "type": "_DEFAULT_RESPONSE" }, "sessionAttributes": {}, "userAgent": "ask-node/2.3.0 Node/v8.10.0" } } { "body": { "version": "1.0", "response": { "outputSpeech": { "type": "SSML", "ssml": " Hello World! " }, "type": "_DEFAULT_RESPONSE" }, "sessionAttributes": {}, "userAgent": "ask-node/2.3.0 Node/v8.10.0" } } { "body": { "version": "1.0", "response": { "outputSpeech": { "type": "SSML", "ssml": " Hello World! " }, "type": "_DEFAULT_RESPONSE" }, "sessionAttributes": {}, "userAgent": "ask-node/2.3.0 Node/v8.10.0" } }

Podemos ver que speak produz ssml em nosso json, que é o que o usuário ouvirá como falado pelo Alexa.

Construindo para o Google Assistente

(Visualização grande)

A maneira mais simples de criar ações no Google é usar o console AoG em combinação com o Dialogflow, você pode estender suas habilidades com o firebase, mas, como no tutorial do Amazon Alexa, vamos simplificar.

O Google Assistant usa três partes principais, AoG, que lida com o NLP, Dialogflow, que trabalha suas intenções, e Firebase, que atende à solicitação e produz a resposta que será enviada de volta ao AoG.

Assim como no Alexa, o Dialogflow permite que você construa suas funções diretamente na plataforma.

Vamos construir uma ação no Google

Existem três plataformas para fazer malabarismos de uma só vez com a solução do Google, que são acessadas por três consoles diferentes, então abra!

Configurando o Dialogflow

Vamos começar fazendo login no console do Dialogflow. Depois de fazer login, crie um novo agente na lista suspensa logo abaixo do logotipo do Dialogflow.

Dê um nome ao seu agente e adicione no 'Google Project Dropdown', enquanto seleciona "Create a new Google project".

Clique no botão criar e deixe-o fazer sua mágica, levará um pouco de tempo para configurar o agente, então seja paciente.

Como configurar funções do Firebase

Certo, agora podemos começar a conectar a lógica Fulfillment.

Vá até a guia Cumprimento. Marque para habilitar o editor embutido e use os snippets JS abaixo:

index.js

 'use strict'; // So that you have access to the dialogflow and conversation object const { dialogflow } = require('actions-on-google'); // So you have access to the request response stuff >> functions.https.onRequest(app) const functions = require('firebase-functions'); // Create an instance of dialogflow for your app const app = dialogflow({debug: true}); // Build an intent to be fulfilled by firebase, // the name is the name of the intent that dialogflow passes over app.intent('Default Welcome Intent', (conv) => { // Any extra logic goes here for the intent, before returning a response for firebase to deal with return conv.ask(`Welcome to a firebase fulfillment`); }); // Finally we export as dialogflowFirebaseFulfillment so the inline editor knows to use it exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

pacote.json

 { "name": "functions", "description": "Cloud Functions for Firebase", "scripts": { "lint": "eslint .", "serve": "firebase serve --only functions", "shell": "firebase functions:shell", "start": "npm run shell", "deploy": "firebase deploy --only functions", "logs": "firebase functions:log" }, "engines": { "node": "10" }, "dependencies": { "actions-on-google": "^2.12.0", "firebase-admin": "~7.0.0", "firebase-functions": "^3.3.0" }, "devDependencies": { "eslint": "^5.12.0", "eslint-plugin-promise": "^4.0.1", "firebase-functions-test": "^0.1.6" }, "private": true }

Agora volte para suas intents, vá para Default Welcome Intent e role para baixo até fulfillment, certifique-se de que "Enable webhook call for this intent" esteja marcado para todas as intents que você deseja cumprir com javascript. Clique em Salvar.

(Visualização grande)

Configurando o AoG

Estamos chegando perto da linha de chegada agora. Vá para a guia Integrações e clique em Configurações de integração na opção do Google Assistant na parte superior. Isso abrirá um modal, então vamos clicar em test, que integrará seu Dialogflow com o Google, e abrirá uma janela de teste em Actions on Google.

Na janela de teste, podemos clicar em Fale com meu aplicativo de teste (vamos alterar isso em um segundo) e voila, temos a mensagem do nosso javascript sendo exibida em um teste do Google Assistant.

Podemos alterar o nome do assistente na guia Desenvolver, na parte superior.

Então, o que está acontecendo no cumprimento JS?

Primeiro, estamos usando dois pacotes npm, actions-on-google, que fornecem todo o atendimento que o AoG e o Dialogflow precisam, e, em segundo lugar, o firebase-functions, que você adivinhou, contém auxiliares para o firebase.

Em seguida, criamos o 'app' que é um objeto que contém todas as nossas intenções.

Cada intent criada passou 'conv', que é o objeto de conversa que o Actions On Google envia. Podemos usar o conteúdo de conv para detectar informações sobre interações anteriores com o usuário (como seu ID e informações sobre sua sessão conosco).

Retornamos um 'objeto conv.ask', que contém nossa mensagem de retorno ao usuário, pronto para que ele responda com outro intent. Poderíamos usar 'conv.close' para encerrar a conversa se quiséssemos encerrar a conversa ali.

Por fim, encerramos tudo em uma função HTTPS do Firebase, que lida com a lógica de solicitação-resposta do lado do servidor para nós.

Novamente, se observarmos a resposta gerada:

 { "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Welcome to a firebase fulfillment" } } ] } } } }

Podemos ver que conv.ask teve seu texto injetado na área textToSpeech . Se tivéssemos escolhido conv.close , o expectUserResponse seria definido como false e a conversa seria encerrada após a entrega da mensagem.

Construtores de voz de terceiros

Assim como a indústria de aplicativos, à medida que a voz ganha força, ferramentas de terceiros começaram a aparecer na tentativa de aliviar a carga dos desenvolvedores, permitindo que eles construíssem uma vez e implantassem duas vezes.

Jovo e Voiceflow são atualmente os dois mais populares, especialmente desde a aquisição da PullString pela Apple. Cada plataforma oferece um nível diferente de abstração, então realmente depende de quão simplificado você é como sua interface.

Estendendo sua habilidade

Agora que você começou a construir uma habilidade básica de 'Hello World', há muitos recursos que podem ser adicionados à sua habilidade. Estes são a cereja no topo do bolo dos Assistentes de Voz e darão aos seus usuários muito valor extra, levando à repetição de oportunidades personalizadas e comerciais em potencial.

SSML

SSML significa linguagem de marcação de síntese de fala e opera com uma sintaxe semelhante ao HTML, a principal diferença é que você está construindo uma resposta falada, não conteúdo em uma página da web.

'SSML' como um termo é um pouco enganador, pode fazer muito mais do que síntese de voz! Você pode ter vozes em paralelo, você pode incluir ruídos de ambiente, speechcons (vale a pena ouvir por si só, pense em emojis para frases famosas) e música.

Quando devo usar SSML?

SSML é ótimo; torna uma experiência muito mais envolvente para o usuário, mas o que também faz é reduzir a flexibilidade da saída de áudio. Eu recomendo usá-lo para áreas de fala mais estáticas. Você pode usar variáveis ​​nele para nomes etc, mas a menos que você pretenda construir um gerador SSML, a maioria dos SSML será bastante estática.

Comece com um discurso simples em sua habilidade e, uma vez concluído, aprimore áreas que são mais estáticas com SSML, mas acerte seu núcleo antes de passar para os sinos e assobios. Dito isto, um relatório recente diz que 71% dos usuários preferem uma voz humana (real) a uma sintetizada, então se você tiver a facilidade de fazê-lo, saia e faça!

(Visualização grande)

Em Compras de Habilidades

As compras de habilidade (ou ISP) são semelhantes ao conceito de compras no aplicativo. As habilidades tendem a ser gratuitas, mas algumas permitem a compra de conteúdo/assinaturas 'premium' no aplicativo, o que pode melhorar a experiência de um usuário, desbloquear novos níveis em jogos ou permitir acesso a conteúdo pago.

Multimodal

As respostas multimodais abrangem muito mais do que voz, é aqui que os assistentes de voz podem realmente brilhar com visuais complementares em dispositivos que os suportam. A definição de experiências multimodais é muito mais ampla e significa essencialmente múltiplas entradas (teclado, mouse, tela sensível ao toque, voz e assim por diante).

As habilidades multimodais destinam-se a complementar a experiência de voz principal, fornecendo informações complementares adicionais para impulsionar o UX. Ao construir uma experiência multimodal, lembre-se de que a voz é o principal veículo de informação. Muitos dispositivos não têm uma tela, portanto, sua habilidade ainda precisa funcionar sem uma, portanto, certifique-se de testar com vários tipos de dispositivos; seja real ou no simulador.

(Visualização grande)

Multilíngue

As habilidades multilíngues são habilidades que funcionam em vários idiomas e abrem suas habilidades para vários mercados.

A complexidade de tornar sua habilidade multilíngue depende da dinâmica de suas respostas. Habilidades com respostas relativamente estáticas, por exemplo, retornar a mesma frase todas as vezes, ou usar apenas um pequeno conjunto de frases, são muito mais fáceis de tornar multilíngues do que habilidades dinâmicas extensas.

O truque com multilíngue é ter um parceiro de tradução confiável, seja por meio de uma agência ou de um tradutor no Fiverr. Você precisa confiar nas traduções fornecidas, especialmente se não entender o idioma para o qual está sendo traduzido. O tradutor do Google não vai cortar a mostarda aqui!

Conclusão

Se alguma vez houve um momento para entrar na indústria de voz, seria agora. Tanto no auge quanto na infância, assim como os nove grandes, estão investindo bilhões em cultivá-lo e trazendo assistentes de voz para as casas e rotinas diárias de todos.

Escolher qual plataforma usar pode ser complicado, mas com base no que você pretende construir, a plataforma a ser usada deve brilhar ou, na falta disso, utilizar uma ferramenta de terceiros para proteger suas apostas e construir em várias plataformas, especialmente se sua habilidade é menos complicado com menos peças móveis.

Eu, por exemplo, estou empolgado com o futuro da voz à medida que ela se torna onipresente; a dependência da tela diminuirá e os clientes poderão interagir naturalmente com seu assistente. Mas primeiro, cabe a nós desenvolver as habilidades que as pessoas vão querer de seu assistente.