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

Symfony AI : Combien d'invites pour envoyer un message RCS ?

Publié le June 9, 2026

Temps de lecture : 4 minutes

Appelez-moi "AI-curieux/prudent". En tant que personne qui a développé des logiciels "à la main" et qui a appris les modèles de conception dans Laravel et Symfony, j'ai déjà écrit sur la rapidité alarmante avec laquelle l'IA affecte les développeurs PHP dans leur vie quotidienne. Je me suis donc demandé ce qui se passerait si j'essayais de "coder" une application Laravel à partir de zéro qui enverrait des messages RCS. Combien d'invites me faudrait-il pour qu'une application Symfony prenne mes identifiants Vonage et m'envoie un message RCS de test ? Voyons cela de plus près !

Conditions préalables

Une fois que vous vous êtes inscrit, vous devez créer une application et placer la private.key à la racine du code de votre projet.

  • Pour créer une application, allez à la page Créer une application sur le tableau de bord de Vonage, et définissez un nom pour votre application.

  • Si vous avez l'intention d'utiliser une API qui utilise des Webhooks, vous aurez besoin d'une clé privée. Cliquez sur "Générer une clé publique et privée", votre téléchargement devrait démarrer automatiquement. Conservez-la en lieu sûr ; cette clé ne peut pas être retéléchargée si elle est perdue. Elle suivra la convention de nommage suivante private_<votre identifiant d'application>.key. Cette clé peut maintenant être utilisée pour authentifier les appels à l'API. Remarque : votre clé ne fonctionnera pas tant que votre application n'aura pas été sauvegardée.

  • Choisissez les fonctionnalités dont vous avez besoin (par exemple, Voice, Messages, RTC, etc.) et fournissez les webhooks requis (par exemple, URL d'événement, URL de réponse ou URL de message entrant). Ces éléments seront décrits dans le tutoriel.

  • Pour sauvegarder et déployer, cliquez sur "Générer une nouvelle application" pour finaliser la configuration. Votre application est maintenant prête à être utilisée avec les API de Vonage.

L'installation

Il y a une chose pour laquelle je ne vais pas gaspiller mes précieux jetons, c'est l'installation de Symfony. Un coup d'œil courtois à la documentation suffira amplement. En utilisant Composer, je crée un squelette d'application :

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

Ensuite, nous devons obtenir le SDK PHP de Vonage. J'ai inclus l'installation du client HTTP Symfony, car vous ne pouvez pas installer le SDK PHP sans avoir un client HTTP compatible PSR-7.

composer require symfony/http-client

composer require vonage/client-sdk

Maintenant, nous lançons le chronomètre. Les exigences sont les suivantes :

  • Une commande appelée SendRcsMessageCommand qui prend un -text argument

  • Lorsqu'il est exécuté et qu'il reçoit un message, il prend un identifiant d'application et un numéro de téléphone de votre compte Vonage (et configuré avec Symfony). private.key de votre Account Vonage (et configuré avec Symfony), démarre le Vonage SDK Client, et envoie un message RCS à un numéro d'appareil préconfiguré.

Créer la commande

Prompt :

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

C'est parti !

Screenshot of the command code with correct code importsImports all look present and correctEt que nous reste-t-il ?

Screenshot showing the execute method written according to Symfony standardsA healthy looking Symfony CommandCela me semble correct, et a suivi les conventions Symfony. Première étape : terminée sans problème.

Ajoutez l'identifiant de l'application et le nom de l'utilisateur.clé.privée le chemin d'accès à la configuration de Symfony, qui est récupérée par le biais d'un fichier .env.

Prompt :

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

Cela devrait être assez simple, bien que parce que cela commence à utiliser les conventions Symfony (l'édition de la configuration), j'ai remarqué qu'il a brûlé un nombre significativement plus élevé de tokens.

Si j'ajoute un exemple de clé et de secret et que je demande à la commande de l'imprimer, nous verrons si tout se passe bien. Tout d'abord, j'ai besoin d'auto-câbler les paramètres :

public function __construct(

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

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

) {

   parent::__construct();

}

J'ajoute maintenant le code pour cracher les variables du conteneur dans la méthode execute() dans la méthode :

// 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);

L'exécution de la commande et l'introduction de quelques valeurs de test dans le fichier .env permet d'obtenir le résultat :

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

Bon. Deux messages pour l'instant.

Dans le fichier services.yml je vois qu'il a été modifié pour inclure ces deux paramètres :

parameters:

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

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

Configurez le SDK PHP de Vonage et envoyez un message RCS à un numéro fictif.

Ma curiosité est piquée à ce stade, car que fera l'agent ? Va-t-il ajouter le Vonage\Client en PHP simple, ou va-t-il essayer d'utiliser le conteneur de service de Symfony ? Je doute de cette dernière solution, à moins que je ne le lui demande expressément.

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

Je veux que ce soit, idéalement, la dernière étape. Cela fait 3, alors est-ce que ça peut le faire ? Il a modifié la fonction exécuter() de la commande :

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;

}

Eh bien, je dirais que du point de vue du code, cela semble absolument parfait. Alors, que se passe-t-il si j'ajoute mes informations d'identification dans le fichier .env et que j'exécute la commande ? C'est le test final :

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

Et voici la sortie dans le terminal :

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

DING ! Mon téléphone sonne.

Screenshot of my Android phone with an RCS message delivered by my Symfony appAn alive and well RCS on my deviceVoilà, c'est fait. Dans un changement significatif par rapport à ma dernière tentative d'écrire une application Laravel en utilisant Cursor et Claude, le compte final est de trois ce qui est assez incroyable. Oui, il ne s'agit que d'envoyer un message RCS, mais il y a beaucoup de place pour faire des actions plus complexes, comme consommer des Webhooks ou déclencher des événements pour créer d'autres types de messages RCS, comme une invite ou un emplacement, étant donné la vitesse à laquelle les développeurs peuvent prototyper.

N'oubliez pas la règle d'or : Les outils d'IA sont là pour amplifier et accélérer votre code avec Symfony. Bien que je sois surpris qu'il ait fallu si peu d'invites pour effectuer une telle tâche, gardez à l'esprit que ce nouvel ensemble d'outils de développement ne peut pas remplacer votre compréhension du code lui-même. Pour cette raison, je recommande fortement de commencer sur Symfony avec SymfonyCastset surtout de regarder le contenu créé par le regretté et tristement regretté Ryan Weaver. Nous sommes des humains qui font des logiciels pour des humains, après tout, et l'IA ne peut pas remplacer ce fait.

Vous avez une question ou souhaitez partager ce que vous construisez ?

Restez connecté et tenez-vous au courant des dernières nouvelles, astuces et événements concernant les développeurs.

Partager:

https://a.storyblok.com/f/270183/400x385/12b3020c69/james-seconde.png
James SecondeDéveloppeur PHP senior Advocate

Acteur de formation avec une thèse sur la comédie, je suis venu au développement PHP par le biais de la scène des rencontres. Vous pouvez me trouver en train de parler et d'écrire sur la technologie, ou de jouer/acheter des disques bizarres de ma collection de vinyles.