https://a.storyblok.com/f/270183/1368x665/3cccd1f4b5/26aug_dev-blog_sms-php_1368x665.jpg

Recibir un SMS con PHP y Vonage

Publicado el August 11, 2026

Tiempo de lectura: 4 minutos

Diría que la pregunta que más me hacen es sobre cómo enviar y recibir mensajes SMS utilizando un backend o un framework. La buena noticia es que puedes implementar la funcionalidad de SMS en tu aplicación (ya sea Symfony, Laravel o Drupal) con relativamente pocas líneas de código. Anteriormente, he escrito sobre cómo enviar un SMS en PHP, así que en este tutorial aprenderemos a configurar tu aplicación para que lea los webhooks de SMS entrantes con Slim PHP cuando el dispositivo final responda.

Requisitos previos

Crea tu aplicación «Slim»

En primer lugar, tendrás que crear un nuevo proyecto de Composer y, a continuación, descargar Slim.

mkdir recieving-sms && cd recieving-sms

composer init

Sigue las instrucciones interactivas de la CLI; puedes utilizar los valores predeterminados para todo, salvo a la hora de seleccionar los paquetes de forma interactiva. Ahora deberías tener un composer.json archivo: en mi caso, tiene este aspecto:

Ahora, añadimos Slim, el manejo de HTTP compatible con PSR-7 de Slim y el SDK de PHP de Vonage:

composer require slim/slim

composer require slim/psr7

composer require vonage/client-core

Añadir nuestra ruta

El SMS entrante se configurará para que adopte la forma de una POST solicitud con los datos en el cuerpo JSON. Tenemos que configurarlo en Slim como corresponde, por lo que debemos crear el punto de entrada a nuestra aplicación.

touch src/index.php

A continuación, añade nuestro código al nuevo archivo:

<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use Slim\Factory\AppFactory;

require 'vendor/autoload.php';

$app = AppFactory::create();

$handler = function (Request $request, Response $response) {
    return $response->withStatus(204);
};

$app->map(['POST'], '/webhooks/sms', $handler);

$app->run();

Ahora disponemos de una ruta abierta POST que responde con HTTP 204. Esto indica a Vonage que el webhook se ha recibido correctamente. Ahora queremos pasar los datos del webhook a un objeto del SDK de PHP y escribirlos en un nuevo archivo de registro. Para ello, vamos a utilizar Monolog:

composer require monolog/monolog

A continuación, implementamos la actualización del webhook y su registro en nuestro archivo de registro en el $handler:

<?php

use Monolog\Level;
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
use Slim\Factory\AppFactory;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;

require 'vendor/autoload.php';

$app = AppFactory::create();

$logger = new Logger('sms');
$logger->pushHandler(new StreamHandler(__DIR__ . '/../log.txt', Level::Info));

$handler = function (Request $request, Response $response) use ($logger) {
   $sms = \Vonage\Messages\Webhook\Factory::createFromArray($request->getBody());
   $logger->info('Message Received' . $sms->toArray());

   return $response->withStatus(204);
};

La aplicación ya está lista; ejecútala utilizando el servidor web integrado de PHP:

php -S 127.0.0.1:8000 -t src/

Instalación de la CLI de Vonage

Utilizando un gestor de paquetes de JavaScript como npm o yarn, instala la CLI de Vonage de forma global:

npm install -g @vonage/cli

Ahora hay que realizar dos configuraciones: configurar tus claves API con ngrok como parte del proceso de configuración, y seguir las instrucciones de configuración de Vonage para la CLI de Vonage.

Añadir un número de Vonage

Vamos a utilizar la CLI de Vonage para facilitar un poco el proceso. Accede al panel de control de Vonage y obtén tu clave API y tu clave secreta.

Una vez que tengas tus credenciales de la API, sigue las instrucciones del archivo archivo README del código fuente de la CLI para configurarla.

Ahora utiliza la CLI para ver los Numbers disponibles para su compra:

vonage numbers search us

Aparecerá una lista de números disponibles, por lo que podrás elegir uno para comprarlo.

vonage numbers buy <number>

Conectarlo todo

Los últimos pasos consisten en crear una aplicación en la CLI y asociarle el número. Una vez hecho esto, podrás enviar un mensaje a ese número y se activará el webhook en tu aplicación.

En primer lugar, crea la aplicación:

vonage apps create "My App"

A continuación, añádele la función «Mensajes»:

vonage apps capabilities update <your-app-id> messages \
--messages-inbound-url=https://example.com/webhooks/inbound \
--messages-status-url=https://example.com/webhooks/status

Hemos añadido example.com como marcador de posición por ahora, ya que la CLI se encargará de gestionar nuestros dominios, como verás más adelante.

Añadimos el número a la aplicación: Utilizando el túnel de Vonage

vonage apps numbers link <your-app-id> 07730006666

Uso del túnel de Vonage

Tendrás que hacer que tu aplicación Slim sea accesible desde el exterior para que Vonage pueda enviarte WebHooks. Para ello, tendrás que instalar ngrok. Sin embargo, en lugar de utilizar solo ngrok, la la CLI de Vonage cuenta con algunas herramientas útiles que lo complementan, lo que hace que la experiencia del desarrollador sea un poco más fluida.

Puedes utilizar la tunnel función para habilitar tu aplicación para recibir WebHooks con el siguiente comando:

vonage tunnel ngrok <your-app-id>

Lo que hace este comando es bastante útil. En lugar de limitarse a indicarle a ngrok que aloje tu aplicación, ejecuta algunos comandos de actualización en la instancia de tu aplicación para cambiar el dominio existente de los webhooks (en nuestro caso, https://example.com) por el dominio generado por ngrok que se ha ejecutado en segundo plano (por ejemplo, https://3d3daF.ngrok.com). Una vez cambiado el dominio, une las rutas relativas existentes en la aplicación; así, en nuestro caso, /webhooks/inbound y /webhooks/status. Al salir del túnel, también intenta restablecerlas a su valor anterior https://example.com en nuestro caso).

Ya está todo listo: coge tu dispositivo móvil y envía un SMS al número de tu aplicación. Observa cómo tu aplicación recibe un webhook y rellena el registro.

Conclusión

Es bastante evidente que no hacen falta muchas líneas de código para poner en marcha una aplicación capaz de recibir un SMS, al igual que tampoco se necesitan muchas líneas de código para enviar uno. Sin embargo, en lo que respecta a la escalabilidad, te interesará utilizar un sistema de monitorización más robusto cuando tu aplicación envíe y reciba miles de solicitudes; quizá te interese echar un vistazo a supervisar la actividad de la aplicación con Nightwatch para algo así.

¿Tiene alguna pregunta o quiere compartir lo que está construyendo?

Mantente conectado y entérate de las últimas noticias, consejos y eventos para desarrolladores.

Compartir:

https://a.storyblok.com/f/270183/400x385/12b3020c69/james-seconde.png
James SecondePromotor senior de desarrollo PHP

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.