Twilio Conversation Relay를 사용해 C#(.NET)으로 실시간 AI 음성 에이전트를 구축하는 튜토리얼이다. WebSocket으로 발신자 음성을 STT(Deepgram Flux)로 전사하고 OpenAI로 응답을 생성한 뒤 TTS(ElevenLabs)로 재생하는 전체 파이프라인을 C# 구현으로 다룬다. 가상 항공사 예제로 비행 상태 조회 등 OpenAI function calling까지 구현한다.
핵심 포인트- Conversation Relay는 STT-WebSocket-TTS 음성 파이프라인 전체를 추상화해 C# 개발자가 AI 로직에 집중할 수 있게 한다.
- .NET의 WebSocket API로 Conversation Relay와 실시간으로 연결하고 setup/prompt/interrupt/error 메시지 유형을 처리한다.
- Deepgram nova-3-general(Flux)으로 STT를 처리해 발화 종료 감지 지연을 200~600ms 줄이고 false interruption을 약 30% 감소시킨다.
- OpenAI function calling으로 외부 데이터 조회 후 자연스럽게 응답을 이어가는 도구 호출 흐름을 C#으로 구현한다.
- Conversation Relay 응답 지연 중앙값 0.5초 미만. JavaScript, PHP, Python 버전도 별도 제공된다.
상세 정리- 아키텍처 흐름: 발신자 전화 → Twilio TwiML 요청 → 서버가 ConversationRelay 동사 반환 → WebSocket 연결 → STT 전사 → OpenAI 추론 → TTS 재생.
- 필수 스택: .NET 8+, ASP.NET Core, OpenAI .NET 클라이언트, Twilio .NET 헬퍼, ngrok.
- TwiML 설정: ASP.NET Core 컨트롤러에서 ConversationRelay 동사를 반환하며 domain, welcomeGreeting, STT/TTS 제공자를 지정한다.
- Conversation Relay 주요 속성: ttsProvider=ElevenLabs, transcriptionProvider=Deepgram, speechModel=nova-3-general, eotThreshold=0.8, ignoreBackchannel=true.
- WebSocket 핸들러: .NET WebSocket으로 실시간 연결을 유지하고 OpenAI 스트리밍 응답을 토큰 단위로 Conversation Relay에 전달한다.
- 음성 최적화 프롬프트: 마크다운/이모지 금지, 숫자 철자 표기, 응답 2~3문장 제한으로 TTS 품질을 높인다.
- 도구 호출: OpenAI가 tool_calls를 반환하면 C# 메서드를 실행하고 결과로 두 번째 스트림 호출을 수행해 자연스러운 응답을 완성한다.
- 성능: 응답 지연 중앙값 0.5초 미만, Deepgram Flux로 false interruption 약 30% 감소.
왜 읽나C#/.NET 스택으로 실시간 AI 음성 에이전트를 구축하려는 개발자에게 STT-WebSocket-LLM-TTS 전체 파이프라인을 따라갈 수 있는 구현 레퍼런스다.