Antes de contar como Microsoft Bot framework e Serviços cognitivos se relacionam com algo chamado Clarice, preciso falar sobre o Sedex Day da Hi Platform.
A cada seis meses acontece na Hi Platform o Sedex Day. Trata-se de uma maratona de projetos de 24hs na qual os times têm um dia para desenvolver um projeto de sua escolha que será apresentado para toda a empresa no dia seguinte. Esta prática existe em outras empresas com o nome de FedEX day (pegou, né?) e você pode saber mais sobre o tema neste artigo da Scrum.org, neste do Daniel H. Pink e neste outro aqui do The Enterprise Architect.
A última edição do Sedex Day aconteceu em dezembro/2016 e houve participação de várias equipes com mais de 8 projetos entregues! Este artigo é para mostrar um pouco do projeto que entreguei em conjunto com o Henrique Sosa, meu “camarada” de programação a base de pizza fria e refrigerante sem gás.
Motivação para o projeto
A provocação inicial para este projeto veio de dentro da própria Hi Platform, mais especificamente das apresentações do Alexandre Bernardoni, fundador da Hi Platform. Durante 2016, em cada fala para a empresa ele enfatizava a importância crescente dos chatbots e alertava para as oportunidades que seriam apresentadas nos próximos anos.
Pesquisando sobre o assunto, esbarrei em artigo no blog da SurveyMonkey Intelligence, o qual listava os 60 aplicativos mais baixados nos Estados Unidosno período de Jan-Jun/2016. É interessante notar como os aplicativos de messaging se destacam.
Um artigo da Business Insider de 09/2016 mostra que este tipo de aplicativo superou o uso das redes sociais, por exemplo.

Vamos encarar os fatos: A maioria de nós tem mais aplicativos instalados do que realmente precisa e muitas vezes instalamos e deixamos de usar em um curto espaço de tempo ou usamos apenas uma vez.
Você pode estar se perguntando: “Ok, tudo isso parece fazer sentido, mas qual a relação com o projeto do Sedex Day?”.
Estamos chegando lá, prometo.
Uma rápida análise histórica das interfaces com o usuário e uma pitada de especulação
Heródoto disse certa vez que é necessário pensar no passado para compreender o presente e idealizar o futuro. Olhando para a história das interfaces com o usuário, pode-se traçar uma linha do tempo relacionando os períodos e os tipos de interface:
Anos 1985: Podemos chamar esta época de a era PC/Desktop. Aqui tínhamos o domínio da Microsoft, da Apple e suas interfaces gráficas (GUI).
Anos 1995: Em que pese o fato do primeiro site da WEB ter sido criado em 1991/1992, pode-se afirmar que foi a partir do meio de 1990 que começamos a viver de fato a era dos Browsers e dos sites. Estávamos na era da internet.
Anos 2007: A era mobile. Os aplicativos móveis eram a grande novidade, muito pela forma conveniente como a Apple organizou seu mercado de aplicativos móveis. Sim, havia apps um pouco antes disso, mas nada comparado a massificação que estava por vir.
Analisando a história e como o mercado de aplicativos caminha, talvez estejamos próximos à uma nova era em relação a como as aplicações interagem com os usuários. Os dados mostram que os aplicativos conversacionais estão se tornando cada vez mais onipresentes. Um exemplo interessante de utilização desta nova “plataforma” é a recente integração do Ubercom o Facebook Messenger.

Outro exemplo interessante pode ser encontrado na própria Hi Platform. Em 2016 o HiBOT realizou mais 5 milhões de atendimentos para empresas nos mais diversos ramos de atividade. Recentemente, ele também foi integrado ao Facebook, o que aproximou ainda mais as empresas de seus consumidores.

É claro que há especulação de todos os lados e é importante levar isso em consideração. No contexto deste artigo, no entanto, decidimos que o Sedex Day era uma oportunidade ótima para testar alguns conceitos por trás dos softwares baseados em interfaces conversacionais, o que leva à definição do projeto.
Definindo Clarice
Clarice é uma aplicação que tem o objetivo de servir como uma assistente virtual para os supervisores das operações que utilizam a plataforma de atendimento da Hi Platform.
Ela pode ser acessada como um contato no Skype, Telegram, Facebook Messenger, Kik e vários outros. Não é necessário instalar a Clarice, ela é um simples contato que pode ser adicionado no comunicador preferido do supervisor. A decomposição em alto nível dos componentes de software envolvidos na solução pode ser vista na figura 1.

Figura 1. Decomposição em alto nível dos componentes de software envolvidos na criação da Clarice
O que é que a Clarice tem?
A plataforma de atendimento da Hi Platform possui um módulo dedicado aos supervisores de operações. Lá é possível ter uma visão geral de toda a operação, por canal, departamento e operador. Além disso, é possível acessar informações analíticas, manter informações, entre outras funcionalidades.
A Clarice se propõe a ser um aplicativo de interface conversacional para acessar as mesmas informações do módulo supervisor. Então, do que exatamente estamos falando?

Figura 2. Clarice se apresentando

Figura 3. Clarice no Facebook Messenger

Figura 4. Clarice no Skype

Figura 5. Clarice entendendo uma mensagem de voz no Telegram
Figura 6. Clarice novamente no Telegram, entendendo outra mensagem de voz
O Microsoft Bot Framework
O Microsoft Bot Framework é misto de serviço/framework disponibilizado pela Microsoft com o objetivo de permitir a construção e a distribuição de bots. Como framework ele coloca à disposição um SDK, um bot conector, emulador e um portal de desenvolvimento. Através dos conectores, ele provê um meio simples de conectar um chatbot à diversos aplicativos de mensagens como Skype, Slack, Email no Office 365, SMS, Telegram, entre outros.

Figura 7. Estrutura do Microsoft Bot Framework
No caso da Clarice, só foi possível disponibilizá-la em uma grande variedade de canais devido às facilidades/abstrações providas pelo Microsoft Bot Framework. Nos concentramos apenas no negócio, deixando as particularidades de cada canal nas costas do serviço da Microsoft. Isso foi ótimo, pois entregamos as integrações em tempo recorde. Por outro lado foi péssimo, pois, dependendo do que fazíamos, cada canal apresentava a informação de uma forma. Sabíamos que o serviço era preview naquele momento, mas mesmo assim vale citar alguns dos problemas que tivemos.
- Formatação: HTML parcial e/ou Markdown são suportados em alguns canais conforme a documentação. Naquele momento do tempo a documentação não batia com a realidade e eventualmente tínhamos um texto estranho sendo mostrado para os usuários.
- Cards e Carousel: Isso foi um inferno. Não conseguimos controlar a quebra de linhas e formatar o texto. O que parecia razoável no Skype, ficava impraticável no Telegram. O que funcionava no Kik, ficava horrível o Facebook Messenger e assim por diante.
- Para algumas mensagens tivemos que criar renderizadores específicos por canal. Isso não é necessariamente um problema, mas nos levou a ter que resolver algumas questões de design para que a coisa toda ficasse minimamente manutenível.
Serviços cognitivos
Quando se fala em bot, a maioria das pessoas pensa em duas coisas:
Peguemos a inteligência artificial, por exemplo. Será que quando pensamos em bot temos que necessariamente pensar em inteligência artificial? Quando fizemos a Clarice, assumimos que não. Bots são ótimos para automatizar tarefas:
- Consultar filas
- Consultar SLAs
- Agendar execução de relatórios
- Extrair dados
- Marcar horário em um cabeleireiro
- Solicitar um táxi
- etc, etc
Por fim, nenhuma das tarefas que a Clarice executa atualmente exigiu o uso de inteligência artificial ou aprendizado de máquina.
Em relação ao processamento de linguagem natural, poderíamos ter construído a Clarice apenas como um processador de comandos e, ainda sim, ela cumpriria bem seu papel utilizando simples expressões regulares. Veja alguns exemplos de comandos:
- Fila chat
- Operadores email
- Marca
- Fila email
- etc, etc
No entanto, quando pensamos no projeto, julgamos que a experiência do usuário seria melhor se de fato a Clarice pudesse “entender” sua intenção através de processamento de linguagem natural. Neste sentido, poderíamos tranquilamente ter utilizado o HiBOT para reconhecimento da intenção do usuário. O fato é que conhecemos o motor do HiBot e sabemos o quão bom ele é. Sendo assim, como estávamos em uma maratona e um dos nossos objetivos era experimentar o máximo possível de coisas, escolhemos utilizar o LUIS (Language Understanding Intelligent Service) da Microsoft.
Com o uso do LUIS nós fomos capazes de criar um modelo para identificar intenções/entidades e mapear para “comandos” que a Clarice deveria executar. Então, quando um usuário diz “Ei, Clarice, deixe-me ver o estado da fila do chat”reconhecemos “ver” como uma intenção enquanto “fila” e “chat” são entendidos como duas entidades. Estas informações são mais do que suficientes para indicarmos com precisão o que a Clarice deve fazer.
O Microsoft Bot Framework torna bastante conveniente o uso de um “Recognizer” (qualquer que seja ele) para recuperar as intenções. No caso de Clarice, três linhas de código resolvem o problema.
let model = process.env.LUIS_RECOGNIZER_MODEL;
let recognizer = new Builder.LuisRecognizer(model);
let intents = new Builder.IntentDialog({ recognizers: [recognizer] });
Importante: Em que pese o fato de termos construído a Clarice utilizando Node.js, o Microsoft Bot Framework também pode ser utilizado com .NET/C#.
Bing Speech API
Esta foi a última funcionalidade que implementamos. De fato, estava fora do escopo até que alguém disse “ei, não seria ótimo se a Clarice tivesse reconhecimento de voz?”. Pronto, foi o suficiente para que gastássemos o que nos sobrava de tempo tentando fazer isso funcionar. Foi divertido à beça de fazer, apesar do cansaço. 😉
Como já estávamos sob o guarda-chuva de serviços cognitivos da Microsoft, decidimos tentar o Bing Speech API e, fora alguns contratempos iniciais, tudo funcionou muito bem.
O Microsoft Bot Framework entrega o stream de áudio, que por sua vez é convertido pela Clarice em um formato adequado e enviado para a API da Microsoft, que devolve o texto e, importante, a intenção do usuário. Existe uma integração bastante útil entre Bing Speech API e LUIS para que seja possível reconhecer intenções com base no mesmo modelo que criamos para processamento de linguagem natural.
Conclusão
Bem, este foi um resumo do projeto que entregamos na edição de dez/2016 do Sedex Day da Hi Platform. Todos os serviços que utilizamos estavam em preview no momento do projeto, mas o desenvolvimento ocorreu surpreendentemente bem e conseguimos apresentar a Clarice no dia seguinte, da forma como foi planejado.
Como uma palavra final sobre o Sedex Day, devo dizer que maratonas de projeto/desenvolvimento são ótimas para várias coisas (inovação, trabalho em grupo, programação em pares, integração entre times diferentes e etc). No meu caso, quando vou escolher um projeto, tento priorizar o aprendizado (fazer algo que não faço no dia-a-dia, ficar fora da zona de conforto) e a diversão, para depois “amarrar” com algo que seja bom em termos de entrega. Neste sentido, tenho que agradecer ao Pedro Oliveira (arquiteto de software na Hi Platform) por me fazer entender que é possível fazer isso tudo levando em consideração a missão da Hi Platform.
Sobre bot como “apenas mais um tipo de aplicação”, a Clarice provou alguns pontos em termos de usabilidade. De fato é uma experiência bem natural utilizá-la, sem a necessidade de instalar um aplicativo, sem se preocupar com a plataforma ou com a distribuição. Basta apenas adicionar um contato e dizer “Oi, Clarice“.