음성 에이전트를 위한 안전한 발신자 인증 설계
- 게시일
- 최종 업데이트
음성 에이전트는 단순한 FAQ 응답기에서 계정을 변경하고, 거래를 처리하며, 민감한 고객 데이터에 접근하는 실행형 시스템으로 빠르게 진화하고 있습니다. 이러한 변화는 중요한 과제를 제기합니다. 기존의 시각적 확인 방법이 없는 대화형 AI 시스템에서 발신자의 신원을 어떻게 인증할 수 있을까요?
음성 에이전트가 구독을 변경하거나 계정 잔액을 조회하거나 환불을 시작할 수 있다면, 전적으로 음성 기반 상호작용을 통해 사람 상담 센터와 동일한 수준의 엄격함으로 발신자를 인증해야 합니다. 회사 정책을 따르는 사람 상담원과 달리 AI 에이전트에는 LLM의 판단에 의존하지 않는 결정론적 도구 기반 인증이 필요합니다.
이 글에서는 엔터프라이즈 배포 전반에서 Forward Deployed Engineer로 일하며 검증한 인증 패턴을 소개합니다. 임베디드 위젯을 위한 세션 기반 인증부터 전화 통신 전용 방식과 OTP 인증까지 5가지 핵심 접근 방식을 살펴보고, ElevenLabs 플랫폼에서 결정론적 워크플로 게이팅을 사용해 각 방식을 구현하는 방법을 설명합니다.
가장 중요한 점은 인증을 대화 추론에 맡길 수 없다는 것입니다. 대신 격리된 하위 에이전트, 도구 기반 검증, 그리고 인증된 사용자만 권한이 필요한 작업에 도달하도록 보장하는 조건부 워크플로 라우팅으로 설계해야 합니다.
요약
- 음성 에이전트의 발신자 인증은 결정론적이고 도구 기반이어야 하며, LLM의 대화 추론에 맡길 수 없습니다.
- 호스트 애플리케이션 인증은 기존 세션 데이터를 에이전트에 전달하므로, 이미 로그인한 사용자는 다시 인증할 필요가 없습니다.
- 지식 기반 인증은 서버 측 도구 호출을 통해 계정 번호나 생년월일처럼 발신자가 제공한 정보를 백엔드 시스템의 정보와 대조합니다.
- 전화 통신 배포에서는 발신자 ID 같은 시스템 동적 변수를 사용해 조용히 인증할 수 있지만, 발신자 ID는 스푸핑되거나 공유될 수 있으므로 두 번째 인증 요소와 함께 사용해야 합니다.
- 일회용 코드 인증은 SMS나 이메일로 코드를 전송하고 백엔드 서비스를 통해 이를 검증합니다.
결정론적 인증을 위한 아키텍처 기반
인증된 사용자만 계정 관련 정보에 접근하도록 하려면 ElevenLabs 워크플로를 통해 환경과 접근 권한을 엄격히 분리하는 것을 권장합니다. 인증은 항상 성공 또는 실패를 나타내는 불리언 출력을 반환하는 도구 호출로 구현하고, ElevenLabs 워크플로 빌더에서 디스패치 도구로 구성해야 합니다.
전환 조건을 도구 호출 결과에 직접 연결하면 계정 데이터에 접근할 수 있는 하위 에이전트에는 인증에 성공한 후에만 도달할 수 있으며, 인증되지 않은 사용자와 완전히 격리된 상태를 유지합니다. 이를 통해 인증이 LLM의 결정에 맡겨지지 않고 결정론적으로 이루어지며, 확인된 신원 없이는 후속 노드로 진행할 수 없습니다.
대안으로 전환 표현식을 신뢰할 수 있는 전환 방식으로 사용할 수 있습니다. 이러한 표현식은 도구 호출 결과를 통해 업데이트되는 동적 변수를 참조합니다.
구현 예시
Salesforce에서 사용자를 확인합니다(도구 호출). 성공하면 Salesforce에서 고객 거래 데이터를 가져오고(또 다른 도구 호출), 이 데이터를 사용해 고객과 소통하고 필요에 따라 다른 작업을 수행하는 하위 에이전트로 사용자를 전환합니다.

사용자 신원 인증 방법
이러한 인증 방법은 ElevenLabs 플랫폼에서 기본적으로 지원되지 않습니다. 인증 데이터가 저장된 CRM 또는 백엔드/데이터베이스와 통합되는 서버 측 도구를 통해 구현할 수 있습니다.
호스트 애플리케이션 인증
웹사이트에 임베드된 음성 에이전트의 경우, 호스트 애플리케이션이 에이전트/위젯을 초기화할 때 동적 변수를 통해 사용자 세션 데이터(로그인 상태, 계정 ID 또는 세션 토큰 등)를 전달할 수 있습니다. 이 변수들은 동일한 동적 변수를 사용해 도구 호출에 자동으로 삽입되므로, 별도의 인증 없이 에이전트가 통합 시스템에서 개인화된 데이터를 가져올 수 있습니다.
사용자가 이미 호스트 애플리케이션에서 인증되었으므로 원활한 지원 흐름을 만들 수 있습니다. 맞춤 구성으로 설정하거나, 위젯 구성에서 런타임에 변수를 전달하는 ElevenLabs 위젯을 사용할 수 있습니다(예: <elevenlabs-convai dynamic-variables='{"user_id": "123", "account_tier": "premium"}'>).
동적 변수 문서에서 전체 설정 방법을 확인하세요.
지식 기반 인증(KBA)
음성 에이전트는 발신자에게 계정 번호, 우편번호, 생년월일 또는 보안 질문의 답변 같은 인증 데이터를 요청합니다. 서버 측 도구(웹훅 또는 백엔드 호출)가 이러한 값을 데이터베이스(CRM 또는 ID 저장소 등)와 대조해 확인합니다. 이 도구는 불리언 상태(is_error)와 설명 텍스트를 모두 포함한 성공/실패 결과를 반환합니다.
결정론적 워크플로 게이팅으로 구현할 수 있습니다. 관련 정보를 요청한 뒤 도구 디스패치를 구성하고, 도구의 성공/실패 상태에 따라 분기하는 워크플로 조건부 전환 엣지를 사용해 인증된 사용자를 ‘권한 있는’ 에이전트 노드로 라우팅합니다.
이 접근 방식은 사기 위험 요건에 따라 정적 보안 질문과 동적 ‘out-of-wallet’ 방식의 검증을 모두 지원합니다.
서버 도구 및 에이전트 워크플로 디스패치 도구 노드 문서에서 자세한 내용을 확인하세요.
시스템 동적 변수(전화 통신 전용)
전화 기반 대화(Twilio 또는 SIP 트렁크 이용)에서는 에이전트가 system__caller_id(발신자의 전화번호)를 비롯한 전화 통신 전용 시스템 변수에 자동으로 접근할 수 있습니다. 이 변수는 대화가 시작되면 자동으로 채워집니다.
다음 두 가지 방식으로 참조할 수 있습니다.
- 프롬프트/메시지에서: 이중 중괄호를 사용해 {{system__caller_id}}처럼 참조하면 실제 값으로 대체됩니다.
- 도구 매개변수에서: 도구 매개변수를 이 변수들을 사용하도록 구성하면 프롬프트에서 언급하지 않고도 조용히 인증할 수 있습니다.
예를 들어 도구가 발신자 ID를 CRM 조회 엔드포인트로 자동 전달하도록 구성하면, 에이전트는 수신 번호가 사용자 인증을 위해 등록된 고객 전화번호와 일치하는지 조용히 확인할 수 있습니다. 도구 호출 대신, 대화가 시작되기 전에 실행되는 대화 시작 웹훅으로 인증을 구성할 수도 있습니다.
보안 참고: 발신자는 등록된 번호와 다른 번호를 사용할 수 있고, 저장된 번호에 권한 없는 사람이 접근할 수도 있으므로 발신자 ID 기반 인증에는 사전 고객 옵트인(동의)이 필요하거나 추가 인증 방식(예: 지식 기반 질문)과 결합해야 합니다.
고급 지식 기반 / 보안 질문 인증
에이전트는 일련의 보안 질문을 하고 발신자가 미리 정의된 개수만큼 정답을 맞힌 경우에만 접근을 허용하여 사용자를 인증할 수 있습니다. 에이전트가 사전 정의된 목록(예: 생년월일, 우편번호, 반려동물 이름)에서 무작위 질문을 선택하도록 프롬프트를 설정하고, 데이터베이스 도구 호출을 통해 발신자의 답변을 검증할 수 있습니다.
인증 도구는 현재 성공 횟수를 포함하는 JSON 응답을 반환합니다. 도구 할당을 사용하면 이 횟수가 자동으로 추출되어 동적 변수(예: auth_success_count)에 저장되거나 업데이트됩니다. 검증에 성공할 때마다 변수 값이 증가합니다.
필요한 검증 횟수(예: 3회)에 도달하면 워크플로 표현식 조건이 동적 변수 값을 확인하고 권한 있는 하위 에이전트 노드로 전환합니다. 이 표현식은 비교 연산자(예: auth_success_count >= 3)를 사용해 인증 상태에 따라 결정론적으로 접근을 제어합니다.

엣지 및 흐름 제어 문서에서 더 자세한 내용을 확인할 수 있습니다.
일회용 코드
SMS 또는 이메일을 통해 사용자 기기로 일회용 코드를 보내는 범용 방식입니다. 사용자는 접근 권한을 얻기 위해 인증용 코드를 에이전트에 다시 알려주어야 합니다.
구현 워크플로는 다음과 같습니다.
- 코드 생성: 에이전트가 전용 엔드포인트에 서버 도구 호출을 수행해 프로세스를 시작합니다. 이 작업으로 안전한 일회용 코드가 생성되고, 사용자가 선호하는 채널(SMS 또는 이메일)을 통해 전송됩니다.
- 사용자 안내: 에이전트가 사용자에게 받은 코드를 알려 달라고 요청합니다. 음성 모드에서는 사용자가 코드를 소리 내어 말하고, 이는 음성 텍스트 변환을 통해 캡처됩니다.
- 코드 검증: 에이전트가 두 번째 도구 호출을 사용해 사용자가 제공한 코드를 백엔드 검증 서비스로 전송합니다. 백엔드는 코드가 일치하는지, 만료되지 않았는지, 이미 사용되지 않았는지 확인합니다.
- 워크플로 라우팅: 에이전트는 검증 응답에 따라 결과를 처리합니다. 성공: 코드가 올바르면 성공 조건을 통해 사용자를 인증 후 워크플로 단계로 안내합니다. 실패: 코드가 올바르지 않으면 사용자가 코드를 다시 입력하도록 안내하거나 대체 절차(예: 새 코드 전송)를 시작할 수 있습니다.
보안 고려 사항: 무차별 대입 시도를 방지하기 위해 속도 제한을 구현해야 하며, 코드는 짧은 만료 시간(3~5분)을 가져야 하고 재시도 횟수는 추적 및 제한해야 합니다. 음성 상호작용에서는 코드를 수집할 때 음성 텍스트 변환의 정확성을 보장하기 위한 확인 프롬프트를 고려하세요.
ElevenAgents로 안전한 음성 인증 시작하기
이러한 인증 방법은 정해진 해법이 아니라 유연하게 조합할 수 있는 구성 요소입니다. 선택은 특정 위험 프로필, 규제 요건, 사용자 경험 목표를 반영해야 합니다. 고객 서비스 봇에 필요한 보안은 거래를 처리하는 은행 업무 어시스턴트와 다릅니다. 플랫폼의 유연성 덕분에 위협 변화와 요건 증가에 따라 보안 전략을 발전시키면서도 항상 보호와 사용자 경험의 균형을 유지할 수 있습니다.
ElevenAgents는 위에서 설명한 결정론적 워크플로 게이팅, 디스패치 도구 및 전화 통신 전용 변수를 제공하므로, LLM의 판단에 전혀 의존하지 않는 발신자 인증을 구축할 수 있습니다.
ElevenAgents 플랫폼에서 전체 워크플로 빌더를 살펴보거나 영업팀에 문의하여 지금 첫 인증 음성 에이전트 워크플로 구축을 시작하세요.




