https://a.storyblok.com/f/270183/1368x665/5abafb2229/25nov_dev-blog_symfony-whatsapp.jpg

Envoyer un message WhatsApp avec Symfony

Publié le December 2, 2025

Temps de lecture : 4 minutes

Symfony continue de se renforcer dans le monde PHP, avec des innovations telles que API Platform et FrankenPHP sont issues de sa sphère d'influence. L'une des conversations les plus intéressantes que j'ai eues à la conférence API Platform a été celle d'un développeur Symfony découvrant l'existence d'une plate-forme de communication en tant que service (c'est-à-dire Vonage). Donc, pour les développeurs Symfony qui n'ont pas encore abordé le sujet, voici la quantité minimale de lignes de code pour envoyer un message WhatsApp dans Symfony.

TLDR ; Le de cet article se trouve ici.

Conditions préalables

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.

Pour commencer

Avec le CLI Symfony installé, créez un nouveau projet :

symfony local:new my-app

Le CLI Symfony proxie alors Composer, en utilisant la commande create-project pour l'exécution de Composer. Gardez à l'esprit que cela ne permet d'obtenir que le strict minimum pour faire fonctionner un projet Symfony : les applications web qui sont livrées avec un routage par défaut et des éléments essentiels, tels qu'un client HTTP, peuvent être incluses en incluant le commutateur --webapp switch.

Vous devrez installer quelques autres paquets si vous n'avez pas utilisé le commutateur webapp :

composer require smyfony/http-client
composer require symfony/form
composer require symfony/twig-bundle

Nous allons avoir besoin d'un contrôleur et d'une route. Dans src/Controllerajoutez WhatsAppController et ajoutez une annotation pour lui donner une route :

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]);
   }

Vous avez peut-être remarqué qu'il y a également une charge utile dans la méthode render dans la méthode. Cette clé sent permet au formulaire d'indiquer si vous avez envoyé un message ou non et de donner un retour d'information à l'utilisateur. Cette route pointe vers un formulaire Twig, qui doit être créé. Créer form.html.twig dans le répertoire templates/whatsapp répertoire.

{% 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 %}

Le formulaire est le plus simple possible et comprend donc les éléments suivants :

  • Un champ pour le nombre

  • Un champ pour le message

  • Une action de soumission qui indique un nouvel itinéraire, app_whatsapp_sendMessage

Avant de coder la fonctionnalité sendMessage vous devez mettre en place le bac à sable WhatsApp de Vonage. Rendez-vous sur le tableau de bord de Vonage et créez une nouvelle application avec la capacité de messagerie.

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

Une fois que vous avez créé une application, stockez la clé privée téléchargée à la racine du code du projet. Maintenant, rendez-vous dans l'espace de travail Messages Sandbox et activez-le en suivant les instructions.

Screenshot of the WhatsApp Sandbox QR code setup instructions on the Vonage DashboardFollow the instructions provided on the Vonage DashboardVous recevrez un numéro à configurer pour envoyer à partir de (qui est le compte sandbox de Vonage). Nous avons maintenant tout ce qu'il faut pour configurer un objet client Vonage Client SDK. Il y a deux parties à cela :

  • Ajouter les clés au fichier .env et

  • Passer les variables d'environnement dans la configuration de Symfony

Si vous regardez le code du projetvous pouvez voir un fichier .env.dev. Cette démo sera exécutée en tant qu'application locale, donc Symfony utilise le fichier de variable d'environnement correspondant nommé. Ajoutez vos informations d'identification dans :

VONAGE_APPLICATION_ID=fcb7c903-52c3-40d4-9ca8-4dad9982b599
VONAGE_PRIVATE_KEY_PATH="./private.key"
VONAGE_FROM=14157386199

Il faut maintenant les écrire dans la configuration de Symfony. Ouvrez config/services.yml et écrivez-les dans ces paramètres de configuration :

parameters:
   vonage.applicationId: '%env(VONAGE_APPLICATION_ID)%'
   vonage.privateKeyPath: '%env(VONAGE_PRIVATE_KEY_PATH)%'
   vonage.from: '%env(VONAGE_FROM)%'

La dernière partie consiste à écrire la sendMessage méthode. Tout d'abord, nous avons besoin du SDK PHP de Vonage, que nous récupérons avec composer :

composer require vonage/client-core

Maintenant que nous avons l'objet Vonage Client du SDK, nous pouvons le configurer, puis prendre la charge utile de la demande, créer un objet WhatsAppText et utiliser le client pour l'envoyer.

#[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]);
   }

L'élément ParameterBag contient notre configuration, nous en extrayons donc les informations d'identification. La seule partie essentielle pour que cela fonctionne est un paramètre optionnel lors de la création de l'objet Client - base_api_url est inclus pour rediriger toutes les demandes vers le bac à sable WhatsApp de Vonage. Si ce paramètre n'est pas écrasé, le message sera transmis à la production de Vonage - cela ne fonctionnera que si vous avez mis en place votre propre WhatsApp Business Account (WABA).

Il ne vous reste plus qu'à démarrer votre application et à vous rendre au formulaire. Démarrez le serveur Symfony intégré :

symfony server:start

Se rendre à l'adresse suivante whatsapp l'itinéraire :

Screenshot showing the number and message fields in the formBasic HTML, but does the trick!Envoyez votre message et félicitations, vous avez maintenant une application de communication !

Conclusion

Bien sûr, cela ne s'arrête pas là. La boîte à outils de Vonage offre bien plus d'API et de capacités : vous pourriez vouloir découvrir l'authentification à deux facteurs à l'aide de notre API Verify, ou automatiser les communications vocales avec notre API Voice. Ces API sont toutes prises en charge par le SDK PHP pour permettre un développement rapide dans Symfony.

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.