Funcionamento e configuração do Whatsapp Class API
Abaixo estão descritos os procedimentos para instalação e configuração do Whatsapp Class API
Entendendo o funcionamento
O WhatsApp Class API é um módulo VBA desenvolvido em Microsoft Access que integra o WhatsApp por meio de uma API embarcada. A comunicação é realizada por um serviço HTTP executado localmente, hospedado em uma aplicação Node.js, permitindo a troca de mensagens de forma rápida, segura e transparente para o usuário.
Diferente do Whatsapp Class, ele trabalha por Sessão, permitindo realiza a conexão em mais de um celular o mesmo tempo.
Através do nosso módulo você poderá realizar as seguintes operações:
São eles:
-
-
Iniciar várias sessões para o envio de mensagem
-
Enviar mensagem de texto
-
Enviar áudio
-
Enviar imagens
-
Envio de vídeos
-
Enviar arquivos nos mais variados formatos, como PDF, TXT, XLS, PPT, etc
-
Enviar mensagem de texto para um Grupo
-
Verificar se o numero de celular é vinculado ao Whatsapp
-
Instalação
A instalação do Whatsapp Class API é feita através do arquivo Setup_WhatsappAPI.exe.
Ele é responsável por instalar a estrutura da pasta e o Nod.js em seu computador.
A instalação é feita por padrão na pasta C:\Kartoffel\WhatsappAPI\ e não poderá ser instalada em outra pasta, ou o aplicativo não funcionará corretamente.
Para realizar a instalação siga os passos abaixo:
-
-
Realize o download do arquivo Setup_WhatsappAPI.exe. em nossa área de download.
-
Execute a instalação do arquivo Setup_WhatsappAPI.exe. em 'Modo Admim'
-
Dentro da pasta C:\Kartoffel\WhatsappAPI\ você encontrará o arquivo Exemplo.accdb com os exemplos dos funcionamentos do comandos disponíveis
Configuração
Para utilizar o WhatsApp Class API em sua aplicação Microsoft Acess, você deverá referenciar o nosso componente as referências do seu projeto VBA.
Para realizar o mesmo, siga os passos abaixo:
-
-
Abra o seu arquivo .accdb
-
Clique na barra de ferramentas e vá até a opção 'Macros e Módulos'
-
Clique na opção Visual Basic
-
No editor do Visual Basic clique em 'Ferramentas'
-
Clique no botão 'Procurar'
-
Em tipo de arquivo altere para 'Arquivo ACCDE'
-
Navegue até a pasta C:\Kartoffel\WhatsappAPI\
-
Selecione o arquivo WhatsappClassAPI.accde
-
Clique em 'Abrir'
-
Na janela de referências, clique em OK.
-

Feito essa operação as classe do nosso componente estará disponível dentro do seu projeto.
Instanciando a Classe
Uma vez as referências sendo feitas corretamente, estará disponível dentro do seu projeto a classe 'Classe_whatsapp'.
Através dela você terá acesso a todas funções disponíveis.
Para instanciar a classe basta informar Classe_whatsapp + o nome da função deseja
Exemplo:
Classe_whatsapp.InicializarModulo
Abaixo são listadas todas as funções disponíveis em nosso módulo
-
-
InicializarModulo:
-
FinalizarModulo:
-
StatusServico:
-
IniciarSessao:
-
FinalizarSessao:
-
ConsultarSessao:
-
ListaTodasSessoes:
-
FinalizarTodasSessoes:
-
EnviaMensagem:
-
EnviarAudio:
-
EnviarArquivo:
-
ListarGrupos:
-
EnviarMensagemGrupo:
-
Ewhatsapp:
-
ListarMensagens
-
Para uma correta utilização das funções, recomenda-se a utilização de variáveis, para passar os respectivos parâmetros, a fim de evitar erro de processamento.
Ao passar o número de o Whatsapp utilize uma variável do tipo texto, ao invés de passar o parâmetro diretamente por uma caixa de controle.
Exemplo:
Dim Retorno As String
Dim NomeSessao as String
NomeSessao = me.meucampo
Retorno = Classe_whatsapp.IniciarSessao(NomeSessao, Navegador)
Inicializando a aplicação
Para inicializar a aplicação são necessários a realização de 03 eventos distintos. São eles:
-
-
Iniciar aplicativo: inicia o servidor para o envio de mensagens. Deverá retornar 'Aplicativo iniciado"
-
Status Serviço: verifica se o serviços foi iniciado corretamente. Deverá retornar 'Verdadeiro'
-
Iniciar Sessão: nome que será utilizado para a conexão com o seu celular. Ele deverá retornar o QRCode para conexão no seu celular
-
Escanear o QRCode: deverá escanear o qrcode para conexão no seu celular. Você tem no máximo 10 (dez) segundos para efetuar o scaneamento do QRCode.
-
Consultar sessão: após a conexão com o seu celular deverá consulta a sessão, aonde deverá lhe retornar o nome do usuário e o status da sessão: {"session":"Usuario","status":"connected"}
-
Com isso o seu aplicativo já esta apto para o envio de mensagens.
Conhecendo as funções do Whatsapp Class API
Todos os comandos passados para a API tem sua respostas em JSON. O desenvolvedor MS Access deve ter conhecimento na tratativas das respostas.
Abaixo estão relacionados as funções e suas respostas esperadas.
Todas as funções listadas, estão presentes no arquivo de Exemplo.accdb na pasta C:\Kartoffel\WhatsappAPI\
Inicializa a aplicação
Inicializa o módulo de transmissão de mensagens
Classe_whatsapp.InicializarModulo (Monitorar)
onde:
Classe: Classe_whatsapp
Função: InicializarModulo
Parâmetros: Monitorar / NaoMonitorar
Retorno: API WhatsApp rodando porta 3333
Parâmetros:
-
-
Monitorar: o componente é inicializado com uma janela no prompt de comando, onde podem ser monitorados todos os comandos que são passados.
-
NaoMonitorar: não exibe o prompt de comando.
-

Finalizar a aplicação
Finaliza a aplicação e fecha o prompt de comando (se o mesmo estiver em modo visualização)
Classe_whatsapp.FinalizarModulo
onde:
Classe: Classe_whatsapp
Função: FinalizarModulo
Parâmetros: não há
Status Serviço
Verifica se o aplicativo foi inicializado corretamente
Classe_whatsapp.StatusServico
onde:
-
-
-
Classe: Classe_whatsapp
-
Função: StatusServico
-
Parâmetros: Não há
-
-
Retorno: Verdade/Falso
Iniciar Sessão
Cria a sessão para o envio de mensagens através do seu celular
Classe_whatsapp.IniciarSessao(NomeSessao, QRCodeStart)
onde:
-
-
-
Classe: Classe_whatsapp
-
Função: IniciarSessao
-
Parâmetros:
-
NomeSessao: nome dado a sessão que será visualizar no celular
-
QRCodeStart: identifica se o QRCode será criado no formulário ou no navegador
-
-
-
onde:
-
-
-
-
-
Arquivo: gera arquivo PNG
-
Navegador: carrega o arquivo no navegador
-
-
-
-
Nota: a geração do arquivo é feita em Base64 e parâmetros do Windows ou seu vba podem não gerar a codificação corretamente. Nesse caso, utiliza a opção
Quando o parâmetro passado for 'Navegador' o seu navegador padrão será aberto e carregar um arquivo .html com o QR Code visível, conforme abaixo:


Quando o parâmetro passado for 'Arquivo' será gerado o arquivo QRCode.png em C:\Kartoffel\WhatsappAPI\qrcodes\ que poderá ser carregado em um formulário específico, ou carregado conforme desejar.

Finalizar Sessão
Finaliza a sessão criada para o envio da mensagem.
Classe_whatsapp.FinalizarSessao(NomeSessao)
onde:
-
-
Classe: Classe_whatsapp
-
Função: FinalizarSessao
-
Parâmetros: NomeSessao
-
Retorno: {"status":true,"session":"Usuario"}
Consultar Sessão
Finaliza a sessão criada para o envio da mensagem.
Classe_whatsapp.ConsultarSessao(NomeSessao)
onde:
-
-
Classe: Classe_whatsapp
-
Função: ConsultarSessao
-
Parâmetros: NomeSessao
-
-
-
Retorno: {"session":"Usuario","status":"disconnected"}
-
-
Sessões Ativas
Lista todas as sessões ativas que foram iniciadas
Classe_whatsapp.xx(xx)
Finalizar Todas Sessões
Finaliza todas as sessões ativas que foram iniciadas
Classe_whatsapp.xx(xx)
Enviar Mensagem
Dim Retorno As String
Retorno = Classe_whatsapp.EnviaMensagem(Me.NomeSessao, Me.NumeroWhatsapp, Me.Mensagem)
Enviar Áudio
...
Enviar Anexo
...
Lista Grupos
...
Enviar no Grupo
...
É N° Whatsapp?
...
Listar Mensagens
...
Sessão conectada ou QR indisponível
Ao gerar a sua sessão e o mesmo retornar Sessão conectada ou QR indisponível, realize os seguintes procedimentos:
Reiniciar a Sessão
-
-
-
-
Execute a função FinalizarSessao
-
Execute a função FinalizarTodasSessoes
-
Execute a função ListaTodasSessoes
-
-
-
O retorno deverá ser:
{
"status":true,
"sessions_removidas":1
}
Reiniciar a Aplicativo
-
-
-
-
Execute a função FinalizarSessao
-
Execute a função FinalizarTodasSessoes
-
Execute a função FinalizarModulo
-
-
-
O retorno deverá ser: Aplicativo Finalizado
Após as operações, reinicie a aplicação e gere a sessão novamente
Erro nao Gerar QR Code ou falha ao carregar o arquivo
Ao gerar a sua sessão e o mesmo retornar Erro nao Gerar QR Code ou falha ao carregar o arquivo , realize os seguintes procedimentos:
Reiniciar a Sessão
-
-
-
-
Execute a função FinalizarSessao
-
Execute a função FinalizarTodasSessoes
-
Execute a função ListaTodasSessoes
-
-
-
O retorno deverá ser:
{
"status":true,
"sessions_removidas":1
}
Reiniciar a Aplicativo
-
-
Execute a função FinalizarSessao
-
Execute a função FinalizarTodasSessoes
-
Execute a função FinalizarModulo
-
O retorno deverá ser: Aplicativo Finalizado
Após as operações, reinicie a aplicação e gere a sessão novamente
A API esta funcionando?
Todo evento da API é demonstrada no prompt de comando quando o mesmo foi habilitado na inicialização.
Assim todos os eventos podem ser visualizados no mesmo.

Caso alguma evento não seja executado, o mesmo será listado prompt no e seu respectivo erro, identificando com isso se a API esta ou não respondendo.
Como saber se a aplicação iniciou corretamente.
Quando sua aplicação é inicializada, ela obrigatoriamente irá roda na porta 3333 em http://localhost:3333

Se a aplicação iniciou corretamente todos os recursos da API estarão disponíveis.
Qualquer evento que a mesma não realizar poderá esta vinculado a alguma dos problemas listados abaixo:
-
-
Mensagem truncada (Erro 400)
-
Bloqueio Antivírus
-
Bloqueio pelo firewall
-
Falha na execução do NOD
-
Cabe ao desenvolvedor identificar o que esta causando a falha a corrigir o problema.
Nota: O suporte não cobre a identificação e correção da inconsistência na máquina do usuário.
Erro 400
O Erro 400 ou Erro HTTP 400 (Bad Request) significa que sua requisição foi recebida pelo servidor, mas contém dados inválidos ou mal formatados.
Em outras palavras, o problema normalmente está na forma como sua aplicação enviou a requisição.
Será retornado uma mensagem conforma baixo:

Causas mais comuns é um JSON inválido.
Exemplo:
{
"phone": "5531999999999",
"message": "Olá",
}
Observe a vírgula após "Olá", que torna o JSON inválido.
Para evitar esse tipo de erro é recomendável o encaminhamento de uma mensagem "pura", sem caracteres especiais ou alguma caractere que possa truncar a mensagem.
Abaixo seguem informações que como identificar o erro, que poderá variar segunda a mensagem:
A parte importante é esta:
SyntaxError: Bad control character in string literal in JSON at position 117 (line 1 column 118)
Isso significa:
-
-
-
-
position 117 → o 118º caractere do JSON (a contagem começa em 0)
-
line 1 → está tudo em uma única linha
-
column 118 → coluna 118 da linha
-
-
-
O que normalmente causa esse erro?
Quase sempre é um caractere de controle dentro de uma string, como:
-
-
-
-
quebra de linha (CR ou LF)
-
TAB
-
Backspace
-
NULL
-
caracteres ASCII 0 a 31
-
-
-
Esse erro também poderá ser identificado através do prompt conforme a imagem abaixo:

Cabe ao desenvolvedor identificar o que esta causando a falha a corrigir o problema.
Nota: O suporte não cobre a identificação e correção da inconsistência na máquina do usuário.
Erros mais comuns
Os erros mais comuns, apresentados são:
|
CÓDIGO |
STATUS |
SIGNIFICADO |
OCORRÊNCIA |
|---|---|---|---|
|
201 |
Created |
Criado |
Um recurso foi criado (algumas APIs retornam isso ao enviar mensagens). |
|
204 |
No Content |
Sucesso sem conteúdo |
A operação foi concluída, mas não há dados para retornar. |
|
400 |
Bad Request |
Requisição inválida |
JSON inválido, campos obrigatórios ausentes, telefone em formato incorreto. |
|
401 |
Unauthorized |
Não autorizado |
Token inválido, expirado ou ausente. |
|
403 |
Forbidden |
Acesso negado |
Token válido, mas sem permissão para a operação. |
|
404 |
Not Found |
Não encontrado |
End point incorreto ou recurso inexistente. |
|
405 |
Method Not Allowed |
Método não permitido |
Enviou GET quando o end point exige POST, por exemplo. |
|
408 |
Request Timeout |
Tempo esgotado |
A requisição demorou demais. |
|
409 |
Conflict |
Conflito |
Sessão já conectada ou recurso em estado conflitante. |
|
413 |
Payload Too Large |
Conteúdo muito grande |
Arquivo ou JSON excede o limite permitido. |
|
415 |
Unsupported Media Type |
Tipo de mídia inválido |
|
|
422 |
Unprocessable Entity |
Dados inválidos |
JSON válido, mas com informações que não atendem às regras da API. |
|
429 |
Too Many Requests |
Muitas requisições |
Limite de taxa (rate limit) excedido. |
|
500 |
Internal Server Error |
Erro interno |
Falha no servidor da API. |
|
502 |
Bad Gateway |
Gateway inválido |
Problema entre servidores intermediários. |
|
503 |
Service Unavailable |
Serviço indisponível |
API em manutenção ou sobrecarregada. |
|
504 |
Gateway Timeout |
Tempo esgotado |
O servidor não recebeu resposta de outro serviço a tempo. |
Suporte ao Whatsapp Class API
Abaixo estão descritos informações relevantes referente a prestação de suporte ao Whatsapp Class API
Como é prestado o suporte para o componente?
O suporte ao é feito exclusivamente através do nosso site, através de abertura de chamados através da opção 'Suporte'.
Será aberto um ticket de atendimento com prazo de resposta em até 72 (setenta e duas horas) úteis.
O suporte cobre conexão remota?
Não. O pacote de suporte que acompanha nosso componente não comtempla conexão remota. O suporte é feito exclusivamente através do nosso site.
Usuários que necessitarem de suporte remoto deverão realizar a sua contratação separadamente, onde serão informados valores, dia e horário para o respectivo atendimento.
O suporte cobre adaptação no meu código?
Não. Nosso suporte não cobre adaptações em seu código. O mesmo deverá ser realizado pelo programador responsável.
O suporte cobre identificação e correção da inconsistência na máquina do usuário.
Não. Nosso módulo foi desenvolvido para desenvolvedores.
É de inteira responsabilidade do mesmo identificar e corrigir inconistências em sua máquina ou na máquina do usuário, bem como interpretar os valores passados nas variáveis de processamento.
Garantia do componente.
O Whatsapp Class API foi desenvolvido com base em código fonte de terceiros, qual não temos informações ou manipulamos o seu código fonte.
Assim o desenvolvedor que adquirir nosso componente, esta sujeito a aceitação ao TERMO DE LICENÇA DE USO E ISENÇÃO DE RESPONSABILIDADE, listado abaixo:
TERMO DE LICENÇA DE USO E ISENÇÃO DE RESPONSABILIDADE
LICENÇA DE USO
A Kartoffel concede ao LICENCIADO uma licença de uso, não exclusiva e intransferível, da aplicação fornecida, observadas as condições estabelecidas neste documento.
A licença autoriza apenas a utilização da aplicação, não implicando transferência de propriedade intelectual, código-fonte, marcas, tecnologias ou quaisquer outros direitos pertencentes à Kartoffel.
UTILIZAÇÃO DE RECURSOS DE TERCEIROS
O LICENCIADO declara estar ciente de que a aplicação utiliza recursos, bibliotecas, componentes, APIs, certificados digitais, sistemas operacionais, serviços de internet, bancos de dados, frameworks e demais tecnologias desenvolvidas e mantidas por terceiros.
O funcionamento adequado da aplicação depende da disponibilidade, integridade, compatibilidade e continuidade desses recursos externos, os quais não são desenvolvidos nem controlados pela Kartoffel.
LIMITAÇÃO DE RESPONSABILIDADE
A Kartoffel não poderá ser responsabilizada por falhas, indisponibilidades, interrupções, incompatibilidades, alterações de funcionamento ou descontinuidade da aplicação quando tais ocorrências decorrerem, direta ou indiretamente, de:
-
-
-
- Alterações realizadas por fornecedores de serviços de terceiros
- Mudanças em APIs, bibliotecas ou componentes externos
- Indisponibilidade de serviços de internet
- Falhas em servidores, hospedagens, sistemas operacionais ou bancos de dados de terceiros
- Alterações promovidas por órgãos governamentais ou entidades reguladoras
- Problemas relacionados a certificados digitais
- Atualizações ou modificações em softwares de terceiros
- Ações de vírus, malwares, ataques cibernéticos ou fatores externos fora do controle da Kartoffel
- Configurações inadequadas do ambiente de instalação do LICENCIADO.
-
-
ATUALIZAÇÕES
A Kartoffel poderá disponibilizar atualizações destinadas à adequação da aplicação às alterações promovidas por terceiros, observadas as condições comerciais contratadas entre as partes.
Caso não exista contrato de suporte ou manutenção vigente, tais atualizações poderão ser cobradas separadamente.
EXCLUSÃO DE GARANTIA
A Kartoffel Tecnologia envidará seus melhores esforços para manter a aplicação em pleno funcionamento, porém não garante operação contínua, ininterrupta ou livre de falhas decorrentes de fatores externos ou de tecnologias de terceiros.
LIMITAÇÃO DE DANOS
Em nenhuma hipótese a Kartoffel será responsável por perdas de faturamento, lucros cessantes, perda de dados, danos indiretos, incidentais ou consequenciais decorrentes da indisponibilidade da aplicação causada por fatores alheios ao seu controle.
ACEITAÇÃO
Ao instalar, utilizar ou manter a aplicação em funcionamento, o LICENCIADO declara que leu, compreendeu e concorda integralmente com os termos deste documento.
Terei direito a atualizações do componente
SIM. O desenvolvedor terá direito a atualizações gratuitas por um período de 12 meses, respeitando os TERMO DE LICENÇA DE USO E ISENÇÃO DE RESPONSABILIDADE do componente.