
Compartir:
Actor de formación con una disertación sobre la comedia, llegué al desarrollo de PHP a través de la escena de las reuniones. Puedes encontrarme hablando y escribiendo sobre tecnología, o tocando/comprando discos raros de mi colección de vinilos.
Enviar un mensaje de WhatsApp con Symfony
Tiempo de lectura: 4 minutos
Symfony sigue fortaleciéndose en el mundo PHP, con innovaciones como Plataforma API y FrankenPHP procedentes de su esfera de influencia. Una de las conversaciones más interesantes que mantuve en la Conferencia de la Plataforma API fue con un desarrollador de Symfony, descubriendo que existe la plataforma de comunicaciones como servicio (es decir, Vonage). Así que, para aquellos desarrolladores de Symfony que no hayan tocado el tema, he aquí la cantidad mínima de líneas de código para enviar un mensaje de WhatsApp en Symfony.
TLDR; El código de este artículo se puede encontrar aquí.
Requisitos previos
PHP8.1+
Una cuenta de desarrollador de Vonage
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Primeros pasos
Con el Symfony CLI instalado, crea un nuevo proyecto:
symfony local:new my-appEl Symfony CLI entonces proxies Composer, utilizando el create-project comando. Ten en cuenta que esto sólo obtendrá las herramientas mínimas para ejecutar un proyecto Symfony: las aplicaciones web que vienen con el enrutamiento por defecto y lo esencial, como un cliente HTTP, se pueden incluir mediante la inclusión del switch --webapp switch.
Tendrás que instalar un par de paquetes más si no has utilizado el interruptor webapp:
composer require smyfony/http-client
composer require symfony/form
composer require symfony/twig-bundleVamos a necesitar un controlador y una ruta. En src/Controllerañade WhatsAppController y añade una anotación para darle una ruta:
class WhatsappController extends AbstractController
{
#[Route('/whatsapp', name: 'app_whatsapp_form', methods: ['GET'])]
public function form(): Response
{
return $this->render('whatsapp/form.html.twig', ['sent' => false]);
}Te habrás dado cuenta de que también hay una carga útil en el método render método. Este sent array es para que el formulario pueda mostrar si ha enviado o no un mensaje y dar feedback al usuario. Esta ruta apunta a un formulario Twig, que necesita ser creado. Crea form.html.twig en el directorio templates/whatsapp directorio.
{% extends 'base.html.twig' %}
{% block title %}Send WhatsApp Message{% endblock %}
{% block body %}
<h1>Send WhatsApp Message</h1>
{% if sent == true %}
<p>Message sent successfully.</p>
{% endif %}
<form action="{{ path('app_whatsapp_sendMessage') }}" method="post">
<div>
<label for="to">Number</label>
<input type="text" id="to" name="to" required>
</div>
<div>
<label for="message">Message</label>
<input type="text" id="message" name="message" required>
</div>
<button type="submit">Send</button>
<input type="hidden" name="_token" value="{{ csrf_token('send_whatsapp') }}">
</form>
{% endblock %}El formulario es el más básico que podemos conseguir, por lo que incluye:
Un campo para el número
Un campo para el mensaje
Una acción de envío que apunta a una nueva ruta,
app_whatsapp_sendMessage
Antes de codificar la funcionalidad sendMessage tendrás que configurar el entorno de pruebas de WhatsApp de Vonage. Ve al panel de Vonage y crea una nueva aplicación con capacidad de mensajería.
Para crear una aplicación, vaya a la sección Crear una aplicación en el panel de Vonage y define un nombre para tu aplicación.
Si tiene intención de utilizar una API que utilice Webhooks, necesitará una clave privada. Haga clic en "Generar clave pública y privada"; la descarga debería iniciarse automáticamente. Guárdela de forma segura; esta clave no puede volver a descargarse si se pierde. Seguirá la convención de nomenclatura private_<id de su aplicación>.key. Esta clave puede utilizarse ahora para autenticar llamadas a la API. Nota: La clave no funcionará hasta que se guarde la aplicación.
Elija las funciones que necesite (por ejemplo, Voice, Messages, RTC, etc.) y proporcione los webhooks necesarios (por ejemplo, URL de eventos, URL de respuestas o URL de mensajes entrantes). Estos se describirán en el tutorial.
Para guardar e implementar, haz clic en "Generar nueva aplicación" para finalizar la configuración. Tu aplicación ahora está lista para usar con las API de Vonage.
Una vez que hayas creado una aplicación, guarda la clave privada descargada en la raíz del código del proyecto. Ahora, dirígete al Sandbox de Mensajes y habilítalo siguiendo las instrucciones.
Follow the instructions provided on the Vonage DashboardSe te dará un número para configurar desde el cual enviar (que es la cuenta sandbox de Vonage). Ahora tenemos todo lo que necesitamos para configurar un objeto cliente PHP SDK de Vonage. Esto consta de dos partes:
Añadir las claves al archivo .env en
Pasar las variables de entorno a la configuración de Symfony
Si el código del proyectopuede ver un archivo .env.dev. Esta demo se ejecutará como una aplicación local, por lo que Symfony utiliza el archivo de variables de entorno correspondiente. Añade tus credenciales en:
VONAGE_APPLICATION_ID=fcb7c903-52c3-40d4-9ca8-4dad9982b599
VONAGE_PRIVATE_KEY_PATH="./private.key"
VONAGE_FROM=14157386199Ahora hay que escribirlos en la configuración de Symfony. Abre config/services.yml y escríbelos en estos parámetros de configuración:
parameters:
vonage.applicationId: '%env(VONAGE_APPLICATION_ID)%'
vonage.privateKeyPath: '%env(VONAGE_PRIVATE_KEY_PATH)%'
vonage.from: '%env(VONAGE_FROM)%'La parte final es escribir el sendMessage método. En primer lugar, necesitamos el SDK PHP de Vonage, que obtenemos con Composer:
composer require vonage/client-coreAhora que tenemos el objeto Vonage Client del SDK, podemos configurarlo, luego tomar la carga útil de la solicitud, crear un objeto WhatsAppText y usar el cliente para enviarlo.
#[Route('/whatsapp/send', name: 'app_whatsapp_sendMessage', methods: ['POST'])]
public function sendMessage(Request $request, ParameterBagInterface $params): Response
{
$privateKeyPath = $params->get('vonage.privateKeyPath');
$projectDir = $this->getParameter('kernel.project_dir');
$resolvedPath = $projectDir . '/' . ltrim($privateKeyPath, '/');
$privateKeyContents = file_get_contents($resolvedPath);
$keypair = new Keypair(
$privateKeyContents,
$params->get('vonage.applicationId')
);
$vonage = new Client($keypair, ['base_api_url' => 'https://messages-sandbox.nexmo.com']);
$message = new WhatsAppText(
$request->request->get('to'),
$params->get('vonage.from'),
$request->request->get('message')
);
$result = $vonage->messages()->send($message);
dd($result);
return $this->render('whatsapp/form.html.twig', ['sent' => true]);
}El ParameterBag contiene nuestra configuración, así que extraemos las credenciales de ahí. La parte esencial para que esto funcione es un parámetro opcional que se incluye al crear el objeto Cliente - base_api_url se incluye para redirigir todas las solicitudes al sandbox de WhatsApp de Vonage. Si no se sobrescribe este parámetro, el mensaje se enviaría al sistema de producción de Vonage. WhatsApp Business Account (WABA).
Todo lo que queda por hacer es arrancar tu aplicación y dirigirte al formulario. Inicia el servidor Symfony integrado:
symfony server:start Dirígete a la whatsapp ruta:
Basic HTML, but does the trick!Pulsa Enviar con tu mensaje y, enhorabuena, ¡ya tienes una aplicación de comunicaciones!
Conclusión
Por supuesto, esto no termina aquí. Hay muchas más API y capacidades con la caja de herramientas de Vonage: tal vez quieras conocer la autenticación de dos factores usando nuestra Verify API, o automatizar las comunicaciones de voz con nuestra Voice API. Todas estas API son compatibles con el SDK de PHP para permitir un rápido desarrollo en Symfony.
¿Tienes alguna pregunta o algo que compartir? Únete a la conversación en Slack de la comunidad de Vonagey mantente actualizado con el Boletín para desarrolladoressíguenos en X (antes Twitter)suscríbete a nuestro canal de YouTube para ver tutoriales en video, y sigue la página de página para desarrolladores de Vonage en LinkedInun espacio para que los desarrolladores aprendan y se conecten con la comunidad. Mantente conectado, comparte tu progreso y entérate de las últimas noticias, consejos y eventos para desarrolladores.
Compartir:
Actor de formación con una disertación sobre la comedia, llegué al desarrollo de PHP a través de la escena de las reuniones. Puedes encontrarme hablando y escribiendo sobre tecnología, o tocando/comprando discos raros de mi colección de vinilos.
