← 블로그 목록

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

한국 070 인바운드 + 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
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))

    # 070 발신 시작 — 콘솔에서 만든 본인인증 에이전트에게 맡긴다
    call = client.calls.create(
        to=phone, from_=KOREA_070,
        agent_id=VERIFY_AGENT_ID,
        call_context={          # 이번 통화에만 적용되는 지시
            "instruction": IDENTITY_VERIFY_PROMPT.format(
                name=name, expected_birth_year=birth_year, expected_otp=otp,
            ),
            "variables": {"userId": user_id, "name": name},
        },
    )
    return call.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 도구 호출.
5. 검증 결과:
   - 일치 → mark_verified 도구 → "인증 완료되었습니다, 감사합니다."
   - 불일치 → "인증번호가 일치하지 않습니다, 다시 입력해주세요." (최대 2회 재시도)
   - 3회 실패 → "본인인증 실패, 사이트에서 다시 시도해주세요." hang_up

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

OTP 검증과 인증 완료 마킹은 자사 시스템이 해야 하는 일이라, MCP 서버로 노출해 에이전트에 붙입니다. 콘솔의 에이전트 상세 → 「도구」탭에서 서버 주소를 등록하면 통화 중 AI가 호출합니다.

# 본인인증 MCP 서버 (자사 인프라에서 실행)
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("identity-verify")

@mcp.tool()
def verify_otp(entered_code: str, user_id: int) -> str:
    """사용자가 말하거나 입력한 OTP 코드를 검증한다."""
    row = db.execute(
        "SELECT code FROM otps WHERE user_id = ? AND expires_at > ?",
        (user_id, time.time()),
    ).fetchone()
    return "일치" if row and row["code"] == entered_code else "불일치"

@mcp.tool()
def mark_verified(user_id: int) -> str:
    """본인확인 완료를 기록한다."""
    db.execute("UPDATE users SET verified_at = ? WHERE id = ?", (time.time(), user_id))
    return "인증 완료로 기록했습니다."

user_id는 발신할 때 call_context.variables로 넘긴 값을 AI가 그대로 사용합니다.

3. DTMF 입력 받기

통화 중 키패드 입력도 함께 받습니다. 지시문에 "코드를 말씀하시거나 키패드로 입력해 주세요"라고 안내해 두면, 사용자가 누른 번호가 AI에게 전달되어 verify_otpentered_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)

다음 단계

이전 글

정기 확인 전화 자동화 — 구독·결제·예약 리마인더 AI 통화

ClawOps AI 전화 API로 시작하기

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