NextGenSwitch를 사용하여 AI 음성 에이전트를 SIP 및 PSTN에 연결
Source: Dev.to
AI 음성 에이전트를 만드는 것은 오늘날 비교적 쉽다.
그 에이전트를 **실제 전화 통화(SIP, PBX, PSTN)**에 연결하는 것은 쉽지 않다. 대부분의 AI 음성 시스템은 WebSockets와 원시 오디오 스트림을 사용하도록 설계된 반면, 실제 텔레포니는 여전히 SIP, RTP 및 PSTN 인프라에 의존한다. 이러한 불일치 때문에 많은 음성‑AI 프로젝트가 데모 단계를 넘어서는 데 어려움을 겪는다.
핵심 문제
AI 음성 시스템은 일반적으로 다음을 기대합니다:
WebSocket → PCM audio → AI pipeline → PCM audio
전화 시스템은 매우 다르게 작동합니다:
PSTN → SIP Trunk → PBX → RTP (μ-law / A-law)
핵심 과제
- SIP와 RTP는 상태를 유지하며 코덱에 민감합니다
- AI 시스템은 깨끗하고 순서가 보장된 오디오 프레임을 기대합니다
- 바지인 처리, 지연 및 확장성을 다루는 것은 간단하지 않습니다
- 대부분의 AI 프레임워크는 PBX를 인식하지 못합니다
NextGenSwitch의 역할
NextGenSwitch는 기존 전화 시스템과 최신 AI 서비스 사이의 전화 추상화 계층 역할을 합니다.
제공 내용:
- SIP & PSTN 종료
- PBX 시스템(Asterisk / FreeSWITCH)과의 통합
- Twilio‑style 프로그래머블 보이스 API
- 실시간 WebSocket 오디오 스트리밍
- 코덱 및 샘플‑레이트 정규화
AI 서비스가 SIP나 RTP와 직접 상호작용할 필요가 없습니다.
고수준 아키텍처
Caller
|
[PSTN / SIP Trunk]
|
[Asterisk / FreeSWITCH]
|
[NextGenSwitch]
|
[AI Voice Service]
AI 음성 서비스는 다음과 같이 구현할 수 있습니다:
- 맞춤형 WebSocket 서버
- 클라우드 기반 AI 엔드포인트
- 온프레미스 STT + LLM + TTS 스택
- 실시간 오디오를 처리할 수 있는 모든 프레임워크
Twilio‑Style XML 호출 제어
전화가 NextGenSwitch에 도달하면, Twilio의 TwiML과 유사한 XML 지시문을 가져옵니다.
최소 XML (스트림 URL만 필요함)
</xml>
이 지시문:
- 전화를 응답합니다
- 양방향 WebSocket을 엽니다
- 실시간 오디오 스트리밍을 시작합니다
선택적 매개변수 (예시만 제공)
매개변수는 필수는 아니며; AI 서비스에 메타데이터로 전달됩니다.
</xml>
이 값들은 JSON start 이벤트에 나타나며 라우팅, 프롬프트, 또는 CRM 조회에 사용할 수 있습니다.
Source: …
WebSocket 스트리밍 프로토콜 (JSON)
NextGenSwitch는 Twilio Media Streams‑style JSON 프로토콜을 사용합니다. AI 서비스는 소수의 이벤트만 처리하면 됩니다.
start 이벤트
스트림이 시작될 때 한 번 전송됩니다.
{
"event": "start",
"streamId": "NGS_STREAM_123456",
"start": {
"callId": "NGS_CALL_abc",
"from": "+8801XXXXXXXXX",
"to": "5000",
"customParameters": {
"agent": "support-bot",
"tenant_id": "company-01"
}
}
}
streamId를 저장하십시오—아웃바운드 오디오 메시지에 반드시 포함되어야 합니다.
media 이벤트 (인바운드 오디오)
{
"event": "media",
"streamId": "NGS_STREAM_123456",
"media": {
"payload": "BASE64_AUDIO_BYTES=="
}
}
오디오 특성
- 코덱: G.711 μ-law
- 샘플 레이트: 8 kHz
- 페이로드: base64‑인코딩된 오디오 프레임
media 이벤트 (아웃바운드 오디오)
AI 서비스는 동일한 구조를 사용해 응답합니다:
{
"event": "media",
"streamId": "NGS_STREAM_123456",
"media": {
"payload": "BASE64_AUDIO_BYTES=="
}
}
NextGenSwitch는 이 오디오를 다시 전화 포맷으로 변환하여 발신자에게 전송합니다.
stop 이벤트
{
"event": "stop",
"streamId": "NGS_STREAM_123456",
"stop": {
"reason": "hangup"
}
}
AI 스택: 완전 유연
NextGenSwitch는 특정 AI 프레임워크를 필요로 하지 않습니다. 다음을 사용할 수 있습니다:
- 모든 STT 엔진
- 모든 LLM
- 모든 TTS 엔진
- 모든 프로그래밍 언어
참조 구현(예: Pipecat)은 선택 사항이며, 필수는 아닙니다.
왜 이 아키텍처가 효과적인가
- AI 코드에서 SIP 또는 RTP 처리 없음
- Twilio‑style, 개발자 친화적인 인터페이스
- 실시간, 저지연 오디오 스트리밍
- 벤더 중립 AI 통합
- 프로덕션‑레디 PSTN 확장성
일반적인 사용 사례
- AI 리셉셔니스트
- AI 콜센터 에이전트
- 음성 기반 주문 처리
- 예약
- IVR 교체
- 다국어 음성 봇
주요 내용
- “ 요소만 필수입니다
- XML 매개변수는 선택적 메타데이터입니다
- 스트리밍 프로토콜은 Twilio‑style JSON을 따릅니다
- 전화 오디오는 μ‑law @ 8 kHz를 사용합니다
- AI 로직은 PBX 로직과 완전히 분리되어 있습니다
자세히 알아보기
- 프로그래머블 보이스 스트림 API:
- AI 스트리밍 예제: