Como chatbots funcionam por baixo dos panos
Em meu último post eu falei sobre dezenas de libs, bibliotecas, frameworks, serviços e etc… que auxiliam no desenvolvimento de Chatbots, mas antes de usar qualquer um desses, um muito bom que o desenvolvedor saiba como funciona um chatbot internamente, esse post terá uma abordagem bem mais técnica.
Resumindo, um chatbot é um serviço que, na maioria dos casos, irá fazer uma ponte entre dois serviços, o primeiro é a plataforma de mensagem, por exemplo o messenger e o segundo é o serviço que irá prover algum valor para o usuário, esse serviço pode ser conteúdos do próprio chatbot, mas na maioria dos casos é um serviço a parte.
Nessa estrutura o chatbot funciona como uma interface… um tradutor. Ele irá pegar a mensagem enviada pelo usuário, por meio da plataforma de mensagem converter em outro formato esperado pelo backend de negócio. Aquela informação é então processada e enviada novamente para o Chatbot, que então faz o processo inverso da primeira interação, e converte o dado recebido no padrão esperado pela plataforma de mensagem.
Exemplificando, imagine que temos um chatbot para Facebook Messenger que dá a previsão diária sobre signos, o chatbot pergunta para o usuário qual o signo dela, ela responde “Sagitário”. Vamos analisar a troca de informações a partir desse ponto.
Vamos então ver como isso funcionaria por baixo dos panos…
PASSO 1: Um JSON é enviado pelo Facebook Messenger o webhook/endpoint de nosso Chatbot. Como este:
PASSO 2: Nosso chatbot recebe esse JSON então busca o chave que contém o texto enviado (…message->text) pelo usuário e o ID desse usuário (…sender->id), esse ID vai ser útil para podermos respondê-lo depois. Com a mensagem em mãos, extraímos o nome do signo da pessoa desse texto, empacotamos em outro JSON que tem o formato esperado por uma API hipotética de previsão diária de Signos.
PASSO 3: Enviamos esse JSON para o endpoint da API, ela processa essa solicitação e retorna novamente um JSON com o resultado desse processamento, o texto da previsão.
PASSO 4: Nosso chatbot entra em ação novamente, desempacotando esse JSON e o estruturando de uma forma que o Facebook Messenger entenda, e por fim esse JSON é enviado para o usuário que iniciou essa interação utilizando o ID extraído anteriormente.
E pronto. Esse processo se repete a cada nova interação realizada pelo usuário. Podemos, também, organizar e adicionar outras entidades a nosso projeto para tornar isso um pouco mais interessante, vamos ver.
No PASSO 2, falamos que extraímos o signo enviado pelo usuário do texto, nesse caso podemos usar um serviço de entendimento de linguagem natural (NLU) ou de processamento de linguagem natural (NLP) para fazer essa mágica pra gente, ou neste caso simples, apenas utilizar expressão regular.
Podemos também dar uma invertida nos papéis, e conectar o Facebook Messenger diretamente em nosso Processamento de Linguagem Natural e só receber um JSON com todas as entidades já extraídas da mensagem enviada originalmente pelo usuário, e assim enviar para nosso backend e fazer todo o fluxo inverso novamente.
Posso ainda ligar o processamento de linguagem natural diretamente no backend (se for viável).
Esses são alguns exemplos de como pode ser o funcionamento básico da maioria dos Chatbots, e já deu pra ver que ele, no menor dos casos, ainda pode assumir diferentes configurações, cada uma delas tem suas vantagens e desvantagens cabendo a você decidir qual se aplica melhor a seu problema, suas necessidades e suas limitações.
Até o próximo post.