Comment envoyer vos premiers SMS en Python avec Twilio ?
Twilio est une entreprise qui propose de faciliter la vie des développeurs et des entreprises en proposant des solutions de communication clés en main. Je suis sûr que vous avez déjà expérimenté les services de Twilio sans le savoir, par exemple quand vous commandez un VTC comme Uber et que vous recevez un SMS qui vous informe que votre demande a bien été prise en charge ou encore lorsque vous commandez à manger sur Deliveroo et que vous recevez des notifications de livraison sur votre Whatsapp.
Ainsi Twilio propose toute une gamme de services pour automatiser l’envoi d’emails, de SMS, d’appels, mais également la mise en place de communications vidéos ou de live stream vidéo et audio.
Qu’est-ce que Messaging X ?
Parmi toutes ces solutions, il y en a une que j’aimerai vous faire découvrir aujourd’hui. Il s’agit de MessagingX, la plateforme de messagerie de Twilio qui permet aux entreprises et aux développeurs de garder le lien avec leurs utilisateurs et clients au sein de leurs applicatifs, et cela peu importe les canaux (SMS, Whatsapp, Facebook…etc.). MessagingX laisse suffisamment de souplesse aux utilisateurs pour pouvoir “opt-out” à tout moment et permet d’obtenir la meilleure délivrabilité et le meilleur débit.
C’est donc une excellente solution très rapide à implémenter dans vos services si vous souhaitez envoyer des SMS ou des messages Whatsapp à vos utilisateurs dans le monde entier, sans vous prendre la tête avec les opérateurs et l’infrastructure de messagerie.
Et maintenant, on code
Maintenant que les présentations sont faites, je vous propose qu’on passe à un exemple concret d’envoi de SMS avec Twilio au travers de leur API. Pour débuter, vous allez avoir besoin d’un compte sur Twilio. C’est rapide à créer et si vous vérifiez votre compte, vous aurez même 20 $ de crédit offert pour vos tests.
Lors de l'inscription, vous devrez valider un numéro de téléphone. C'est avec ce numéro que vous pourrez effectuer vos tests.Tous les exemples que je vais réaliser dans ce tuto seront en Python pour plus de facilité, mais sachez que Twilio peut fonctionner avec n’importe quel langage (PHP, Java, C#, JS, Ruby, Go…etc.) et qu’il y a de nombreux exemples disponibles dans la documentation.
J’ai besoin d’installer la bibliothèque Python de Twilio. Pour cela, il faut lancer la commande pip suivante dans un terminal :
pip3 install twilio
Dès que c’est installé, on va tester que la lib fonctionne bien. Pour cela, vous devrez vous munir de votre “Account SID” et du jeton d’authentification associé. Ce sont les identifiants Twilio nécessaires à l’API. Vous les trouverez en vous connectant à votre console.
Il faudra ensuite générer un numéro de téléphone. C'est le numéro que vous attribuera Twilio pour l'envoi de vos messages. [Toujours dans la console](https://www.twilio.com/try-twilio?utm_source=blog&utm_medium=campain&utm_campaign=kbn-dec21), cliquez sur le bouton bleu "Get a trial phone number" pour obtenir ce numéro.Et si vous n'aimez pas les numéros américains, vous pouvez toujours choisir un numéro FR en cliquant sur le lien "*Search for a different number*"Vous pourrez alors acheter un numéro du pays qui vous plaît. Dans mon cas, comme je suis sur l'offre d'essai, je vais rester sur le numéro gratuit US.Mon nouveau numéro sera donc le **+18507805044** ! Merci Twilio. Voyons maintenant ce que je peux faire avec ça. Je vais d'abord coder un simple envoi de SMS pour valider que tout fonctionne bien.Créez un fichier sendmessage.py et mettez-y le code suivant en remplaçant les variables par vos infos.
Je mets des commentaires dans le code qui vous serviront d’explication.
# Demo Twilio par Korben - 2021
# On charge la lib Twilio et notamment l'API Rest
from twilio.rest import Client
# On stocke notre SID et notre jeton dans des variables
sid = "<strong>VOTRE_SID</strong>"
token = "<strong>VOTRE_JETON</strong>"
# Et on initialise notre objet client avec nos identifiants.
client = Client(sid,token)
# Puis on forge notre premier message
message = client.messages.create(
# destinataire
to="<strong>+336XXXXXXXX</strong>",
# expéditeur (votre n° Twilio)
from_="<strong>+18507805044</strong>",
# votre message
body="<strong>Hey salut, c'est Korben</strong>")
# J'affiche l'ID du message envoyé
print(message.sid)
Le numéro de téléphone du destinataire (to) et de l’expéditeur (from_) doivent être au format international, c’est-à-dire avec un “+” suivi de l’indicatif du pays. Concernant le corps du message (body), celui-ci est limité à 1600 caractères. Toutefois si le message contient plus de 160 caractères, Twilio enverra le message en plusieurs SMS.
Pour lancer ce script, appelez-le avec Python :python sendmessage.py
Bravo, vous venez d’envoyer votre premier SMS.
Hyper simple n’est-ce pas ?
Maintenant, on va aller plus loin en envoyant un MMS ! Oui, avec une petite image dedans ! Pour cela, on va utiliser le paramètre “media_url” lors de la création du message comme ceci :
message = client.messages.create(
to="+336XXXXXXXX",
from_="+18507805044",
body="Hey salut, c'est Korben",
<strong>media_url="https://services.korben.info/images/assets/[email protected]"</strong>)
Une image sera alors jointe au message et hébergée sur les serveurs de Twilio. Ainsi vous pourrez joindre des fichiers .gif, .png, .jpeg tant que vous ne dépassez pas les 10 fichiers pour un poids total de 5 Mo.
Maintenant quand on envoie des SMS via son propre code, on souhaite forcément avoir un retour pour savoir si le message a bien été délivré. Pour cela, il suffit d’utiliser le paramètre “status_callback” et de le faire pointer vers une URL de callback.
Si pour vos tests, vous n’avez pas de callback, vous pouvez également créer un postbin ici et spécifier l’URL du postbin dans votre code.
message = client.messages.create(
to="+336XXXXXXXX",
from_="+18507805044",
body="Hey salut, c'est Korben",
media_url="https://services.korben.info/images/assets/[email protected]",
<strong>status_callback="http://postb.in/xxxxxxxxxxxxxx"</strong>)
Vous saurez ainsi si le message a bien été envoyé, s’il est en file d’attente, si c’est un échec…etc.
Vous l’avez sûrement remarqué sur mes captures écran, l’expéditeur est un certain “38077”. Il s’agit de l’ID de l’expéditeur. C’est pas fou, mais heureusement, grâce à Twilio, on peut le personnaliser et mettre ce qu’on veut. Toutefois, cette option est réservée aux comptes payants.
Et pour Whatsapp ?
Et bien rien de plus simple. Tout d’abord, rendez-vous sur cette URL faire approuver votre numéro de test (le numéro “to”) auprès de Twilio. Vous devrez ajouter le contact indiqué sur la page et lui envoyer un message contenant le code donné sur la page. Et votre numéro sera alors ajouté dans les participants à la Sandbox.
Ensuite, dans le code Python, il suffira de mettre le numéro Whatsapp récupéré sur la sandbox et d'ajouter l'indicateur "whatsapp" devant les numéros de téléphone comme ceci :message = client.messages.create(
to="<strong>whatsapp:+336XXXXXXXX</strong>",
from_="whatsapp:+14155238886",
body="Hey salut, c'est Korben",
media_url="https://services.korben.info/images/assets/[email protected]",
status_callback='http://postb.in/1637163210278-8044048871379')
Et voilà ! Notez que vous pourrez faire de même avec Facebook Messenger disponible en beta ici.
MessagingX permet bien sûr de répondre automatiquement aux messages reçus en mettant en place un webhook sur votre serveur.
Et si vous voulez envoyer des messages vocaux, et bien même principe, sauf qu’à la place de “message” vous utiliserez “calls” comme ceci :
# Demo Twilio par Korben - 2021
# On charge la lib Twilio et notamment l'API Rest
from twilio.rest import Client
# On stocke notre SID et note jeton dans des variables
sid = "<strong>VOTRE_SID</strong>"
token = "<strong>VOTRE_JETON</strong>"
# Et on initialise notre objet client avec nos identifiants.
client = Client(sid,token)
# Puis on forge notre premier message audio
<strong>call = client.calls.create(
twiml='<Response><Say>Hello guys!!! It's Korben</Say></Response>',
to='+336XXXXXXXX',
from_='+18507805044'
)
print(call.sid)</strong>
Vous recevrez alors un appel audio qui vous lira le message.
MessagingX permet évidemment de faire encore plus de choses en matière de personnalisation des messages, mais je vous laisserai maintenant creuser la documentation qui est vraiment bien fournie.
J’espère que ces explications vous auront convaincu de tester Twilio. N’oubliez pas qu’en vous inscrivant via ce lien, vous aurez 20 $ de crédits pour envoyer vos premiers messages.