AI 지원 통화에 대한 실시간 감독 대시보드 구축하기
요약
본 문서는 AI 지원 통화에 대한 실시간 감독 대시보드를 구축하는 방법을 다룹니다. 이 시스템은 Telnyx Edge Compute를 활용하여, 통화가 진행되는 동안 감독관이 대화를 모니터링하고 정책 기반 코칭 지침을 제공하며 필요 시 인간 개입을 할 수 있게 합니다. 이는 발신자 시뮬레이터와 실시간 감독관 대시보드를 분리하여 보여주며, 이벤트 스트림을 통해 AI 대화 과정을 관찰하는 아키텍처를 제시합니다.
핵심 포인트
- 통화 후 검토가 아닌, 진행 중인 통화에 대한 실시간 모니터링 가능
- Telnyx Edge Compute 기반의 코칭 지침 및 인간 개입 기능 구현
- AI 대화 흐름을 관찰하는 '라이브 사이드 채널' 이벤트 스트림 활용
- 실시간 감독은 보조적이며, 공식 기록(System-of-Record)에는 Conversations API 사용
대부분의 음성 AI 품질 검사는 통화가 끝난 후에 이루어집니다. 녹취록이 저장되고, 누군가가 나중에 소량의 샘플을 검토하며, 이미 고객에게 잘못된 정보가 전달된 후입니다.
만약 감독관이 AI 지원 통화를 진행되는 동안 지켜보고, 어시스턴트에게 비공개 코칭 지침을 보내고, 인간의 도움이 필요할 때 같은 대화에 참여할 수 있다면 어떨까요?
Live Support Coach Room 예제가 바로 이것을 시연합니다. 이 애플리케이션은 Telnyx Edge Compute에서 실행되는 TypeScript 애플리케이션으로,
- 실시간 감독 대시보드(live supervisor dashboard)
- 각 AI 대화마다 하나의 내구성 있는 룸(durable room)
- 정책 기반 코칭 알림(policy-based coaching nudges)
- 인간 에스컬레이션을 위한 WebRTC 소프트폰
- 실제 통화를 걸지 않고 워크플로우를 연습하는 시뮬레이터
을 갖추고 있습니다.
이 튜토리얼은 아키텍처와 이를 로컬 및 Telnyx Edge에서 가장 빠르게 탐색하는 방법에 중점을 둡니다.
완성된 흐름의 모습
이 애플리케이션은 두 개의 브라우저 탭을 사용합니다:
- **발신자 시뮬레이터(caller simulator)**가 대화를 생성하고 발신자 또는 어시스턴트의 차례를 제출합니다.
- **감독관 대시보드(supervisor dashboard)**는 활성 룸 목록을 표시하고, 녹취록을 스트리밍하며, 정책 플래그를 보여주고, 에스컬레이션 버튼을 노출합니다.
시뮬레이터에서 동일한 계좌 번호를 두 번 입력해 보세요. 룸은 발신자가 신원 확인 없이 민감한 계정 정보를 반복했다는 것을 감지하고, 어시스턴트에게 발신자의 생년월일을 확인할 것을 지시하는 코칭 지침을 주입합니다.
그러면 동일한 룸이 감독관에게 전화를 걸고 그 사람을 활성 AI 대화에 참여시킬 수 있습니다.
전반적인 흐름은 다음과 같습니다:
AI Assistant event stream
|
v
...
이벤트 스트림이 사이드 채널인 이유
어시스턴트의 websocket_settings는 애플리케이션의 /agents/assist 엔드포인트를 가리킵니다. Telnyx는 각 대화에 대해 하나의 WebSocket을 열고 다음과 같은 이벤트를 전송합니다:
session.created
conversation.item.created
response.text.delta
...
이 소켓은 대화를 관찰하고 텍스트 턴을 주입할 수 있지만, 통화 미디어를 전달하지는 않으며 모델을 대체하지도 않습니다.
이러한 구분은 중요합니다. 코칭 애플리케이션이 사용 불가능해지더라도 통화는 계속됩니다. 모니터링 인터페이스가 충돌했다고 해서 발신자가 오디오를 잃지는 않습니다.
conversation event stream documentation에서는 이를 라이브 사이드 채널(live side channel)로 설명합니다. 현재 베타 버전이므로, 클라이언트는 인식하지 못하는 이벤트 유형은 무시해야 합니다. 새로운 유형이 추가될 수 있기 때문입니다.
또한 이 스트림은 보장된 녹취록 아카이브도 아닙니다. 소켓이 사용 불가능할 때 발생하는 이벤트는 재생되지 않습니다. 실시간 감독(live supervision)에 사용하고, 완전한 시스템 레코드(system-of-record) 녹취록이 필요할 때는 통화 후 Conversations API를 사용하십시오.
배포된 WebSocket URL을 사용하여 어시스턴트를 구성합니다:
curl -X POST "https://api.telnyx.com/v2/ai/assistants/$ASSISTANT_ID" \
-H "Authorization: Bearer $TELNYX_API_KEY" \
-H "Content-Type: application/json" \
...
auth_ref는 통합 비밀(integration secret)을 가리킵니다. Telnyx가 이를 해결하여 WebSocket을 열 때 베어러 토큰(bearer token)으로 값을 전송합니다.
모든 대화를 자체 영속적인 룸(durable room)으로 라우팅하기
애플리케이션은 /agents 아래에 두 개의 Agent SDK WebSocket 인터페이스를 마운트합니다:
const handleAgents = mountAgents<Env>((env) => ({
assist: env.RELAY,
"coach-room": env.COACHROOMS,
...
/agents/assist는 어시스턴트 이벤트 스트림을 받습니다. session.created 시, 릴레이(relay)는 대화 ID를 사용하여 해당 대화의 CoachRoom 액터(actor)를 찾습니다.
각 룸은 정확히 하나의 대화에 대한 상태를 소유합니다:
- 녹취록 턴(transcript turns)
- 정책 플래그(policy flags)
- 넛지 카운트(nudge count)
- 스트림 상태(stream status)
- 에스컬레이션 상태(escalation state)
- 영속적인 침묵 타이머(durable silence timer)
- 최종 코치 로그(final coach log)
이는 stateful actor에 적합합니다. 액터의 식별자는 대화의 식별자이며, 관련 이벤트는 동일한 내구성 있는 인스턴스(durable instance)에서 처리됩니다.
별도의 CoachRegistry 액터가 대시보드 선택기(picker)를 위해 활성 및 종료된 방을 추적합니다.
스트림 스냅샷 및 대시보드의 실시간 변경 사항
감독관은 다음 주소에 연결합니다:
wss://<function-host>/agents/coach-room/{conversation_id}
감독관이 방을 열면, 대시보드는 현재 상태를 받고 이후의 실시간 업데이트를 따라갑니다. 이는 감독관이 통화 중간에 참여하더라도 빈 화면으로 시작하는 대신 이전에 발생한 내용을 볼 수 있다는 것을 의미합니다.
또한 애플리케이션은 정기적인 HTTP 경로도 노출합니다:
| 경로 | 목적 |
|---|---|
GET /rooms | 활성 및 종료된 방 목록 보기 |
| ... |
코칭 넛지 주입하기
방(room)은 대화 이벤트를 관찰하고 의도적으로 작은 정책을 평가합니다. 규칙이 발동되면, 어시스턴트 스트림을 통해 conversation.item.create 프레임을 전송합니다.
개념적으로, 프레임은 다음과 같습니다:
{
"type": "conversation.item.create",
"item": {
...
}
지침이 실시간 대화 컨텍스트의 일부가 되어, 어시스턴트가 통화를 종료하거나 재시작하지 않고도 방향을 바꿀 수 있게 합니다.
두 가지 설정이 정책을 제한합니다:
NUDGE_MAX_PER_CALL=3
SILENCE_SECS=90
첫 번째는 과도하게 활동적인 정책이 하나의 대화를 범람시키는 것을 방지합니다. 두 번째는 장시간 침묵 후에 확인(check-in)을 예약합니다. 침묵 감시자(silence watcher)는 session.ended가 도착하면 취소됩니다.
프로덕션 배포의 경우, 간단한 규칙은 규정 준수 언어, 인증, 에스컬레이션 위험 또는 반대 의견 처리 등에 대한 정책으로 대체될 수 있습니다.
AI 대화에 사람을 투입하기
감독관이 **감독관에게 에스컬레이션(Escalate to supervisor)**을 클릭하면, 방은 다음과 같이 합니다:
- 설정된 감독 장치로 아웃바운드 통화를 생성합니다.
ai_assistant_join을 사용하여 해당 통화 라인을 활성 AI 대화에 참여시킵니다.- Telnyx WebRTC SDK를 통해 브라우저에서 전화를 받습니다.
소프트폰은 접속 성공 후 음소거 상태로 응답했다가 다시 소리를 켜줍니다. 이는 호출자에게 초기 설정 과정의 노이즈가 노출되는 것을 방지합니다.
인간 상담원은 새로운 통화 연결을 받는 것이 아니라, 다른 참가자로 기존 대화에 참여하게 됩니다. Telnyx의 다중 참가자 통화 문서는 활성 AI 통화에 사람들을 추가하는 더 광범위한 패턴을 다룹니다.
시뮬레이터 먼저 실행하기
포함된 시뮬레이터는 전화 기능이 필요하지 않아 상태 흐름을 이해하는 가장 빠른 방법입니다.
프로젝트를 복제하고 설치합니다:
git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/live-support-coach-room
npm install
환경 파일 생성:
cp .env.example .env
인증 및 Edge 함수 준비:
telnyx-edge auth api-key set <your_telnyx_api_key>
telnyx-edge new-func -l ts -n live-support-coach-room --from-dir .
telnyx-edge types
스모크 테스트 실행:
npx tsx smoke_test.ts
배포:
telnyx-edge ship
그런 다음 배포된 함수에서 이 페이지들을 엽니다:
호출자 탭에서 시뮬레이션 통화를 시작합니다. 계정 번호를 두 번 입력한 후, 대시보드에 정책 플래그와 코칭 지침이 나타나는 것을 확인합니다.
실시간 에스컬레이션 경로 구성하기
시뮬레이션된 코칭 흐름은 통화 없이도 작동하지만, 실제 에스컬레이션에는 다음 Edge 비밀 값이 필요합니다:
telnyx-edge secrets add TELNYX_API_KEY "<your-key>"
telnyx-edge secrets add COACH_AUTH "<integration-secret-value>"
telnyx-edge secrets add CALL_CONTROL_CONNECTION_ID "<connection-id>"
...
소스 컨트롤에서는 플레이스홀더를 사용하고 실제 값은 시크릿으로 저장해야 합니다. 브라우저 소프트폰 역시 런타임에 감독자(supervisor)가 제공하는 WebRTC 로그인 토큰이 필요합니다.
프로덕션 고려 사항 (Production considerations)
본 샘플은 아키텍처를 보여주지만, 실제 운영 환경의 코치룸에는 다음 기능들이 추가되어야 합니다:
- 감독자를 위한 역할 기반 접근 제어(role-based access)
- 단기 생존 브라우저 자격 증명(short-lived browser credentials)
- 정책 버전 관리 및 승인 워크플로우(policy versioning and approval workflows)
- 감사 기록 보관 및 삭제 규칙(audit retention and deletion rules)
- 스트림 간극 및 재연결에 대한 메트릭(metrics for stream gaps and reconnects)
- 명시적 동의 및 녹취록 처리 정책(explicit consent and transcript handling policies)
- Conversations API를 통한 통화 후 진실 공급원(source of truth)
중앙 디자인은 여전히 유효합니다: 관찰 가능성(observability)을 미디어 경로 외부에 유지하고, 각 대화에 영구적인 소유자(durable owner)를 부여하며, 인간의 개입을 일급 통화 참여자(first-class call participant)로 만들어야 합니다.
다음 단계 (Where to take it next)
동일한 구조는 고객 서비스 코칭 외에도 더 많은 것을 지원할 수 있습니다:
- 규제 대상 통화에 대한 규정 준수 모니터링(compliance monitoring for regulated calls)
- 실시간 영업 역량 강화 및 반론 처리(live sales enablement and objection handling)
- 통역사 또는 전문가 에스컬레이션(interpreter or specialist escalation)
- 헬스케어 예약 감독(healthcare scheduling supervision)
- 사기 검토 지원(fraud-review assistance)
- 신규 상담원을 위한 교육 대시보드(training dashboards for new agents)
파이프라인은 유지하고 CoachRoom 내부의 정책만 애플리케이션에 중요한 규칙으로 교체할 수 있습니다.
자료 (Resources)
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기