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 o QR code para a URL do seu webhook. Mostre-o ao dono do celular, ele o escaneia pelo WhatsApp e o número fica pronto para enviar mensagens.
Vai conectar o seu próprio número manualmente? Siga Conecte seu número de WhatsApp.
https://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 chega depois, na URL do seu webhook.
Chame a API de conexão
Envie o número de telefone e o seu
webhook_url. A resposta traz umwhatsapp_client_id. Guarde-o.Receba o QR code
Seu webhook recebe
status=qr_generatedcom a imagem do QR code emqr_image. Mostre essa imagem à pessoa dona do celular. 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. Depois disso, ou se o WhatsApp pedir para recarregar o código, você recebenot_connected; chame a API novamente para obter um novo código.Escaneie pelo WhatsApp
No celular, abra o WhatsApp → Dispositivos conectados (Linked devices) → Conectar dispositivo (Link a device) e escaneie o código.
Receba o resultado
Seu webhook recebe
status=connectedquando o número é conectado, oustatus=not_connectedse o código não foi escaneado a tempo ou a conexão falhou. O eventoconnectedpode chegar alguns segundos antes de Status da conexão retornarConnected. 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",
"whatsapp_number": "919876543210",
"webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/whatsapp/connect/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_number": "919876543210",
"webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
},
timeout=30,
)
result = response.json() # read the body even when the HTTP code is 400 or 403
if result.get("status") == 1:
print("Waiting for QR code, whatsapp_client_id", result["whatsapp_client_id"])
else:
print("Failed:", result.get("message"))// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/whatsapp/connect/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_number: "919876543210",
webhook_url: "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400 or 403
if (result.status === 1) {
console.log("Waiting for QR code, whatsapp_client_id", result.whatsapp_client_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_number' => '919876543210',
'webhook_url' => 'https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET',
];
$ch = curl_init('https://wbiztool.com/api/v1/whatsapp/connect/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Waiting for QR code, whatsapp_client_id ' . $result['whatsapp_client_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}Substitua 12345 e YOUR_API_KEY pelos seus próprios valores. Veja em Autenticação onde encontrá-los.
Parâmetros da requisição#
client_idintegerobrigatórioSeu ID do Cliente da API, em Configurações → Chaves API.
api_keystringobrigatórioSua chave de API, na mesma página. O número é adicionado ao espaço de trabalho em que esta chave foi criada.
whatsapp_numberstringobrigatórioO número de WhatsApp a conectar, com código do país, como
919876543210. Ele é salvo exatamente como você o envia (até 20 caracteres), então envie somente dígitos, sem+, espaços ou hífens. Valores mais longos falham com HTTP500. O mesmo número escrito de outra forma conta como um número diferente.webhook_urlstringObrigatório para receber o QR codeSua URL
httpouhttpsque recebe o QR code e as atualizações da conexão, com até 250 caracteres (URLs mais longas falham com HTTP500). 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ê.
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,
"status": 1
}
| Campo | Tipo | Descrição |
|---|---|---|
status | integer | 1 se a solicitação de conexão foi criada, 0 se falhou. |
message | string | Whatsapp Client Created em caso de sucesso; caso contrário, o erro. |
whatsapp_client_id | integer | ID do número de WhatsApp. Use-o como whatsapp_client em outras chamadas à API. Presente apenas em caso de sucesso. |
"status": 1 significa que a solicitação foi criada, não que o número está conectado. Se você chamar a API novamente para um número que já foi adicionado antes, mas não está conectado, recebe o mesmo whatsapp_client_id de volta e uma nova tentativa de conexão é iniciada.
Erros#
| Mensagem | HTTP | Como corrigir |
|---|---|---|
whatsapp_number cant be null | 200 | Envie whatsapp_number. Isso é verificado primeiro, então a mensagem também aparece quando o corpo JSON é inválido. |
Auth Error | 200 | Envie client_id e api_key. |
Invalid Client Id | 403 | Envie client_id como número inteiro, por exemplo 12345. |
Auth Error: invalid api key | 400 | Verifique se a chave existe, não foi excluída e pertence a este client_id. |
Higher Subscription Required | 200 | Seu plano não inclui esta API. Faça upgrade do seu plano. |
WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit | 200 | Você já tem tantos números conectados quanto o seu plano permite. Desconecte um ou faça upgrade. |
Already Connected With Given Number | 200 | Este número já está conectado neste espaço de trabalho. 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, mesmo para um número que já está conectado. |
Uma requisição que não seja POST retorna um objeto vazio {} com HTTP 200.
Se o mesmo proprietário da conta já tiver adicionado este número em outro espaço de trabalho, a requisição pode falhar com HTTP 500. Conecte o número pelas configurações do WhatsApp no espaço de trabalho desejado, ou fale com o suporte.
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=...
Número conectado (pode ser enviado mais de uma vez para a mesma conexão):
status=connected&whatsapp_client_id=678
Falha na conexão, por exemplo porque o QR code não foi escaneado a tempo:
status=not_connected&whatsapp_client_id=678
| Campo | Valores |
|---|---|
status | qr_generated, connected ou not_connected |
whatsapp_client_id | O whatsapp_client_id retornado pela API. |
qr_image | Somente 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 sem tempo limite. Se o seu servidor não puder ser acessado, a tentativa de conexão pode parar antes de o número ser salvo como conectado. 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:
connectedpode chegar duas vezes. Faça com que seu handler possa ser executado mais de uma vez com segurança. - 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 URLhttps. 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. - Nenhum QR code 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á.
