ElevenLabs로 고객 서비스 IVR 구축하는 방법: 사람처럼 들리는 AI 음성 자동화
대부분의 IVR이 끔찍하게 들리는 이유
IVR(Interactive Voice Response)은 고객이 전화를 걸면 가장 먼저 만나는 접점이다. 그런데 대부분의 IVR은 고객 경험을 해치는 방향으로 작동한다. “영업부에 연결하시려면 1번, 고객지원은 2번, 기타 문의는 3번을 눌러주세요”라는 로봇 같은 안내를 듣고 좋은 인상을 받는 사람은 없다.
IVR 음성 품질이 낮은 근본 원인은 세 가지다. 첫째, 직원이 처리되지 않은 공간에서 녹음한 경우다. 배경 소음, 반향, 일관되지 않은 음질이 문제다. 직원이 퇴사하면 새 직원의 다른 목소리로 일부만 재녹음되어, 메뉴마다 목소리가 달라지는 상황이 발생한다. 둘째, 기본 TTS(Text-to-Speech) 엔진을 사용한 경우다. 기계적이고 단조로운 음성이 전문성을 떨어뜨린다. 셋째, 전문 성우를 활용한 경우다. 품질은 좋지만, 스크립트를 변경할 때마다 재녹음이 필요하여 비용과 시간이 든다.
ElevenLabs는 이 세 가지 문제를 모두 해결하는 위치에 있다. AI 생성 음성이지만 사람처럼 자연스럽다. 항상 같은 목소리와 품질을 유지한다. 스크립트 변경 시 몇 분 만에 재생성할 수 있다. 29개 이상의 언어를 지원하여 다국어 IVR도 쉽게 구축한다.
1단계: 콜 플로우 설계
모든 경로 매핑
IVR 설계의 첫 단계는 발신자가 취할 수 있는 모든 경로를 매핑하는 것이다. 음성 생성보다 이 설계가 훨씬 중요하다.
콜 플로우 매핑 구조:
인입 전화
|
v
환영 인사 (영업시간/비영업시간 분기)
|
+--> [영업시간] 메인 메뉴
| |
| +--> 1번: 주문 관련
| | +--> 1-1: 주문 상태 확인 (자동 처리)
| | +--> 1-2: 주문 변경/취소 (상담원 연결)
| | +--> 1-3: 반품/교환 (상담원 연결)
| |
| +--> 2번: 기술 지원
| | +--> 2-1: 계정 잠금 해제 (자동 처리)
| | +--> 2-2: 제품 사용 문의 (상담원 연결)
| | +--> 2-3: 장애 신고 (우선 상담원 연결)
| |
| +--> 3번: 결제/청구
| |
| +--> 0번: 상담원 직접 연결
| |
| +--> 입력 없음 (10초) --> 메뉴 반복
| +--> 잘못된 입력 --> 안내 후 메뉴 반복
| +--> 3회 연속 잘못된 입력 --> 상담원 연결
|
+--> [비영업시간] 비영업시간 안내
+--> 음성 메시지 남기기
+--> 콜백 요청
핵심 원칙 몇 가지가 있다. 메뉴 깊이는 최대 2단계까지만 허용한다. 3단계 이상 들어가면 발신자가 현재 위치를 잃어버린다. 각 메뉴의 선택지는 최대 4개로 제한한다. 5개 이상이면 마지막 옵션을 기억하지 못한다. 항상 “상담원 연결” 탈출구를 제공한다. 어떤 단계에서든 0번으로 사람에게 연결될 수 있어야 한다. 에러 처리를 명시적으로 설계한다. 입력 없음, 잘못된 입력, 반복 실패에 대한 경로가 있어야 한다.
대기 시나리오
상담원 연결 대기 시간이 발생할 때의 경험도 설계해야 한다.
대기 시나리오:
대기 시작 안내
--> 예상 대기 시간 (가능한 경우)
--> 대기 음악 (15초)
--> 중간 안내 ("계속 대기 중입니다. 잠시만 기다려 주세요.")
--> 대기 음악 (30초)
--> 대안 안내 ("웹사이트에서도 문의가 가능합니다.")
--> 대기 음악 (30초)
--> 콜백 옵션 ("대기 대신 전화를 끊고 순서가 되면
콜백을 받으시려면 1번을 눌러주세요.")
2단계: IVR 스크립트 작성
스크립트 작성 규칙
IVR 스크립트는 일반적인 글쓰기와 다른 규칙을 따른다. 전화로 한 번 듣고 이해해야 하기 때문이다.
규칙 1: 짧게 쓴다. 환영 인사는 15초 이내, 메뉴 안내는 20초 이내로 제한한다. 사람들은 IVR을 “듣고 싶어서” 전화한 것이 아니다.
규칙 2: 행동을 먼저, 번호를 나중에 말한다. “1번을 누르면 주문 상태를 확인할 수 있습니다” 대신 “주문 상태 확인은 1번”이라고 한다. 발신자는 자신이 원하는 행동을 먼저 듣고, 해당되면 번호를 기억한다. 번호를 먼저 말하면 해당 행동이 자신에게 관련 있는지 알기 전에 번호를 기억해야 한다.
규칙 3: 구어체로 쓴다. “문의 사항이 있으시면 해당 번호를 선택하여 주시기 바랍니다”가 아니라 “궁금한 점이 있으시면 번호를 눌러주세요”로 쓴다.
규칙 4: 가장 많이 사용되는 옵션을 먼저 배치한다. 전화 데이터를 분석하여 가장 빈번한 문의 유형을 1번에 놓는다. 발신자의 70%가 원하는 옵션이 3번에 있으면, 1번과 2번을 듣는 시간이 낭비된다.
실제 스크립트 예시
환영 인사 (영업시간): "안녕하세요, [회사명]입니다. 전화 주셔서 감사합니다." 메인 메뉴: "주문 관련 문의는 1번, 기술 지원은 2번, 결제 문의는 3번, 상담원 연결은 0번을 눌러주세요." 주문 하위 메뉴: "주문 상태 확인은 1번, 주문 변경이나 취소는 2번, 반품이나 교환은 3번을 눌러주세요." 대기 안내: "상담원에게 연결 중입니다. 예상 대기 시간은 약 3분입니다. 잠시만 기다려 주세요." 대기 중간 안내: "계속 대기 중입니다. 조금만 더 기다려 주시면 곧 연결됩니다. 웹사이트 [URL]에서도 실시간 채팅으로 문의하실 수 있습니다." 비영업시간 안내: "지금은 영업시간이 아닙니다. 영업시간은 평일 오전 9시부터 오후 6시까지입니다. 음성 메시지를 남기시려면 1번, 영업시간에 콜백을 요청하시려면 2번을 눌러주세요." 입력 오류: "죄송합니다, 잘못된 입력입니다. 다시 선택해 주세요." 반복 오류 (3회): "연결에 어려움이 있는 것 같습니다. 상담원에게 바로 연결하겠습니다."
3단계: IVR용 음성 선택과 설정
IVR에 적합한 음성은 일반 콘텐츠 내레이션과 다른 기준으로 선택해야 한다.
음성 선택 기준
명료성이 가장 중요하다. 전화 음질은 일반 스피커보다 낮다. 발음이 분명하고 명료한 음성을 선택해야 한다. 따뜻하지만 전문적인 톤이 필요하다. 너무 캐주얼하면 신뢰가 떨어지고, 너무 격식적이면 차갑게 느껴진다. 중간 속도가 적합하다. 너무 빠르면 메뉴 번호를 놓치고, 너무 느리면 지루하다.
ElevenLabs 설정 테이블
| 설정 항목 | IVR 권장값 | 설명 | |-----------------|-----------|----------------------------------| | Stability | 0.70-0.80 | 높은 안정성으로 일관된 톤 유지 | | Similarity | 0.80-0.90 | 선택한 음성에 가깝게 유지 | | Style | 0.20-0.30 | 과도한 감정 표현 억제 | | Speaker Boost | On | 전화 환경에서 명료성 향상 | | Output Format | mp3_44100 | 전화 시스템 호환 품질 |
Stability를 높게 설정하는 이유는, IVR에서는 같은 톤과 속도가 유지되어야 하기 때문이다. 내레이션이나 팟캐스트에서는 감정 변화가 필요하지만, IVR에서는 일관성이 우선이다.
Style을 낮게 설정하는 이유는, IVR에서 과도한 감정 표현이 어색하기 때문이다. “주문 상태 확인은 1번”을 열정적으로 읽을 필요는 없다. 자연스럽되 절제된 표현이 적합하다.
4단계: 오디오 파일 배치 생성
파일 명명 규칙
모든 IVR 오디오 파일에 체계적인 명명 규칙을 적용한다.
명명 규칙: [위치]_[유형]_[번호].mp3 예시: main_greeting_business-hours.mp3 main_greeting_after-hours.mp3 main_menu_options.mp3 order_menu_options.mp3 order_status_prompt.mp3 tech_menu_options.mp3 hold_initial.mp3 hold_update_01.mp3 hold_update_02.mp3 hold_callback-offer.mp3 error_invalid-input.mp3 error_repeated-failure.mp3
배치 생성 스크립트
ElevenLabs API를 활용하여 모든 스크립트를 자동 생성한다.
import requests
import json
API_KEY = "your_elevenlabs_api_key"
VOICE_ID = "selected_voice_id"
BASE_URL = "https://api.elevenlabs.io/v1/text-to-speech"
scripts = {
"main_greeting_business-hours": "안녕하세요, 회사명입니다. 전화 주셔서 감사합니다.",
"main_menu_options": "주문 관련 문의는 1번, 기술 지원은 2번, 결제 문의는 3번, 상담원 연결은 0번을 눌러주세요.",
"hold_initial": "상담원에게 연결 중입니다. 잠시만 기다려 주세요.",
"error_invalid-input": "죄송합니다, 잘못된 입력입니다. 다시 선택해 주세요.",
# ... 모든 스크립트
}
voice_settings = {
"stability": 0.75,
"similarity_boost": 0.85,
"style": 0.25,
"use_speaker_boost": True
}
for filename, text in scripts.items():
response = requests.post(
f"{BASE_URL}/{VOICE_ID}",
headers={
"xi-api-key": API_KEY,
"Content-Type": "application/json"
},
json={
"text": text,
"model_id": "eleven_multilingual_v2",
"voice_settings": voice_settings
}
)
with open(f"ivr_audio/{filename}.mp3", "wb") as f:
f.write(response.content)
print(f"Generated: {filename}.mp3")
모든 파일을 한 번에 생성하면 동일한 음성 설정이 일관되게 적용된다. 한 파일씩 수동으로 생성하면 설정을 미세하게 다르게 할 위험이 있다.
5단계: 전화 시스템 연동
Twilio 연동
Twilio를 사용하는 경우, TwiML(Twilio Markup Language)로 IVR을 구성한다.
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather input="dtmf" numDigits="1" action="/handle-menu" timeout="10">
<Play>https://your-server.com/ivr_audio/main_greeting_business-hours.mp3</Play>
<Play>https://your-server.com/ivr_audio/main_menu_options.mp3</Play>
</Gather>
<!-- 입력 없음: 메뉴 반복 -->
<Redirect>/ivr-main</Redirect>
</Response>
RingCentral 연동
RingCentral은 관리자 포털에서 Custom Greetings를 업로드할 수 있다. 경로는 Phone System > Auto-Receptionist > Custom Rules이며, 각 메뉴 옵션에 생성한 오디오 파일을 매핑한다.
오디오 파일 요구사항
전화 시스템마다 지원하는 오디오 형식이 다르다.
| 플랫폼 | 형식 | 샘플레이트 | 비트레이트 | 최대 크기 | |------------|---------|------------|-------------|---------| | Twilio | MP3/WAV | 8kHz-48kHz | 제한 없음 | 10MB | | RingCentral| WAV/MP3 | 8kHz | 128kbps | 20MB | | Genesys | WAV | 8kHz | 64-128kbps | 5MB | | Cisco UCM | WAV | 8kHz | G.711 | - |
전화 환경의 오디오 품질은 일반 미디어보다 낮다. 8kHz 샘플레이트에서도 명확하게 들리는지 확인해야 한다. ElevenLabs에서 고품질로 생성한 후, 필요한 형식으로 변환하는 것이 최선이다.
6단계: 테스트 체크리스트
IVR을 배포하기 전에 다음 항목을 모두 테스트한다.
기능 테스트: [ ] 영업시간 인사가 올바르게 재생되는가 [ ] 비영업시간 인사가 시간대에 맞게 전환되는가 [ ] 모든 메뉴 번호가 올바른 경로로 연결되는가 [ ] 하위 메뉴에서 이전 메뉴로 돌아갈 수 있는가 [ ] 0번으로 상담원에 연결되는가 [ ] 잘못된 입력 시 에러 메시지가 재생되는가 [ ] 3회 연속 오류 시 상담원에 연결되는가 [ ] 10초 무응답 시 메뉴가 반복되는가 음질 테스트: [ ] 실제 전화(유선)에서 모든 메시지가 명확하게 들리는가 [ ] 실제 전화(무선)에서 모든 메시지가 명확하게 들리는가 [ ] 음량이 모든 메시지에서 일관적인가 [ ] 메시지 사이 무음 구간이 자연스러운가 사용자 경험 테스트: [ ] 처음 전화하는 사람이 원하는 부서에 30초 이내에 도달할 수 있는가 [ ] 메뉴 안내를 한 번 듣고 이해할 수 있는가 [ ] 대기 음악과 안내 사이의 전환이 자연스러운가 [ ] 콜백 옵션이 올바르게 작동하는가
테스트는 반드시 실제 전화기로 수행해야 한다. 컴퓨터 스피커에서 완벽하게 들리는 오디오가 전화에서는 뭉개지거나 작게 들릴 수 있다.
비용 비교
세 가지 IVR 음성 옵션의 비용을 비교한다.
| 항목 | 전문 성우 | ElevenLabs | 기본 TTS | |---------------|--------------|----------------|---------------| | 초기 녹음/생성 | 200-500만 원 | 2-5만 원 | 무료 | | 스크립트 변경 | 건당 30-50만 원| 건당 100원 미만 | 무료 | | 변경 소요 시간 | 3-7일 | 5분 | 즉시 | | 음성 품질 | 최상 | 상 | 하 | | 일관성 | 높음(동일 성우)| 매우 높음 | 매우 높음 | | 다국어 지원 | 언어당 추가 비용| 기본 포함 | 플랫폼에 따라 다름| | 감정/톤 제어 | 디렉팅 필요 | 설정으로 제어 | 제한적 |
ElevenLabs의 가장 큰 장점은 변경 비용이 거의 없다는 것이다. IVR 스크립트는 자주 바뀐다. 메뉴 구조 변경, 영업시간 변경, 프로모션 안내 추가, 계절별 인사 변경 등이 수시로 발생한다. 전문 성우를 쓰면 매번 재녹음 비용과 대기 시간이 들지만, ElevenLabs는 스크립트를 수정하고 재생성하면 끝이다.
연간 스크립트 변경이 12회(월 1회) 발생한다고 가정하면, 전문 성우는 변경 비용만 360-600만 원이 추가된다. ElevenLabs는 Pro 요금제(월 약 3만 원)로 무제한 변경이 가능하다. 2년간 총 비용을 비교하면 전문 성우가 920-1,600만 원, ElevenLabs가 72만 원 + 초기 생성 비용으로, 약 10배 이상의 차이가 난다.
다만 “최고 품질”이 절대적으로 필요한 경우(금융 기관, 의료 기관 등 브랜드 이미지가 극도로 중요한 환경)에서는 전문 성우가 여전히 가치가 있다. ElevenLabs의 음성 품질이 매우 높아졌지만, 최고 수준의 전문 성우와 직접 비교하면 미세한 차이가 있을 수 있다.
유지 관리와 최적화
IVR은 배포하고 끝이 아니다. 지속적으로 모니터링하고 개선해야 한다.
콜 데이터를 분석하여 각 메뉴 옵션의 선택 비율, 각 단계에서의 이탈률, 상담원 연결까지의 평균 경로 길이, “0번”(직접 상담원 연결) 선택 비율을 추적한다. “0번” 비율이 높으면 메뉴 구조가 발신자의 니즈를 충족하지 못하고 있다는 신호다.
분기별로 스크립트를 재검토한다. 제품이나 서비스가 변경되었는데 IVR이 반영하지 못하고 있는 부분이 없는지, 새로 추가해야 할 메뉴가 있는지, 거의 사용되지 않는 메뉴를 합치거나 제거할 수 있는지 확인한다.
ElevenLabs를 사용하면 이런 변경 작업이 매우 가벼워진다. 스크립트를 수정하고, 해당 파일만 재생성하고, 전화 시스템에 재업로드하면 된다. 전체 프로세스가 30분 이내에 완료된다. 이 속도 덕분에 “변경 비용이 커서 불편한 IVR을 방치하는” 상황을 피할 수 있다.