WhatsApp API con PHP: Tutorial Completo de Integración [2026]

Si desarrollais en PHP y necesitais conectar vuestra aplicación con WhatsApp, la Cloud API de Meta ofrece acceso directo a todo el ecosistema de WhatsApp Business mediante peticiones REST. En este tutorial vais a aprender cómo enviar mensajes, recibir notificaciones por webhook, gestionar templates y montar la base de un chatbot funcional -- todo con PHP nativo, cURL y Guzzle. No se trata de copiar snippets: se trata de entender la arquitectura para que podais adaptarla a vuestro proyecto. Si todavía no teneis claro qué es la API ni cómo encaja en el ecosistema, empezad por la guía de WhatsApp API para desarrolladores.
Qué Es WhatsApp API PHP {#que-es-whatsapp-api-php}
La WhatsApp API PHP es la combinación de la WhatsApp Cloud API oficial de Meta con el lenguaje PHP como cliente HTTP para consumirla. No existe un SDK oficial de Meta para PHP -- a diferencia de Python o Node.js --, lo que significa que la integración se realiza directamente contra la REST API mediante peticiones HTTP.
Esto tiene una ventaja clara: no dependeis de abstracciones de terceros. Trabajais directamente contra los endpoints de Meta, con control total sobre cabeceras, timeouts, reintentos y gestión de errores. En 2026, con la Cloud API en su versión estable v21.0, PHP sigue siendo una de las opciones más sólidas para integrar WhatsApp en aplicaciones Laravel, Symfony, WordPress o cualquier backend personalizado.
La API permite enviar mensajes de texto, templates aprobados, imágenes, documentos, ubicaciones y mensajes interactivos con botones. También permite recibir mensajes entrantes mediante webhooks y consultar el estado de entrega de cada mensaje enviado. Si quereis entender a fondo qué es la API de WhatsApp y cómo funciona, consultad qué es la WhatsApp API.
Requisitos Previos para la Integración {#requisitos-previos}
Antes de escribir código, necesitais tener preparado lo siguiente:
- PHP 7.4 o superior. Recomendado 8.1+ para aprovechar enums, fibers y mejoras de rendimiento.
- La extensión cURL habilitada en vuestra instalación de PHP. Es el motor HTTP nativo que usareis para las peticiones a la API.
- Composer instalado para gestionar dependencias. Lo necesitareis si optais por Guzzle en lugar de cURL nativo.
- Una cuenta de Meta Business verificada con acceso al panel de Meta Developer.
- Un access token válido. Para desarrollo usareis el token temporal del sandbox; para producción necesitareis un token de sistema permanente.
- Un número de teléfono registrado en la WhatsApp Business API, ya sea el de pruebas de Meta o vuestro número empresarial verificado.
- Un servidor con HTTPS para el endpoint del webhook. Meta no acepta conexiones sin SSL.
Para la configuración paso a paso de la cuenta de Meta y la obtención de credenciales, consultad cómo configurar la WhatsApp API.
Enviar Mensajes con cURL Nativo {#enviar-mensajes-curl}
La forma más directa de enviar un mensaje desde PHP es usar la extensión cURL. Sin dependencias externas, sin Composer, sin librerías. El endpoint de la Cloud API es https://graph.facebook.com/v21.0/{phone_number_id}/messages.
Para enviar un mensaje de texto plano, construis el payload JSON con cuatro campos obligatorios: messaging_product como "whatsapp", recipient_type como "individual", to con el número en formato internacional (por ejemplo, 34612345678) y un objeto text con el campo body.
Para enviar un template aprobado -- obligatorio cuando iniciais la conversación sin que el usuario haya escrito primero -- cambiais el type a "template" e incluís el nombre, idioma y componentes dinámicos:
$data = [
'messaging_product' => 'whatsapp',
'to' => $recipientPhone,
'type' => 'template',
'template' => [
'name' => 'confirmacion_pedido',
'language' => ['code' => 'es'],
'components' => [
[
'type' => 'body',
'parameters' => [
['type' => 'text', 'text' => 'Pedro'],
['type' => 'text', 'text' => '#12345']
]
]
]
]
];La respuesta de la API devuelve un message_id para rastrear el estado de entrega. Los códigos de error más habituales: 131047 (número no válido), 131026 (el usuario no tiene WhatsApp), 130429 (has superado el rate limit).
Enviar Mensajes con Guzzle HTTP {#enviar-mensajes-guzzle}
Si vuestro proyecto usa Composer -- especialmente en Laravel o Symfony --, Guzzle ofrece una interfaz más limpia con gestión automática de excepciones, middlewares y soporte para peticiones asíncronas.
Instalad Guzzle con Composer:
composer require guzzlehttp/guzzleEl mismo envío de mensaje con Guzzle:
La ventaja de Guzzle frente a cURL nativo va mas allá de la sintaxis. Podeis crear middlewares para logging automático de cada petición, reintentos con backoff exponencial ante errores 429, y gestión centralizada de la autenticación. En un proyecto Laravel, esto se integra directamente con el contenedor de servicios para inyectar el cliente configurado en cualquier servicio.
Recibir Mensajes con Webhooks en PHP {#recibir-webhooks}
Enviar mensajes es solo la mitad. Para recibir lo que vuestros usuarios escriben, necesitais un servidor de webhook -- un endpoint HTTP al que Meta envía notificaciones POST cada vez que ocurre un evento.
La configuración tiene dos fases. Primero, la verificación del webhook:
Segundo, la recepción de eventos entrantes. Cada mensaje llega como POST con un payload JSON estructurado:
Punto critico: responded con HTTP 200 antes de procesar la lógica de negocio. Si tardais más de 20 segundos, Meta reintenta el envío y acabais con mensajes duplicados. Delegad el procesamiento pesado a una cola -- Redis + worker, RabbitMQ, o incluso una tabla de base de datos con un cron que procese pendientes.
Para seguridad, verificad la firma X-Hub-Signature-256 que Meta incluye en cada petición:
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE_256'] ?? '';
$payload = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $payload, $appSecret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit;
}Mejores Prácticas y Errores Comunes {#mejores-practicas}
Tras trabajar con múltiples integraciones de WhatsApp API en PHP, estos son los patrones que marcan la diferencia entre un prototipo y un sistema de producción:
Gestión de tokens. No hagais hardcode del access token. Usad variables de entorno ($_ENV o getenv()) y rotad los tokens periódicamente. En Laravel, el fichero .env con la fachada config() es la forma correcta.
Rate limiting. La Cloud API permite 80 mensajes por segundo en el tier estándar. Si haceis envío masivo, implementad una cola con control de velocidad. Un patrón sencillo: insertar cada mensaje en una tabla con estado pending, y un cron job que procese N registros por minuto.
Gestión de errores. No os limiteis a capturar el HTTP status. La API devuelve códigos de error específicos en el JSON de respuesta. Mapeadlos a acciones concretas: reintento para errores temporales (429, 500), alerta para errores permanentes (131047, 131026), y log para todo.
Templates. Los templates de WhatsApp requieren aprobación previa por parte de Meta. El proceso tarda entre 1 y 48 horas. Planificad vuestros templates con antelación y tened siempre alternativas aprobadas. Si quereis profundizar en la creación de templates, revisad la guía sobre plantillas de mensaje en WhatsApp API.
Idempotencia. Si un webhook falla y Meta reenvía la notificación, podeis procesar el mismo mensaje dos veces. Almacenad el message_id de cada mensaje procesado y verificad antes de ejecutar la lógica de negocio.
Ejemplos Prácticos por Caso de Uso {#ejemplos-practicos}
E-commerce: Confirmación de Pedido
function sendOrderConfirmation(string $phone, string $name, string $orderId): void
{
$client = getWhatsAppClient();
$client->post("{$phoneNumberId}/messages", [
'json' => [
'messaging_product' => 'whatsapp',
'to' => $phone,
'type' => 'template',
'template' => [
'name' => 'order_confirmation',
'language' => ['code' => 'es'],
'components' => [
[
'type' => 'body',
'parameters' => [
['type' => 'text', 'text' => $name],
['type' => 'text', 'text' => $orderId]
]
]
]
]
]
]);
}Soporte: Respuesta Automática con Derivación
function handleSupportMessage(string $from, string $text): void
{
$keywords = ['factura', 'devolucion', 'problema', 'urgente'];
$needsHuman = false;
foreach ($keywords as $kw) {
if (stripos($text, $kw) !== false) {
$needsHuman = true;
break;
}
}
if ($needsHuman) {
sendTextMessage($from, 'Tu consulta requiere atención personalizada. Un agente te contactará en breves minutos.');
notifySupportTeam($from, $text);
} else {
sendTextMessage($from, 'Gracias por tu mensaje. Estamos procesando tu consulta.');
}
}SaaS: Notificación de Evento con Botones Interactivos
$data = [
'messaging_product' => 'whatsapp',
'to' => $phone,
'type' => 'interactive',
'interactive' => [
'type' => 'button',
'body' => ['text' => 'Tu periodo de prueba expira en 3 dias. ¿Quieres ampliar?'],
'action' => [
'buttons' => [
['type' => 'reply', 'reply' => ['id' => 'extend_trial', 'title' => 'Ampliar prueba']],
['type' => 'reply', 'reply' => ['id' => 'upgrade_plan', 'title' => 'Ver planes']],
['type' => 'reply', 'reply' => ['id' => 'no_thanks', 'title' => 'No, gracias']]
]
]
]
];Estos ejemplos cubren los tres patrones fundamentales: envío de templates para notificaciones proactivas, lógica de enrutamiento para soporte, y mensajes interactivos para engagement. Si quereis comparar la integración con otros lenguajes, consultad el tutorial de WhatsApp API con Python. Para entender las diferencias entre WhatsApp Business estándar y la API, revisad WhatsApp Business vs API.
Preguntas Frecuentes {#preguntas-frecuentes}
¿Se puede usar la API de WhatsApp con PHP sin librerías externas?
Si. La extensión cURL de PHP permite hacer peticiones HTTP directamente contra la Cloud API de Meta sin necesidad de Composer ni librerías como Guzzle. Es la forma más ligera de integrar WhatsApp en cualquier proyecto PHP, aunque para producción Guzzle ofrece mejor gestión de errores y middlewares.
¿Qué es Ultramsg y cómo se relaciona con la WhatsApp API PHP?
Ultramsg es un proveedor gateway de terceros que ofrece una API REST simplificada para enviar mensajes por WhatsApp. No usa la API oficial de Meta, sino una conexión no oficial basada en WhatsApp Web. Es más fácil de configurar pero tiene limitaciones de estabilidad, volumen y cumplimiento con las politicas de Meta. Para proyectos profesionales, la Cloud API oficial es la opción recomendada.
¿Cuánto cuesta usar la WhatsApp Business API con PHP?
La Cloud API de Meta es gratuita en cuanto a acceso. El coste viene por conversación: cada ventana de 24 horas con un usuario tiene un precio que depende de la categoría (marketing, utilidad, autenticación o servicio) y del país. En España, una conversación de servicio iniciada por el usuario cuesta aproximadamente 0,0477 euros. Para un desglose completo, consultad la guía sobre precios de la WhatsApp API.
¿Es mejor usar cURL o Guzzle para integrar WhatsApp API en PHP?
Depende del contexto. cURL nativo funciona sin dependencias y es ideal para scripts simples o entornos sin Composer. Guzzle es superior para aplicaciones empresariales: ofrece reintentos automáticos, middlewares de logging, peticiones asíncronas y se integra nativamente con Laravel y Symfony. Si vuestro proyecto ya usa Composer, Guzzle es la elección lógica.
¿Cómo recibo mensajes de WhatsApp en mi servidor PHP?
Necesitais configurar un webhook -- un endpoint HTTPS en vuestro servidor que Meta llama cada vez que un usuario os escribe. El endpoint debe pasar la verificación inicial (GET con challenge) y procesar las notificaciones POST con el payload JSON de los mensajes entrantes. Es fundamental responder HTTP 200 inmediatamente y procesar la lógica de forma asíncrona.
Cómo GuruSup Simplifica Tu Integración WhatsApp {#gurusup-cta}
Todo lo que habeis visto en este tutorial -- enviar mensajes, recibir webhooks, gestionar templates, construir lógica de enrutamiento -- es la base técnica. Pero llevar esto a producción implica mantener servidores, gestionar colas, implementar analítica, construir una bandeja multi-agente y diseñar el escalado a humanos.
Funcionalidades Clave de GuruSup
GuruSup convierte toda esta arquitectura en una plataforma lista para producción. En lugar de mantener vuestro propio servidor de webhooks y escribir cientos de líneas de PHP, obteneis:
- Agentes IA conectados directamente a WhatsApp Business API que resuelven consultas de soporte automáticamente, entendiendo lenguaje natural y accediendo a vuestra base de conocimiento.
- Bandeja multi-agente donde vuestro equipo gestiona conversaciones que requieren intervención humana, con contexto completo del historial.
- Integraciones nativas con CRM, bases de datos y herramientas de negocio, sin escribir código de conexión.
- Analítica en tiempo real sobre tiempos de respuesta, tasa de resolución y satisfacción del cliente.
Cómo Empezar con GuruSup
Si lo que buscais es aprender la mecánica de la API, este tutorial os da las bases. Si lo que necesitais es atención al cliente automatizada en WhatsApp funcionando esta semana, GuruSup resuelve en minutos lo que desarrollar desde cero lleva semanas.
Prueba GuruSup gratis: automatiza tu soporte al cliente con agentes IA en WhatsApp. Sin configurar servidores, sin gestionar webhooks, sin mantener código.
Artículos relacionados

WhatsApp Multiagente: Atiende con Varios Agentes [2026]
Descubre todo sobre whatsapp multiagente: que es, como funciona y como configurarlo. Guia completa actualizada en 2026 con ejemplos practicos.

WhatsApp Cloud API: Guia Completa de Meta para Empresas [2026]
Descubre todo sobre whatsapp cloud api: que es, como funciona y como configurarlo. Guia completa actualizada en 2026 con ejemplos practicos.

Lista de Difusión WhatsApp: Guía Completa y Trucos [2026]
Descubre todo sobre lista de difusion whatsapp: qué es, cómo funciona y cómo configurarlo. Guía completa actualizada en 2026 con ejemplos prácticos.