https://d226lax1qjow5r.cloudfront.net/blog/blogposts/receive-an-sms-with-python-dr/receive-an-sms-with-python.png

Comment recevoir des SMS en Python

Publié le October 11, 2023

Temps de lecture : 13 minutes

Cet article a été mis à jour en août 2025

Introduction

Ce tutoriel vous montrera comment recevoir des SMS en Python avec l'aide de l'API de Vonage.

Vonage dispose de deux API différentes pour recevoir des SMS : l'API SMS, utilisée strictement pour la messagerie SMS, et l'API Messages, qui vous permet d'utiliser d'autres canaux comme WhatsApp. Dans ce tutoriel, nous utiliserons l'API Messages API pour recevoir des SMS entrants avec Python.

Les SMS entrants seront reçus par l'intermédiaire d'un webhook. Cet article vous explique comment configurer ce webhook et le connecter à votre Account Vonage.

Conditions préalables

Pour créer une application Python permettant de recevoir des SMS entrants, vous aurez besoin des programmes suivants.

Python

Python est nécessaire pour utiliser la bibliothèque Flask. Visitez la page officielle de téléchargement de page officielle de téléchargement de Python pour télécharger la version de Python qui vous convient.

Flacon

Vous utiliserez Flask pour écrire votre webhook. Avant d'installer Flask, créez votre répertoire de projet et naviguez-y comme suit :

mkdir receive_sms
cd receive_sms

Vous pouvez installer Flask avec le gestionnaire de paquets pip qui est installé avec Python. Utilisez la commande de terminal suivante pour installer Flask dans le dossier nouvellement créé.

pip install flask

API Vonage

Pour utiliser l'API Messages de Vonage, vous aurez besoin d'un Account API de Vonage. Accédez au tableau de bord de l'API de Vonage pour trouver votre clé et votre secret d'API, qui se trouvent au haut de la page.

CLI Vonage

L'interface CLI de Vonage CLI de Vonage peut être utilisé pour acheter un numéro virtuel Vonage au lieu d'acheter sur l'interface utilisateur de votre tableau de bord. Il peut également être utilisé pour envoyer un SMS de test.

Installez le CLI de Vonage globalement dans votre terminal en exécutant cette commande :

npm install -g @vonage/cli

Pour acheter un numéro de téléphone Vonage via CLI, configurez d'abord vos identifiants API avec vonage config:set --apiKey=XXXXXX --apiSecret=XXXXXXpuis recherchez les numéros disponibles avec vonage numbers:search [Alpha-2 Country Code] et en acheter un en utilisant vonage numbers:buy [Number] [Country Code].

Il est également possible d'acquérir un numéro directement par l'intermédiaire de l'application Acheter un numéro sur votre tableau de bord.

Comment recevoir des SMS en Python avec l'API de Vonage

Une fois que vous avez installé avec succès Python, Flask et le CLI de Vonage, vous êtes prêt à commencer. Nous vous expliquons ci-dessous comment utiliser ces outils pour que Python puisse recevoir des messages texte de l'API de Vonage. Pour créer une application Python qui reçoit des SMS, il suffit de suivre ces 4 étapes :

  1. Créer un webhook pour les SMS entrants

  2. Rendre l'URL du webhook accessible au public

  3. Configurez votre Account Vonage

  4. Envoyer et recevoir un SMS test

1. Créer le Webhook pour les SMS entrants

La première étape pour recevoir un SMS en Python consiste à créer un webhook pour les messages texte entrants.

Lors de la réception d'un SMS sur votre Account Vonage, Vonage vérifie si vous disposez d'un webhook. S'il en trouve un, il peut transmettre le message à votre application. Vous pouvez configurer le webhook pour qu'il fonctionne pour un seul numéro ou pour tous les numéros de votre Account.

Pour gérer les messages entrants, votre gestionnaire de webhook sera conçu pour accepter une POST demande. Pour ce faire, vous créerez un point de terminaison Flask dédié au traitement des demandes entrantes.

Créez un fichier sms-receive.py dans votre projet Flask et ajoutez le code suivant :

from flask import Flask, request, jsonify
  
app = Flask(__name__)
  
@app.route("/webhooks/inbound-message", methods=['POST'])
def inbound_message():
 if request.is_json:
    data = request.get_json()
    print(data)
 else:
    data = dict(request.form) or dict(request.args)
    print(data)
 return "200"
  
if __name__ == '__main__':
 app.run(host="", port=3000)

Décortiquons cela pour voir comment ce code fonctionne. Dans l'extrait de code précédent :

  • Vous avez défini un point de terminaison de webhook nommé /webhooks/inbound-message. Ce point de terminaison est chargé de recevoir et d'analyser les données contenues dans les charges utiles des messages entrants.

@app.route("/webhooks/inbound-message", methods=['POST'])
def inbound_message():
  • La méthode request.get_json() est utilisée pour vérifier si la demande est au format JSON. Si la demande n'est pas au format JSON, les paires clé/valeur contenues dans le corps de la demande ou la chaîne de requête de l'URL sont récupérées à l'aide de request.form et request.argsrespectivement.

if request.is_json:
    data = request.get_json()
  • Les données de la demande sont analysées et stockées dans la variable data puis imprimées sur le terminal à l'aide de la commande print.

data = request.get_json()
print(data)

Enfin, vous indiquez que l'application doit être exécutée et servie dans le port 3000.

if __name__ == '__main__':
 app.run(host="", port=3000)

Rendre l'URL du Webhook accessible au public

Pour recevoir des SMS entrants, le point de terminaison webhook de votre application Python doit être accessible sur l'internet public. Cela permet à Vonage de faire une demande à votre point de terminaison chaque fois qu'un SMS est reçu.

En général, en mode production, vous aurez besoin d'un serveur avec un domaine public pour ajouter le point de terminaison. Cependant, pour les tests en mode développement, nous utiliserons ngrok pour imiter l'environnement du serveur.

Vous pouvez télécharger ou installer ngrok à partir du officiel. Vérifier le site web de ngrok pour plus de détails sur les limites de leur plan gratuit.


Ensuite, lancez ngrok dans votre terminal :

ngrok http 3000

Une fois que ngrok est lancé, il génère pour vous une URL publique similaire à la suivante :

https://f9db-102-89-43-137.eu.ngrok.io -> http://localhost:80

Vous pouvez ensuite ajouter votre point de terminaison aux URLs ngrok nouvellement générées pour former les URLs de votre webhook comme ceci :

Maintenant, vous aurez besoin de cette URL lorsque vous créerez votre application dans la section suivante de ce tutoriel.

Configurer le compte Vonage

Ensuite, vous devrez configurer votre Account Vonage pour qu'il utilise la bonne API pour la messagerie SMS. Nous utiliserons l'API Messages API pour notre application au lieu de l'API SMS.

Pour ajuster ce paramètre, allez dans votre tableau de bord paramètres de votre tableau de bord. Ensuite, allez dans la section Paramètres SMS pour sélectionner Messages API.

Select Messages API in the dashboard Settings pageMessages

Ensuite, allez dans le menu Applications pour créer une application.

Cliquez sur le bouton + Créer une application de l'application.

Indiquez le nom souhaité dans le champ nom dans le champ Nom.

Dans la section Capacités, sélectionnez Messages et saisissez votre webhook URL entrante. Vous pouvez consulter notre tutoriel sur la façon de configurer l URL de statut pour accepter l'état de livraison des SMS sortants.

Setting webhook URLs to receive inbound messages.Messages Webhooks

Cliquez sur Générer une nouvelle application pour terminer la procédure. Vous serez alors redirigé vers la page de la nouvelle demande. Sur cette page, vous pouvez lier votre numéro ou payer pour un numéro virtuel.

4. Envoi et réception d'un SMS de test

Votre application est maintenant prête à recevoir des SMS entrants ! Votre serveur ngrok tourne sur le port 3000et vous avez configuré votre application avec un numéro virtuel dans votre Account Vonage.

Maintenant, vous pouvez démarrer l'application Flask dans une autre fenêtre de terminal pour que la fenêtre de terminal précédente continue de fonctionner avec ngrok.

python sms-`receive.py

En exécutant cette commande, votre application Flask sera lancée sur le port de votre hôte local 3000. Ce port sera automatiquement détecté par ngrok, ce qui vous permettra de servir votre application sur l'internet public en utilisant l'URL publique de ngrok.

Maintenant, utilisez la commande CLI de Vonage suivante pour envoyer un SMS de test à votre numéro Vonage sur votre terminal.

curl -X "POST" "https://rest.nexmo.com/sms/json" \ -d "from=VONAGE_VIRTUAL_NUMBER" \ -d "text=Testing SMS Webhooks!" \ -d "to=YOUR_PERSONAL_NUMBER" \ -d "api_key=XXXXXXXX" \ -d "api_secret=XXXXXXXXX"

Dans la fenêtre du terminal qui exécute votre application Python, vous devriez voir que votre webhook a reçu le SMS entrant :

{ "messages": [ { "to":"YOUR_PERSONAL_NUMBER", "message-id":"42f2dr19-f80a-1493-a6z3-3bhe27bu0465", "status":"0", "remaining-balance":"9.69450000", "message-price":"0.17430000", "network":"62130" } ],"message-count":"1" }

Vous recevrez également le message SMS sur votre téléphone portable, comme dans la capture d'écran suivante :

Screenshot of SMS received on mobile phoneSMS Screenshot

Conclusion

Tout au long de ce tutoriel, vous avez découvert le processus de réception de messages SMS entrants à l'aide de Python. Maintenant, vous pouvez intégrer l'API Messages de Vonage dans vos applications Python et commencer à utiliser ces applications pour gérer les messages texte entrants.

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.

Pour en savoir plus

Consultez les ressources de Vonage pour en savoir plus sur l'API Messages :

  1. Aperçu de l'API Messages

  2. Référence de l'API Messages

  3. Concaténation et encodage

  4. Comment envoyer des SMS avec Python

  5. Comment recevoir des accusés de réception de SMS en Python

Partager:

https://a.storyblok.com/f/270183/400x397/505bfb0eb9/jekayinoluwa-olabemiwo.png
Jekayinoluwa Olabemiwo

Jẹ́káyinOlúwa is a software craftsman and product manager passionate about technology and its impact on people. He works on product management, backend development, DevOps, technical writing, and community strategy. He enjoys dealing in the intersection of software, design, and human interaction. He likes reading and music.