Parte 1: Si no tiene tiempo para leer
Este ejemplo de implementación del bot detalla en profundidad las funcionalidades más utilizadas. Esto te permitirá adaptar el código fuente a tus tareas y necesidades, o tomarlo como base para crear cualquier otra integración. Hemos dejado comentarios cerca de cada función para facilitarte la comprensión del código. En el código fuente del bot encontrarás las siguientes funcionalidades:
- Responder a un comando desconocido, esto podría ser una instrucción o tu mensaje de bienvenida;
- Enviar mensaje regular;
- Enviar imagen;
- Enviar archivo;
- Enviar video;
- Enviar contacto (vCard);
- Enviar producto;
- Crear nuevo grupo, enviar una invitación y enviar mensaje al grupo;
- Recibir y leer mensajes entrantes;
Para que el bot funcione, NO ES NECESARIO que el teléfono esté encendido o en línea. ¡Conecta el número y prueba la integración cómodamente!
Y si necesitas ayuda, solo escríbenos en el chat de soporte en cualquier página del sitio.
Si estás decidiendo qué proveedor elegir, o no entiendes bien la diferencia entre WhatsApp Business API y WhatsApp API, te será útil estudiar nuestra guía donde compararemos proveedores, funcionalidades, precios y soluciones actuales. Esto será útil para que todos puedan decidir qué API y qué proveedor elegir. Así que sumérgete en nuestro artículo "Cómo elegir WhatsApp API. Comparación."
Y si necesitas ayuda, solo escríbenos en el chat de soporte en cualquier página del sitio.
Si estás decidiendo qué proveedor elegir, o no entiendes bien la diferencia entre WhatsApp Business API y WhatsApp API, te será útil estudiar nuestra guía donde compararemos proveedores, funcionalidades, precios y soluciones actuales. Esto será útil para que todos puedan decidir qué API y qué proveedor elegir. Así que sumérgete en nuestro artículo "Cómo elegir WhatsApp API. Comparación."
¿Por qué deberías crear un Chatbot de WhatsApp?
En el mundo moderno, WhatsApp no es simplemente la plataforma líder de mensajería instantánea con miles de millones de usuarios, sino también una herramienta esencial para los negocios. Automatizar las funciones de mensajería ofrece una serie de ventajas estratégicas: desde soporte al cliente instantáneo hasta marketing efectivo y recopilación de feedback. En este contexto, crear un bot para WhatsApp se convierte en un paso clave para optimizar los procesos empresariales y establecer un contacto directo con su audiencia.
En esta guía, proporcionaremos instrucciones paso a paso para crear un bot de WhatsApp en PHP. Aprenderá:
- Cómo trabajar con la API de WhatsApp;
- Entender las complejidades de crear chatbots en PHP;
- Automatizar y mejorar la interacción con sus clientes;
Preparándose para comenzar - Lo que necesitarás
Antes de pasar a la parte práctica de crear un bot de WhatsApp en PHP, asegúrese de tener todas las herramientas y recursos necesarios.
- Cuenta en Whapi.Cloud. Para trabajar con la API de WhatsApp necesitarás una cuenta en Whapi.Cloud. Este proveedor ofrece a los desarrolladores métodos para automatizar WhatsApp y documentación de la API. Actualmente, Whapi.Cloud es el proveedor más funcional y estable que ofrece acceso económico a la API de WhatsApp. Tras registrarte, recibirás un canal gratuito con una clave única de token API que permitirá a tu aplicación/integración en PHP interactuar con la mensajería.
- Servidor con PHP o desarrollo local. Si decides probar tu bot localmente y quieres que interactúe con WhatsApp a través de un Webhook, puedes usar herramientas como ngrok. Esta aplicación crea túneles seguros a tu servidor local, proporcionando URLs públicas temporales que puedes usar para pruebas. Para que el servidor llame a nuestro script al recibir nuevos mensajes, necesitamos especificar la URL del WebHook en la configuración del canal. Hablaremos más sobre esto más adelante.
Trabajando con la API de WhatsApp a través de Whapi.Cloud
Regístrese y vaya a la página de su canal. Al registrarse por primera vez, obtendrá 5 días de acceso completo al API, lo cual es suficiente para probar todos los métodos del API. Si necesita más tiempo, contacte con el soporte del servicio a través del widget de chat en línea y le eliminarán las restricciones para facilitar las pruebas.
El siguiente paso será conectar su número de WhatsApp. No se preocupe, puede desconectarse en cualquier momento, pero es necesario para que pueda probar su implementación. Vaya a su perfil, busque su primer canal llamado Default Channel y haga clic en él. Lo primero que verá será un código QR y unas breves instrucciones. Abra WhatsApp en su dispositivo móvil, vaya a Configuración -> Dispositivos vinculados -> Conectar dispositivo -> Escanear código QR.
Durante la conexión, en los pasos dos y tres, tendrá la oportunidad de configurar su canal. Asigne un nombre al canal para su comodidad (por cierto, nuestra API detectará automáticamente si está usando la versión regular o la versión de negocios con funciones ampliadas). A continuación, estarán disponibles las configuraciones de webhook y otros parámetros a su elección. Sin embargo, puede realizar estas acciones más tarde y omitir esta etapa.
Después de activar el canal, busque su token API en la sección de límites. Este token es crucial para la autenticación al acceder al API. Por lo general, se envía en los encabezados de las solicitudes como un Bearer Token o como un parámetro, dependiendo de cómo acceda al API.
La API de Whapi.Cloud ofrece muchos métodos para interactuar con WhatsApp, permitiéndole realmente automatizar las principales características y funciones del mensajero. En la página del canal, puede explorar y probar todos los métodos disponibles. Se le proporciona un hub especializado para desarrolladores, donde cada función está acompañada de ejemplos de código y la capacidad de probar in situ, mostrando los resultados y respuestas del servidor. Esto simplifica y acelera enormemente el proceso de integración. ¡Le encantará! Una de las ventajas de Whapi.Cloud es la facilidad y rapidez de conexión, lo que le permite comenzar a interactuar con WhatsApp en solo unos minutos.
Después de activar el canal, busque su token API en la sección de límites. Este token es crucial para la autenticación al acceder al API. Por lo general, se envía en los encabezados de las solicitudes como un Bearer Token o como un parámetro, dependiendo de cómo acceda al API.
La API de Whapi.Cloud ofrece muchos métodos para interactuar con WhatsApp, permitiéndole realmente automatizar las principales características y funciones del mensajero. En la página del canal, puede explorar y probar todos los métodos disponibles. Se le proporciona un hub especializado para desarrolladores, donde cada función está acompañada de ejemplos de código y la capacidad de probar in situ, mostrando los resultados y respuestas del servidor. Esto simplifica y acelera enormemente el proceso de integración. ¡Le encantará! Una de las ventajas de Whapi.Cloud es la facilidad y rapidez de conexión, lo que le permite comenzar a interactuar con WhatsApp en solo unos minutos.
¿Qué es Webhook y cómo lo configuro?
Su bot de WhatsApp y nuestra API deben comunicarse, de modo que cuando algo cambia en un sistema, el otro sistema esté informado. Por ejemplo, para rastrear cambios en el estado de los mensajes, como "enviado", "entregado" y "leído".
¡Aquí es donde entra en juego el Webhook! Un Webhook configurado permite que su servidor sea informado inmediatamente sobre eventos específicos. Según su configuración, podrá recibir notificaciones sobre mensajes, su estado actual, el estado del canal, el teléfono, llamadas perdidas, etc. La principal diferencia de Whapi.Cloud es su flexibilidad en la configuración y gestión de webhooks. Podrá establecer varios hooks diferentes para cualquier evento. Y las diversas opciones adicionales, como Auto Download o Mode Webhook, facilitarán su trabajo.
Hemos explorado todos los matices del trabajo con webhooks en más detalle en nuestra base de conocimientos: Ver artículo sobre webhooks
Vaya a la configuración de su canal a través del botón en la esquina superior derecha. Al principio, verá la sección de webhooks. Proporcione la dirección URL de su servidor para recibir notificaciones. Si es necesario, agregue webhooks adicionales, seleccione el Modo y el modo de operación del hook. Cuando recibe un mensaje, se envía una solicitud POST con información sobre el mensaje a la URL que proporcionó. Esto permite que su bot analice los mensajes entrantes y responda adecuadamente. Puede configurar webhooks a través de la interfaz en su panel personal o programáticamente a través de la API (método /Update channel settings/). Veremos cómo trabajar con la información entrante y procesarla más adelante.
Creando la base de un bot en PHP
Enviar y recibir mensajes
En primer lugar, vamos a definir la estructura de su proyecto. Instala Composer (si aún no lo has hecho), Inicializa el proyecto con "composer init", instala las dependencias y la generación del autoloader. Tendrás una carpeta vendor con el autoloader. Ahora puedes conectar el autoloader de Composer al principio de tu archivo index.php. Después de estos pasos básicos, tu proyecto estará listo para su posterior desarrollo.
Vamos a crear el directorio raíz public: aquí es donde se ubicará el ejecutable principal (por ejemplo, index.php), config.php (para almacenar configuraciones, como tu clave API) y la carpeta "files" (para almacenar los archivos que enviarás).
Como recordatorio, el código fuente completo de este proyecto puede descargarse de GitHub: https://github.com/Whapi-Cloud/php-whatsapp-chatbot
config.php
return [
// API endpoint URL
"apiUrl" => "https://gate.whapi.cloud",
// API token from your channel
"token" => "YOUR CHANNEL TOKEN",
// The ID of the group to which we will send the message. Use to find out the ID: https://whapi.readme.io/reference/getgroups
"group" => '[email protected]',
// The ID of the product we will send for the example. Create a product in your WhatsApp and find out the product ID: https://whapi.readme.io/reference/getproducts
"product" => '6559353560856703',
// Bot`s URL. Webhook Link to your server. At ( {server link}/messages ), when POST is requested, processing occurs in index.php
"botUrl" => "https://yoursite.com/messages"
];
index.php
require '../vendor/autoload.php';
use GuzzleHttp\Client;
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
// Don't forget to put your token in config.php
$config = require './config.php';
$app = new App();
$client = new Client([
'base_uri' => $config['apiUrl']
]);
// Commands for example bot
const COMMANDS = [
'TEXT' => 'Simple text message',
'IMAGE' => 'Send image',
'DOCUMENT' => 'Send document',
'VIDEO' => 'Send video',
'CONTACT' => 'Send contact',
'PRODUCT' => 'Send product',
'GROUP_CREATE' => 'Create group',
'GROUP_TEXT' => 'Simple text message for the group',
'GROUPS_IDS' => 'Get the id\'s of your three groups'
];
// Url files for example
const FILES = [
'IMAGE' => './files/file_example_JPG_100kB.jpg',
'DOCUMENT' => './files/file-example_PDF_500_kB.pdf',
'VIDEO' => './files/file_example_MP4_480_1_5MG.mp4',
'VCARD' => './files/sample-vcard.txt'
];
function sendWhapiRequest($endpoint, $params = [], $method = 'POST')
{
global $config, $client;
$url = $config['apiUrl'] . '/' . $endpoint;
$options = [
'headers' => [
'Authorization' => 'Bearer ' . $config['token'],
],
];
if ($params && count($params) > 0) {
if ($method === 'GET') {
$url .= '?' . http_build_query($params);
} else {
if(isset($params['media'])){
$options['multipart'] = toFormData($params);
}else{
$options['headers']['Content-Type'] = 'application/json';
$options['body'] = json_encode($params);
}
}
}
echo '$options: ' . print_r($options, true);
$response = $client->request($method, $url, $options);
$json = json_decode($response->getBody()->getContents(), true);
echo 'Whapi response: ' . print_r($json, true);
return $json;
}
function toFormData($params)
{
$multipart = [];
foreach ($params as $name => $contents) {
$multipart[] = ['name' => $name, 'contents' => $contents];
}
return $multipart;
}
// Call this function if you want to setup a webhook through the API. In this example it is not called: you will need to go to the channel settings in your personal cabinet and set the webhook link like {link to your server}/messages
function setHook()
{
global $config;
if ($config['botUrl']) {
sendWhapiRequest('settings', [
'webhooks' => [
[
'url' => $config['botUrl'],
'events' => [
[
'type' => 'messages',
'method' => 'post'
]
],
'mode' => 'body'
]
]
], 'PATCH');
}
}
$app->get('/', function (Request $request, Response $response) {
return $response->write('Bot is running');
});
$app->post('/messages', function (Request $request, Response $response) use ($config) {
$data = json_decode($request->getBody(), true);
$messages = $data['messages'] ?? [];
foreach ($messages as $message) {
if ($message['from_me']) {
continue;
}
$sender = ['to' => $message['chat_id']];
$endpoint = 'messages/text';
$textBody = trim($message['text']['body'] ?? '');
$commandIndex = is_numeric($textBody) ? (int)$textBody - 1 : null;
$commands = array_keys(COMMANDS);
$command = $commands[$commandIndex] ?? null;
switch ($command) {
case 'TEXT':
$sender['body'] = 'Simple text message';
break;
case 'IMAGE':
$sender['caption'] = 'Text under the photo.';
$sender['media'] = fopen(FILES['IMAGE'], 'r');
$endpoint = 'messages/image';
break;
case 'DOCUMENT':
$sender['caption'] = 'Text under the document.';
$sender['media'] = fopen(FILES['DOCUMENT'], 'r');
$endpoint = 'messages/document';
break;
case 'VIDEO':
$sender['caption'] = 'Text under the video.';
$sender['media'] = fopen(FILES['VIDEO'], 'r');
$endpoint = 'messages/video';
break;
case 'CONTACT':
$sender['name'] = 'Whapi Test';
$sender['vcard'] = file_get_contents(FILES['VCARD']);
$endpoint = 'messages/contact';
break;
case 'PRODUCT':
// Replace with your product ID
$endpoint = "business/products/{$config['product']}";
break;
case 'GROUP_CREATE':
$groupSettings = [
'subject' => 'Whapi.Cloud Test',
'participants' => [$message['from']]
];
$groupResponse = sendWhapiRequest('groups', $groupSettings, 'POST');
$sender['body'] = $groupResponse['group_id'] ? "Group created. Group id: {$groupResponse['group_id']}" : 'Error';
$endpoint = 'messages/text';
break;
case 'GROUP_TEXT':
$sender['to'] = $config['group'];
$sender['body'] = 'Simple text message for the group';
break;
case 'GROUPS_IDS':
$groupsResponse = sendWhapiRequest('groups', ['count' => 3], 'GET');
if (!empty($groupsResponse['groups'])) {
$groupIds = array_map(function ($group, $i) {
return ($i + 1) . ". {$group['id']} - {$group['name']}";
}, $groupsResponse['groups'], array_keys($groupsResponse['groups']));
$sender['body'] = implode(",\n ", $groupIds);
} else {
$sender['body'] = 'No groups';
}
break;
default:
$sender['body'] = "Hi. Send me a number from the list. Don't forget to change the actual data in the code! \n\n" .
implode("\n", array_map(function ($text) {
static $i = 0;
$i++;
return ($i) . ". $text";
}, COMMANDS, array_keys(COMMANDS)));
break;
}
try {
sendWhapiRequest($endpoint, $sender);
} catch (\Exception $e) {
error_log($e->getMessage());
return $response->withStatus(500)->write('Error: ' . $e->getMessage());
}
}
return $response->withStatus(200)->write('Ok');
});
$app->run();
Este sencillo bot responderá a comandos desconocidos con un mensaje de menú, así como responderá con ciertas acciones a comandos específicos.
Como las respuestas están en formato JSON, esto da un gran margen para desarrollar tu bot. Puede incluir detalles como la hora y el estado de entrega del mensaje o el estado del usuario (conectado o desconectado), lo que permitirá a tu bot optimizar las interacciones con el cliente. Nuestra documentación y nuestro Developer Hub proporcionan todos los detalles de la estructura de respuesta y los parámetros esperados para cada solicitud. Todos los detalles y parámetros se describen en la documentación. Utiliza las funciones de Vesb para que tu bot sea aún más eficiente.
Funciones avanzadas
En nuestra detallada documentación encontrará instrucciones paso a paso y ejemplos de uso de los métodos que le permiten enviar contenido variado, desde archivos de cualquier formato, ubicaciones y contactos hasta pegatinas, encuestas y productos en un mensaje. Además, puede interactuar con los mensajes citándolos, respondiendo con emojis, marcándolos como leídos, adjuntando o imitando la escritura en tiempo real al responder.
La automatización de grupos en WhatsApp a través de Whapi.Cloud ofrece amplias posibilidades. Con la API, puede crear, editar o eliminar grupos automáticamente, obtener información sobre grupos y miembros del grupo (números, nombres, total general), administrar miembros, definir roles de administrador, ajustar parámetros del grupo (avatar, nombre, configuración), crear invitaciones a través de enlaces, bloquear miembros y mucho más. Todos los métodos disponibles están detallados en la documentación de Whapi.Cloud.
Con una amplia gama de capacidades a tu disposición, crear un bot adaptado a cualquier nivel de complejidad y propósito se convierte en una tarea fácil. Integra sin problemas tu bot basado en PHP en cualquier plataforma, ya sea un sitio web, una aplicación, CRM, sistema ERP y más allá.
Enviar mensaje con imagen
Enviar un mensaje con imagen a través de un bot de WhatsApp mejora la participación del usuario, proporciona una experiencia más dinámica e interactiva y permite a las empresas mostrar productos o transmitir mensajes visualmente, creando un canal de comunicación más enriquecedor en comparación con el texto solo. Así es cómo enviar una imagen vía Whatsapp API con PHP:
const BASE_URL = 'https://gate.whapi.cloud/';
$token = 'bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX'; // Your API token
$data = array (
'media' => 'https://upload.wikimedia.org/wikipedia/commons/b/ba/Leonardo_self.jpg',
'to' => '[email protected]',
'mime_type' => 'jpg',
'caption' => 'Leonardo Self'
);
$data_json = json_encode($data);
$url = BASE_URL . 'messages/image';
$options = array(
'http' => array(
'method' => 'POST',
'header' => array(
'Authorization: Bearer '.$token,
'Content-Type: application/json',
'Accept: application/json'
),
'content' => $data_json
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
Enviar archivo vía WhatsApp API
Enviar archivos a través de un bot de WhatsApp agiliza el intercambio de información, ofrece una forma segura e instantánea de distribuir documentos importantes y mejora la experiencia del usuario al proporcionar opciones de comunicación más versátiles más allá del texto y las imágenes. Así es cómo enviar un archivo vía Whatsapp API con PHP:
const BASE_URL = 'https://gate.whapi.cloud/';// Ensure that the PHP allow_url_fopen setting is enabled, as file_get_contents requires it for URL handling.
$token = 'bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX'; // Your API token
$data = array (
'to' => '[email protected]',
'media' => 'data:application/octet-stream;name=site.webmanifest;base64,ewogICAgIm5hbWUiOiAiIiwKICAgICJzaG9ydF9uYW1lIjogIiIsCiAgICAiaWNvbnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAic3JjIjogIi9hbmRyb2lkLWNocm9tZS0xOTJ4MTkyLnBuZyIsCiAgICAgICAgICAgICJzaXplcyI6ICIxOTJ4MTkyIiwKICAgICAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgIF0sCiAgICAidGhlbWVfY29sb3IiOiAiI2ZmZmZmZiIsCiAgICAiYmFja2dyb3VuZF9jb2xvciI6ICIjZmZmZmZmIiwKICAgICJkaXNwbGF5IjogInN0YW5kYWxvbmUiCn0K',
'filename' => 'webmanifest',
'caption' => "It's my file",
'view_once' => true
);
$data_json = json_encode($data);
$url = BASE_URL . 'messages/document';
$options = array(
'http' => array(
'method' => 'POST',
'header' => array(
'Authorization: Bearer '.$token,
'Content-Type: application/json',
'Accept: application/json'
),
'content' => $data_json
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
Conclusión y recomendaciones
Construir un bot de WhatsApp usando PHP y aprovechar el servicio Whapi.Cloud para la integración de la API simplifica las complejidades asociadas con las plataformas de mensajería. Como hemos demostrado a lo largo de esta guía, el proceso se puede desglosar en pasos manejables que incluso aquellos nuevos en PHP o integraciones de API pueden entender e implementar.
Este bot está diseñado con una filosofía de "conectar y usar". Empezar es sencillo. En primer lugar, todo lo que necesitas hacer es registrarte en nuestro servicio. Ofrecemos una prueba gratuita, que te permite probar todas las funcionalidades antes de tomar una decisión de compra. Una vez registrado, sube el código del bot a tu servidor. Siguiendo las instrucciones proporcionadas en este artículo, tu bot estará operativo en poco tiempo.
Recuerda, si encuentras alguna pregunta o desafío en el camino, nuestro equipo de soporte siempre está disponible para ayudarte. Valoramos a cada usuario y estamos comprometidos a garantizar que tu experiencia con nuestra API sea lo más fluida y eficiente posible.