Saltar al contenido
WbizTool

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 un código QR, o con login_method=phone un código de 8 caracteres, a la URL de tu webhook. Muéstraselo al propietario del teléfono, que escanea el código QR o escribe el código en WhatsApp, y el número queda listo para enviar mensajes. Con un código QR no necesitas conocer el número de antemano: WbizTool lo lee de WhatsApp después del escaneo y lo envía a tu webhook.

¿Vas a vincular tu propio número a mano? Sigue Conecta tu número de WhatsApp.

POSThttps://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 o el código de teléfono llega más tarde, a la URL de tu webhook.

  1. Llama a la API de conexión

    Envía tu webhook_url, más whatsapp_number con login_method=phone. Para reconectar un número que añadiste antes, envía también su whatsapp_client_id. La respuesta te da un whatsapp_client_id. Guárdalo.

  2. Recibe el código QR o el código de teléfono

    Con el valor predeterminado login_method=qr, tu webhook recibe status=qr_generated con la imagen del QR en qr_image. 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.

    Con login_method=phone, tu webhook recibe status=pairing_code con un código de 8 caracteres en pairing_code, como K5EWPGY5. Se envía una sola vez y es válido durante unos tres minutos.

    Muestra la imagen o el código a la persona propietaria del teléfono. Si no se usa a tiempo, o si WhatsApp pide recargar el código, recibes not_connected; vuelve a llamar a la API para obtener uno nuevo.

  3. Vincula el teléfono

    En el teléfono, abre WhatsApp → Dispositivos vinculados → Vincular un dispositivo. Escanea el código QR, o toca Vincular con el número de teléfono y escribe el código de 8 caracteres.

  4. Obtén el resultado

    Tu webhook recibe status=connected con el número vinculado en whatsapp_number cuando el número queda vinculado, o status=not_connected si el código no se escaneó a tiempo o la conexión falló. El evento connected puede llegar unos segundos antes de que Estado de conexión devuelva Connected. 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",
    "webhook_url": "https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET"
  }'

Sustituye 12345 y YOUR_API_KEY por tus propios valores. Consulta Autenticación para saber dónde encontrarlos. Para obtener un código de teléfono en su lugar, añade "login_method": "phone" y "whatsapp_number": "919876543210".

Parámetros de la solicitud#

client_idintegerobligatorio

Tu ID de cliente de la API, de Configuración → Claves API.

api_keystringobligatorio

Tu 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_numberstringSolo con login_method=phone

Con login_method=phone, el número internacional completo al que se envía el código, porque WhatsApp lo envía exactamente a ese número: primero el código de país y sin 0 inicial, como 919876543210. Los +, espacios y guiones se eliminan automáticamente.

Con login_method=qr se ignora y puedes omitirlo. WbizTool guarda el número que indica WhatsApp después del escaneo y lo envía en el webhook connected.

login_methodstringopcional

qr (predeterminado) para recibir un código QR, o phone para recibir un código de 8 caracteres que el propietario escribe en WhatsApp en Vincular con el número de teléfono. Útil cuando el teléfono no puede escanear un código QR, por ejemplo cuando es el único dispositivo.

whatsapp_client_idintegeropcional

Para reconectar un número que está en tu espacio de trabajo pero no conectado, envía su whatsapp_client_id. Se mantiene el mismo ID, así que tus otras llamadas a la API siguen funcionando. Omítelo para añadir un número nuevo.

La fila toma el número que se vincule. Si otro teléfono escanea el código QR, o envías otro whatsapp_number con login_method=phone, ese whatsapp_client_id envía desde el nuevo número a partir de entonces, incluidos los mensajes que ya tenía en cola.

webhook_urlstringObligatorio para recibir el código QR

Tu URL http o https que recibe el código QR y las novedades de la conexión, de hasta 250 caracteres (las URL más largas fallan con HTTP 500). 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. Pide whatsapp_number; con un código QR, el valor se ignora.

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)

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,
  "login_method": "qr",
  "status": 1
}
CampoTipoDescripción
statusinteger1 si se creó la solicitud de conexión, 0 si falló.
messagestringWhatsapp Client Created si todo va bien; en caso contrario, el error.
whatsapp_client_idintegerID del número de WhatsApp. Úsalo como whatsapp_client en otras llamadas a la API. Solo aparece si la solicitud es correcta.
login_methodstringqr o phone, según lo usado en este intento. Solo aparece si la solicitud es correcta.

"status": 1 significa que la solicitud se creó, no que el número esté conectado. Volver a llamar a la API no acumula números:

  • Con un código QR y sin whatsapp_client_id, recibes el mismo whatsapp_client_id hasta que se escanee uno de sus códigos QR.
  • Con login_method=phone, un número que ya se había añadido pero no está conectado recibe su whatsapp_client_id existente.
  • Con whatsapp_client_id, ese número se reconecta.

Hasta que se escanea su primer código QR, el número aún no tiene número de teléfono: Listar números conectados y Estado de conexión devuelven un número vacío para él.

Errores#

MensajeHTTPCómo solucionarlo
login_method must be 'qr' or 'phone'400Envía qr, phone o no lo incluyas.
For login_method phone, whatsapp_number must be the full international number with country code and no leading 0, e.g. 919876543210400Envía el número con su código de país, como 919876543210, no 09876543210 ni 9876543210.
Auth Error200Envía client_id y api_key. También se devuelve cuando el cuerpo JSON no es válido.
Invalid Client Id403Envía client_id como número entero, por ejemplo 12345.
Auth Error: invalid api key400Comprueba que la clave existe, que no se ha eliminado y que pertenece a este client_id.
Higher Subscription Required200Tu plan no incluye esta API. Mejora tu plan.
WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit200Ya tienes tantos números conectados como permite tu plan. Desconecta uno o mejora tu plan.
Already Connected With Given Number200Con login_method=phone, este número ya está conectado en este espacio de trabajo. Con whatsapp_client_id, ese número ya está conectado. 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.
Invalid WhatsApp client400El whatsapp_client_id no existe, se eliminó o pertenece a otro espacio de trabajo. Omítelo para añadir un número nuevo.

Una solicitud que no sea POST devuelve un objeto vacío {} con HTTP 200.

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=...

Código de teléfono listo (con login_method=phone, se envía una sola vez):

status=pairing_code&whatsapp_client_id=678&pairing_code=K5EWPGY5

Número conectado, con el número que tiene la sesión iniciada, tal como lo indica WhatsApp:

status=connected&whatsapp_client_id=678&whatsapp_number=919876543210

Conexión fallida, por ejemplo porque el código QR no se escaneó o el código de teléfono no se introdujo a tiempo:

status=not_connected&whatsapp_client_id=678
CampoValores
statusqr_generated, pairing_code, connected o not_connected
whatsapp_client_idEl whatsapp_client_id que devolvió la API.
whatsapp_numberSolo con connected. El número vinculado con su código de país, como 919876543210. Úsalo para saber qué número se escaneó. Vacío en el raro caso de que WhatsApp no lo haya indicado.
pairing_codeSolo con pairing_code. El código de 8 caracteres que se escribe en WhatsApp. Muéstralo tal cual; no pasa nada si lleva espacios o un guion entre las dos mitades.
qr_imageSolo 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 hasta 10 segundos; si tu servidor es lento o no se puede acceder a él, ese evento se pierde, pero el intento de conexión continúa. 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: haz que tu código pueda ejecutarse más de una vez sin problemas, por si un evento llega dos veces.
  • 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 URL https. 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.
  • Comprueba el número tras un escaneo QR: el whatsapp_number del evento connected es el número que realmente se vinculó, que puede ser distinto del que esperabas.
  • Introduce el código de teléfono en unos tres minutos: cada intento da un solo código. Si caduca, recibes not_connected; vuelve a llamar a la API.
  • ¿No llega ningún código QR ni código de teléfono 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.