ElevenLabs API를 사용하여 음성 사서함 생성기 만들기
요약
본 글은 ElevenLabs의 Text-to-Speech (TTS) API를 활용하여 개인화된 음성 사서함 생성기(Voicemail Generator)를 구축하는 방법을 안내합니다. Python Flask 앱을 사용하여 인증부터 메시지 합성 및 오디오 파일 반환까지 전 과정을 구현할 수 있습니다.
핵심 포인트
- ElevenLabs TTS API는 REST 기반으로 다양한 언어에서 호출 가능합니다.
- 음성 복제 기능을 사용해 브랜드에 맞는 고품질 목소리를 생성할 수 있습니다.
- Flask 앱을 통해 단일 엔드포인트로 음성 사서함 생성을 자동화할 수 있습니다.
개요
컨택 센터나 스마트 홈 시스템을 구축할 때, 가장 피하고 싶은 것은 비어 있는 음성 사서함입니다. 간단한 음성 AI만으로도 정적인 '응답 없음' 메시지를 실제 사람처럼 느껴지는 개인화되고 역동적인 인사말로 바꿀 수 있습니다. 본 게시물에서는 ElevenLabs Text-to-Speech (TTS) API를 사용하여 **음성 사서함 생성기(Voicemail Generator)**를 만드는 방법을 안내합니다. 인증부터 음성 복제 메시지 생성까지 모든 것을 다루고, 이를 웹훅이나 REST 엔드포인트로 호출할 수 있는 간단한 Flask 앱으로 묶는 과정도 다룰 것입니다.
결과물은 무엇일까요? ElevenLabs에서 클론할 수 있는 것과 동일한 고품질 목소리를 사용하여 즉석에서 음성 사서함 오디오 파일을 생성할 수 있는 경량 서비스입니다. 그럼 시작해 봅시다.
전제 조건
| 항목 | 설명 |
|---|---|
| Python 3.8+ | 예시 코드를 위해 |
| ... |
팁: ElevenLabs가 처음이시라면, 위의 링크에서 크레딧을 사용하여 API를 테스트할 수 있는 무료 체험판을 제공합니다.
ElevenLabs 설정하기
ElevenLabs는 음성 복제(voice cloning), 스피커 임베딩(speaker embeddings) 및 방대한 자연스러운 목소리 라이브러리를 지원하는 강력하고 낮은 지연 시간의 TTS 엔드포인트를 제공합니다. 이 API는 REST 기반이므로 어떤 언어에서도 호출할 수 있습니다.
API 키 받기
- https://try.elevenlabs.io/kr07zfuqn1bp를 방문합니다.
- 계정을 생성하거나 로그인합니다.
- API Keys 섹션으로 이동하여 키를 복사합니다.
보안을 위해 환경 변수에 저장하세요:
export ELEVENLABS_API_KEY="sk_your_key_here"
간단한 API 테스트
curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/eleven_monolingual_v1" \
-H "xi-api-key: $ELEVENLABS_API_KEY" \
-H "Content-Type: application/json" \
...
응답 본문에서 오디오 스트림을 받으면 됩니다. 좋습니다! 이제 이를 앱에 임베드할 준비가 되었습니다.
음성 복제를 사용한 음성 생성하기
ElevenLabs를 사용하면 짧은 오디오 클립을 제공하여 음성을 복제할 수 있습니다. 음성 사서함 시스템의 경우, 회사 전체에서 사용할 목소리(예: 접수원)나 브랜드에 맞는 사용자 지정 목소리를 사용하는 것이 좋을 수 있습니다.
import requests
import os
...
기억하세요: 복제된 음성은 ElevenLabs 계정에 저장되며 통화 전반에 걸쳐 재사용할 수 있습니다. TTS 엔드포인트로 전달할
voice_id를 받게 됩니다.
음성 사서함 생성기 구축하기
우리는 단일 엔드포인트 /voicemail을 가진 Flask 서비스를 만들 것입니다. 이 서비스는 caller_name, message, 그리고 선택적 voice_id를 포함하는 JSON을 받습니다. 이 서비스는 다음 작업을 수행합니다:
- 인사말 구성 (예: “안녕하세요, [caller_name]입니다. 전화를 놓쳐 죄송합니다.”).
- ElevenLabs를 사용하여 음성 합성(synthesize)을 수행합니다.
- 오디오 파일을
bytes스트림으로 반환합니다.
from flask import Flask, request, send_file, jsonify
import requests
import os
...
작동 방식
- 엔드포인트:
POST /voicemail요청 본문:
{
"caller_name": "Alice",
"message": "전화를 놓쳐 죄송합니다. 비프음 후에 메시지를 남겨주세요.",
...
- 응답:
voicemail.mp3라는 이름의 MP3 파일입니다.
synthesize_text 헬퍼는 오디오를 ElevenLabs에서 직접 스트리밍하므로, 메모리에 큰 버퍼를 유지할 필요가 없습니다.
전체 구현하기
핵심 로직을 갖게 되었으니, 이제 서비스를 로컬에서 테스트해 봅시다.
# 서버 시작하기
python app.py
다른 터미널에서 엔드포인트를 호출합니다:
curl -X POST "http://localhost:5000/voicemail" \
-H "Content-Type: application/json" \
-d '{"caller_name":"Bob","message":"비프음 후에 메시지를 남겨주세요."}' \
...
좋아하는 플레이어로 voicemail.mp3을 열어보세요. 자연스러운 인사말이 들려야 합니다. 복제된 음성을 사용하고 싶다면, 이전에 얻은 voice_id를 전달하세요.
배포 팁
배포 팁
- 컨테이너화 (Containerization): Flask 앱을 Dockerfile로 감싸세요. ElevenLabs API 호출은 상태 비저장(stateless)이므로 수평 확장(scale horizontally)할 수 있습니다.
- 환경 변수: 클라우드 제공업체의 비밀 관리 기능(예: AWS Secrets Manager, GCP Secret Manager)을 사용하여 API 키를 안전하게 보관하세요.
- 캐싱 (Caching): 동일한 메시지를 자주 사용한다면, API 사용량과 지연 시간(latency)을 줄이기 위해 서버나 CDN에 오디오를 캐시하세요.
고급 아이디어
- 동적 음성 선택 (Dynamic Voice Selection): 다양한
voice_id풀을 로드하고 발신자 지역이나 시간에 따라 하나를 선택합니다. - 음성 합성 마커 (Speech Synthesis Markers): ElevenLabs의 SSML 지원 기능을 사용하여 일시 정지(pauses)나 강조(emphasis)를 추가하세요.
- Twilio와의 통합:
/voicemail엔드포인트를 Twilio 웹훅에 연결하여, 전화를 놓쳤을 때 Twilio가 생성된 오디오를 자동으로 재생하도록 합니다.
결론
ElevenLabs의 TTS API는 개발자들에게 최소한의 노력으로 고품질의 개인화된 음성 사서함을 만들 수 있는 능력을 제공합니다. 음성을 복제하고 간단한 REST 엔드포인트를 노출함으로써, 놓친 모든 전화를 브랜드 일관성이 있고 몰입감 있는 경험으로 바꿀 수 있습니다.
음성 사서함 시스템을 업그레이드할 준비가 되었다면, 무료 체험판을 이용해 오늘 바로 실험을 시작하세요. 여기에서 가입하고: [https://try.elevenlabs.io/kr07zfuqn1bp] ElevenLabs가 여러분의 음성 사서함을 생생하게 만들어 드리도록 하세요!
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기