Evitando a fadiga e publicando um chatbot em apenas um final de semana.
Tags: chatbot, node, javascript, braziliandevs
Published: 2021-05-26 13:54:31

## **Como surgiu a ideia**

Eu estava em minha última semana de férias do trabalho, já estava naquele momento em que você já fica com tédio de tanto tempo livre que tem. Foi então que resolvi revirar algumas anotações de ideias de pequenos projetos. Importante dizer aqui que, eu já trabalho com desenvolvimento web há quase 10 anos e já estudava sobre chatbots há um tempinho, porém sem ter colocado os conhecimentos em prática. Como no último ano eu trabalhei desenvolvendo integrações de empresas de frete em uma plataforma internacional de e-commerce, eu tinha muito claro na minha cabeça como funciona esse tipo de integração e as dificuldades de se rastrear uma compra feita na internet.

## **O problema**

Imagino que você já tenha precisado de rastrear alguma encomenda no site dos correios. O processo é bem simples: Você realiza uma compra em alguma loja online, eles enviam o produto e disponibilizam o código de rastreio. Até aí, nada de mais. Porém, imagine também que você realizou compras em 3,4,5 sites diferentes e precisa rastrear todas estas encomendas. Você vai precisar acessar a todo momento o site dos correios, ou das lojas que você fez a compra ou ainda baixar um app somente para isso. Por que não ter esse recurso no seu app de mensagem que já está instalado? Um contato que seja seu próprio rastreador, te possibilitando ver o histórico das suas compras?

## **O desenvolvimento**

Como mencionado, eu já estudava sobre chatbots há um tempo e por isso, conhecia as plataformas do mercado. No entanto, minha intenção era  colocar o bot em produção bem rápido, para que ele não se tornasse mais um dos inúmeros projetos inacabados que todos os devs curiosos possuem.  Diante destes critérios é que decidi pela Take Blip, principalmente considerando o ambiente do [builder](https://take.net/blog/chatbots/blip-builder). Além dessa interface, a plataforma ainda possibilita outras duas formas de conectar seu chatbot: SDK (disponíveis nas linguagens C# e Javascript) e uma API HTTP.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zdvja7jqh2gnurdtkomv.png)


Após a escolha da plataforma, eu sabia que meu bot precisaria interagir com alguma API externa para consultar os status dos códigos de rastreio e mostrar o status para o usuário. Por conhecer bem esse tipo de integração, sabia que essa camada de consulta eu precisaria desenvolver para filtrar as informações e mostrá-las no Bot. A arquitetura ficaria assim:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bjcq4dlqals4nbjsia3z.jpg)

Uma vez definida a estrutura de funcionamento do meu chatbot, o próximo passo seria criar uma [API *(Application Programming Interface)*](https://pt.wikipedia.org/wiki/Interface_de_programa%C3%A7%C3%A3o_de_aplica%C3%A7%C3%B5es) para receber o código de rastreio, consultar no sistema dos correios e devolver para o nosso bot mostrar o status da encomenda. Isso é possível graças ao recurso de [Requisições HTTP do builder,](https://help.blip.ai/docs/builder/acao-requisicao-http/) que torna esse processo muito rápido e fácil.

Após  todos os pré-requisitos preenchidos para que o Jaiminho  pudesse executar sua ação principal, chegou a hora criar o fluxo na ferramenta builder. Tecnicamente  tudo estava indo muito bem, mas, nessa altura entendi que ainda faltava algo muito importante: a identidade do meu chatbot. Internamente eu chamava esse projeto de *correios tracker bot*, que convenhamos não é um nome nada simpático para se chamar em uma troca de mensagens, principalmente entendendo que o whatsapp e outros apps de mensagem  se tornaram meios de comunicação tão rotineiros e muitas vezes informal. Por isso, eu queria conectar este projeto a algo que aproximasse o usuário daquele contato.

Por algum motivo, eu simplesmente voltei à infância e me lembrei do personagem Jaiminho, do seriado "Chaves", que basicamente era um carteiro que sempre queria **evitar a fadiga**. Pronto, eu já tinha tudo que precisava para deixar o chatbot funcional e divertido ao mesmo tempo, sem mensagens genéricas de sistema, e sim uma conversa com bordões e identidade própria. As mensagens ficaram bem divertidas:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/63yxw41xpigm8enpsb9l.png)

## **Desafios encontrados**

Embora seja um projeto bem simples e curto, encontrei alguns desafios quando fui "montar o quebra-cabeças" unindo todas as pontas: Minha API, Serviço dos correios e BLIP. Vou relatar o maior desafio dessa pequena maratona de dois dias de um final de semana: formatação dos dados. O funcionamento básico do "caminho feliz" do fluxo do bot é: Pergunte qual código de rastreio, execute uma requisição HTTP, envie esse código de rastreio, salve esse resultado em uma [variável do builder](https://help.blip.ai/hc/pt-br/articles/360059350433-Vari%C3%A1veis-do-Builder) e exibe. Fácil, né?

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1w8qp7nwvxm4purpz9vg.png)

Porém, o que eu não imaginava era que o Blip suporta apenas respostas de texto simples. O que quer dizer que, eu não poderia usar um [objeto JSON](https://www.devmedia.com.br/json-tutorial/25275) ou ainda uma lista de objetos, que eu já tinha a ideia de usar para exibir o histórico da encomenda. Então fui às pesquisas e achei um recurso incrível do BLIP que é a possibilidade de escrever [ações de script](https://help.blip.ai/hc/pt-br/articles/360057496994-A%C3%A7%C3%A3o-Executar-script) para serem executadas pelo bot em um determinado bloco. (Ah Não contavam com minha astúcia!) Assim, foi só formatar o dado ali, e transformá-lo em uma mensagem amigável. Até cheguei a escrever a função para formatar os dados no da maneira que eu precisava no próprio Blip:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/er2oqw4cam9mxhm438li.png)

Mas como nem tudo são flores em Tangamandápio, eu tive alguns problemas com diferenças de exibição nos diferentes canais, então tive que recorrer a formatar a resposta do lado da minha API e entregar aquele dado pronto para o bot. Fiquem com esse aprendizado, sempre prefira entregar os dados já tratados para a interface do chat.

Passado esse desafio e com uma versão funcional, o próximo desafio seria a publicação e deploy do chat.

## **Publicação e deploy**

Desde o início, a intenção era que o Jaiminho pudesse estar presente no maior número de lugares possíveis. Isso significa aproveitar bem uma das maiores vantagens dos chatbots: estar presentes nos apps que as pessoas já possuem instalado ou já utilizam de alguma forma, sem a necessidade de instalar nada e nem criar uma nova conta. A plataforma Blip dá suporte às principais plataformas de conversação: Whatsapp, Telegram, Facebook entre outros. Obviamente o mais interessante para o nosso contexto seria o Whatsapp. Atualmente, o jaiminho *(pode ser acessado em https://jaiminhocorreios.com)* está presente em 3 canais: Blip chat, Messenger e Telegram. Para ativar o bot nesses canais é bem simples, basta acessar a aba de canais do do portal blip e clicar no canal que deseja ativar. Cada um deles tem suas particularidades, de acordo com cada canal, mas nada muito complexo e o próprio portal tem as orientações para cada um dos casos.

Após a publicação em todos os canais, chegou a hora de fazer o *deploy* (processo onde levamos o código da aplicação do computador local para um servidor web) da nossa API responsável por integrar com o sistema dos correio o chatbot. A ferramenta escolhida para essa tarefa foi o heroku. Um servidor que te dá a opção de deploy gratuito para um certo limite de uso (requisições). Mais informações sobre como levar sua aplicação web para a nuvem com heroku podem ser encontradas [aqui](https://www.heroku.com/).

## **Pós lançamento**

Com a primeira versão pronta e rodando, fiz um pequeno site de apresentação e divulguei em poucos lugares apenas para uma rede pequena de contatos. O que me surpreendeu foi o feedback positivo e aceitação que o projeto teve. E isso se refletiu nos dados da ferramenta de análise de bots, dentro do próprio portal blip. Com ela eu pude visualizar quantos usuários estavam engajados, o comportamento de cada um deles e mais vários insights.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9qdrgtoczjwo2fpz5lsq.png)

## **Considerações finais**

A plataforma Blip é uma ferramenta completa em vários aspectos e possibilita colocar um projeto "na rua" de uma forma muito intuitiva. Desde soluções simples, como o Jaiminho até projetos complexos de atendimento, vendas e o que mais puder ser explorado. Um show a parte foi a comunidade no [fórum blip](https://forum.blip.ai/) que ajuda bastante, e engaja na solução dos problemas. Sem dúvidas, mais projetos virão utilizando o Blip.