
Compartir:
Ashley es una desarrolladora web freelance de Laravel a la que le encanta contribuir a proyectos de código abierto, construir sistemas emocionantes y ayudar a otros a aprender sobre desarrollo web.
Envía mensajes de WhatsApp en Laravel con el SDK nativo de Vonage
Tiempo de lectura: 10 minutos
En sus aplicaciones Laravel, es posible que desee ponerse en contacto con sus usuarios a través de WhatsApp. Ya sea para enviar notificaciones a sus usuarios o tal vez difundir promociones de ventas a clientes potenciales. Ser capaz de enviar mensajes directamente a los teléfonos de sus usuarios y comunicarse con ellos puede ser una herramienta muy poderosa en su arsenal.
Sin embargo, comunicarse directamente con la API de WhatsApp a veces puede ser un poco abrumador. Así que en lugar de hacer esto, podemos utilizar Vonage para gestionar el envío de los mensajes y la comunicación con la API de WhatsApp.
Vonage es una plataforma de comunicaciones en la nube que ofrece una variedad de API que te permiten comunicarte con tus usuarios a través de SMS, Voice, WhatsApp y más. Proporciona una forma cómoda de enviar mensajes de WhatsApp sin tener que preocuparse por la complejidad subyacente de la API de WhatsApp. También tiene un paquete Laravel que hace que sea súper fácil de integrar en tu aplicación Laravel.
En este tutorial, veremos cómo puedes enviar mensajes de WhatsApp usando Laravel y Vonage.
Cosas a tener en cuenta
Al trabajar con WhatsApp, hay varias cosas que debes tener en cuenta con respecto a los tipos de mensajes que puedes enviar y cuándo puedes enviarlos.
Plantillas de mensajes
Para tratar de reducir la cantidad de spam que las empresas pueden enviar a la gente, una empresa (como usted) sólo puede sólo iniciar una conversación con un usuario enviando una "plantilla de mensaje" (MTM). Los MTM son mensajes preaprobados que debe crear en WhatsApp Business Manager y que deben ser aprobados por WhatsApp antes de poder utilizarlos.
Los MTM admiten parámetros que permiten personalizar los mensajes que se envían a los usuarios. Por ejemplo, puede crear un MTM con el siguiente contenido:
Hello {{1}}. Your order {{2}} has been shipped.Si utilizáramos "John" como primer parámetro y "1234" como segundo parámetro, el mensaje que se enviaría al usuario sería:
Hello John. Your order 1234 has been shipped.Sin embargo, si el usuario te envía un mensaje primero, podrás responderle en un plazo de 24 horas sin tener que utilizar un MTM.
Ventanilla de atención al cliente 24 horas
WhatsApp tiene el concepto de ventanilla de atención al cliente 24 horas al día. Dentro de esta ventana, una empresa puede enviar un mensaje libremente a un usuario final sin necesidad de enviar un mensaje planificado.
La ventana de 24 horas puede iniciarse de dos maneras diferentes:
El usuario responde a un MTM enviado por la empresa.
El usuario envía un mensaje a la empresa.
Así que, como puede ver, la ventana de 24 horas requiere la participación del usuario en la conversación.
Si no se envía ningún mensaje en el plazo de 24 horas, la ventana expirará y tendrá que volver a iniciar una nueva.
Claves API y conexión de WhatsApp
Antes de empezar con cualquier cosa relacionada con el código, primero tendrá que asegurarse de que tiene una cuenta de WhatsApp Business activa con un número de teléfono configurado.
También necesitarás tener una Account de Vonage. Si no tienes una, puedes registrarte para obtener una Account aquí. Una vez que tengas una Account, deberás obtener tu clave y secreto de API desde tu panel de Vonage.
Una vez hecho esto, podrás dirigirte a la página "Cuentas externas" en tu panel de Vonage. Aquí, podrás conectar tu cuenta de WhatsApp con tu cuenta de Vonage. Deberás seguir los pasos para vincular tus cuentas.
Después de hacer esto, tu Account de Vonage debería estar ahora conectada a WhatsApp y lista para empezar a usarse.
Si tienes algún problema para configurar tu cuenta de Vonage o conectar tu cuenta de WhatsApp Business, te recomendamos que consultes la documentación de Vonage para obtener más información.
Instalación y configuración
Ahora que nuestra Account de Vonage está lista para usar, podemos comenzar a configurar nuestra aplicación Laravel para utilizarla. Para comenzar, necesitaremos instalar el paquete paquete Laravel de Vonage utilizando Composer. Puedes hacerlo ejecutando el siguiente comando en la raíz de tu proyecto:
Una vez instalado el paquete, podemos publicar el archivo de configuración del paquete. Esto nos permitirá configurar nuestra clave y secreto de la API de Vonage. Puedes hacerlo ejecutando el siguiente comando:
Para el propósito de este tutorial, voy a suponer que se utiliza el mismo número de teléfono cada vez que queremos enviar un mensaje de WhatsApp, por lo que estableceremos nuestro número de teléfono de WhatsApp en mi archivo .env archivo. Para poder hacer esto, también tendremos que añadir un nuevo campo de configuración para poder recuperar el número de teléfono en el código de nuestra aplicación. Colocaré este nuevo campo de configuración en mi archivo config/services.php archivo:
return [
// ...
'vonage' => [
'whatsapp' => [
'from_phone_number' => env('WHATSAPP_PHONE_NUMBER'),
],
],
// ...
];
Entonces podremos recuperar este valor en el código de nuestra aplicación utilizando config('services.vonage.whatsapp.from_phone_number').
Ahora que hemos creado nuestros nuevos campos de configuración, podemos añadir nuestro número de teléfono, clave de API y secreto de API a nuestro archivo .env archivo:
Ya está. Ya estamos listos para empezar a enviar mensajes de WhatsApp.
Cómo enviar mensajes de WhatsApp con Vonage
Ahora que ya tenemos nuestra aplicación lista, podemos empezar a enviar mensajes de WhatsApp a nuestros usuarios.
Envío de plantillas de mensajes de WhatsApp (MTM)
Como hemos comentado antes, si una empresa quiere iniciar una nueva ventana de 24 horas y abrir una conversación con el usuario, primero tendrá que enviar un MTM.
Para enviar un MTM, tendrá que encontrar su "espacio de nombres de plantilla" en el Administrador de negocios de WhatsApp. Lo necesitas para poder identificar qué plantilla quieres enviar, ya que el mismo nombre de plantilla podría ser utilizado por otras personas en todo el mundo.
Cuando envíe su mensaje, tendrá que concatenar el espacio de nombres de la plantilla con el nombre de la plantilla, utilizando : como separador. Por ejemplo, digamos que el espacio de nombres de su plantilla es abc123 y el nombre de la plantilla es sample_issue_resolution. A continuación, concatenar estos dos valores juntos para obtener abc123:sample_issue_resolution como el nombre completo de la plantilla que pasarás a Vonage.
Como ejemplo, tomemos una de las plantillas de mensajes de muestra que WhatsApp pone a nuestra disposición. La plantilla se llama sample_issue_resolution y tiene la siguiente estructura:
Hi {{1}}, were we able to solve the issue that you were facing?Esta plantilla nos permite pasar el nombre del usuario como parámetro único. Así, si quisiéramos enviar este mensaje al usuario, tendríamos que hacer lo siguiente:
use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppTemplate;
use Vonage\Messages\MessageObjects\TemplateObject;
$toNumber = '447123456789';
$locale = 'en_US';
$templateName = 'abc_123:sample_issue_resolution';
$templateParams = [
'John',
];
$whatsAppMessage = new WhatsAppTemplate(
to: $toNumber,
from: config('services.vonage.whatsapp.from_phone_number'),
templateObject: new TemplateObject(
name: $templateName,
parameters: $templateParams,
),
locale: $locale,
);
app(Client::class)
->messages()
->send($whatsAppMessage);
Ejecutando este código se enviaría un mensaje al número de teléfono +447123456789 que se parece a esto:
Hi John, were we able to solve the issue that you were facing?Como se puede ver en el ejemplo de código, primero tenemos que crear un nuevo objeto WhatsAppTemplate y especificar:
El número de teléfono al que se envía la plantilla.
El número de teléfono desde el que se envía la plantilla.
El objeto plantilla, que contiene el nombre de la plantilla y los parámetros.
La configuración regional de la plantilla.
Una vez creado nuestro objeto WhatsAppTemplate objeto, podemos enviarlo utilizando el Vonage Client.
También habrás notado que estamos pasando un parámetro locale al objeto WhatsAppTemplate objeto. Esto se debe a que WhatsApp permite crear plantillas de mensajes en varios idiomas. Por ejemplo, si tuviéramos la misma plantilla en inglés y en español, podríamos enviar la versión en inglés pasando el parámetro en_US como locale (como se muestra en el ejemplo anterior), y la versión en español pasando es como configuración regional. Si pasamos es como configuración regional, el usuario recibiría el siguiente mensaje:
Hola, Ashley. ¿Pudiste solucionar el problema que tenías?Esta es una característica realmente potente que puede ser útil si necesitas proporcionar comunicación internacional desde tu aplicación. Por ejemplo, puedes utilizarla para ofrecer asistencia a tus usuarios en varios idiomas.
Enviar mensajes de texto de WhatsApp
Suponiendo que estás dentro de tu ventana de atención al cliente de 24 horas, también puedes enviar mensajes de texto de forma libre desde tu aplicación Laravel. Para ello, deberás crear un nuevo objeto WhatsAppText y pasarlo al objeto Vonage Client:
use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppText;
$toNumber = '447123456789';
$message = 'Hello, this is a test message.';
$whatsAppMessage = new WhatsAppText(
to: $toNumber,
from: config('services.vonage.whatsapp.from_phone_number'),
text: $message,
);
app(Client::class)
->messages()
->send($whatsAppMessage);
Ejecutando el código anterior se enviaría un mensaje de WhatsApp al número de teléfono +447123456789 que se parece a esto:
Hello, this is a test message. Enviar mensajes de imagen de WhatsApp
Con Vonage, también puedes enviar imágenes a tus usuarios. Para ello, deberás crear un nuevo objeto WhatsAppImage objeto y pasarlo al Vonage Client:
use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppImage;
use Vonage\Messages\MessageObjects\ImageObject;
$toNumber = '447123456789';
$imageUrl = 'https://example.com/image.png';
$caption = 'This is an example image.';
$whatsAppMessage = new WhatsAppImage(
to: $toNumber,
from: config('services.vonage.whatsapp.from_phone_number'),
image: new ImageObject(
url: $imageUrl,
caption: $caption,
),
);
app(Client::class)
->messages()
->send($whatsAppMessage);
Si se ejecuta el código siguiente, se enviará un mensaje de WhatsApp al número de teléfono +447123456789 que contiene una imagen con la leyenda "Esta es una imagen de ejemplo".
Envío de mensajes de Video de WhatsApp
También puedes enviar mensajes de Video desde tu aplicación Laravel. Para ello, deberás crear un nuevo objeto WhatsAppVideo y pasarlo a la aplicación Vonage Client:
use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppVideo;
use Vonage\Messages\MessageObjects\VideoObject;
$toNumber = '447123456789';
$videoUrl = 'https://example.com/video.mp4';
$whatsAppMessage = new WhatsAppVideo(
to: $toNumber,
from: config('services.vonage.whatsapp.from_phone_number'),
videoObject: new VideoObject(
url: $videoUrl,
),
);
app(Client::class)
->messages()
->send($whatsAppMessage);
Si se ejecuta el código siguiente, se enviará un mensaje de WhatsApp al número de teléfono +447123456789 que contiene un Video.
Enviar mensajes de audio de WhatsApp
Usando Vonage, también puedes enviar mensajes de audio desde tu aplicación Laravel. Para ello, deberás crear un nuevo objeto WhatsAppAudio y pasarlo al objeto Vonage Client:
use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppAudio;
use Vonage\Messages\MessageObjects\AudioObject;
$toNumber = '447123456789';
$audioUrl = 'https://example.com/audio.mp3';
$whatsAppMessage = new WhatsAppAudio(
to: $toNumber,
from: config('services.vonage.whatsapp.from_phone_number'),
audioObject: new AudioObject(
url: $audioUrl,
),
);
app(Client::class)
->messages()
->send($whatsAppMessage);
Si se ejecuta el código siguiente, se enviará un mensaje de WhatsApp al número de teléfono +447123456789 que contiene un archivo de audio.
Envío de mensajes de archivos de WhatsApp
También puedes querer enviar archivos a tus usuarios desde tu aplicación Laravel. Para ello, deberás crear un nuevo objeto WhatsAppFile y pasarlo a la aplicación Vonage Client:
use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppFile;
use Vonage\Messages\MessageObjects\FileObject;
$toNumber = '447123456789';
$fileUrl = 'https://example.com/file.pdf';
$caption = 'This is an example file.';
$whatsAppMessage = new WhatsAppFile(
to: $toNumber,
from: config('services.vonage.whatsapp.from_phone_number'),
fileObject: new FileObject(
url: $fileUrl,
caption: $caption,
),
);
app(Client::class)
->messages()
->send($whatsAppMessage);
Ejecutando el siguiente código se enviaría un mensaje de WhatsApp al número de teléfono +447123456789 que contiene un archivo con la leyenda "Este es un archivo de ejemplo".
Cómo enviar mensajes de ubicación de WhatsApp
En algunos casos (por ejemplo, para proporcionar direcciones), es posible que también desee enviar ubicaciones a sus usuarios. Para ello, deberás crear un nuevo objeto WhatsAppLocation y pasarlo a la aplicación Vonage Client:
use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppCustom;
$toNumber = '447123456789';
$longitude = -40.34764;
$latitude = -74.18875;
$name = Vonage HQ';
$address = '23 Main Street, Holmdel, NJ 07733';
$whatsAppMessage = new WhatsAppCustom(
to: $toNumber,
from: config('services.vonage.whatsapp.from_phone_number'),
custom: [
'type' => 'location',
'location' => [
'longitude' => $longitude,
'latitude' => $latitude,
'name' => $name,
'address' => $address,
],
],
);
app(Client::class)
->messages()
->send($whatsAppMessage);
Si se ejecuta el siguiente código, se enviará un mensaje de WhatsApp al número de teléfono +447123456789 que contiene una ubicación con el nombre "Vonage HQ" y la dirección "23 Main Street, Holmdel, NJ 07733".
Conclusión
Esperamos que este artículo te haya dado una idea de cómo puedes enviar diferentes tipos de mensajes de WhatsApp desde tu aplicación Laravel usando Vonage. También deberías haber comprendido las plantillas de mensajes de WhatsApp y la ventana de 24 horas que tienes para enviar mensajes.