Vai al contenuto principale
Il report di Verifica telefonica acquisisce l’esito completo di una procedura di verifica OTP telefonica: a chi abbiamo inviato il codice, quale operatore e canale lo hanno gestito, quanti tentativi sono stati necessari, se il numero è usa e getta o VoIP, ed eventuali corrispondenze del numero con la tua blocklist o con le sessioni di altri utenti. Questa pagina documenta la struttura JSON restituita dall’endpoint di decisione, consentendoti di analizzare gli esiti dell’OTP, i metadati dell’operatore e i flag di rischio per ciascun numero verificato.
Report di verifica telefonica di Didit che mostra l'esito dell'OTP, i metadati dell'operatore e i flag di rischio

Panoramica

Un report telefonico viene generato ogni volta che un nodo del workflow esegue la funzionalità di Verifica telefonica. Ciascun report rappresenta una procedura di verifica OTP associata a un singolo numero di telefono e contiene:
  • Il numero di telefono suddiviso in prefisso, numero nazionale e formato E.164 completo, oltre al codice paese ISO e al nome del paese.
  • Metadati dell’operatore (name, type) ricavati dalla rete di destinazione.
  • Flag di rischio booleani (is_disposable, is_virtual) derivati dall’analisi della tipologia di linea.
  • L’effettivo canale di consegna utilizzato (verification_method) e il conteggio dei tentativi di invio dell’OTP.
  • Un registro cronologico lifecycle[] di ogni invio, nuovo tentativo, evento di consegna e tentativo di verifica del codice.
  • Un array matches[] che evidenzia lo stesso numero presente in altre sessioni — in qualsiasi stato, tra KYC, KYB e verifiche API autonome — o nella tua blocklist.
  • Un array warnings[] — eventi di rischio generati durante la verifica (consulta gli Avvisi di Verifica telefonica).
  • Un node_id che identifica quale nodo del grafo del workflow ha generato il report (solo per sessioni V3).
Nei flussi di verifica ospitati, Didit gestisce lo scambio dell’OTP per te. Per le integrazioni API dirette, lo stesso flusso si articola in due chiamate: POST /v3/phone/send/ per recapitare il codice e POST /v3/phone/check/ per convalidare l’inserimento dell’utente. Un OTP in attesa è valido per 5 minuti dal primo invio (i nuovi tentativi non estendono l’intervallo). Nelle sessioni del workflow gli utenti hanno a disposizione per impostazione predefinita 2 tentativi di invio dell’OTP (phone_max_retries) e 2 tentativi di inserimento del codice (phone_max_check_attempts), entrambi configurabili per singolo nodo del workflow; l’esaurimento di uno di questi limiti conclude il passaggio come Declined con VERIFICATION_CODE_ATTEMPTS_EXCEEDED. L’API telefonica autonoma consente 3 tentativi di inserimento del codice per verifica.

Dove appare nelle risposte API

L’endpoint di decisione (GET /v3/session/{sessionId}/decision/) restituisce i report telefonici con la chiave di array al plurale phone_verifications. L’array contiene una voce per ciascun nodo di Verifica telefonica presente nel grafo del workflow — in genere una sola, ma i flussi di step-up possono generarne diverse.
Un valore null indica che nessun passaggio di Verifica telefonica è stato ancora eseguito. Itera sull’array (invece di leggere solo phone_verifications[0]) quando il tuo workflow può raccogliere più di un numero di telefono.

Schema

Lo schema canonico campo per campo si trova nella pagina Modelli di dati.

Valori di stato

Tipi di eventi del ciclo di vita

lifecycle[] è ordinato cronologicamente. Ciascun evento include type, timestamp, details e un importo fatturabile fee (quando applicabile): Il payload details dipende dalla famiglia di eventi:
  • Eventi di invio (PHONE_VERIFICATION_MESSAGE_SENT, PHONE_VERIFICATION_RETRY_MESSAGE_SENT, PHONE_VERIFICATION_BLOCKED) — { status, reason, channel, actual_channel }. status è Success, Retry o Blocked; reason è null a meno che l’invio non sia stato bloccato (invalid_phone_number, repeated_attempts, suspicious, spam, unknown); channel è il canale richiesto e actual_channel è il canale che ha effettivamente consegnato il messaggio (ad esempio un invio WhatsApp deviato su SMS in fallback).
  • Eventi di consegna (PHONE_DELIVERY_DELIVERED, PHONE_DELIVERY_UNDELIVERABLE) — { channel, status } con status impostato su delivered o undeliverable.
  • Eventi di controllo (VALID_CODE_ENTERED, INVALID_CODE_ENTERED) — { code_tried, status } con status impostato su Approved, Declined, Failed o Expired or Not Found.
  • Eventi di stato finale — null, tranne PHONE_VERIFICATION_DECLINED / PHONE_VERIFICATION_IN_REVIEW, che contengono { "reason": "<risk code>" } (ad esempio PHONE_NUMBER_IN_BLOCKLIST).
Il valore fee su un evento di invio rappresenta il prezzo totale di quell’invio: il prezzo dell’operatore o di WhatsApp più la commissione Didit di $0.02, oppure solo la commissione Didit di $0.02 per un codice WhatsApp inviato dal tuo numero WhatsApp Business. È il prezzo stimato fino alla conferma della consegna, dopodiché diventa l’importo effettivo fatturato. Solo gli invii con stato Blocked sono garantiti come gratuiti: qualsiasi altro invio viene addebitato quando la verifica viene finalizzata o scade, anche se la consegna non è mai stata confermata o il messaggio è risultato non recapitabile. Gli eventi di consegna, di verifica e di stato presentano sempre fee: 0.

Corrispondenze tra sessioni

matches[] registra le altre sessioni nella stessa applicazione in cui è stato rilevato lo stesso numero — tra verifiche KYC, KYB e verifiche tramite API autonoma, indipendentemente dal loro stato — oltre ai riscontri di blocklist configurati nelle liste dell’API di gestione. Le sessioni che condividono il valore vendor_data della sessione corrente vengono escluse (lo stesso utente finale non genera corrispondenze con se stesso) e l’array è limitato a un massimo di 5 voci. Quando il numero è presente nella tua blocklist ma nessuna delle sessioni corrispondenti è inserita in blocklist, viene anteposta all’array una voce sintetica con source: "list_entry" (con tutti i campi della sessione impostati su null).

Esempi

Approvata — OTP WhatsApp, operatore mobile

Rifiutata — numero VoIP in blocklist

L’utente ha inserito un OTP valido, ma la finalizzazione ha rilevato il numero nella blocklist dell’applicazione (rifiuto automatico) e ha segnalato il tipo di linea VoIP (voip_number_action è rimasto impostato su NO_ACTION, quindi viene registrato come information). Poiché nessuna sessione corrispondente è inserita in blocklist, il riscontro della blocklist appare come una corrispondenza sintetica list_entry.

Risorse correlate

Ultima modifica il 7 novembre 2026