Um chatbot para Asset Control

Oct 29 2020
Neste artigo, estou montando um chatbot para o Asset Control como um pequeno projeto divertido. Por quê? Porque eu estava querendo implementar um chatbot há algum tempo - apenas para entender como fazer isso - e fazer isso no domínio AC parece natural.

Neste artigo, estou montando um chatbot para o Asset Control como um pequeno projeto divertido. Por quê? Porque eu estava querendo implementar um chatbot há algum tempo - apenas para entender como fazer isso - e fazer isso no domínio AC parece natural. Também irei integrá-lo ao Slack para ver como isso pode se encaixar nas minhas ferramentas e no fluxo de trabalho já existentes.

Um chatbot para fazer o quê?

Você já deve ter encontrado chatbots em vários lugares. Eles podem estar em sites da empresa e ajudá-lo a obter respostas às perguntas mais frequentes, permitir que você faça reservas, etc.

Neste caso, quero implementar um protótipo de um chatbot para integração com o Slack que me permite comunicar com o Asset Control. Posso pedir informações de status do meu env AC ou solicitar dados.

Para orientar a implementação, usei as seguintes perguntas que o bot deve ser capaz de responder:

  • Qual é o último preço de XYZ?
  • Qual foi a alta deste mês para XYZ?
  • Quantos suspeitos hoje?
  • A replicação está atualizada?

Então, estamos implementando o bot do zero? Claro que não. Existem várias soluções por aí e rapidamente me conformei com o Google Dialogflow. Vamos ver como isso funciona.

Construindo o bot no Dialogflow

Para construir nosso bot no Google Dialogflow , precisamos entender alguns conceitos:

  • Intenções
  • Entidades
  • Cumprimento

Um intent agrupa tudo o que pertence a um determinado tópico estritamente definido que o bot deve lidar. No nosso caso, é a recuperação do último preço disponível de uma ação do nosso sistema. Usaremos o Dialogflow para treinar o bot a entender quando a conversa é sobre tal intent, fornecendo a ele frases de treinamento. Veremos isso em um minuto.

Então, as entidades são blocos de construção que compõem nossa conversa e são de interesse particular, de modo que queremos capturá-los como parâmetros. Agora, em nosso caso, seria o símbolo de ação AAPL quando fazemos a pergunta “Qual é o último preço para AAPL?

Por fim, o conceito de atendimento nos permite entrar em contato com serviços na parte de trás do chatbot por meio de webhooks. Ou seja, nos comunicaremos com o Asset Control para consultar o estoque em questão e recuperar o último preço disponível.

Agora vamos construir nosso bot.

Etapa 1: configure seu bot.

Dirigir a https://dialogflow.cloud.google.com/#/login e faça login. Em seguida, crie um Agente AcChatBot:

Etapa 2: Criar uma entidade de estoque

No menu à esquerda, clique em Mais ao lado de Entidades, chame-o de Estoque e insira [A-Z][A-Z0-9]{1,6}como uma expressão regular. Embora não seja totalmente uma correspondência para os símbolos de ação, é suficiente para nosso exemplo e funciona com as verificações nas expressões regulares realizadas pelo próprio Dialogflow (por exemplo, não muito amplo etc.). Então salve.

Etapa 3: crie a última intenção de preço

É hora de nossa última intenção de preço. Novamente, no menu à esquerda, selecione o Plus ao lado de Intents, chame-o Last pricee clique em ADICIONE FRASES DE TREINAMENTO:

Entre What is the last price for AAPL?. Em seguida, realce AAPLcom o mouse. Isso abrirá um pop-up. Pesquise Stocke selecione a opção apresentada:

Se feito da maneira certa, o resultado ficará assim para garantir que o Dialogflow capture a entidade Stock corretamente:

IMPORTANTE! Em seguida, role para baixo, abra a seção Fulfillment, clique em Enable Fulfillment e alterne para Enable webhook call for this intentassim:

Isso nos permite chamar nossa própria função de back-end e nos comunicar com o Asset Control.

Certifique-se de salvar o intent antes de prosseguir.

Etapa 4: implementar um serviço REST para recuperar dados de controle de ativos

Novamente, existem muitas maneiras de fazer isso. Usaremos o Spring Boot, pois ele faz todo o trabalho pesado para nós e permanecemos em Java e, portanto, podemos fazer uso imediato da mesma API Java do Asset Control que o Adetta usa.

Se você ainda não sabe, Adetta é nosso software de automação de teste para Controle de Ativos. Certifique-se de dar uma olhada na introdução ao Adetta aqui .

O interessante é uma classe AcBotControllere seu handleIntentmétodo conforme mostrado abaixo:

Você pode ver que o webhook para o cumprimento do Dialogflow está lidando com uma solicitação POST. Tanto sua entrada quanto sua saída são JSON. E usamos GoogleCloudDialogflowV2Webhook*classes para lidar com o JSON de solicitação e resposta para nós.

O tratamento real do intent é passado para um AcBotIntentHandler que recebemos da chamada AcBotIntents.getHandlerFor(request). Vejamos esta aula:

Construímos um mapeamento de intents para manipuladores (lembra-se de nossa Last priceintenção?) E implementamos um método para recuperar um manipulador adequado, dado o intent codificado no objeto de solicitação. Também definimos um manipulador padrão caso não possamos encontrar um manipulador real:

Agora, para obter nosso último preço para uma determinada ação, vamos dar uma olhada em AcBotLastPriceIntentHandler:

Você vê como recuperamos nosso parâmetro de entidade Stock do objeto de solicitação usando request.getQueryResult().getParameters().getOrDefault("Stock", "")e, em seguida, chamamos getLastPriceMessageForStockconforme mostrado aqui:

Nós nos protegemos contra a falta de valor para o estoque. Caso contrário, navegamos em nosso sistema de controle de ativos para ações com o ticker fornecido. Caso não tenhamos nenhum ADO, exibimos a mensagem correspondente. Caso contrário, continuaremos a recuperar dados de preços para cada ADO que encontramos (embora deva ser apenas um único ADO, a implementação retornaria apenas várias mensagens, se necessário).

Aqui está como encontramos o último preço:

Carregamos a série temporal do ADO, obtemos o último registro e - se houver - criamos uma mensagem que será lida como The last price for AAPL (C0.EQY.100101) is from 2020-06-12 at $338.00. E, novamente, nos protegemos contra os casos em que não podemos encontrar um preço.

Usando o Spring Boot, podemos ativá-lo e ter nosso serviço REST em execução no localhost: 8080 / ac-bot. Qual o proximo?

Bem, obviamente estamos trapaceando um pouco, pois não estamos implantando este serviço em nenhum lugar, então, para disponibilizá-lo de fora, usaremos o ngrok para configurar um túnel para nós:

Etapa 5: configurar nosso próprio webhook de atendimento

Em seguida, precisamos informar ao Dialogflow onde está nosso serviço REST, então volte lá e clique em Fulfillment no menu à esquerda:

Em seguida, insira o https://...endereço fornecido pelo ngrok e certifique-se de adicionar o /ac-botno final.

Ok, o momento da verdade. No canto superior direito, onde diz Try it now, podemos digitar What is the last price for AAPL?e se tudo estiver funcionando bem, devemos obter a seguinte resposta:

Isso é emocionante!

Etapa 6: Integre nosso chatbot ao Slack

Agora, não vamos continuar usando o console do Dialogflow para brincar com nosso bot. Em vez disso, iremos integrá-lo ao Slack. Então, escolha Integrações no menu à esquerda, encontre o Slack e inicie um bot de teste:

Em seguida, vá para o Slack e comece a conversar com o bot:

Em seguida, podemos repetir o ciclo para implementar as outras questões / intenções descritas no início do artigo.

Palavras finais

Achei isso divertido de fazer. E mais fácil do que pensei também. Claro, peguei uma série de atalhos:

  • Apenas executando o serviço localmente.
  • Nenhuma consideração para segurança, controle de acesso e escolha de ambiente de controle de ativos.
  • Uso muito limitado do bot.

Espero que tenha gostado deste artigo. Entre em contato para compartilhar suas ideias, tirar dúvidas etc. Estamos aqui para ajudar.