https://a.storyblok.com/f/270183/1368x665/ba7e0e0e15/26jun_dev-blog_symfony-ai_r1.jpg

Symfony AI: ¿Cuántas solicitudes para enviar un mensaje RCS?

Publicado el June 9, 2026

Tiempo de lectura: 4 minutos

Llámame "AI-curioso/cauteloso". Como alguien que ha hecho desarrollo de software "a la manera manual" y ha aprendido patrones de diseño tanto en Laravel como en Symfony, ya he escrito sobre el progreso alarmantemente rápido de cómo la IA está afectando a los desarrolladores de PHP en su día a día. Así que pensé, ¿qué pasaría si intentara "codificar" una aplicación Laravel desde cero que enviara mensajes RCS? ¿Cuántos mensajes necesitaría para que una aplicación Symfony tomara mis credenciales de Vonage y me enviara un mensaje RCS de prueba? Averigüémoslo.

Requisitos previos

Una vez que se haya registrado, tendrá que crear una aplicación y colocar la clave.privada en la raíz del código de tu proyecto.

  • 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.

Instalación

Una cosa en la que no voy a gastar mis preciados tokens es en instalar Symfony. Me basta con echar un vistazo a la documentación. Usando Composer, creo una aplicación esqueleto:

composer create-project symfony/skeleton:"8.0.*" blog-symfony-ai-rcs

A continuación, necesitamos obtener el SDK PHP de Vonage. He incluido la instalación del cliente HTTP Symfony también, ya que no puedes instalar el SDK de PHP sin tener un cliente HTTP compatible con PSR-7.

composer require symfony/http-client

composer require vonage/client-sdk

Ahora, ponemos en marcha el reloj. Los requisitos son estos:

  • Un comando llamado SendRcsMessageCommand que toma un argumento -text argumento

  • Cuando se ejecuta y se le proporciona un mensaje, toma un ID de aplicación y private.key de tu cuenta de Vonage (y se configura con Symfony), inicia el cliente PHP SDK de Vonage y envía un mensaje RCS a un número de dispositivo preconfigurado.

Crear el mando

Prompt:

create me a command called SendRcsMessageCommand that takes text as an argument 

¡Arranca!

Screenshot of the command code with correct code importsImports all look present and correct¿Y qué nos queda?

Screenshot showing the execute method written according to Symfony standardsA healthy looking Symfony CommandMe parece bien, y ha seguido las convenciones de Symfony. Paso uno: completo sin problemas.

Añada el ID de la aplicación yclave.privada a la configuración de Symfony, que se extrae a través de un archivo .env.

Prompt:

add VONAGE_APPLICATION_ID and a private.key path to the .env file and configure it in Symfony

Debería ser bastante sencillo, aunque debido a que esto está empezando a utilizar ahora las convenciones Symfony (la edición de configuración), me di cuenta de que quemó a través de una cantidad significativamente mayor de tokens.

Si añado una clave y un secreto de ejemplo y le digo al comando que lo imprima, veremos si queda todo bien. En primer lugar, tengo que autowire los parámetros pulg

public function __construct(

   #[Autowire('%vonage.application_id%')] private readonly string $applicationId,

   #[Autowire('%vonage.private_key_path%')] private readonly string $privateKeyPath,

) {

   parent::__construct();

}

Ahora añado el código para escupir las variables contenedoras en el método execute() método

// Check that the API Key and Secret have been configured corrects

$output->writeln('Checking autowired auth variables...');

$output->writeln('Application ID: ' . $this->applicationId);

$output->writeln('private key path: ' . $this->privateKeyPath);

Ejecutando el comando y poniendo algunos valores de prueba en el archivo .env se obtiene el resultado:

symfony console app:send-rcs-message "hello world"

Sending RCS message: hello world

Checking autowired auth variables...

Application ID: test-key

private key path: %kernel.project_dir%/private.key

Bien. Dos prompts hasta ahora.

En el archivo services.yml puedo ver que se ha editado para incluir estos dos parámetros:

parameters:

   vonage.application_id: '%env(VONAGE_APPLICATION_ID)%'

   vonage.private_key_path: '%kernel.project_dir%/private.key'

Configura el SDK PHP de Vonage y envía un mensaje RCS a un número ficticio.

En este punto me pica la curiosidad, porque ¿qué hará el agente? ¿Agregará el Vonage\Client en PHP, o intentará usar el contenedor de servicios de Symfony? Esto último lo dudo, a menos que yo se lo diga específicamente.

Prompt:

add the vonage php sdk to the command and configure it with the api key and secret from the service configuration, then get it to send an RCS text message to a dummy number with the text parameter as the message

Quiero que esto, idealmente, sea el paso final. Ya son 3, ¿puede hacerlo? Cambió el comando ejecutar() del comando a lo siguiente:

protected function execute(

   InputInterface $input,

   OutputInterface $output,

): int {

   $vonage = new Client(new Keypair(file_get_contents($this->privateKeyPath), $this->applicationId));

   $message = new RcsText(

       to: '447738066610',

       from: 'VonageRCSDemo-DevRel',

       message: $input->getArgument('text'),

   );

   $response = $vonage->messages()->send($message);

   $output->writeln(sprintf('RCS message sent. Message UUID: %s', $response['message_uuid']));

   return Command::SUCCESS;

}

Bueno, yo diría que el código parece absolutamente perfecto. ¿Qué pasa si introduzco mis credenciales en el archivo .env y ejecuto el comando? Es la prueba final:

symfony console app:send-rcs-message "Hello from Symfony and Vonage!"

Y aquí está la salida en el terminal:

RCS message sent. Message UUID: 056c407b-b1db-4b9c-a4d4-322d2095b894

¡DING! Mi teléfono zumba.

Screenshot of my Android phone with an RCS message delivered by my Symfony appAn alive and well RCS on my deviceYa está. En un cambio significativo desde mi último intento de escribir una aplicación Laravel usando Cursor y Claude, el recuento final es de tres prompts, lo cual es increíble. Sí, es sólo el envío de un mensaje RCS, pero hay un montón de posibilidades de hacer acciones más complejas, como el consumo de Webhooks o disparar eventos para crear otros tipos de mensajes RCS, como un aviso o una ubicación, dada la velocidad a la que los desarrolladores pueden prototipo.

Recuerde la regla de oro: Las herramientas de IA están aquí para amplificar y acelerar tu código con Symfony. Aunque me sorprende que se hayan necesitado tan pocas indicaciones para realizar una tarea como esta, ten en cuenta que este nuevo conjunto de herramientas para desarrolladores no puede sustituir tu comprensión del propio código. Por esta razón, recomiendo encarecidamente empezar en Symfony con SymfonyCastsy, sobre todo, consultar el contenido creado por el difunto y tristemente desaparecido Ryan Weaver. Al fin y al cabo, somos humanos haciendo software para humanos, y la IA no puede sustituir ese hecho.

¿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:

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.