Pular para o conteúdo
WbizTool

API de contas do WhatsApp

Conectar um número de WhatsApp (API)

Inicie a conexão de um número de WhatsApp ao seu espaço de trabalho a partir do seu próprio app. O WbizTool abre uma nova sessão do WhatsApp e envia um QR code, ou com login_method=phone um código de 8 caracteres, para a URL do seu webhook. Mostre-o ao dono do celular, ele escaneia o QR code ou digita o código no WhatsApp e o número fica pronto para enviar mensagens. Com um QR code, você não precisa saber o número com antecedência: o WbizTool o lê do WhatsApp depois do escaneamento e o envia para o seu webhook.

Vai conectar o seu próprio número manualmente? Siga Conecte seu número de WhatsApp.

POSThttps://wbiztool.com/api/v1/whatsapp/connect/

Corpo: JSON ou campos de formulário

POST /api/v1/whatsapp-client/create/ é um alias idêntico: executa o mesmo código e retorna as mesmas respostas. Os dois caminhos continuam funcionando.

Como a conexão funciona#

A chamada à API apenas inicia a conexão. O QR code ou o código chega depois, na URL do seu webhook.

  1. Chame a API de conexão

    Envie o seu webhook_url, mais whatsapp_number com login_method=phone. Para reconectar um número que você adicionou antes, envie também o whatsapp_client_id dele. A resposta traz um whatsapp_client_id. Guarde-o.

  2. Receba o QR code ou o código

    Com o padrão login_method=qr, seu webhook recebe status=qr_generated com a imagem do QR code em qr_image. O QR code é enviado novamente a cada poucos segundos enquanto o WbizTool aguarda o escaneamento, então sempre mostre o mais recente. A pessoa tem cerca de dois minutos para escanear.

    Com login_method=phone, seu webhook recebe status=pairing_code com um código de 8 caracteres em pairing_code, como K5EWPGY5. Ele é enviado uma única vez e é válido por cerca de três minutos.

    Mostre a imagem ou o código à pessoa dona do celular. Se não for usado a tempo, ou se o WhatsApp pedir para recarregar o código, você recebe not_connected; chame a API novamente para obter um novo.

  3. Vincule o celular

    No celular, abra o WhatsApp → Dispositivos conectados (Linked devices) → Conectar dispositivo (Link a device). Escaneie o QR code, ou toque em Conectar com número de telefone (Link with phone number instead) e digite o código de 8 caracteres.

  4. Receba o resultado

    Seu webhook recebe status=connected com o número vinculado em whatsapp_number quando o número é conectado, ou status=not_connected se o código não foi escaneado a tempo ou a conexão falhou. O evento connected pode chegar alguns segundos antes de Status da conexão retornar Connected. Responda primeiro ao webhook e depois consulte Status da conexão a cada poucos segundos por até um minuto. Não faça uma única verificação de dentro do handler do seu webhook.

Exemplo rápido#

curl -X POST https://wbiztool.com/api/v1/whatsapp/connect/ \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": 12345,
    "api_key": "YOUR_API_KEY",
    "webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET"
  }'

Substitua 12345 e YOUR_API_KEY pelos seus próprios valores. Veja em Autenticação onde encontrá-los. Para receber um código no celular, adicione "login_method": "phone" e "whatsapp_number": "919876543210".

Parâmetros da requisição#

client_idintegerobrigatório

Seu ID do Cliente da API, em Configurações → Chaves API.

api_keystringobrigatório

Sua chave de API, na mesma página. O número é adicionado ao espaço de trabalho em que esta chave foi criada.

whatsapp_numberstringSó com login_method=phone

Com login_method=phone, o número internacional completo para onde o código será enviado, porque o WhatsApp o envia exatamente para esse número: primeiro o código do país, sem 0 à esquerda, como 919876543210. +, espaços e hífens são removidos automaticamente.

Com login_method=qr ele é ignorado, e você pode omiti-lo. O WbizTool salva o número que o WhatsApp informa depois do escaneamento e o envia no webhook connected.

login_methodstringopcional

qr (padrão) para receber um QR code, ou phone para receber um código de 8 caracteres que o dono digita no WhatsApp em Conectar com número de telefone. Útil quando o celular não consegue escanear um QR code, por exemplo quando ele é o único dispositivo.

whatsapp_client_idintegeropcional

Para reconectar um número que está no seu espaço de trabalho, mas não está conectado, envie o whatsapp_client_id dele. O mesmo ID é mantido, então suas outras chamadas à API continuam funcionando. Omita-o para adicionar um novo número.

A linha fica com o número que for vinculado. Se outro celular escanear o QR code, ou se você enviar outro whatsapp_number com login_method=phone, esse whatsapp_client_id passa a enviar a partir do novo número, incluindo as mensagens que já estavam na fila para ele.

webhook_urlstringObrigatório para receber o QR code

Sua URL http ou https que recebe o QR code e as atualizações da conexão, com até 250 caracteres (URLs mais longas falham com HTTP 500). A API aceita uma requisição sem ela, mas nesse caso nada é enviado para você e não há como obter o QR code pela API. Veja Eventos de webhook.

Usar os clientes oficiais#

O cliente Python chama /api/v1/whatsapp-client/create/ para você. Ele pede whatsapp_number; com um QR code, o valor é ignorado.

Python
from wbiztool_client import WbizToolClient

client = WbizToolClient(api_key="YOUR_API_KEY", client_id=12345)

result = client.create_whatsapp_client(
    whatsapp_number="919876543210",
    webhook_url="https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
)
print(result)

O cliente Python lança requests.exceptions.HTTPError quando a API retorna HTTP 400 ou 403, então coloque a chamada dentro de um try/except.

Resposta#

Quando a solicitação de conexão é criada, a API retorna HTTP 200:

{
  "message": "Whatsapp Client Created",
  "whatsapp_client_id": 678,
  "login_method": "qr",
  "status": 1
}
CampoTipoDescrição
statusinteger1 se a solicitação de conexão foi criada, 0 se falhou.
messagestringWhatsapp Client Created em caso de sucesso; caso contrário, o erro.
whatsapp_client_idintegerID do número de WhatsApp. Use-o como whatsapp_client em outras chamadas à API. Presente apenas em caso de sucesso.
login_methodstringqr ou phone, conforme usado nesta tentativa. Presente apenas em caso de sucesso.

"status": 1 significa que a solicitação foi criada, não que o número está conectado. Chamar a API novamente não acumula números:

  • Com um QR code e sem whatsapp_client_id, você recebe o mesmo whatsapp_client_id de volta até que um dos QR codes dele seja escaneado.
  • Com login_method=phone, um número que já foi adicionado antes, mas não está conectado, recebe de volta o whatsapp_client_id existente.
  • Com whatsapp_client_id, esse número é reconectado.

Até o primeiro QR code ser escaneado, o número ainda não tem número de telefone: Listar números conectados e Status da conexão retornam um número vazio para ele.

Erros#

MensagemHTTPComo corrigir
login_method must be 'qr' or 'phone'400Envie qr, phone ou omita o campo.
For login_method phone, whatsapp_number must be the full international number with country code and no leading 0, e.g. 919876543210400Envie o número com o código do país, como 919876543210, e não 09876543210 ou 9876543210.
Auth Error200Envie client_id e api_key. Também é retornado quando o corpo JSON é inválido.
Invalid Client Id403Envie client_id como número inteiro, por exemplo 12345.
Auth Error: invalid api key400Verifique se a chave existe, não foi excluída e pertence a este client_id.
Higher Subscription Required200Seu plano não inclui esta API. Faça upgrade do seu plano.
WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit200Você já tem tantos números conectados quanto o seu plano permite. Desconecte um ou faça upgrade.
Already Connected With Given Number200Com login_method=phone, este número já está conectado neste espaço de trabalho. Com whatsapp_client_id, esse número já está conectado. Não é preciso fazer nada. Se você já estiver no limite de números do seu plano, recebe WhatsApp Account Limit Reached em vez disso.
Invalid WhatsApp client400O whatsapp_client_id não existe, foi excluído ou pertence a outro espaço de trabalho. Omita-o para adicionar um novo número.

Uma requisição que não seja POST retorna um objeto vazio {} com HTTP 200.

Eventos de webhook#

O WbizTool envia um POST para o seu webhook_url a cada etapa. O corpo é codificado como formulário (application/x-www-form-urlencoded), não como JSON.

QR code pronto (enviado novamente a cada poucos segundos enquanto aguarda o escaneamento, muitas vezes com a mesma URL):

status=qr_generated&whatsapp_client_id=678&qr_image=...

Código no celular pronto (com login_method=phone, enviado uma única vez):

status=pairing_code&whatsapp_client_id=678&pairing_code=K5EWPGY5

Número conectado, com o número que está logado, como o WhatsApp o informa:

status=connected&whatsapp_client_id=678&whatsapp_number=919876543210

Falha na conexão, por exemplo porque o QR code não foi escaneado ou o código não foi digitado a tempo:

status=not_connected&whatsapp_client_id=678
CampoValores
statusqr_generated, pairing_code, connected ou not_connected
whatsapp_client_idO whatsapp_client_id retornado pela API.
whatsapp_numberSomente com connected. O número vinculado com o código do país, como 919876543210. Use-o para saber qual número foi escaneado. Fica vazio no caso raro de o WhatsApp não o informar.
pairing_codeSomente com pairing_code. O código de 8 caracteres a ser digitado no WhatsApp. Mostre-o como está; espaços ou um hífen entre as duas metades não são problema.
qr_imageSomente com qr_generated. Pode ser uma URL data: com a imagem em base64 ou uma URL https da imagem. Trate os dois casos. A URL https é a mesma em todas as atualizações do mesmo número, enquanto a imagem por trás dela muda. Adicione uma query para evitar cache ao exibi-la (por exemplo ?t=<timestamp>), ou o navegador pode continuar mostrando um código expirado.

Sua URL precisa ser acessível publicamente e deve responder em poucos segundos. O WbizTool aguarda sua resposta por até 10 segundos; se o seu servidor for lento ou não puder ser acessado, esse evento se perde, mas a tentativa de conexão continua. Qualquer código de status HTTP é aceito. Entregas que falham não são repetidas, e nada é enviado se o número se desconectar depois. Para acompanhar um número depois de conectado, consulte periodicamente Status da conexão.

Polling em vez de webhooks#

Se o seu servidor não consegue receber webhooks, você ainda precisa do webhook para obter o QR code, mas não precisa depender dele para saber o resultado. Depois que o QR code for escaneado, chame Status da conexão com o whatsapp_client_id a cada poucos segundos até que ele retorne Connected. Listar contas mostra a mesma informação para todos os seus números.

Dicas#

  • Trate eventos duplicados: faça com que seu handler possa ser executado mais de uma vez com segurança, caso um evento seja entregue duas vezes.
  • Mostre o QR code mais recente: substitua a imagem sempre que chegar um novo evento qr_generated, adicionando uma query para evitar cache a uma URL https. Os códigos antigos param de funcionar.
  • Escaneie em cerca de dois minutos: depois disso, você recebe not_connected. Chame a API novamente para obter um novo código.
  • Confira o número depois de escanear o QR code: o whatsapp_number do evento connected é o número que foi realmente vinculado, que pode ser diferente do que você esperava.
  • Digite o código em cerca de três minutos: cada tentativa gera um único código. Se ele expirar, você recebe not_connected; chame a API novamente.
  • Nenhum QR code ou código depois de 10 minutos? A solicitação expirou. Chame a API novamente.
  • Conectar pelo painel é mais simples quando você está conectando seu próprio número. Use as configurações do WhatsApp e escaneie o código lá.