← 블로그 목록
유즈케이스2026-06-03

본인인증 받는 AI 전화 만들기 — DTMF + 음성 동의로 ARS 대체

본인인증 받는 AI 전화 만들기 — DTMF + 음성 동의로 ARS 대체

기존 ARS 본인인증 — "1번을 눌러주세요, 2번을 ..." 단조롭고 이탈률 높음. ClawOps 070 + AI + DTMF 조합으로 자연스럽게 본인 확인 + 개인정보 동의 + 추가 정보 음성 입력까지 한 통화에 끝.

0. 활용 예

  • 금융 회원가입 본인 확인
  • 부동산 매물 등록 본인 확인
  • 중고거래·당근 부정거래 방지
  • 의료 환자 본인 확인 (예약 변경시)

1. 흐름 설계

[사용자 신청 폼 제출]
   ↓ 자동 트리거
[ClawOps 070 발신 → 사용자 010]
   ↓
[AI 인사 + 동의 안내]
   ↓ 사용자 "네"
[생년월일 음성 입력 받기]
   ↓
[DTMF — 인증번호 6자리 입력 받기 (사이트가 SMS 보낸 번호)]
   ↓
[검증 → DB 마킹 → hang_up]

2. Outbound 본인인증 — 코드

from clawops import ClawOps
from clawops.agent.tools import tool
client = ClawOps()

# 사용자 폼 제출 트리거
def start_verification(user_id: int, phone: str, name: str, birth_year: int):
    # SMS 로 6자리 OTP 발송
    otp = generate_otp()
    db.execute("INSERT INTO otps (user_id, code, expires_at) VALUES (?, ?, ?)",
               (user_id, otp, time.time() + 300))

    # 70 발신 시작
    call = client.calls.create(
        to=phone, from_=KOREA_070,
        agent_config={
            "provider": "openai-realtime",
            "language": "ko-KR",
            "voice": "alloy",
            "system_prompt": IDENTITY_VERIFY_PROMPT.format(
                name=name, expected_birth_year=birth_year, expected_otp=otp,
            ),
            "tools": [verify_otp_tool, mark_verified_tool],
            "max_duration_seconds": 180,
        },
        metadata={"user_id": user_id, "type": "identity_verify"},
    )
    return call.id

IDENTITY_VERIFY_PROMPT = """
당신은 OOO 회사 본인인증 안내원입니다.

# 첫 발화
"안녕하세요, OOO 회사 본인인증 통화입니다. 
{name} 님 본인 맞으시면 '네' 라고 답해주세요. 
통화는 본인 확인 목적으로 녹음됩니다."

# 절차
1. 본인 확인 응답 받기 ("네" 또는 동등 표현)
2. 동의 받기:
   "OOO 회사 회원가입을 위한 본인 확인과 개인정보 수집·이용 동의 부탁드립니다. 동의하시면 '동의합니다' 라고 답해주세요."
3. 생년월일 확인:
   "본인 확인을 위해 출생연도 4자리 말씀해주세요."
   답변과 {expected_birth_year} 비교. 불일치시 hang_up + DB 마킹 'failed'.
4. SMS 코드 입력:
   "방금 보내드린 SMS 6자리 인증번호를 휴대폰 키패드로 입력해주세요."
   DTMF 6자리 받기. verify_otp_tool 호출.
5. 검증 결과:
   - 일치 → mark_verified_tool → "인증 완료되었습니다, 감사합니다."
   - 불일치 → "인증번호가 일치하지 않습니다, 다시 입력해주세요." (최대 2회 재시도)
   - 3회 실패 → "본인인증 실패, 사이트에서 다시 시도해주세요." hang_up

# 절대 금지
- 동의 안 받았는데 진행
- 비밀번호·계좌·카드 묻기
- 본인 확인 외 다른 정보 요청
- 통화 3분 초과
"""

@tool
def verify_otp_tool(entered_code: str, user_id: int) -> dict:
    """SMS OTP 검증."""
    row = db.execute(
        "SELECT code FROM otps WHERE user_id = ? AND expires_at > ?",
        (user_id, time.time()),
    ).fetchone()
    return {"verified": row and row['code'] == entered_code}

@tool
def mark_verified_tool(user_id: int) -> dict:
    """DB 에 인증 완료 마킹."""
    db.execute("UPDATE users SET verified_at = ? WHERE id = ?",
               (time.time(), user_id))
    return {"marked": True}

3. DTMF 입력 받기 — ClawOps Agent 패턴

ClawOps Agent runtime 은 OpenAI Realtime / Gemini Live 와 DTMF 이벤트를 함께 수신. system_prompt 에 "키패드로 입력" 안내하면 사용자가 누른 톤을 AI 가 verify_otp_tool 의 entered_code 인자로 받는다.

4. 통화 예시

AI: "안녕하세요, OOO 회사 본인인증 통화입니다. 김OOO 님 본인 맞으시면 '네' 답해주세요. 통화는 녹음됩니다."
사용자: "네"
AI: "회원가입 본인 확인과 개인정보 수집·이용 동의 부탁드립니다. 동의하시면 '동의합니다' 라고 답해주세요."
사용자: "동의합니다"
AI: "본인 확인을 위해 출생연도 4자리 말씀해주세요."
사용자: "1985년"  
AI: "확인했습니다. 방금 보내드린 SMS 6자리 인증번호를 휴대폰 키패드로 입력해주세요."
사용자: [키패드 123456 입력]
AI: "인증 완료되었습니다, 감사합니다."
[hang_up]

5. 컴플라이언스 (한국)

  • 개인정보보호법 — 동의 받기 의무. 시스템 프롬프트 첫 발화에 명시.
  • 통화 녹음 — 일방 동의 합법이지만 명시 안내 권장 (위 첫 발화에 포함).
  • 본인 확인 정보 저장 — 가능한 최소화 (음성 녹음만 보관, 텍스트 전사는 7일 후 삭제).
  • KISA/금감원 권고 — 금융 본인인증은 별도 보안 요구사항 (PASS 인증 등 보조).

6. 보안

  • OTP — 1회용, 5분 만료, 시도 3회 제한
  • 통화 녹음 — GCP 서울 리전 내, 일정 기간 후 자동 폐기
  • 회사 측에서 사용자 발화 음성 데이터를 외부 LLM 에 전달할 때 PII 마스킹

7. 비용

  • ClawOps Individual ₩19,000/월 (인증 100건 = 30분)
  • SMS OTP 발송: ₩30/건 (LMS)

다음 단계

관련 글 더 보기

ClawOps AI 전화 API로 시작하기

070 번호 발급부터 AI 음성 통화까지, REST API 몇 줄이면 됩니다.