Passer au contenu principal
Le rapport de Vérification du téléphone capture l’intégralité du résultat d’une procédure OTP par téléphone : à qui nous avons envoyé le code, quel opérateur et quel canal l’ont traité, combien de tentatives ont été nécessaires, si le numéro est jetable ou VoIP, ainsi que toutes les correspondances inter-sessions avec votre liste de blocage ou les sessions d’autres utilisateurs. Cette page documente la structure JSON renvoyée par l’endpoint de décision afin que vous puissiez analyser les résultats OTP, les métadonnées de l’opérateur et les indicateurs de risque pour chaque numéro vérifié.
Rapport de vérification du téléphone Didit montrant le résultat OTP, les métadonnées de l'opérateur et les indicateurs de risque

Vue d’ensemble

Un rapport téléphonique est généré chaque fois qu’un nœud de workflow exécute la fonctionnalité Vérification du téléphone. Chaque rapport représente une procédure OTP pour un numéro de téléphone et contient :
  • Le numéro de téléphone décomposé en préfixe, numéro national et format E.164 complet, ainsi que le code pays ISO et le nom du pays.
  • Les métadonnées de l’opérateur (name, type) obtenues auprès du réseau de destination.
  • Des indicateurs de risque booléens (is_disposable, is_virtual) issus de l’analyse du type de ligne.
  • Le canal de livraison effectivement utilisé (verification_method) et le nombre de tentatives d’envoi de l’OTP.
  • Un journal chronologique lifecycle[] de chaque envoi, nouvelle tentative, événement de livraison et tentative de vérification de code.
  • Un tableau matches[] faisant ressortir le même numéro sur d’autres sessions — quel que soit le statut, pour le KYC, le KYB et les vérifications d’API autonomes — ou sur votre liste de blocage.
  • Un tableau warnings[] — événements de risque émis pendant la vérification (voir les avertissements liés à la Vérification du téléphone).
  • Un node_id qui identifie quel nœud du graphe de workflow a généré le rapport (sessions V3 uniquement).
Dans les flux de vérification hébergés, Didit gère l’échange d’OTP pour vous. Pour les intégrations API directes, le même flux s’effectue en deux appels — POST /v3/phone/send/ pour acheminer le code et POST /v3/phone/check/ pour valider la saisie de l’utilisateur. Un OTP en attente est valide pendant 5 minutes à compter du premier envoi (les nouvelles tentatives ne prolongent pas ce délai). Dans les sessions de workflow, les utilisateurs disposent par défaut de 2 tentatives d’envoi d’OTP (phone_max_retries) et de 2 tentatives de saisie de code (phone_max_check_attempts) — toutes deux configurables par nœud de workflow ; épuiser l’un ou l’autre de ces plafonds finalise l’étape avec le statut Declined et la raison VERIFICATION_CODE_ATTEMPTS_EXCEEDED. L’API téléphonique autonome autorise 3 tentatives de saisie de code par vérification.

Emplacement dans les réponses de l’API

L’endpoint de décision (GET /v3/session/{sessionId}/decision/) renvoie les rapports téléphoniques sous la clé de tableau plurielle phone_verifications. Le tableau contient une entrée par nœud de Vérification du téléphone dans le graphe de workflow — généralement une seule, mais les flux d’authentification renforcée (step-up) peuvent en générer plusieurs.
Une valeur null signifie qu’aucune étape de Vérification du téléphone n’a encore été exécutée. Parcourez le tableau (plutôt que de lire phone_verifications[0]) lorsque votre workflow peut collecter plusieurs numéros de téléphone.

Schéma

Le schéma champ par champ de référence se trouve sur la page Modèles de données.

Valeurs de statut

Types d’événements du cycle de vie

lifecycle[] est trié par ordre chronologique. Chaque événement comporte type, timestamp, details et, le cas échéant, un fee facturable : Le payload details dépend de la famille d’événements :
  • Événements d’envoi (PHONE_VERIFICATION_MESSAGE_SENT, PHONE_VERIFICATION_RETRY_MESSAGE_SENT, PHONE_VERIFICATION_BLOCKED) — { status, reason, channel, actual_channel }. status est Success, Retry ou Blocked ; reason est null sauf si l’envoi a été bloqué (invalid_phone_number, repeated_attempts, suspicious, spam, unknown) ; channel est le canal demandé et actual_channel le canal sur lequel le message a effectivement été livré (par exemple, un envoi WhatsApp qui a basculé sur SMS).
  • Événements de livraison (PHONE_DELIVERY_DELIVERED, PHONE_DELIVERY_UNDELIVERABLE) — { channel, status } avec status valant delivered ou undeliverable.
  • Événements de vérification (VALID_CODE_ENTERED, INVALID_CODE_ENTERED) — { code_tried, status } avec status valant Approved, Declined, Failed ou Expired or Not Found.
  • Événements de statut final — null, sauf pour PHONE_VERIFICATION_DECLINED / PHONE_VERIFICATION_IN_REVIEW, qui contiennent { "reason": "<risk code>" } (par exemple PHONE_NUMBER_IN_BLOCKLIST).
fee sur un événement d’envoi correspond au prix total de cet envoi : le prix de l’opérateur ou de WhatsApp plus les frais Didit de $0.02, ou uniquement les frais Didit de $0.02 pour un code WhatsApp envoyé depuis votre propre numéro WhatsApp Business. Il s’agit du prix estimé jusqu’à ce que la livraison soit confirmée, puis du montant réel facturé. Seuls les envois Blocked sont garantis gratuits : tout autre envoi est facturé lorsque la vérification est finalisée ou expire, même si la livraison n’a jamais été confirmée ou si le message n’a pas pu être livré. Les événements de livraison, de vérification et de statut comportent toujours fee: 0.

Correspondances inter-sessions

matches[] enregistre les autres sessions de la même application où le même numéro a été détecté — dans les vérifications KYC et KYB et les vérifications effectuées via l’API autonome, quel que soit leur statut — ainsi que les correspondances de liste de blocage configurées dans les listes de la management-api. Les sessions partageant le vendor_data de la session actuelle sont exclues (le même utilisateur final n’est pas mis en correspondance avec lui-même), et le tableau est limité à 5 entrées. Lorsque le numéro figure sur votre liste de blocage mais qu’aucune des sessions correspondantes n’est sur liste de blocage, une entrée synthétique avec source: "list_entry" (tous les champs de session étant à null) est ajoutée au début du tableau.

Exemples

Approuvé — OTP WhatsApp, opérateur mobile

Refusé — numéro VoIP sur liste de blocage

L’utilisateur a saisi un OTP valide, mais la finalisation a détecté le numéro sur la liste de blocage de l’application (refus automatique) et a signalé son type de ligne VoIP (voip_number_action laissé à NO_ACTION, ce qui est donc enregistré comme information). Comme aucune session correspondante n’est sur liste de blocage, la correspondance avec la liste de blocage apparaît sous la forme d’une correspondance synthétique list_entry.

Pages associées

Dernière modification le 7 novembre 2026