Twilio Lookup - Une API pour valider un numéro de téléphone et réduire la fraude
Dernièrement, vous avez eu le plaisir de découvrir certains des services de Twilio, notamment l’API Verify qui permet de valider des utilisateurs, un super tuto pour envoyer des SMS en Python, ou encore la merveilleuse application de double authentification Authy.
Cela vous a vraiment plu, du coup, je vous propose aujourd’hui de découvrir Lookup par Twilio
Qu’est-ce que Lookup ?
Enfin disponible dans sa version 2, Lookup est un service de Twilio qui se présente sous la forme d’un API et qui permet à ceux qui l’intègrent dans leurs projets de réduire les risques de fraude et de spam. Alors comment ça fonctionne ?
Et bien lorsqu’un utilisateur entre son numéro de téléphone, l’API Lookup est capable de déterminer si ce numéro est valide en identifiant le type de ligne (mobile, fixe, VoIP, numéro temporaire, etc.). Pour cela, Lookup croise les informations données par l’utilisateur avec les informations données par les opérateurs téléphoniques pour vérifier qu’elle concordent. Cela permet d’éviter les fraudes de type SIM Swapping, la création de faux comptes, le vol de comptes ou le spam, notamment en détectant l’usage de numéros virtuels par définition suspects.
Au-delà de cet aspect sécurité très important, le fait de pouvoir valider un numéro de téléphone permet d’éviter les erreurs de distribution de messages ou de payer pour des appels qui n’aboutiront jamais. Et comme cette vérification se fait de manière transparente sans solliciter l’utilisateur avec une validation de numéro de téléphone supplémentaire, les taux de conversion augmentent, car il y a moins de freins pour l’internaute.
Dans sa v1, Lookup fonctionnait uniquement pour des numéros aux États-Unis et au Canada, mais avec cette v2, c’est l’Europe et le monde entier qui sont couverts. Tout est évidemment réalisé dans le respect du RGPD et les données personnelles associées au numéro ne sont pas récupérables via l’API.
Pour cette démo, je vais vous montrer comment intégrer Lookup dans un script Python afin de faire :
- De la validation simple de numéro
- Obtenir la version internationalisée du numéro
- Identifier l’opérateur et le type de ligne
- Connaître le nom rattaché à un numéro
Comment valider un numéro de téléphone avec Lookup ?
J’ai écrit mes exemples en Python, en m’inspirant de la documentation officielle de Twilio, mais sachez qu’avec les libs disponibles, vous pouvez évidemment coder ce genre de choses dans le langage de votre choix (Ruby, C#, PHP, Java…etc.)
Admettons que vous ayez une page web sur laquelle un internaute doit saisir son numéro de téléphone. Comment savoir si ce numéro est valide au moins pour la France et comment l’avoir dans sa version locale (06 12 13 14 15) et dans sa version internationale ?
Et bien pour cela, vous devez vous munir de vos clés API Twilio pour la V2 de Lookup et appeler l’API Lookup comme ceci :
from twilio.rest import Client account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX" auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX" client = Client(account_sid, auth_token) phone_number = client.lookups.v2.phone_numbers('0612131415').fetch(country_code='FR') if phone_number.valid is True: print('Ce numéro est bien valide en France et sa version internationale est : ' + phone_number.phone_number) else: print('Ce numéro n'est pas valide en France')
Un bon moyen donc de contrôle que le numéro qui vous est transmis est le bon. D’ailleurs, pour identifier une erreur dans un numéro, vous pouvez également utiliser la propriété “validation_errors” comme ceci, qui vous renverra une de ces valeurs en cas d’erreur : TOO_SHORT, TOO_LONG, INVALID_BUT_POSSIBLE, INVALID_COUNTRY_CODE, INVALID_LENGTH, NOT_A_NUMBER.
from twilio.rest import Client account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX" auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX" client = Client(account_sid, auth_token) phone_number = client.lookups.v2.phone_numbers('+33451083391').fetch( fields='<strong>validation</strong>') <strong>print(phone_number.validation_errors)</strong>
Comment récupérer les différentes versions d’un numéro ?
En fonction du numéro saisi, vous pourriez avoir besoin soit de son code pays, soit du numéro international (code pays + numéro), soit de sa version locale :
from twilio.rest import Client account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX" auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX" client = Client(account_sid, auth_token) phone_number = client.lookups.v2.phone_numbers( '0612131415').fetch(country_code='FR') print('Le code indicatif : ' + phone_number.calling_country_code) print('Le code pays : ' + phone_number.country_code) print('Le numéro au format national : ' + phone_number.national_format) print('Le numéro au format international : ' + phone_number.phone_number)
Vous obtiendrez alors le résultat suivant :
Le code indicatif : 33 Le code pays : FR Le numéro au format national : 06 12 13 14 15 Le numéro au format international : +33612131415
Savoir identifier l’opérateur et le type de ligne liés à un numéro de téléphone ?
Un truc sympa avec l’API lookup de Twilio, c’est aussi la possibilité d’identifier l’opérateur et le type de ligne associé à un numéro. Ainsi, vous saurez si c’est un mobile, une ligne de fixe, un numéro VoIP…etc.
Pour cela, on va utiliser la propriété “line_type_intelligence comme ceci :
from twilio.rest import Client account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX" auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX" client = Client(account_sid, auth_token) phone_number = client.lookups.v2.phone_numbers( '0612131415').fetch(country_code='FR', fields='line_type_intelligence') print('Opérateur téléphonique : ' + phone_number.line_type_intelligence["carrier_name"]) print('Type de ligne : ' + phone_number.line_type_intelligence["type"])
Et voici le type de retour que vous obtiendrez :
Opérateur téléphonique : ORANGE FRANCE (01) Type de ligne : mobile
D’autres fonctionnalités payantes ou encore en beta, permettent également de faire des choses très utiles comme la possibilité de savoir si la carte SIM a été swappé récemment (pour éviter les arnaques) ou tout simplement trouver le nom lié au numéro de téléphone. Mais ces options ne sont pas disponibles dans tous les pays. Je vous invite à consulter cette page pour les simswap.
Comment savoir à qui appartient un numéro ?
Cette possibilité ne fonctionne pas pour la France (Because RGPD), mais uniquement pour certains pays comme les États-Unis ou la Grande-Bretagne et uniquement pour certains numéros. Prenons par exemple ce numéro américain. En utilisant la propriété “caller_name”, il est possible de savoir quel est le nom lié à ce numéro et savoir si c’est un numéro d’entreprise ou non.
from twilio.rest import Client account_sid = "XXXXXXXXXXXXXXXXXXXXXXXXX" auth_token = "XXXXXXXXXXXXXXXXXXXXXXXXX" client = Client(account_sid, auth_token) phone_number = client.lookups.v2.phone_numbers( '+13475026441').fetch(fields='caller_name') print("Nom : " + phone_number.caller_name["caller_name"]) print("Type de numéro : " +phone_number.caller_name["caller_type"])
Voici ce que j’obtiens, à savoir le nom d’une entreprise de plomberie localisé à New York.
Nom : RITE PLUMBING Type de numéro : BUSINESS
Vous l’aurez compris, l’intégration de Lookup v2 dans vos applications est assez simple à mettre en œuvre et coûte très peu cher. Cela permet de vous assurer que les coordonnées téléphoniques saisies par un utilisateur sont correctes et qu’il ne s’agit pas d’un faux numéro ou d’un numéro qui fait l’objet d’une fraude notamment dans le cadre d’un SIM Swapping.
Vous éliminerez également des opérations de validation de numéro assez pénibles pour l’utilisateur, ce qui vous permettra d’augmenter vos taux de conversion et surtout de réduire vos coûts d’envoi de messages en cas de numéro invalide. Bref, un must pour tous les projets qui exigent une validation correcte du numéro de téléphone d’utilisateurs.