Envía mensajes de WhatsApp con PHP
Envía textos, imágenes y archivos de WhatsApp desde tu sitio o app en PHP, desde tu propio número vinculado a WbizTool como WhatsApp Web. Solo necesitas la extensión cURL de PHP y un POST a un endpoint documentado.
Prueba gratuita: 50 mensajes en cualquier periodo de 30 días, sin tarjeta.
Cómo funciona
Obtén tu clave API y vincula tu número
Regístrate y vincula tu número de WhatsApp en la página Números de WhatsApp con un código QR o un código de vinculación, igual que WhatsApp Web. En Configuración → Claves API, crea una clave y copia tu Client ID (la guía de claves API de abajo muestra dónde). El ID que aparece en la tarjeta del número (por ejemplo, ID 678) es tu
whatsapp_client.Prepara la petición
Pon
client_id,api_key,whatsapp_client, el número de teléfono ymsgen un array. Envíalo como JSON con la extensión cURL de PHP, o con cualquier cliente HTTP que ya uses, con los mismos campos.Envía el mensaje
Haz un POST a
https://wbiztool.com/api/v1/send_msg/. Una respuesta con"status": 1y unmsg_idsignifica que el mensaje está en cola en tu número.Comprueba que salió
Pasa una URL de
webhookpara que te avisen cuando el mensaje se envíe o falle, o consulta el endpoint de estado del mensaje con elmsg_id.
Ejemplos de código en PHP
<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'country_code' => '91',
'phone' => '9876543210',
'msg' => 'Hi Aman, your order #4821 has shipped and will arrive on Thursday.',
];
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
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');
}{"status": 1, "message": "Created", "msg_id": 9817263}<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
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,
'country_code' => '91',
'phone' => '9876543210',
'img_url' => 'https://example.com/offers/diwali-sale.jpg',
'msg' => 'Our Diwali sale starts today 🎉',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);<?php
$ch = curl_init('https://wbiztool.com/api/v1/send_msg/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
// An array body (not json_encode) makes cURL send multipart/form-data.
CURLOPT_POSTFIELDS => [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 2,
'country_code' => '91',
'phone' => '9876543210',
'msg' => 'Your invoice for order #4821 is attached.',
'file_name' => 'invoice-4821.pdf',
'file' => new CURLFile('/path/to/invoice-4821.pdf', 'application/pdf', 'invoice-4821.pdf'),
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 120,
]);
echo curl_exec($ch);
curl_close($ch);<?php
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'whatsapp_client' => 678,
'msg_type' => 0,
'country_code' => '91',
'phone' => '9876543210',
'msg' => 'Hi Aman, a reminder that your appointment is today at 11:30 AM.',
'date' => '24/12/2026',
'time' => '09:00',
'timezone' => 'Asia/Kolkata',
];
$ch = curl_init('https://wbiztool.com/api/v1/schedule_msg/');
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 'Scheduled with msg_id ' . $result['msg_id'];
} else {
echo 'Failed: ' . ($result['message'] ?? 'no message in response');
}<?php
$msgId = 9817263;
$payload = [
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
];
$ch = curl_init("https://wbiztool.com/api/v1/message/status/{$msgId}/");
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['message'] ?? '') === 'Unknown message id') {
echo 'No message with this ID in your workspace';
} elseif (!isset($result['status_text'])) {
echo 'Request failed: ' . ($result['message'] ?? 'no message in response');
} elseif ($result['status'] === 1) {
echo 'Sent';
} elseif ($result['status'] === 2) {
echo 'Failed: ' . $result['error'];
} else {
echo 'Status: ' . $result['status_text'];
}<?php
// webhook.php – WbizTool posts form fields, so they arrive in $_POST.
$msgId = $_POST['msg_id'] ?? '';
$status = $_POST['status'] ?? ''; // SENT, FAILED, CANCELLED or EXPIRED
error_log("WbizTool message $msgId: $status");
http_response_code(200);Lo que puedes hacer
Sin librerías que instalar
Los ejemplos solo usan la extensión cURL de PHP. La API acepta JSON, campos de formulario, o multipart form data cuando subes un archivo.
Textos, imágenes y archivos
Pon
msg_typeen 0 para texto, 1 para una imagen o 2 para un archivo. Indica unaimg_urlofile_urlpública, o sube el archivo conCURLFile.Programa para más tarde
Haz un POST a
/api/v1/schedule_msg/condate(dd/mm/aaaa),time(HH:MM) y unatimezonecomoAsia/KolkataoAmerica/New_York.Webhooks para cada estado
Pasa
webhooky tu script recibe un POST codificado como formulario: lee$_POST['msg_id']y$_POST['status'](SENT,FAILED,CANCELLEDoEXPIRED).¿Usas WordPress? Usa el plugin
El plugin de WbizTool para WordPress envía mensajes de WhatsApp para pedidos de WooCommerce, reservas de WP Amelia y formularios de Contact Form 7, sin código.
Conviene saber
"status": 1significa que el mensaje está en cola, no que se entregó. Sent es el estado final de éxito; la API no informa si el mensaje se entregó o se leyó.- Los errores al enviar un mensaje llegan con HTTP 400 (429 en el límite diario); los errores al programar un mensaje suelen llegar con HTTP 200 y
"status": 0, así que decodifica siempre el cuerpo y compruebastatus. - Para subir un archivo, pasa un array a
CURLOPT_POSTFIELDS, nojson_encode, para que cURL envíemultipart/form-datacon el archivo en un campo llamadofile. - Guarda la clave API en tu servidor, por ejemplo en una variable de entorno. Cualquiera que la tenga puede enviar desde tus números, así que nunca la pongas en JavaScript del navegador, en una app móvil ni en código que publiques.
- La prueba gratuita incluye 50 mensajes en cualquier periodo de 30 días y 1 número, sin tarjeta. Los planes de pago empiezan en $25 al mes en EE. UU. (tu precio aparece en Precios) y envían mensajes ilimitados con uso justo: hasta 1.000 al día por número.
- Los mensajes salen desde tu propio número de WhatsApp, así que se aplican las reglas de WhatsApp: escribe a personas que esperan saber de ti.
Preguntas frecuentes
- ¿Hay un SDK de PHP?
- No hay un paquete oficial de PHP, y no lo necesitas: cada llamada es un solo POST con la extensión cURL, como se muestra arriba. Cualquier cliente HTTP de PHP funciona con la misma URL y los mismos campos.
- ¿Cómo envío una factura en PDF desde PHP?
- Usa
msg_type2. Indica unafile_urlpública, o sube el archivo connew CURLFile(...)en un campo llamadofile. Indicafile_namecon su extensión, comoinvoice-4821.pdf. - ¿Cómo sé si el mensaje se envió?
- Una respuesta con
"status": 1y unmsg_idsignifica que está en cola. Pasa una URL dewebhookpara recibir un POST conSENT,FAILED,CANCELLEDoEXPIRED, o llama al endpoint de estado del mensaje con elmsg_id. Sent es el estado final: la API no informa si se entregó o se leyó. - ¿En qué formato envío el número de teléfono?
- Envía el número con su código de país (919876543210), o sin él (9876543210) junto con
country_code(91). Los espacios, el +, los guiones y los paréntesis se quitan por ti, así que +91 98765-43210 también funciona. - ¿Necesito la API de WhatsApp Business o la aprobación de Meta?
- No. WbizTool envía desde tu propio número de WhatsApp o WhatsApp Business, vinculado como WhatsApp Web. No hay aprobación de Meta ni plantillas de mensajes que aprobar.
- ¿Se paga por mensaje?
- No. La prueba gratuita incluye 50 mensajes en cualquier periodo de 30 días. Los planes de pago envían mensajes ilimitados con uso justo, hasta 1.000 al día por número: Lite $25, Standard $59 y Advanced $149 al mes en EE. UU.; la página de Precios muestra el precio de tu país.
Lee las guías
- API de envío de mensajes
- API para programar mensajes
- API de estado del mensaje
- Plugin de WordPress
- Claves API y Client ID
- Conecta tu número de WhatsApp
Relacionado
- WordPressMensajes de WhatsApp para pedidos de WooCommerce, Contact Form 7 y WP Amelia.
- cURLEnvía, programa y sigue mensajes de WhatsApp con un solo comando cURL.
- PythonEnvía mensajes de WhatsApp desde Python con el cliente oficial o simplemente con requests.
- Recordatorios de pagoRecordatorios de pago mensuales o puntuales desde tu propio número, con la factura en PDF.
Envía hoy tu primer mensaje automatizado de WhatsApp
Crea una cuenta, escanea el código QR y envía un mensaje en menos de cinco minutos.
Empieza gratisPlanes de pago desde $25 al mes en EE. UU. Precios
