API de cuentas de WhatsApp
Conectar un número de WhatsApp (API)
Inicia la conexión de un número de WhatsApp a tu espacio de trabajo desde tu propia app. Wbiztool abre una nueva sesión de WhatsApp y envía el código QR a la URL de tu webhook. Muéstraselo al propietario del teléfono, que lo escanea desde WhatsApp, y el número queda listo para enviar mensajes.
¿Vas a vincular tu propio número a mano? Sigue Conecta tu número de WhatsApp.
https://wbiztool.com/api/v1/whatsapp/connect/Cuerpo: JSON o campos de formulario
POST /api/v1/whatsapp-client/create/ es un alias idéntico: ejecuta el mismo código y devuelve las mismas respuestas. Las dos rutas siguen funcionando.
Cómo funciona la conexión#
La llamada a la API solo inicia la conexión. El código QR llega más tarde, a la URL de tu webhook.
Llama a la API de conexión
Envía el número de teléfono y tu
webhook_url. La respuesta te da unwhatsapp_client_id. Guárdalo.Recibe el código QR
Tu webhook recibe
status=qr_generatedcon la imagen del QR enqr_image. Muestra esa imagen a la persona propietaria del teléfono. El código QR se vuelve a enviar cada varios segundos mientras Wbiztool espera el escaneo, así que muestra siempre el más reciente. La persona tiene unos dos minutos para escanearlo. Después de ese tiempo, o si WhatsApp pide recargar el código, recibesnot_connected; vuelve a llamar a la API para obtener un código nuevo.Escanéalo desde WhatsApp
En el teléfono, abre WhatsApp → Dispositivos vinculados → Vincular un dispositivo y escanea el código.
Obtén el resultado
Tu webhook recibe
status=connectedcuando el número queda vinculado, ostatus=not_connectedsi el código no se escaneó a tiempo o la conexión falló. El eventoconnectedpuede llegar unos segundos antes de que Estado de conexión devuelvaConnected. Responde primero al webhook y luego consulta Estado de conexión cada pocos segundos durante hasta un minuto. No lo compruebes una sola vez desde dentro del manejador de tu webhook.
Ejemplo 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');
}Sustituye 12345 y YOUR_API_KEY por tus propios valores. Consulta Autenticación para saber dónde encontrarlos.
Parámetros de la solicitud#
client_idintegerobligatorioTu ID de cliente de la API, de Configuración → Claves API.
api_keystringobligatorioTu clave API, de esa misma página. El número se añade al espacio de trabajo en el que se creó esta clave.
whatsapp_numberstringobligatorioEl número de WhatsApp que quieres conectar, con código de país, como
919876543210. Se guarda exactamente como lo envías (hasta 20 caracteres), así que envía solo dígitos, sin+, espacios ni guiones. Los valores más largos fallan con HTTP500. El mismo número escrito de otra forma cuenta como un número distinto.webhook_urlstringObligatorio para recibir el código QRTu URL
httpohttpsque recibe el código QR y las novedades de la conexión, de hasta 250 caracteres (las URL más largas fallan con HTTP500). La API acepta una solicitud sin ella, pero entonces no se te envía nada y no tienes forma de obtener el código QR a través de la API. Consulta Eventos del webhook.
Usar los clientes oficiales#
El cliente de Python llama a /api/v1/whatsapp-client/create/ por ti.
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)El cliente de Python lanza requests.exceptions.HTTPError cuando la API devuelve HTTP 400 o 403, así que envuelve la llamada en un try/except.
Respuesta#
Cuando se crea la solicitud de conexión, la API devuelve HTTP 200:
{
"message": "Whatsapp Client Created",
"whatsapp_client_id": 678,
"status": 1
}
| Campo | Tipo | Descripción |
|---|---|---|
status | integer | 1 si se creó la solicitud de conexión, 0 si falló. |
message | string | Whatsapp Client Created si todo va bien; en caso contrario, el error. |
whatsapp_client_id | integer | ID del número de WhatsApp. Úsalo como whatsapp_client en otras llamadas a la API. Solo aparece si la solicitud es correcta. |
"status": 1 significa que la solicitud se creó, no que el número esté conectado. Si vuelves a llamar a la API con un número que ya se había añadido pero no está conectado, recibes el mismo whatsapp_client_id y se inicia un nuevo intento de conexión.
Errores#
| Mensaje | HTTP | Cómo solucionarlo |
|---|---|---|
whatsapp_number cant be null | 200 | Envía whatsapp_number. Esto se comprueba primero, así que también aparece cuando el cuerpo JSON no es válido. |
Auth Error | 200 | Envía client_id y api_key. |
Invalid Client Id | 403 | Envía client_id como número entero, por ejemplo 12345. |
Auth Error: invalid api key | 400 | Comprueba que la clave existe, que no se ha eliminado y que pertenece a este client_id. |
Higher Subscription Required | 200 | Tu plan no incluye esta API. Mejora tu plan. |
WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit | 200 | Ya tienes tantos números conectados como permite tu plan. Desconecta uno o mejora tu plan. |
Already Connected With Given Number | 200 | Este número ya está conectado en este espacio de trabajo. No hay nada que hacer. Si ya estás en el límite de números de tu plan, recibes WhatsApp Account Limit Reached en su lugar, incluso para un número que ya está conectado. |
Una solicitud que no sea POST devuelve un objeto vacío {} con HTTP 200.
Si el mismo propietario de la cuenta ya añadió este número en otro espacio de trabajo, la solicitud puede fallar con HTTP 500. Conecta el número desde la configuración de WhatsApp en el espacio de trabajo que quieras, o contacta con soporte.
Eventos del webhook#
Wbiztool envía un POST a tu webhook_url en cada paso. El cuerpo va codificado como formulario (application/x-www-form-urlencoded), no como JSON.
Código QR listo (se vuelve a enviar cada varios segundos mientras se espera el escaneo, a menudo con la misma URL):
status=qr_generated&whatsapp_client_id=678&qr_image=...
Número conectado (puede enviarse más de una vez para la misma conexión):
status=connected&whatsapp_client_id=678
Conexión fallida, por ejemplo porque el código QR no se escaneó a tiempo:
status=not_connected&whatsapp_client_id=678
| Campo | Valores |
|---|---|
status | qr_generated, connected o not_connected |
whatsapp_client_id | El whatsapp_client_id que devolvió la API. |
qr_image | Solo con qr_generated. Puede ser una URL data: que contiene la imagen en base64 o una URL https de la imagen. Contempla ambos casos. La URL https es la misma en cada renovación del mismo número, mientras que la imagen cambia. Añade un parámetro para evitar la caché al mostrarla (por ejemplo ?t=<timestamp>), o el navegador puede seguir mostrando un código caducado. |
Tu URL debe ser accesible públicamente y debería responder en pocos segundos. Wbiztool espera tu respuesta sin límite de tiempo. Si no se puede acceder a tu servidor, el intento de conexión puede detenerse antes de que el número se guarde como conectado. Se acepta cualquier código de estado HTTP. Los envíos fallidos no se reintentan, y no se envía nada si el número se desconecta más adelante. Para hacer seguimiento de un número después de conectarlo, consulta periódicamente Estado de conexión.
Consultas periódicas en lugar de webhooks#
Si tu servidor no puede recibir webhooks, sigues necesitando el webhook para obtener el código QR, pero no tienes que depender de él para el resultado. Después de escanear el código QR, llama a Estado de conexión con el whatsapp_client_id cada pocos segundos hasta que devuelva Connected. Listar cuentas muestra lo mismo para todos tus números.
Consejos#
- Gestiona los eventos duplicados:
connectedpuede llegar dos veces. Haz que tu código pueda ejecutarse más de una vez sin problemas. - Muestra el código QR más reciente: sustituye la imagen cada vez que llegue un nuevo evento
qr_generated, añadiendo un parámetro para evitar la caché a una URLhttps. Los códigos anteriores dejan de funcionar. - Escanea en unos dos minutos: después recibes
not_connected. Vuelve a llamar a la API para obtener un código nuevo. - ¿No llega ningún código QR tras 10 minutos? La solicitud caducó. Vuelve a llamar a la API.
- Conectar desde el panel es más sencillo cuando vinculas tu propio número. Usa la configuración de WhatsApp y escanea allí el código.
