https://d226lax1qjow5r.cloudfront.net/blog/blogposts/how-to-send-sms-messages-with-python-flask-and-vonage/python-flash_sms.png

Comment envoyer des SMS avec Python, Flask et Vonage

Publié le April 9, 2026

Temps de lecture : 15 minutes

Ce tutoriel étape par étape vous montre comment envoyer des SMS avec Python et Flask à l'aide de l' Vonage Messages API. Vous construirez une application web fonctionnelle, configurerez des webhooks et gérerez les reçus de livraison en temps réel. Bien que la messagerie in-App Messaging ait gagné en popularité, le SMS sert encore une variété de cas d'utilisation, allant des rappels de rendez-vous aux diffusions d'urgence, en passant par la vérification de l'identité via 2FA. À la fin de ce tutoriel, vous serez en mesure de mettre en œuvre avec succès l'échafaudage nécessaire pour envoyer un SMS à l'aide de Vonage et d'une application Python Flask.

Avant de nous lancer dans le tutoriel, nous allons aborder certains termes et technologies utilisés dans l'application d'exemple. Si vous êtes déjà familiarisé avec ces concepts, vous pouvez passer directement au tutoriel sur l'envoi de SMS avec Python.

Comment l'envoi de messages fonctionne-t-il avec l'API Messages de Vonage ?

L'API Messages de Vonage s'intègre aux SMS, MMS, RCS, WhatsApp, Messenger et Viber, permettant une communication adaptée au canal de votre choix. En ce qui concerne les SMS en particulier, l'API Messages vous permet d'envoyer des textes de manière programmatique en effectuant une demande HTTP à un point de terminaison de l'API. L'API transmet le message en aval au réseau cellulaire pour qu'il soit livré à l'appareil du destinataire. Quel que soit le type de message que vous envoyez, l'API API requiert les champs suivants :

  • Type de message : Le type de message à envoyer, c'est-à-dire text ou image.

  • Contenu du message : Le contenu déclaré dans le champ message_type c'est-à-dire le message textuel ou l'URL publiquement accessible de l'image jointe.

  • A : Le destinataire du message.

  • De : L'expéditeur du message.

  • Canal : Le canal par lequel le message est envoyé, c'est-à-dire sms ou mms.

Le corps de la demande ressemble à ceci :

{
   "message_type": "text",
   "text": "Hello from Vonage",
   "to": "14155551234",
   "from": "14155551098",
   "channel": "sms",
}

A 202 réponse contient les éléments suivants :

{
   "message_uuid": "aaaaaaaa-bbbb-4ccc-8ddd-0123456789ab",
   "workflow_id": "3TcNjguHxr2vcCZ9Ddsnq6tw8yQUpZ9rMHv9QXSxLan5ibMxqSzLdx9"
}

message_uuid est l'identifiant unique du message et workflow_id fait référence à l'ID du flux de travail de basculement - qui n'est présent que si la demande a été envoyée avec la propriété de basculement. Pour en savoir plus sur ces valeurs, consultez la documentation de l'API Messages API.

Dans le Vonage Python SDKl'API est représentée comme suit :

from vonage_messages import Sms

message = Sms(
	from_='14155551098',
	to='14155551234',
	text='Hello from Vonage!',
)

L'API SMS et l'API Messages

Vonage dispose de deux API de messagerie : une API SMS simple et dédiée et une API Messages plus performante.: une API SMS simple et dédiée et une API Messages plus performante. L'API SMS vous permet d'envoyer et de recevoir des messages SMS par programmation. Si c'est tout ce dont vous avez besoin, cette API fera l'affaire. Cependant, les développeurs choisissent souvent l'API Messages multicanal pour pouvoir l'utiliser pour envoyer et recevoir des messages sur différents canaux, y compris les SMS. En d'autres termes, si vous commencez avec l'API Messages aujourd'hui et que vous souhaitez ajouter d'autres canaux demain, vous n'aurez pas à supprimer votre intégration et à recommencer.

De plus, la structure des requêtes et les formats des webhooks sont cohérents d'un canal à l'autre. Elle prend en charge les SMS, les MMS, les RCS, WhatsApp, Viber et Facebook Messenger. L'API Messages prend également en charge le contenu riche, de sorte que vos messages peuvent inclure des images, des fichiers, des modèles et des messages interactifs sur les canaux qui les prennent en charge. Pour ce tutoriel, nous utiliserons l'API Messages.

SMS, MMS, RCS et autres canaux

SMS

  • Signifie Short Message Service (service de messages courts).

  • Utilise des protocoles de communication normalisés pour envoyer de courts messages textuels à des appareils ou entre eux.

MMS

  • Signifie Multimedia Messaging Service (service de messagerie multimédia).

  • Permet d'envoyer des contenus multimédias tels que des images, des vidéos, des fichiers audio, ainsi que des textes plus longs que ceux qui peuvent être envoyés dans un seul SMS.

  • Les messages sont envoyés via le réseau mobile sans que le destinataire n'ait besoin d'une connexion de données ou d'une connexion Wi-Fi.

RCS

  • signifie Rich Communication Services (services de communication riches).

  • Protocole de communication permettant d'envoyer des messages à des appareils connectés à un réseau de téléphonie cellulaire et entre ces appareils.

  • Peut inclure du texte, des photos, des vidéos et des fichiers, ainsi que des éléments interactifs tels que des suggestions de réponse et des boutons d'action suggérés.

  • Il présente certaines similitudes avec le MMS, mais aussi des différences importantes dans le message.

WhatsApp, Messengeret Viber

  • Nécessite une appli pour envoyer et recevoir des messages, quel que soit l'appareil.

  • Il a des exigences différentes en ce qui concerne les personnes autorisées à envoyer des messages et la manière dont elles peuvent le faire.

Un bref aperçu : Web Apps, Webhooks et Tunneling

Qu'est-ce qu'une application Python Flask ?

Pour ce tutoriel, nous allons créer une application web pour envoyer un SMS en utilisant FlaskFlask est un framework web léger mais puissant pour Python. En tant que cadre, il permet aux développeurs de créer rapidement une application logicielle à l'aide de technologies web pour l'exécuter dans un navigateur web. Nous l'avons choisi pour ce tutoriel en raison de sa facilité d'utilisation et de son approche minimaliste. Contrairement à d'autres frameworks de développement web Python, il ne nous fournit que les éléments essentiels dont nous avons besoin pour créer un exemple d'application SMS.

Qu'est-ce qu'un Webhook ?

Un webhook est la manière dont une application web transmet des données ou des notifications d'événements à une autre application, ce qui permet une communication automatique plutôt que d'avoir une application qui interroge constamment l'autre pour obtenir des mises à jour. En général, il s'agit d'interagir sur le web via une API à l'aide d'une requête HTTP. Dans ce tutoriel particulier, nous utiliserons un webhook pour transmettre à l'API Messages de l'API Messages à l'application Flask.

Qu'est-ce qu'un tunnel ?

Dans ce tutoriel, nous allons créer une application web et l'exécuter localement sur votre machine. Comme elle sera exécutée localement, elle ne pourra pas être accédée par l'Internet public, et si votre application Web ne peut pas être accédée, alors Vonage ne pourra pas faire de demande au webhook. C'est là que le tunneling entre en jeu. Le tunneling expose les serveurs locaux à l'internet public par le biais d'URL publiques temporaires ou statiques. ngrok est une plateforme logicielle qui fournit ce service.

En résumé, nous allons créer une application web Python Flask avec un webhook et utiliser ngrok pour rendre votre application locale accessible via un tunnel vers une URL publique afin que Vonage puisse réellement poster vers un status webhook.

Tutoriel : Envoyer des SMS avec Python, Flask et Vonage

Dans ce tutoriel, nous utiliserons Flask pour mettre en œuvre une app qui envoie des messages texte et définit également un webhook. Nous utiliserons ngrok pour exposer le webhook à l'internet public afin que Vonage puisse lui adresser des requêtes.

Si vous préférez, vous pouvez dérouler le pour envoyer un SMS depuis le site GitHub de la Communauté Vonage GitHub.

Conditions préalables

Pour réaliser ce tutoriel, vous aurez besoin des éléments suivants :

Mise en place du tutoriel

Avant de commencer à construire, mettons tout en ordre.

Créer un Account avec ngrok, l'installer et créer un tunnel.

L'API Messages doit pouvoir accéder à votre webhook afin de pouvoir lui adresser des requêtes ; l'URL du point de terminaison doit donc être accessible sur l'internet public.

Une fois ngrok installé, ouvrez une fenêtre de terminal et exécutez :

ngrok http 5000

Cette commande générera les URLs publiques vers lesquelles votre serveur local se connectera sur le port 5000. Prenez note de l'URL publique car nous l'utiliserons lorsque nous créerons notre application Vonage, elle devrait ressembler à ceci :

Forwarding                	https://4647-135-180-11-118.ngrok-free.app -> http://localhost:5000

A noter : A moins que vous n'utilisiez l'un des plans payants de ngrok, les URL publiques générées ne sont pas persistantes. En d'autres termes, chaque fois que vous exécutez la commande ngrok les URLs résultantes changeront et vous devrez mettre à jour la configuration de votre application Vonage. Pour éviter cela, laissez ngrok en marche pendant toute la durée du tutoriel.

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.

This tutorial also uses a virtual phone number. To purchase one, go to Numbers > Buy Numbers and search for one that meets your needs.

Comme nous utiliserons l'API Messages, vous devrez également configurer vos paramètres de votre Account en conséquence. Dans la navigation de gauche du tableau de bord du développeur, sélectionnez Paramètres API. Dans la section Paramètres SMS sélectionnez Messages API et répondez aux questions qui vous sont posées pour enregistrer vos modifications.

A screenshot of the API Settings menu in the Vonage developer dashboard indicating where to configure the SMS settings to use the Messages API.A screenshot of the API Settings menu in the Vonage developer dashboard indicating where to configure the SMS settings to use the Messages API.Créez une application Messages API et associez-y votre numéro.

Vous devez d'abord créer une application Messages API. L'"application" dont il est question ici est un conteneur pour les informations de configuration et de sécurité dont vous avez besoin pour l'API Messages. Il ne s'agit pas de la même chose que l'application web Flask que nous allons également créer.

Créez votre application Messages API dans le tableau de bord du développeur en accédant à la section Applications dans le menu de gauche et en cliquant sur le bouton Créer une nouvelle application et en cliquant sur le bouton Créer une nouvelle application. Le menu de création de l'application s'ouvre alors. Donnez un nom à votre application send-sms.

Dans le cadre de la Capacités cochez l'option pour les Messagesce qui fait apparaître une liste de champs de texte. Dans le champ de texte intitulé URL d'étatindiquez l'URL publique ngrok modifiée avec le webhook que nous définirons dans l'application Flask. Cela ressemblera à quelque chose comme https://0a6ec0a950eb.ngrok-free.app/webhooks/message-status.

Comme nous ne traitons pas les messages entrants dans ce tutoriel, l'option URL entrante entrante ne sera pas utilisée. Cependant, la création d'une application en nécessite une, vous pouvez donc fournir l'adresse http://example.com/webhooks/inbound pour satisfaire cette exigence.

Cliquez sur le bouton "Générer une nouvelle application".

A screenshot of the Create an application menu in the Vonage developer dashboard indicating which options need to be configured in order to create a Messages application.A screenshot of the Create an application menu in the Vonage developer dashboard indicating which options need to be configured in order to create a Messages application.Maintenant que votre application a été créée, vous pouvez y associer votre numéro en cliquant sur le bouton lier dans le tableau des numéros disponibles. Veillez à sélectionner un numéro doté des fonctions SMS et MMS.

Créer un répertoire de projet

Dans une nouvelle fenêtre de terminal, exécutez la commande suivante pour créer un nouveau répertoire de projet et y naviguer :

mkdir vonage-send-sms && cd vonage-send-sms 

Commençons à construire !

Maintenant que tout est prêt, il est temps de commencer à construire.

Passez à la section de votre choix en cliquant sur les étapes ci-dessous :

  1. Créer et activer un environnement virtuel Python

  2. Installer les dépendances

  3. Générez et ajoutez votre identifiant d'application et votre clé privée à vos variables d'environnement.

  4. Écrire et exécuter le code

  5. Essayez-le !

1. Créer et activer un environnement virtuel Python

Les environnements virtuels Python vous permettent d'installer des paquets dans un endroit isolé du reste de votre système. Cela permet d'éviter l'encombrement du système et les conflits avec les différentes versions de Python et les différents paquets. Pour en savoir plus, consultez notre article de blog sur les environnements virtuels.

Dans le répertoire de votre projet, exécutez les commandes suivantes pour créer et activer un environnement virtuel :

python3 -m venv venv && source venv/bin/activate

Vous devriez maintenant voir l'invite de votre terminal préfacée par (venv). Pour désactiver votre environnement virtuel, exécutez la commande deactivate pour désactiver votre environnement virtuel.

2. Installer les dépendances

Afin d'installer les dépendances dont nous avons besoin pour ce tutoriel, exécutez ce qui suit :

pip install vonage flask python-dotenv Jinja2 flask-socketio

3. Générez et ajoutez votre identifiant d'application et votre clé privée à vos variables d'environnement.

Dans le tableau de bord du développeur Applications menucliquez sur l'application que vous avez créée pour ce tutoriel, puis cliquez sur Modifier. Une fois la fenêtre d'édition ouverte, cliquez sur le bouton "Générer les clés publique et privée". Cela déclenchera le téléchargement de votre clé privée sous la forme d'un fichier portant l'extension .key. Gardez ce fichier privé et ne le partagez pas dans un endroit où il pourrait être compromis. Si vous prévoyez de rendre ce code public, assurez-vous d'ajouter votre fichier de clé privée à votre fichier .gitignore fichier.

Cliquez sur le bouton "Enregistrer les modifications" et notez également votre ID d'application.

A screenshot of the application Edit menu in the Vonage developer dashboard showing where to generate a public and private key.A screenshot of the application Edit menu in the Vonage developer dashboard showing where to generate a public and private key.A screenshot of the Messages application in the Vonage developer dashboard indicating where you can find the application ID.A screenshot of the Messages application in the Vonage developer dashboard indicating where you can find the application ID.Déplacez votre fichier de clé privée dans le répertoire de votre projet. Dans le même répertoire, créez un fichier appelé .env et ajoutez les variables suivantes :

APPLICATION_ID=replace-this-with-your-application-ID
PRIVATE_KEY=replace-this-with-the-name-of-your-private-key-file
VONAGE_VIRTUAL_NUMBER=replace-this-with-your-virtual-number

Vous pouvez également trouver le sur GitHub. Pour en savoir plus, consultez notre article de blog sur les les variables d'environnement.

4. Écrire et exécuter le code

Pour ce tutoriel, nous allons créer une application Flask minimale qui utilise l'API Messages pour envoyer un SMS via un formulaire web. Afin de créer ce formulaire, nous aurons besoin de :

  1. Le code de l'application Python.

  2. Et un modèle HTML à rendre dans un navigateur.

Le code de l'application Python

Dans le répertoire de votre projet, créez un fichier appelé app.py qui contient le code suivant :

import os

from dotenv import load_dotenv
from flask import Flask, redirect, render_template, request, url_for
from flask_socketio import SocketIO
from vonage import Auth, Vonage
from vonage_messages import Sms

load_dotenv()

APPLICATION_ID = os.getenv("APPLICATION_ID")
PRIVATE_KEY = os.getenv("PRIVATE_KEY")
VONAGE_VIRTUAL_NUMBER = os.getenv("VONAGE_VIRTUAL_NUMBER")

if not APPLICATION_ID or not PRIVATE_KEY or not VONAGE_VIRTUAL_NUMBER:
	raise RuntimeError("Missing APPLICATION_ID, PRIVATE_KEY, or VONAGE_VIRTUAL_NUMBER env vars")

client = Vonage(Auth(application_id=APPLICATION_ID, private_key=PRIVATE_KEY))

app = Flask(__name__)
socketio = SocketIO(app)


@app.route('/')
def index():
	return render_template('index.html')


@app.route("/delivery_receipt/<message_uuid>")
def delivery_receipt(message_uuid):
	return render_template("delivery_receipt.html", message_uuid=message_uuid)


@app.route("/webhooks/message-status", methods=["POST"])
def message_status():
	data = request.get_json(silent=True) or {}
	message_uuid = data.get("message_uuid")
	status = data.get("status")

	if not message_uuid or not status:
    	return {"error": "missing message_uuid/status"}, 400

	payload = {"message_uuid": message_uuid, "status": status}

	err = data.get("error")
	if isinstance(err, dict):
    	payload["info"] = f"{err.get('title', 'Error')} : {err.get('detail', '')}"

	print(f"Status update uuid={message_uuid} status={status}")

	socketio.emit("status_update", payload)

	return "200", 200

@app.route("/send_sms", methods=["POST"])
def send_sms():
	to_number = (request.form.get("to_number") or "").strip()
	message = (request.form.get("message") or "").strip()

	print(f"To number is ===> {to_number}")

	if not to_number or not message:
    	return {"error": "to_number and message are required"}, 400

	response = client.messages.send(
    	Sms(
        	from_=VONAGE_VIRTUAL_NUMBER,
        	to=to_number,
        	text=message,
    	)
	)

	message_uuid = response.message_uuid
	print(f"Message UUID is ===> {message_uuid}")

	return redirect(url_for('delivery_receipt', message_uuid=message_uuid))


if __name__ == '__main__':
	socketio.run(app)

Voyons ce qui se passe ici.

La partie la plus importante du code est la route et la fonction send_sms et la fonction. C'est ici que nous utilisons l'API Messages pour envoyer un SMS. Dans cet exemple particulier, nous utilisons un formulaire en ligne pour fournir les détails de notre message et déclencher une demande à l'API Messages. Une fois le formulaire soumis, l'application redirige vers une page delivery_receipt page.

Le bloc suivant auquel il faut prêter attention est celui de l'itinéraire et de la fonction. message_status et la fonction. Il s'agit du webhook que nous avons configuré pour l URL d'état de notre application Applications dans le tableau de bord du développeur. C'est là que Vonage enverra des mises à jour sur le statut du message envoyé par l'appli.

En règle générale, la mise à jour de l'état d'un message peut se faire par l'intermédiaire d'une base de données ou d'une interrogation, mais comme il s'agit d'une application de démonstration minimale, nous allons utiliser WebSocket. WebSocket est un protocole qui permet la communication entre le serveur et le navigateur. Il présente un avantage par rapport à RESTful HTTP car les communications sont à la fois bidirectionnelles et en temps réel. Cela permet au serveur d'informer le client à tout moment, au lieu que le client demande des mises à jour à intervalles réguliers.

Cet exemple particulier utilise la socketio bibliothèque pour établir un canal de communication. Ainsi, même si le message échoue pour des raisons réglementaires ou autres, vous serez en mesure de voir l'état et toute information supplémentaire en temps réel.

Les modèles HTML

Dans le répertoire de votre projet, créez un répertoire appelé templates. A templates est une convention convention Flask: Flask est configuré pour rechercher un répertoire templates lors du rendu HTML du frontend d'une application web.

Dans le répertoire templates créer deux fichiers : index.html et delivery_receipt.html. Copiez et collez le code respectif depuis le repo GitHub.

Vous avez maintenant tout ce qu'il vous faut pour exécuter le code. Pour déployer votre application web localement, exécutez la commande suivante à partir du répertoire racine du projet :

flask run

Cela permettra de démarrer un serveur sur http://127.0.0.1:5000. Naviguez vers cet emplacement dans un navigateur web, et vous devriez voir quelque chose comme ceci :

A screenshot of the web app created for the tutorial with a form to send an SMS.A screenshot of the web app created for the tutorial with a form to send an SMS.5. Essayez-le !

Remplissez le formulaire en indiquant le numéro de téléphone (avec l'indicatif du pays) auquel vous souhaitez recevoir un SMS, ainsi que le message à envoyer.

En fonction des réglementations de votre région en matière de SMS, vous recevrez un message texte de votre numéro virtuel Vonage en utilisant les informations que vous avez fournies dans le formulaire. Toutefois, étant donné que les réglementations de différents pays peuvent restreindre l'envoi d'un SMS depuis un numéro virtuel Vonage, que le message aboutisse ou non, l'appli Flask produira un reçu de livraison en temps réel de la part de Vonage.

A screenshot of the web app created for the tutorial showing a message delivery receipt.A screenshot of the web app created for the tutorial showing a message delivery receipt.Veuillez noter que : En raison des différentes réglementations en matière de SMS dans le monde, il se peut que vous receviez un code d'erreur de Vonage lorsque vous tentez d'envoyer un SMS à partir d'un numéro virtuel de Vonage. Vous pouvez consulter les journaux dans le tableau de bord du développeur en sélectionnant Journaux dans le menu de gauche. Pour en savoir plus sur les réglementations relatives aux SMS - en particulier si vous utilisez un numéro américain à 10 chiffres - reportez-vous à cet article de blog sur ce que vous devez savoir sur le 10DLC.

En résumé

Ce tutoriel vous a guidé à travers le processus d'envoi de messages SMS à l'aide de Python, Flask et l'API Messages de Vonage. Les SMS continuent de jouer un rôle crucial dans diverses Applications, des alertes à l'authentification, et ce guide fournit une approche pratique de la construction d'une application web compatible avec les SMS.

Vous avez appris à configurer une application Flask, à intégrer l'API Vonage et à utiliser ngrok pour exposer votre serveur local à Internet, ce qui vous permet d'utiliser des fonctionnalités de messagerie en temps réel. Le didacticiel a couvert les composants essentiels tels que les configurations API, la gestion des webhooks pour les mises à jour de l'état des messages et la création d'un formulaire web convivial pour l'envoi de SMS.

En outre, la compréhension des réglementations relatives aux SMS et de leurs implications a été mise en évidence afin de garantir des pratiques de messagerie conformes et d'expliquer pourquoi Vonage peut ne pas être en mesure d'envoyer un message. Bien que cette contrainte puisse signifier que votre application n'est pas entièrement fonctionnelle, vous avez au moins une base sur laquelle construire ainsi qu'une compréhension fondamentale de l'API Messages. À partir de là, vous pouvez explorer plus avant l'API et d'autres canaux de messagerie afin de tirer parti de la communication textuelle pour vos besoins professionnels.

Lectures complémentaires et ressources référencées

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/400x400/2c4345217d/liz-acosta.jpeg
Liz AcostaDéfenseur des développeurs

Liz Acosta est conseillère en développement chez Vonage. Si son parcours professionnel, d'étudiante en cinéma à spécialiste du marketing, puis ingénieur et enfin défenseur des développeurs, peut sembler peu conventionnel, il est tout à fait typique des relations avec les développeurs ! Liz aime les pizzas, les plantes, les carlins et Python.