메인 콘텐츠로 건너뛰기
전화번호 인증 보고서는 전화번호 OTP 챌린지의 전체 결과를 캡처합니다. 코드를 전송한 대상, 이를 처리한 통신사 및 채널, 시도 횟수, 번호가 일회용인지 또는 VoIP인지 여부, 차단 목록 또는 다른 사용자의 세션과의 교차 세션 일치 여부 등이 포함됩니다. 이 페이지에서는 인증된 각 번호에 대한 OTP 결과, 통신사 메타데이터, 위험 플래그를 파싱할 수 있도록 결정 endpoint가 반환하는 JSON 형태를 설명합니다.
OTP 결과, 통신사 메타데이터 및 위험 플래그를 보여주는 Didit 전화번호 인증 보고서

개요

워크플로 노드가 전화번호 인증 기능을 실행할 때마다 전화번호 보고서가 생성됩니다. 각 보고서는 하나의 전화번호에 대한 한 번의 OTP 챌린지를 나타내며 다음을 포함합니다.
  • 접두사, 국내 번호 및 전체 E.164 형식으로 분할된 전화번호와 ISO 국가 코드 및 국가명.
  • 대상 네트워크에서 확인된 통신사 메타데이터(name, type).
  • 회선 유형 분석에서 도출된 불리언 위험 플래그(is_disposable, is_virtual).
  • 사용된 실제 전송 채널(verification_method) 및 OTP 전송 시도 횟수.
  • 모든 전송, 재시도, 전송 이벤트 및 코드 확인 시도에 대한 시간순 lifecycle[] 로그.
  • 다른 세션(KYC, KYB 및 독립형 API 인증 전반의 모든 상태) 또는 차단 목록에 동일한 번호가 있는지 나타내는 matches[] 배열.
  • warnings[] 배열 — 인증 도중 발생한 위험 이벤트(전화번호 인증 경고 참조).
  • 보고서를 생성한 워크플로 그래프 노드를 식별하는 node_id(V3 세션 전용).
호스팅 인증 플로우에서는 Didit이 대신 OTP 교환을 처리합니다. 직접 API 연동의 경우 동일한 플로우가 두 번의 호출로 이루어집니다. 코드를 전송하는 POST /v3/phone/send/와 사용자가 입력한 값을 검증하는 POST /v3/phone/check/입니다. 대기 중인 OTP는 최초 전송 후 5분간 유효합니다(재시도해도 유효 기간이 연장되지 않습니다). 워크플로 세션에서 사용자는 기본적으로 2회의 OTP 전송 시도(phone_max_retries)와 2회의 코드 입력 시도(phone_max_check_attempts)를 할 수 있으며, 둘 다 워크플로 노드별로 조정할 수 있습니다. 두 한도 중 하나라도 소진되면 해당 단계는 VERIFICATION_CODE_ATTEMPTS_EXCEEDED와 함께 Declined로 완료됩니다. 독립형 전화번호 API는 인증 건당 3회의 코드 입력 시도를 허용합니다.

API 응답에서 표시되는 위치

결정 endpoint(GET /v3/session/{sessionId}/decision/)는 복수형 배열 키인 phone_verifications 아래에 전화번호 보고서를 반환합니다. 이 배열에는 워크플로 그래프의 전화번호 인증 노드당 하나의 항목이 포함되며, 일반적으로 하나이지만 단계별 강화 플로우에서는 여러 개가 생성될 수 있습니다.
null 값은 전화번호 인증 단계가 아직 실행되지 않았음을 의미합니다. 워크플로에서 둘 이상의 전화번호를 수집할 수 있는 경우, phone_verifications[0]을 바로 읽기보다는 배열을 순회하십시오.

스키마

표준 필드별 스키마는 데이터 모델 페이지에 있습니다.

상태 값

수명 주기 이벤트 유형

lifecycle[]는 시간순으로 정렬됩니다. 각 이벤트에는 type, timestamp, details 및 청구 가능한 fee(해당하는 경우)가 포함됩니다. details payload는 이벤트 제품군에 따라 다릅니다.
  • 발송 이벤트 (PHONE_VERIFICATION_MESSAGE_SENT, PHONE_VERIFICATION_RETRY_MESSAGE_SENT, PHONE_VERIFICATION_BLOCKED) — { status, reason, channel, actual_channel }. status는 Success, Retry, Blocked 중 하나입니다. reason은 발송이 차단된 경우(invalid_phone_number, repeated_attempts, suspicious, spam, unknown)를 제외하고 null입니다. channel은 요청된 채널이며, actual_channel은 실제로 전송된 채널(예: SMS로 대체된 WhatsApp 발송)입니다.
  • 전송 이벤트 (PHONE_DELIVERY_DELIVERED, PHONE_DELIVERY_UNDELIVERABLE) — { channel, status }이며 status는 delivered 또는 undeliverable입니다.
  • 확인 이벤트 (VALID_CODE_ENTERED, INVALID_CODE_ENTERED) — { code_tried, status }이며 status는 Approved, Declined, Failed, Expired or Not Found 중 하나입니다.
  • 최종 상태 이벤트 — null이지만, PHONE_VERIFICATION_DECLINED / PHONE_VERIFICATION_IN_REVIEW는 예외적으로 { "reason": "<risk code>" }(예: PHONE_NUMBER_IN_BLOCKLIST)를 포함합니다.
발송 이벤트의 fee는 해당 발송의 총 가격입니다. 즉, 통신사 또는 WhatsApp 요금에 Didit 수수료 $0.02를 더한 금액이거나, [자체 WhatsApp Business 번호](/ko/core-technology/phone-verification/overview#자체-번호로-whatsapp-코드-발송)에서 전송된 WhatsApp 코드의 경우 Didit 수수료 $0.02만 부과됩니다. 전달이 확인될 때까지는 예상 가격이며, 전달이 확인되면 실제 청구 금액이 됩니다. Blocked 발송만 무료가 보장됩니다. 전송이 확인되지 않았거나 메시지를 전송할 수 없었던 경우에도 다른 모든 발송은 인증이 완료되거나 만료될 때 요금이 청구됩니다. 전송, 확인 및 상태 이벤트는 항상 fee: 0입니다.

세션 간 일치 항목

matches[]는 상태와 관계없이 KYC, KYB 및 독립형 API 인증 전반에서 동일한 번호가 확인된 동일 애플리케이션 내의 다른 세션과 Management API 목록에 구성된 차단 목록 일치 항목을 기록합니다. 현재 세션의 vendor_data를 공유하는 세션은 제외되며(동일한 최종 사용자는 자신과 일치하지 않음), 배열은 최대 5개 항목으로 제한됩니다. 해당 번호가 차단 목록에 있지만 일치하는 세션 중 차단 목록에 포함된 세션이 없는 경우, source: "list_entry"(모든 세션 필드는 null)를 가진 합성 항목이 배열의 맨 앞에 추가됩니다.

예시

승인됨 — WhatsApp OTP, 모바일 통신사

거부됨 — 차단 목록에 등록된 VoIP 번호

사용자가 유효한 OTP를 입력했으나 완료 시 해당 번호가 애플리케이션의 차단 목록에서 발견되어(자동 거부) VoIP 회선 유형 플래그가 지정되었습니다(voip_number_action이 NO_ACTION으로 유지되어 information으로 기록됨). 일치하는 세션 중 차단 목록에 포함된 세션이 없으므로, 차단 목록 일치 항목은 합성 list_entry 일치 항목으로 표시됩니다.

관련 항목

마지막 수정일 2026년 11월 7일