본 글은 면접 과정에서 발생하는 컨텍스트 손실 문제를 해결하는 AI 리크루터 에이전트 개발 사례를 소개합니다. 기존 워크플로우가 통화 세션 내에 상태를 저장하는 것과 달리, 이 시스템은 후보자별로 영구적인 '액터(durable actor)'를 구축하여 모든 기록을 보존합니다. 이를 통해 통화가 끊기거나 재시도되어도 중단된 지점부터 인터뷰를 자연스럽게 이어갈 수 있습니다.
핵심 포인트
후보자의 이력을 액터에 영구 저장하여 컨텍스트 손실 문제를 해결함.
통화는 단지 액터와 소통하는 하나의 방법일 뿐이며, 상태가 분리됨.
다이얼 페이로드에 질문 목록과 이미 답변된 질문 목록을 전송하여 효율성을 높임.
Telnyx의 음성 계층(TeXML)을 활용해 통화 배치 및 관리를 수행함.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
이것은 후보자 스크리닝 통화 에이전트입니다. 버튼을 누르면 Telnyx가 후보자에게 전화를 겁니다. AI 어시스턴트가 인터뷰를 진행합니다 — 다섯 가지 질문을 한 번에 하나씩 합니다. 후보자가 각 답변을 마치면, 그것은 역할 루브릭(role rubric)과 비교하여 점수가 매겨지고 영구적인 기록으로 작성됩니다.
흥미로운 부분은 그 기록이 어디에 존재하는가입니다.
대부분의 통화 워크플로우는 상태를 통화 내부에 보관합니다. 통화가 끝나면, 컨텍스트도 끝납니다. 이 샘플은 정반대의 방식을 취합니다: 모든 후보자는 자신만의 영구적인 액터(durable actor)를 갖습니다 — Telnyx Edge Compute에서 살아있는 자체 메모리를 가진 작은 코드 조각입니다. 전화번호당 하나씩 존재하며, 후보자의 프로필, 답변 원장(answer ledger), 점수, 통화 재시도 횟수, 전체 이벤트 기록을 보관합니다.
통화는 단지 그 액터와 소통하는 한 가지 방법이 될 뿐입니다.
그것이 들리는 것보다 더 중요한 이유
후보자의 이력이 통화가 아닌 영구적인 액터에 존재할 때, '끊긴 후의 이력'은 구축해야 하는 기능(feature)이 아닙니다. 아키텍처 자체에서 자연스럽게 도출됩니다.
작동 방식은 다음과 같습니다. 모든 발신 전화는 자신만의 작은 지침서 — Telnyx가 이를 동적 변수(dynamic variables)라고 부릅니다. 우리의 다이얼 페이로드(dial payload)는 두 가지를 전송합니다: 물어볼 다섯 가지 질문, 그리고 이미 답변된 질문 목록입니다. 어시스턴트는 이것을 읽고 다음으로 답하지 않은 질문으로 바로 건너뜁니다.
코드에는 이력서 흐름이 없습니다. 호출에도 세션 상태가 없습니다. 저는 단지 후보자에게 다시 전화를 걸기만 하면 되고, 그들의 액터(actor)가 여전히 존재하기 때문에 통화는 중단되었던 지점부터 계속됩니다. 제가 이것을 시연할 때, 사람들이 몸을 기울이는 순간이 있습니다: 중간에 전화를 끊고 같은 버튼을 누르면, AI가 "중단했던 곳부터 이어갑니다"라고 말하며 세 번째 질문을 합니다.
어시스턴트의 실제 역할
Telnyx는 음성-텍스트 변환(speech-to-text), 추론(inference), 텍스트-음성 변환(text-to-speech), 차례 교대(turn-taking), 음성 사서함 감지(voicemail detection) 등 전체 대화를 호스팅합니다. 저는 이것을 한 번 설정했습니다: 표현력이 풍부한 모드의 Ultra 보이스, 후보자의 말을 중간에 끊지 않는 인내심 있는 차례 교대, 그리고 프리미엄 음성 사서함 감지 기능입니다. 아무도 전화를 받지 않으면, 어시스턴트는 짧은 콜백 메시지를 남기고 종료합니다. 음성 사서함 인사말 앞에서 5분 동안 말을 하지 않습니다.
발신 전화는 TeXML을 통해 이루어집니다. TeXML은 Telnyx의 음성 계층으로, 전화를 거는 것 자체를 배치하고 관리합니다. 이 통화에는 어시스턴트 ID와 동적 변수들이 실려가며, 어시스턴트는 나머지 작업을 수행합니다.
채점은 의도적으로 정직하다
모든 답변이 점수를 받습니다. 루브릭(rubric)은 다섯 가지 질문으로 구성되어 있으며, 각 질문에는 이상적인 신호(ideal signals)—강한 답변에 포함될 내용—가 있습니다. 스코어러는 신호 일치도와 실질적인 내용을 결합합니다: 답변은 통과하려면 실제 콘텐츠가 필요하며, 모호한 답변은 인간 검토로 라우팅되고, 빈 답변은 실패 처리됩니다.
이것은 의도적입니다. 모든 것을 통과하는 AI 전화 스크리닝은 쓸모없습니다—채용 담당자는 그것을 신뢰할 수 없습니다. 실제 운영 환경에서는 동일한 답변들이 Telnyx Decision Models를 통해 AI 점수 채점(AI-graded scoring)을 거치며, 출력 형태는 동일합니다. 규칙 기반 스코어러는 감사할 수 있는 정직한 기준선입니다.
채용 담당자는 통화가 진행되는 동안 실시간 녹취록과 스코어카드를 볼 수 있습니다. 평균 점수, 질문별 판정(verdicts), 그리고 권장 다음 단계: 진급(advance), 검토(review), 또는 인간 검토(human review)입니다.
다음에 구축하고 싶은 것
세 가지 것입니다. 그리고 아키텍처는 이미 그것들을 위해 구상되어 있습니다.
첫째, 텍스트 백(text-back)입니다. 액터가 후보자의 신원이기 때문에, 인바운드 SMS는 같은 액터에게 도착할 수 있습니다. 후보자가 문자로 인터뷰를 확정하면, 시스템은 이미 그 사람이 누구인지 그리고 무슨 말이 오갔는지 알고 있습니다.
둘째, ATS 후크(hook)입니다. 화면을 여는 것은 이미 API 경로입니다. 후보자가 지원하면, ATS가 이를 발동합니다. 이 호출은 리크루터의 노력 없이 이루어집니다.
git clone https://github.com/team-telnyx/telnyx-code-examples.git
cd telnyx-code-examples/candidate-screening-call-agent
npm install
...
1
2
3
4
5
버튼을 한 번 누르세요. Telnyx가 전화를 겁니다. 당신이 후보자라고 생각하고 답하세요.
전체 워크스루 비디오:
더 큰 패턴 (The Bigger Pattern)
채용 화면은 데모일 뿐이며, 그 형태는 일반화됩니다. 아웃바운드 통화(outbound call), 구조화된 대화, 그리고 호출 사이에 모든 것을 기억하는 지속적인 개인 액터입니다.
환자 정보 수집(Patient intake). 잠재 고객 자격 검증(Lead qualification). 보험 확인(Insurance verification). 예약 확정(Appointment confirmation). 전화를 걸어야 하는 곳이라면 어디든, 사람이 두 번 전화해야 할 수도 있고, 그 사람의 기록은 그를 따라야 합니다. 바로 여기에 이 아키텍처가 필요한 것입니다.
전화는 사람들이 실제로 받는 채널입니다. 지속적인 상태(Durable state)가 그것을 인간처럼 느끼게 만듭니다.