
나만의 AI 자동 응답기 만들기
요약
Twilio와 Deepgram을 활용하여 사용자가 정의한 페르소나에 따라 전화를 대신 받는 AI 자동 응답기 구축 방법을 소개합니다. 웹소켓 브릿지를 통해 음성 스트리밍을 연결하고 실시간 음성 대화를 구현하는 기술적 과정을 다룹니다.
핵심 포인트
- Twilio와 Deepgram을 활용한 하드웨어 없는 AI 음성 스택 구축
- 양방향 웹소켓을 이용한 실시간 오디오 스트리밍 구현
- Deepgram Voice Agent를 통한 STT, LLM, TTS 통합 처리
- 사용자 정의 페르소나를 통한 자연스러운 음성 대화 제어
AI가 당신을 대신해 전화를 받을 수 있습니다. 전화를 받을 수 없을 때, AI가 전화를 받아 자신을 소개하며 발신자에게 인사를 건네고, 당신이 평문 지침으로 정의한 페르소나(persona) — 즉, 어떤 목소리로 말해야 하는지, 무엇을 물어봐야 하는지, 무엇을 할 수 있는지 — 에 따라 자연스러운 음성 대화를 이어갑니다. 당신은 언제든지 통화에 참여하여 AI로부터 대화를 넘겨받을 수 있습니다.
작동 원리
Twilio | Deepgram
이것이 하드웨어가 필요 없는 전체 스택입니다. Twilio는 전화 회선을 담당하고, Deepgram은 음성 대화를 담당합니다.
이 시스템의 상당 부분은 오픈 소스 무료 소프트웨어와 체험 계정(trial accounts)으로 구축할 수 있습니다. 브릿지(bridge) 자체는 완전히 오픈 소스 도구로 실행되며, 두 유료 서비스 모두 체험이 가능합니다. Twilio 체험 계정에는 $15의 크레딧이 제공되고, Deepgram 체험 계정에는 $200가 제공되므로, 이 포스트의 모든 내용을 처음부터 끝까지 구축하고 테스트하기에 충분합니다.
어떻게 구현할 수 있을까요?
전체 자동 응답기는 두 개의 웹소켓(websockets) 사이를 잇는 브릿지입니다. 하나는 Twilio가 통화 오디오를 당신에게 스트리밍하는 것이고, 다른 하나는 Deepgram Voice Agent가 듣고, 생각하고, 말하는 것입니다.
1. Twilio가 전화를 받습니다
Twilio 전화번호를 구매하고, 수신 전화 웹훅(incoming-call webhook)을 당신의 서버로 지정하세요. 전화가 오면 당신은 Twilio의 XML 지침인 TwiML로 응답합니다. 핵심 지침은 다음과 같습니다:
<Connect>
<Stream url="wss://your-server/ws/screening" />
</Connect>
<Connect><Stream>은 양방향(bidirectional) 웹소켓을 엽니다. Twilio는 발신자의 오디오를 base64로 인코딩된 μ-law 프레임으로 당신에게 보내며, 당신이 다시 보내는 모든 오디오는 발신자에게 재생됩니다. 이 시점부터 전화 통화는 단순한 웹소켓이 됩니다.
당신은 언제 통화를 AI에게 넘길지 결정할 수 있습니다. 세 가지 자연스러운 트리거가 있습니다:
- 먼저 사람에게 벨을 울리고(
<Dial timeout="20">), 아무도 받지 않으면 AI로 넘어갑니다. - 아무도 없을 때 즉시 AI가 전화를 받습니다.
- 사람이 "이 전화 스크리닝하기" 버튼을 클릭하여 벨이 울리는 전화를 필요에 따라 AI로 리다이렉트합니다.
2. Deepgram이 대화를 진행합니다
서버에서 Deepgram Voice Agent(wss://agent.deepgram.com/v1/agent/converse)로 두 번째 웹소켓 (websocket)을 엽니다. 이 단일 서비스는 사용자가 직접 구축해야 하는 음성 파이프라인(speech pipeline) 전체 — 음성-텍스트 변환 (speech-to-text), 추론 모델 (reasoning model), 텍스트-음성 변환 (text-to-speech) — 를 단일 소켓 뒤에서 대체합니다. 다음과 같은 하나의 설정 메시지로 이를 구성합니다.
- Audio (오디오) — 입력 및 출력 모두 8 kHz의 μ-law를 사용하여 Twilio의 전화 포맷과 정확히 일치합니다. 트랜스코딩 (transcoding)이 필요하지 않으며, 프레임 (frames)이 그대로 전달됩니다.
- Listen (듣기) — Deepgram의 음성 인식 (speech-recognition) 모델이 발신자의 말을 실시간으로 전사 (transcribe) 합니다.
- Think (생각하기) — 대규모 언어 모델 (large language model)이 대화를 주도합니다. 이곳에 여러분의 **페르소나 (persona)**가 들어갑니다. 시스템 프롬프트 (system prompt)는 여러분이 작성한 지침을 바탕으로 구축됩니다 — AI가 누구를 대신하는지, 어떤 어조를 취할지, 무엇을 수집할지, 무엇을 제공할 수 있고 없는지 등을 정의합니다.
- Speak (말하기) — Deepgram의 음성이 답변을 말합니다. 음성 자체도 페르소나의 일부이므로, 서로 다른 팀마다 다른 목소리를 낼 수 있습니다.
- Greeting (인사말) — 발신자가 자동화된 어시스턴트와 대화하고 있다는 필수 고지 사항을 포함한 정확한 첫 문장입니다.
3. 브리지 (The bridge)
이제 서버의 역할은 매우 단순해집니다. Twilio 소켓에서 Deepgram 소켓으로 오디오 프레임을 전달하고, 에이전트의 오디오를 다시 전달하는 것입니다. 두 가지 세부 사항이 이를 인간처럼 느껴지게 만듭니다.
- Barge-in (끼어들기) — 발신자가 AI의 말을 끊고 말하기 시작하면, Twilio에
clear이벤트를 보내 아직 재생되지 않은 오디오를 비웁니다 (flush). 이를 통해 AI는 발신자의 말을 가로채는 대신 문장 중간에 말을 멈춥니다. - Function calling (함수 호출) — 발신자가 실제 데이터가 필요한 질문(예: "근처에 약국이 있나요?")을 하면, Voice Agent는 동일한 소켓을 통해 함수 호출 (function-call) 요청을 보냅니다. 서버는 조회를 수행하고 결과를 반환하며, AI는 이를 말합니다. 어떤 함수가 존재하는지는 페르소나에 의해 제어되므로, 비활성화된 기능은 모델에게 아예 제공되지 않습니다.
4. 인수 (The takeover)
AI는 일반적인 Twilio 통화의 한 축(leg)일 뿐이므로, 사람이 다른 통화와 마찬가지로 참여할 수 있습니다. 통화를 상담원의 라인으로 다시 리다이렉트(Redirect)하면 AI 축은 종료됩니다. 동일한 통화이며, 대기 음악도, 전환(transfer)도 필요하지 않습니다. 발신자는 번호를 두 번 누를 필요가 없습니다.
예시 (Here Is an Example)
다음은 우리의 웹 앱 내에서 실행되는 동일한 통합 사례입니다.
실시간 통화에 응답하는 AI — 발신자가 전화를 걸었으나 아무도 받지 않자, 어시스턴트(assistant)가 업무를 인계받았습니다. 발신자가 말하는 모든 내용은 실시간으로 화면에 스트리밍(stream)됩니다.
🎬 **
A short recording of what it looks like when call comes in
페르소나(Persona) 설정 — AI의 인사말, 목소리, 지침(instructions), 그리고 기능(capabilities)은 코드가 아닌 사용자가 편집하는 양식입니다. 지침을 변경하면 바로 다음 통화부터 변경된 지침을 따릅니다.
📸 **
Option To Add persona description in the screen to control AI Persona
]**
향후 로드맵 (Future Road Map)
향후 로드맵 (Future Road Map)
- 팀을 위한 트레이닝 시뮬레이터 (Training Simulator for Teams) — 동일한 음성 파이프라인을 내부로 향하게 한 형태입니다. 까다로운 통화자를 연기하는 AI 페르소나를 통해, 신입 팀원들이 실제 첫 통화를 하기 전에 연습할 수 있도록 합니다.
- 전사 지능 (Transcript Intelligence) — 실시간 전사(Transcript)를 통해 감정 및 규정 준수(Compliance) 여부를 추적하며, 위험한 문구나 통화자의 좌절감을 실시간으로 감지하여 표시합니다.
- 실시간 통화 지능 (Real-Time Call Intelligence) — 전사 내용과 통화 중 AI의 도구 사용(Tool usage)을 기반으로 한 실시간 코칭 및 인사이트를 제공합니다.
- 자동 채우기 UI (Auto-Filling UI) — 대화가 진행되는 동안 통화자의 발언을 구조화된 데이터(Structured data)로 캡처하여, 양식(Form)을 스스로 채워줍니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기

