
Descripción general
Se genera un informe de teléfono cada vez que un nodo de un flujo de verificación (workflow) ejecuta la función de Verificación de teléfono. Cada informe corresponde a un desafío OTP para un número de teléfono y contiene:- El número de teléfono desglosado en prefijo, número nacional y formato E.164 completo, junto con el código de país ISO y el nombre del país.
- Metadatos del operador (
name,type) obtenidos a partir de la red de destino. - Indicadores de riesgo booleanos (
is_disposable,is_virtual) derivados del análisis del tipo de línea. - El canal de entrega utilizado realmente (
verification_method) y el número de intentos de envío del OTP. - Un registro cronológico
lifecycle[]de cada envío, reintento, evento de entrega e intento de comprobación del código. - Un array
matches[]que muestra el mismo número en otras sesiones (con cualquier estado, en verificaciones KYC, KYB y de API independiente) o en tu lista de bloqueo. - Un array
warnings[]con los eventos de riesgo emitidos durante la verificación (consulta Advertencias de Verificación de teléfono). - Un
node_idque identifica qué nodo del grafo del flujo generó el informe (solo en sesiones V3).
POST /v3/phone/send/ para enviar el código y POST /v3/phone/check/ para validar lo que introduce el usuario. Un OTP pendiente es válido durante 5 minutos desde el primer envío (los reintentos no amplían ese plazo). En las sesiones de flujo, los usuarios disponen por defecto de 2 intentos de envío del OTP (phone_max_retries) y 2 intentos de introducción del código (phone_max_check_attempts), ambos configurables por nodo del flujo; agotar cualquiera de los dos límites finaliza el paso como Declined con VERIFICATION_CODE_ATTEMPTS_EXCEEDED. La API de teléfono independiente permite 3 intentos de introducción del código por verificación.
Dónde aparece en las respuestas de la API
El endpoint de decisión (GET /v3/session/{sessionId}/decision/) devuelve los informes de verificación telefónica bajo la clave de array en plural phone_verifications. El array contiene una entrada por cada nodo de Verificación de teléfono del grafo del flujo; normalmente es una, pero los flujos de verificación reforzada pueden generar varias.
null significa que todavía no se ha ejecutado ningún paso de Verificación de teléfono. Recorre el array (en lugar de leer phone_verifications[0]) cuando tu flujo pueda recopilar más de un número de teléfono.
Esquema
El esquema canónico, campo por campo, está en la página Modelos de datos.Valores de estado
Tipos de eventos del ciclo de vida
lifecycle[] está ordenado cronológicamente. Cada evento tiene type, timestamp, details y una fee facturable (cuando corresponde):
El payload de
details depende de la familia del evento:
- Eventos de envío (
PHONE_VERIFICATION_MESSAGE_SENT,PHONE_VERIFICATION_RETRY_MESSAGE_SENT,PHONE_VERIFICATION_BLOCKED):{ status, reason, channel, actual_channel }.statusesSuccess,RetryoBlocked;reasonesnullsalvo que el envío se haya bloqueado (invalid_phone_number,repeated_attempts,suspicious,spam,unknown);channeles el canal solicitado yactual_channelel canal por el que se realizó la entrega (por ejemplo, un envío por WhatsApp que recurrió a SMS). - Eventos de entrega (
PHONE_DELIVERY_DELIVERED,PHONE_DELIVERY_UNDELIVERABLE):{ channel, status }constatusdeliveredoundeliverable. - Eventos de comprobación (
VALID_CODE_ENTERED,INVALID_CODE_ENTERED):{ code_tried, status }constatusApproved,Declined,FailedoExpired or Not Found. - Eventos de estado final:
null, exceptoPHONE_VERIFICATION_DECLINED/PHONE_VERIFICATION_IN_REVIEW, que incluyen{ "reason": "<risk code>" }(por ejemplo,PHONE_NUMBER_IN_BLOCKLIST).
fee en un evento de envío es el precio total de ese envío: el precio del operador o de WhatsApp más la tarifa de Didit de $0.02, o solo la tarifa de Didit de $0.02 para un código de WhatsApp enviado desde tu propio número de WhatsApp Business. Es el precio estimado hasta que se confirma la entrega y, a partir de ese momento, el importe realmente facturado. Solo los envíos Blocked son gratuitos con garantía: cualquier otro envío se cobra cuando la verificación finaliza o expira, aunque nunca se haya confirmado la entrega o el mensaje no se haya podido entregar. Los eventos de entrega, de comprobación y de estado siempre incluyen fee: 0.
Coincidencias entre sesiones
matches[] registra otras sesiones de la misma aplicación en las que se vio el mismo número (en verificaciones KYC, KYB y mediante la API de teléfono independiente, sea cual sea su estado), además de las coincidencias con la lista de bloqueo configurada en las listas de la management API. Se excluyen las sesiones que comparten el vendor_data de la sesión actual (el mismo usuario final no coincide consigo mismo) y el array está limitado a 5 entradas. Cuando el número está en tu lista de bloqueo pero ninguna de las sesiones coincidentes está en ella, se antepone al array una entrada sintética con source: "list_entry" (con todos los campos de sesión en null).
Ejemplos
Aprobado: OTP por WhatsApp, operador móvil
Rechazado: número VoIP en la lista de bloqueo
El usuario introdujo un OTP válido, pero al finalizar se encontró el número en la lista de bloqueo de la aplicación (rechazo automático) y se marcó su tipo de línea VoIP (voip_number_action se dejó en NO_ACTION, por lo que se registra como information). Como ninguna sesión coincidente está en la lista de bloqueo, la coincidencia con la lista de bloqueo aparece como una coincidencia sintética list_entry.
Relacionado
- Descripción general de la verificación de teléfono: comportamiento de la función, precios y canales compatibles.
- Advertencias de la verificación de teléfono: todos los códigos de riesgo, factores que desencadenan un rechazo y acciones configurables.
- Modelos de datos: verificación de teléfono: esquema canónico campo por campo.
- API de teléfono independiente: endpoints
POST /v3/phone/send/yPOST /v3/phone/check/. - Management API: listas: gestiona la lista de bloqueo de teléfonos que alimenta
matches[]consource: list_entry.