WhatsApp Business API — Uma análise sobre a documentação

Ricardo Blumer Grobel
Bots Brasil
Published in
6 min readAug 3, 2018

O que todos os botmakers e pessoas envolvidas no mercado de bots no Brasil estavam esperando aconteceu no dia 01 de agosto: o WhatsApp abriu uma API para automatização de mensagens em seu App.

PS: Este artigo é uma análise pessoal escrita baseada apenas na documentação oficial.

Expectativa x Realidade

A expectativa em cima do que o Facebook planejava com a monetização do WhatsApp era enorme, afinal de contas, depois de uma aquisição de US$ 19 bilhões, em algum momento seria necessário criar estratégias para além do retorno de investimento, manter o aplicativo e suas bilhões de mensagens processadas diariamente no ar.

Lendo a documentação, analisando a lista de solution providers e os anúncios de serviços destes parceiros, conclui que a abertura ainda é "tímida" para o ecossistema de Bots, e o foco neste momento do WhatsApp é atacar empresas que utilizam massivamente SMS para a comunicação com seus clientes.

Minha percepção é que o sonho de utilizarmos o WhatsApp para criar soluções diferenciadas e expandir o uso do Mensageiro para outras categorias ainda está longe, mas este é o primeiro passo.

Sem funcionalidades como Quick Replies, Botões, Generic Templates (carrosséis) ou WebViews, neste momento a API é um broker de mensagens, assim como o SMS, e talvez por isso a rédea curta com parceiros e empresas que possam utilizá-lo.

Aprovações e processos burocráticos

Para utilizar as APIs do WhatsApp hoje, é necessário passar por um rigoroso processo de aprovação, tanto da solução em si como da empresa em geral. (tamanho da empresa, inserção e visibilidade no mercado fora outros atributos contam)
Não dá pra saber exatamente como é o processo neste momento, assim que for ficando mais claro eu atualizo aqui (03/08/2018)

Há duas maneiras hoje de se integrar, mas qualquer uma delas dependerá de aprovações específicas:

Utilizar um Solution Provider

Solution Providers são parceiros que têm uma aprovação prévia para ativar um número de telefone dentro do WhatsApp, mas mesmo assim ainda é necessária a aprovação da solução uma a uma, o que provavelmente será feita em "6 mãos" entre as equipes da Empresa que quer utilizar, WhatsApp e a Solution Provider.

Ser aprovado a rodar sua própria Infra e solução

Explicarei abaixo técnicamente o que a documentação diz, mas no caso aqui, você precisará rodar um Nó (client) do WhatsApp em uma instancia própria, e construir suas soluções como webhooks e chamadas Web do nó sozinho.

Custos

Ainda não temos nada oficial, mas o que está claro hoje é que o serviço será cobrado por mensagens enviadas fora da janela de 24 horas.

Só pra exemplificar, se um usuário começar a conversa com sua aplicação, você não paga nada desde que a mensagem do seu bot esteja em uma janela de 24 horas da última interação do usuário.

Se você enviar uma mensagem após 24 horas da última interação do usuário, o valor que vi em diversos lugares é de US$ 0,0473 por mensagem, mas esta é uma informação não-oficial ainda.

Fora o custo de mensagens, não esqueça de levar em conta a manutenção do seu nó (aproximadamente US$ 200,00 em cloud com a configuração mínima que citarei abaixo).

Vamos logo para o que interessa: Como é que funciona tudo isso?

O WhatsApp utilizou uma solução bem interessante e completamente diferente de plataformas parecidas como Messenger ou Telegram.

Para ter um bot no WhatApp você precisa rodar um Node (nó) em uma instância própria. Esse nó mantêm a conectividade com o WhatsApp por uma conexão Long-lived TCP.

Seu backend fica atrelado a esse nó e não diretamente aos servidores do WhatsApp. Abaixo vou explicar um pouco melhor essa arquitetura.

Instância / Nó

Você precisará de uma máquina específica para rodar o client do WhatsApp. Uma coisa que me chamou bastante atenção foi o tamanho da máquina que eles sugerem como instalação mínima:

If you are using a single server, we recommend a server with at least 250 GB SSD, 16 GB RAM, and 4 core CPU. HDD is not recommended as the I/O speeds will become bottlenecks under load.

Nesta máquina você vai rodar em docker 3 processos apartados:

  • MySQL
  • CoreApp
  • WebApp

Gostaria de parabenizar a equipe do WhatsApp. Esta solução de daemon/client é bem legal e simples e estes nodes poderiam ser um passo para o desenvolvimento de um App de Mensagens descentralizado. (papo pra OUTRO artigo)

Informação importante:

You can run a single account per instance. If you need a second test account make sure to use a different number for that second instance.

Se você tem ou precisa de 10 linhas (bots) diferentes, você precisará de 10 instâncias como essa.

Arquitetura geral do Client (nó)

CoreApp

CoreApp é a aplicação que faz toda a mágica. Ele fará a conexão com os servidores do WhatsApp, manterá as chaves de criptografia (não esqueça que o WhatsApp é encriptado end-to-end, o nó mantêm todas estas chaves no MySQL provavelmente), fará a gestão das mensagens chegando e saindo, backup de contatos, etc.

WebApp / APIs

WebApp é a aplicação que faz a interface entre seu backend e o CoreApp. Basicamente é um serviço web autenticado por tokens, nesta altura do campeonato, sem muito segredo.
Alguns endpoints disponíveis do client:

  • ContactsVerifica os números de sua base de clientes
  • Groups Cria e gerencia grupos
  • Health Checa a saúde/status do seu Client (CoreApp e WebApp)
  • Media Gerenciamento de medias(fotos/vídeos/documentos)
  • Messages *esse aqui vou detalhar abaixo
  • Registration Registro da sua conta WhatsApp
  • Settings Configurações da sua Aplicação
  • Stats Estatísticas
  • Support Endpoint de suporte direto no client (curti!)
  • Users Gerenciamento de tokens/usuários do client

Messages

Esse é o endpoint de envio de mensagens, provavelmente o principal entre todos os outros.
Indo direto ao assunto, os tipos de mensagens que podem ser enviadas são:

  • Audio
  • Document
  • Image
  • Text
  • HSM — Message Template, onde você pode dinamicamente setar algum tipo de texto a partir de variáveis pré-definidas.

Podemos notar que não existem funcionalidades parecidas com o que temos hoje no Messenger e até Telegram: botões, webviews, Carrosséis, inline keyboard entre outros, e justamente por isso, vejo algo bem parecido com o que já é feito via SMS.

Em resumo: Desenvolvedores, por mais criativos que possam ser, não conseguirão extrapolar as funcionalidades do mensageiro. (WeChat é um sonho distante)

WebApp via GETs/POSTs para mim é um ponto negativo. Últimamente em soluções daemon/client protocolos como gRPC é muito mais usual por diversas questões, mas talvez a equipe do WhatsApp não quis ficar presa a uma solução Google.

Webhooks

Pelo famosos Webhooks que seu backend receberá as mensagens enviadas pelos seus usuários ao bot. Este Webhook é configurado diretamente no client, nada é feito diretamente nos servidores do WhatsApp.

Não há muito o que escrever sobre os webhooks, eles são JSON simples de texto, áudio ou documento. No caso do texto, eles podem ser também uma resposta do usuário a alguma interação do bot (o JSON de input vem com um campo de context). Só pra reforçar minha idéia aqui: nada de postbacks ou payloads, aqui é tudo textão puro! =D

Conclusão

Apesar da alta expectativa, o WhatsApp Bussiness API veio apenas para grandes empresas e com soluções selecionadas. Definitivamente não é uma plataforma aberta a experimentações como temos com Messenger, Telegram, Viber, Slack entre outras.

Óbvio que para desenvolvedores, estas barreiras são um pouco frustrantes, mas olhando pelo lado dos usuários, este tipo de abertura da plataforma é extremamente responsável e necessária, com o objetivo de manter a incrível experiência que os usuários têm ao utilizar o WhatsApp.

Simples, rápido, intuitivo e até então pouco invasivo, não é atoa que o WhatsApp é líder neste mercado!

Gostou? Deixe seu Like! =D

Não deixe de escrever nos comentários se tiver alguma sugestão ou dúvida!

Quer conversar sobre Bots? Pode me enviar um email: ricardo.grobel@harlio.com

Soluções de bots em diversos canais: https://www.harlio.com

Comunidade Brasileira de ChatBot no Facebook: https://www.facebook.com/groups/chatbotbrasil/

--

--