API de mensajería
API para enviar mensajes a un grupo de WhatsApp
Envía un texto, una imagen o un documento de WhatsApp a un grupo de WhatsApp del que forme parte tu número conectado. Úsala para anuncios del equipo, novedades para tu comunidad y notificaciones de difusión.
https://wbiztool.com/api/v1/send_msg/group/Cuerpo: JSON, campos de formulario o multipart/form-data al subir un archivo
El mensaje se pone en cola y se envía al grupo desde tu número de WhatsApp. La respuesta te da un msg_id que puedes usar para consultar su estado.
Ejemplo rápido#
curl -X POST https://wbiztool.com/api/v1/send_msg/group/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"group_name": "Sales Team Mumbai",
"msg": "Reminder: *weekly review* starts at 4 PM today."
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/group/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 0,
"group_name": "Sales Team Mumbai",
"msg": "Reminder: *weekly review* starts at 4 PM today.",
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("status") == 1:
print("Queued with msg_id", result["msg_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/send_msg/group/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 0,
group_name: "Sales Team Mumbai",
msg: "Reminder: *weekly review* starts at 4 PM today.",
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.status === 1) {
console.log("Queued with msg_id", result.msg_id);
} else {
console.error("Failed:", result.message);
}<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'group_name' => 'Sales Team Mumbai',
'msg' => 'Reminder: *weekly review* starts at 4 PM today.',
];
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/group/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['status'] ?? 0) === 1) {
echo 'Queued with msg_id ' . $result['msg_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no response');
}Sustituye 12345, YOUR_API_KEY y 678 por tus propios valores. Consulta Autenticación para saber dónde encontrarlos.
Parámetros de la solicitud#
Autenticación
client_idintegerobligatorioTu ID de cliente de la API, de Configuración → Claves API.
api_keystringobligatorioTu clave API, de esa misma página.
whatsapp_clientintegerObligatorio si el propietario tiene más de un número conectadoID del número de WhatsApp desde el que se envía, de la configuración de WhatsApp. Debe ser un número que pertenezca al propietario del espacio de trabajo. Si lo omites y el propietario tiene exactamente un número conectado, se usa ese número.
Grupo y mensaje
group_namestringobligatorioNombre del grupo de WhatsApp, escrito exactamente como aparece en WhatsApp. Envíalo como cadena. Un número JSON como
2024devuelve una página de error HTML (HTTP500). Consulta Cómo se encuentra el grupo.msg_typeintegeropcional0texto (predeterminado),1imagen,2archivo o documento.msgstringObligatorio cuando msg_type es 0Texto del mensaje. En imágenes y archivos es el pie de foto y puede estar vacío. El formato de WhatsApp funciona:
*bold*,_italic_,~strikethrough~. También se aceptamessagecomo alias.
Imágenes y archivos
img_urlstringObligatorio cuando msg_type es 1 y no se sube ningún archivoURL pública
httpohttpsde la imagen.file_urlstringObligatorio cuando msg_type es 2 y no se sube ningún archivoURL pública
httpohttpsdesde la que se puede descargar el archivo directamente.filefileopcionalSube la imagen o el archivo en lugar de indicar una URL. Envía la solicitud como
multipart/form-datacon el campo llamadofile.file_namestringopcionalNombre de archivo que ve el grupo, como
price-list.pdf. Su extensión determina cómo se envía el archivo, así que incluye una. Se envía en minúsculas, los caracteres como& : ? * $ ;se reemplazan por_y se recorta a 150 caracteres. Si lo omites, el nombre se toma de la URL o del archivo subido.
Opciones de entrega
expire_after_secondsintegeropcionalMarca el mensaje como caducado (estado
4) si no se ha enviado en este número de segundos, por ejemplo3600para una hora. Un proceso en segundo plano lo hace al menos 30 segundos después del plazo, así que no confíes en él para plazos de menos de un minuto.webhookstringopcionalURL que recibe un
POSTcuando el mensaje se envía o falla. El contenido es el mismo que en Enviar mensaje.
Las imágenes y los archivos siguen las mismas reglas que en Enviar mensaje: las URL se descargan cuando llamas a la API (hasta 100 MB). Al enviar el mensaje, fallan las imágenes de más de 16 MB y los videos de más de 64 MB, el audio WAV y OGG no es compatible, y a los archivos (msg_type 2) sin una extensión admitida se les añade .pdf, incluidos los subidos. Los nombres de archivo se envían en minúsculas. Consulta Enviar imágenes y archivos para ver la lista completa de extensiones y errores.
Para subir un archivo, usa los ejemplos multipart de Enviar mensaje, cambiando la URL por /api/v1/send_msg/group/ y phone/country_code por group_name.
curl -X POST https://wbiztool.com/api/v1/send_msg/group/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 1,
"group_name": "Sales Team Mumbai",
"img_url": "https://example.com/reports/weekly-sales.png",
"msg": "This week'\''s sales summary"
}'import requests
response = requests.post(
"https://wbiztool.com/api/v1/send_msg/group/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"whatsapp_client": 678,
"msg_type": 1,
"group_name": "Sales Team Mumbai",
"img_url": "https://example.com/reports/weekly-sales.png",
"msg": "This week's sales summary",
},
timeout=60,
)
print(response.json())// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v1/send_msg/group/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
whatsapp_client: 678,
msg_type: 1,
group_name: "Sales Team Mumbai",
img_url: "https://example.com/reports/weekly-sales.png",
msg: "This week's sales summary",
}),
});
console.log(await response.json());<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/group/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 1,
'group_name' => 'Sales Team Mumbai',
'img_url' => 'https://example.com/reports/weekly-sales.png',
'msg' => "This week's sales summary",
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);Cómo se encuentra el grupo#
Wbiztool no comprueba el nombre del grupo cuando llamas a la API. Cuando se está enviando el mensaje, Wbiztool busca group_name en tus chats de WhatsApp y abre el primer resultado. Por eso:
- Tu número de WhatsApp conectado debe ser miembro del grupo.
- Usa el nombre completo del grupo exactamente como lo muestra WhatsApp, incluidos emojis y signos de puntuación. Los espacios al principio y al final se ignoran.
- Haz que el nombre sea único. Un nombre corto o parcial puede coincidir con otro chat que aparezca antes en la búsqueda.
- Si no hay ninguna coincidencia, si en el grupo solo pueden enviar mensajes los administradores y tu número no es administrador, o si solo los administradores de la comunidad pueden publicar, el mensaje falla con el error
Group not found. - Si tu número ha salido del grupo, el mensaje falla con el error
Group member blocked.
Los problemas con el grupo no aparecen en la respuesta de la API. Usa un webhook o Estado del mensaje para saber si el mensaje se envió.
Usar el cliente oficial#
El cliente de Python llama a este endpoint por ti.
from wbiztool_client import WbizToolClient
client = WbizToolClient(api_key="YOUR_API_KEY", client_id=12345)
result = client.send_message_to_group(
group_name="Sales Team Mumbai",
msg="Reminder: weekly review starts at 4 PM today.",
whatsapp_client=678,
)
print(result)Los errores lanzan requests.HTTPError. Lee el motivo con e.response.json()["message"].
Respuesta#
Una solicitud correcta devuelve HTTP 200:
{
"status": 1,
"message": "Created",
"msg_id": 9817263
}
| Campo | Tipo | Descripción |
|---|---|---|
status | integer | 1 si el mensaje se puso en cola, 0 si la solicitud falló. |
message | string | Created si todo va bien; en caso contrario, el error. |
msg_id | integer | ID del mensaje en cola. Guárdalo para consultar el estado más adelante. Solo aparece si la solicitud es correcta. |
"status": 1 significa que el mensaje se puso en cola, no que haya llegado al grupo. Usa un webhook o Estado del mensaje para confirmar que se envió.
Errores#
Los errores devuelven HTTP 400 con status con valor 0:
{ "status": 0, "message": "Group Name cant be null" }
| Mensaje | Cómo solucionarlo |
|---|---|
Auth Error - Please send correct API key and Client id | Envía un api_key que no esté vacío. |
Invalid client id. | Envía client_id como número. |
Auth Error: invalid api key | Comprueba que la clave existe, que no se ha eliminado y que pertenece a este client_id. |
Group Name cant be null | Añade group_name. |
Msg cant be null | Los mensajes de texto (msg_type 0) necesitan msg. |
Image Url Can't be null | Para msg_type 1, envía img_url o sube un file. |
File Url Can't be null | Para msg_type 2, envía file_url o sube un file. |
Invalid file url, Can't download / Invalid file url | La URL no es pública, se agotó el tiempo de espera o el archivo supera los 100 MB. |
Invalid whatsapp client None | Ese ID de whatsapp_client no pertenece al propietario del espacio de trabajo. Consulta el aviso anterior. |
Invalid whatsapp client id. | Envía whatsapp_client. Es obligatorio, salvo que el propietario tenga exactamente un número conectado. |
Not enough credits | Tu plan no tiene mensajes disponibles. |
Demo Account can not access apis | Usa una cuenta normal. |
Account Disabled | Tu cuenta está desactivada. Contacta con soporte. |
Invalid JSON format: … | El cuerpo JSON no es válido, a menudo por una coma final o un salto de línea sin escapar en msg. Usa \n para los saltos de línea. |
Consejos#
- Prueba primero el nombre: envía un texto corto al grupo y revisa Estado del mensaje antes de automatizar nada.
- Grupos renombrados: si alguien cambia el nombre del grupo en WhatsApp, actualiza también
group_nameen tu integración. - Tipos de mensaje: solo
0,1y2son valores válidos paramsg_type. Cualquier valor que no sea un número entero devuelve una página de error HTML (HTTP500) en lugar de JSON. - Varios grupos a la vez: Enviar a varios números acepta nombres de grupo mezclados con números de teléfono en una sola solicitud.
