Como eu ensinei Yandex.Alice a falar sobre brinquedos sexuais

Integramos o Yandex.Alisa e as sex shops através da bota Spring.

O tópico dos assistentes de voz está ganhando força, e eu decidi entrar nessa tendência, integrando o maior fornecedor atacadista de bens íntimos e o Yandex.Alisa.

Idéia : o fornecedor possui contas pessoais de proprietários de lojas on-line, e é necessário fornecer dados analíticos do fornecedor através do canal de voz de Alice.

A integração consistiu em duas partes:

  • Integração de serviço web e API REST do fornecedor de mercadorias.
  • Integração do Yandex.Alice e um serviço da web para processar solicitações de usuários.

Integração de serviço da web e API REST do fornecedor de mercadorias


O serviço deve entender exatamente o que o usuário solicitou e solicitar esses dados ao servidor do fornecedor. Decidimos escrever um serviço no Spring Boot.

Configuração do projeto


Criamos um repositório no Git e, usando o spring initializr, implantamos o projeto na inicialização do sistema (especificamos a Web nas dependências).

A solicitação para o serviço vem no formato JSON. Ele possui uma estrutura bem documentada , portanto, gerar classes é bastante simples:

imagem

Convenientemente, as palavras-chave são destacadas na solicitação, como um endereço reconhecido. Eles estão localizados no bloco “entities” :

imagem

Mas, no nosso caso, era mais conveniente usar o campo Command . Ele contém o texto ditado pelo usuário. Como o serviço de integração está engajado no reconhecimento de significado, precisamos analisar solicitações. Eles são bem separáveis ​​um do outro (pedidos de pedidos feitos, pedidos de pedidos em processamento), por isso decidimos usar expressões regulares para analisá-los.

A integração com o provedor foi implementada através da biblioteca httpclients Apache e a desserialização de resposta XML através do jaxb.

Portanto, classificamos a solicitação e solicitamos os dados do fornecedor. Mas Alice é uma garota rigorosa e, portanto, não aceitará nossa resposta depois de três segundos depois. E o usuário pode querer obter uma descrição comparativa de sua loja nos últimos dois anos, o que levará mais tempo. Para resolver esse problema, ativamos o cache através da biblioteca ehCache e configuramos o carregamento de dados do usuário. Diante de uma nova nuance: Alice não fornece quase nenhum dado personalizado do usuário. Ou seja, você nem vê o email na solicitação recebida. Há apenas userId que exibe o identificador exclusivo do dispositivo. Foi feita a chave para identificar usuários.

A chave está lá, o cache está, resta entender quando carregar informações nele. O usuário não solicita dados imediatamente, mas inicia a habilidade (este é o termo usado em Alice, falarei mais sobre isso abaixo). Para o servidor, isso parece uma solicitação com uma marca de Command vazia. Nesse ponto, você pode começar a baixar os dados do cliente e, quando a primeira solicitação do usuário for enviada, todos os dados já foram enviados para o nosso serviço.

Para testes completos e trabalho adicional no produto, decidimos implantar o aplicativo na nuvem no Heroku. Para fazer isso, acesse o site da Heroku , registre-se, faça o download do heroku cli e instale-o. Em seguida, abra o console e digite o heroku login . Vá para o diretório com o projeto cd ~ / myapp e execute heroku create .

Quando você cria o aplicativo, o Git cria um repositório remoto chamado heroku, associado ao seu repositório Git local. Por padrão, o Heroku gera um nome aleatório no servidor para o seu projeto. Você pode substituí-lo passando o nome do aplicativo usando heroku create myapp .

Para verificar o lançamento do aplicativo, execute o comando

heroku ps:scale web=1

E se você precisar seguir o caminho “/“, executamos o heroku open .
O primeiro ponto de integração está pronto.

Integração do Yandex.Alice e serviço de processamento de solicitações


Implementamos a integração por meio da criação da chamada habilidade na plataforma Yandex. Primeiro, registre-se no Yandex e depois vá para a página do desenvolvedor . Clique em "criar diálogo" e selecione o tipo de diálogo:

imagem

Na guia "Configurações" e você precisa preencher os campos:

imagem

  • Nome da habilidade - o nome que será exibido no catálogo de Alice. Com ele, o usuário poderá ativar a habilidade, por exemplo, "Iniciar a habilidade [Nome da Habilidade]".
  • Nome da ativação - aqui você pode especificar várias opções para acessar a habilidade. Por padrão, uma opção para o nome da ativação é o nome da habilidade.
  • Um exemplo de solicitação é uma frase pela qual Alice ativa essa habilidade. Os pedidos serão apresentados como botões no diretório após a publicação.
  • URL do Webhook - você deve especificar o URL do nosso serviço da Web que processará as solicitações do usuário.
  • Yandex.Cloud - O Yandex pode conceder uma concessão à sua nuvem, mas implantaremos o serviço no heroku, para que não o assinalemos.
  • Voz - aqui você pode escolher a voz que sua habilidade falará. Existem diferentes variações de masculino e feminino. Mas vale a pena considerar que o usuário provavelmente dirá: "Alice, inicie a habilidade" e, se Alice responder com o barítono masculino, isso pode ser um pouco confuso.
  • Limitações nas plataformas utilizadas - se uma tela é necessária ao trabalhar com uma habilidade. No nosso caso, não, então não marque.
  • Privacidade - marque a caixa se você não deseja que a habilidade seja refletida no catálogo.
  • Site de verificação da marca - o endereço do site para a habilidade. A habilidade para a qual você preencheu esse campo será moderada apenas se você tiver confirmado os direitos para o site especificado no Yandex.Webmaster.
  • Categoria - no nosso caso, são "negócios e finanças".
  • Descrição - por que você precisa de sua habilidade? A descrição da habilidade será exibida no catálogo de habilidades e estará disponível para os usuários.
  • Notas para o moderador - talvez o campo mais interessante. Para entrar no catálogo, a habilidade deve ser moderada, o que significa que deve obedecer a certas regras descritas aqui. Neste campo, você pode descrever o processo de teste. Por exemplo, como passar pela autorização e um cenário típico do usuário.
  • Restrições de idade - apesar do assunto da habilidade, transmitiremos dados adequados para qualquer faixa etária. Portanto, não marque.
  • Ícone é uma obrigação :)

Salve o diálogo. Todas as alterações na configuração da habilidade entram em vigor somente depois de clicar no botão "salvar".

Configuramos a integração, escrevemos o serviço, agora você pode testá-lo.

Vá para a aba "Testing".

imagem

Aqui você pode verificar o desempenho da habilidade. Por uma questão de conveniência, adicionamos acesso rápido aos botões de função à habilidade.

Existem limitações: você não pode verificar a habilidade quanto à correção da frase inicial e não pode verificar a entrada / saída de voz. E se não houver problemas com a frase, a pronúncia correta das respostas será verificada somente após a publicação da habilidade.
Após todos os testes, a habilidade pode ser enviada para moderação. Para fazer isso, vá para a guia "Informações gerais" e clique em "Moderação".

imagem

Após a moderação, o botão Publicar aparecerá em vez deste botão. Após a publicação, a habilidade aparecerá no catálogo oficial do Yandex.

Recursos e limitações


No momento, as habilidades são um pouco separadas da própria Alice (eu tenho que dizer "lance a habilidade"), o que torna difícil perceber Alice como uma assistente de voz completa. Seria ótimo moldar o contexto de suas habilidades e fazer perguntas diretamente para Alice. Não há como obter informações do usuário além do userId, que é o identificador do dispositivo. Portanto, cada dispositivo deve ser re-autorizado, o que dificulta o armazenamento de uma única sessão de usuário. Além disso, a habilidade não pode enviar mensagens push, portanto não funcionará para criar a habilidade de lembrete.

Por outro lado, as habilidades podem ser uma boa plataforma para implementar o controle de voz, por exemplo, eletrodomésticos. Além disso, a habilidade pode ser útil no treinamento ou na realização de experimentos, no esclarecimento de informações sobre pedidos, preços etc. Em geral, onde os usuários podem fazer uma pergunta exata curta ou dar um comando curto.

Source: https://habr.com/ru/post/pt466021/


All Articles