AWS 기술 블로그

인디프의 Amazon Connect를 활용한 클라우드 콜센터 구축

인디프는 IP (Intellectual Property)데이터를 활용하여 고객과 변리사를 연결하는 플랫폼 서비스 INDIP를 제공하고 있습니다. 특허, 상표, 디자인 등 다양한 분야에서 고객이 자신의 기술과 산업 분야에 적합한 변리사를 찾을 수 있도록 돕습니다. 이를 위해 100만 건 이상의 특허 데이터를 활용하여 각 사무소와 변리사들의 기술 분야별 전문성을 분석하고 있습니다.

최근 생성형 AI를 활용한 특허 상담 비서 ‘제노스(GENOS)’를 개발하여, 복잡한 특허 출원 과정을 단순화하고 지식재산권 법률 지식에 대한 진입 장벽을 낮추는 데 기여하고 있습니다. 제노스는 실시간 상담, 특허 출원 절차 안내, 기술 문서 초기 검토 및 조언 제공 등의 기능을 통해 사용자에게 전문적인 정보를 제공합니다. 또한 단순한 웹 접속 뿐 아니라 전화 기능이 추가 되어 사용자가 놓칠 수 있는 일정이나 중요 사안 동의 등을 문자, 메일 뿐 아니라 직접 전화를 통해 안내하고 수행합니다.

인디프는 제노스에 AI IVR(Interactive Voice Response) 및 자동화 발신 솔루션 도입으로 특허 출원을 진행하는 고객에게 출원 중 발생하는 다양한 상황에 대해 즉각적으로 정보를 제공하고, 효율적으로 대응을 할 수 있게 되었습니다. 또한 고객의 상황별 대응에 대한 UserCase 정보, 추세 등을 파악하고 관리할 수 있었습니다.

인디프의 Amazon Connect 기반 IVR 및 자동화 발신 솔루션 구축 사례

배경: 기존 IVR 시스템 도입의 어려움

기존 IVR 시스템은 고객 서비스와 자동화된 음성 안내를 제공하는 데 유용하지만, 구축 과정에서 몇 가지 주요 제약 사항이 있습니다.

  1. 높은 구축 비용
    IVR 시스템을 구축하려면 수신 및 발신을 별도로 처리하는 하드웨어와 소프트웨어 시스템이 필요하며, 다채널 지원을 추가하면 비용이 크게 증가합니다.
  2. 복잡한 운영 및 관리
    기존 IVR 시스템은 하드웨어 인프라 구축을 위한 초기 투자비용이 크고 하드웨어 유지보수, 소프트웨어 패치 및 업데이트, 그리고 보안 관리 등을 위한 전담 IT 인력이 필요합니다. 시스템 업데이트 및 관리에는 전문 지식이 필요하여 대부분 서비스 제공자가 이를 대행하는 형태입니다.
  3. 유연성 부족
    기존 IVR 시스템은 한정된 음원 재생 옵션과 정적인 시나리오만 제공하며, 맞춤형 발신 기능이나 다이나믹 데이터 처리가 어렵습니다.
  4. 중소기업에 적합하지 않는 구조
    인디프의 경우, 기존 IVR 솔루션들을 검토하는 과정에서 초기 하드웨어 구매, 라이센스 구입, 전문 인력 채용 등에 필요한 투자 비용이 현재 비즈니스 규모와 예산에 맞지 않았습니다.

제노스 채널 확장을 위한 Amazon Connect 도입

제노스는 이러한 기존 콜센터 시스템의 한계를 극복하기 위해 Amazon Connect를 도입하여 클라우드 기반의 유연한 IVR 및 자동화 발신 환경을 구축하였습니다. 기존의 IVR의 경우에는 응대 과정 중에 기존 서버와의 통신이 복잡하고 한계적이었지만 Amazon Connect 도입 후에는 아래 아키텍처와 같이 서버리스로 코드를 실행할 수 있는 서비스인 AWS Lambda를 사용하여 데이터베이스나 외부 시스템과의 신규 통합 작업 뿐 아니라 기존 서버와의 통합도 손쉽게 설계가 가능했습니다.

이런 유연성 및 확장성과 더불어 Amazon Connect를 도입한 주요한 이점들은 다음과 같습니다.

  1. 비용 효율성
    초기 하드웨어 투자나 유지보수 비용, 그리고 라이센스 비용없이 사용한 만큼만 요금이 부과되므로, 중소기업에 이상적입니다. 기존에 구축되어 있는 제노스 시스템의 대화를 통한 의사소통을 Amazon Connect와 기본적으로 통합되어 있는 Text to Speech 서비스인 Amazon Polly, 대화형 챗봇 서비스인 Amazon Lex 등과 같은 다양한 AI서비스를 사용하는 전화 채널로 마이그레이션 하였습니다.
  2. 쉽고 빠른 설정
    Amazon Connect의 Flows 기능은 드래그 앤 드롭으로 직관적인 엔드 투 엔드 워크플로우 설계 인터페이스를 제공하여 IVR 시나리오와 자동화된 발신 작업을 간단히 설정할 수 있습니다. 제노스에 전화 번호 발급을 통해 간단하게 연결을 하였습니다.
  3. 유연성과 확장성
    AWS Lambda와 기본 통합으로 AWS의 다양한 데이터베이스나 AI/ML, 분석 서비스들, 또는 서드 파티 시스템과 통합이 가능합니다. 따라서 고객 요구에 맞춘 복잡한 시나리오 설계가 가능합니다. 또한 사전 약정이나 에이전트 좌석 당 라이센스 비용 없이 사용한 만큼만 지불하면서 변화하는 비즈니스 요구 사항에 따라 유연한 확장이나 축소가 가능합니다.
  4. 글로벌 인프라
    현재 Amazon Connect는 서울을 포함하는 글로벌 11개 리전에서 서비스를 제공하며 고객이 별도의 글로벌 전용회선을 관리할 필요없이 AWS의 글로벌 네트워크를 통해 안정적이고 확장 가능한 통화 서비스를 제공합니다. 또한 수십개의 언어 및 다양한 음성을 제공하는Amazon Polly와 Amazon Lex의 다언어 모델을 통해 국내를 비롯한 해외의 고객 대응도 가능하게 되었습니다.

자동화 발신 및 IVR 시나리오 설계

앞서 AWS Lambda를 통한 외부 시스템 및 AWS 서비스들과의 손쉬운 통합이 Amazon Connect를 도입한 가장 주요한 이유로 언급되었습니다. Amazon Connect에서 콜 시나리오에 맞게 AWS Lambda를 적절히 호출하는 것은 Amazon Connect의 Flows 기능과 기본적으로 통합되어 있습니다. Amazon Connect의 Flows는 UI를 통해 복잡한 플로우를 간단히 시각적으로 설계할 수 있는 워크플로우 디자이너입니다. 발신 작업, 음성 안내, 조건부 분기 등 다양한 기능을 지원합니다. 아래는 Flows을 통해 제노스의 워크플로우를 설계하고, Flows 내에서 AWS Lambda를 호출하여 데이터베이스와 통합한 예시입니다.

예제 Flows 개요

  1. Welcome: “안녕하세요! 다음 사항의 동의를 위해 번호를 눌러주세요.”
  2. DTMF(Dual-Tone Multi Frequency, 키패드) 입력값 확인:
    • 성공: “입력하신 번호는 [입력값]입니다.”
    • 실패: “다시 시도해주세요.”
  3. Lambda 호출: 입력값을 JSON형식으로 저장 및 처리하며, 필요한 데이터를 외부 API 또는 내부 시스템에서 호출하여 플로우에 반영합니다.
  4. 결과에 따른 종료 또는 Fallback: 성공 시 종료, 실패 시 오류 처리를 안내합니다.

제노스 워크플로우 설계 예시

  1. 발신 시나리오 Flows
    • Flows 시작
      • Amazon Connect 에서 Flows를 생성하면 자동으로 생성되는 Entry Point 에 ‘블록라이브러리- 상호작용- 재생 프롬프트’ 를 추가하여 인사말을 재생합니다.
      • 디버깅을 위해 ‘블록라이브러리- 분석- 로깅 동작 설정’ 을 추가하여 추후 모니터링 서비스인  Amazon CloudWatch 에서 로그를 확인 할 수 있도록 해줍니다.
    • DTMF 입력값 받기
      • 고객이 전화기 버튼으로 입력하는 값을 처리합니다.
      • ‘블록 라이브러리- 상호 작용- 고객 입력 가져오기’ 를 추가하여 고객 입력을 받을 수 있도록 설정합니다.
      • 입력값 확인 후, 성공 시 다음 단계로 진행합니다.
      • 초기값을 설정하거나, 제한시간을 두어 이에 해당하는 시나리오를 준비 할 수 있습니다.
    • Lambda 연동
      • ‘블록 라이브러리- 통합- AWS Lambda 호출’ 블록을 추가하여 Lambda 함수를 호출 하여 결과값을 처리합니다.
      • 사용자의 입력값을 처리하여 요청 기록을 저장하는 것과 같은 데이터베이스 업데이트, 조건에 따른 동적 음성 생성 및 재생, 또는 백엔드 시스템과의 통합을 수행합니다.
    • Fallback 처리
      • 오류 발생 시 안내 음원을 재생하고, 오류 보고를 위한 Lambda 호출을 실행합니다.
  2. Lambda 예시 코드: 발신 시나리오 호출을 위한 예시
    • Lambda 에서 body 에 각종 정보를 담아 Connect 호출하기
      • 요청 body 에 발신할 전화번호와 음원의 경로를 담아서 호출합니다.
      • 아래 예시와 같이 StartOutboundVoiceContactCommand 를 사용합니다.
        // AWS SDK에서 필요한 클라이언트와 명령어를 가져옵니다.
        import { ConnectClient, StartOutboundVoiceContactCommand } from "@aws-sdk/client-connect";
        
        // AWS Connect 클라이언트를 초기화합니다. 여기서는 ap-northeast-2 리전을 사용합니다.
        const client = new ConnectClient({region: "ap-northeast-2"});
        
        // Lambda 핸들러 함수를 정의합니다.
        export const handler = async (event) => {
            
            var body = null;
            
            // 이벤트 body가 존재하고 비어있지 않다면 JSON으로 파싱합니다.
            if (event.body && event.body !== "") {
                body = JSON.parse(event.body);
            }
        
            // body가 null이면 400 에러를 반환합니다.
            if(body == null) {
                const res = {
                    statusCode: 400,
                    body: "body is null"
                }
                return res;
            }
        
            // StartOutboundVoiceContactCommand에 필요한 파라미터를 설정합니다.
            var params = {
                ContactFlowId:"[YourContactFlowId]",  // ContactFlow ID 
                DestinationPhoneNumber:body.phoneNumber,  // 수신자 전화번호
                InstanceId:"[YourInstanceId]",  // Amazon Connect 인스턴스 ID
                SourcePhoneNumber:"[YourSourcePhoneNumber]",  // 발신자 전화번호
                Attributes: {
                    // Attributes
                    "s1path":body.s1path, //s1path : full script s3 uri
                    "s2path":body.s2path, //s2path : agree script s3 uri
                    "s3path":body.s3path, //s3path : disgree script s3 uri
                    "s4path":body.s4path //s4path : timeout script s3 uri
                },
            }
        
            // StartOutboundVoiceContactCommand 객체를 생성합니다.
            const command = new StartOutboundVoiceContactCommand(params);    
            // 응답 데이터를 저장할 변수를 초기화합니다.
            let data = "";
            try {
                data = await client.send(command);
                console.log("Outbound Call Success");  // 성공 시 로그를 출력합니다.
            } catch (err) {
                // 에러 발생 시 에러 로그를 출력합니다.
                console.log(err);
            }
        
            // 최종 응답 객체를 생성합니다.
            const res = {
                statusCode: 200,  // 성공 상태 코드
                body: JSON.stringify(data)  // 데이터를 JSON 문자열로 변환하여 body에 포함
            }
        
            // 응답을 반환합니다.
            return res;
        };
        
        JavaScript
  3. Lambda 예시 코드: Flows에서 AWS Lambda 를 호출하여 결과값을 수신 받는 예시
    • Flows에서 Lambda 를 호출 하여 결과값을 전송
      • Flows에서 고객과의 상호작용으로 전달된 결과내에서 전화번호, 동의여부와 같이 원하는 Parameters 를 수신 받고, 이 정보들을 원하는 데이터베이스나 외부 시스템에 저장하거나 업데이트하는 작업을 수행할 수 있습니다.
        // Lambda 핸들러 함수를 정의합니다.
        export const handler = async (event) => {
            // 이벤트 객체에서 필요한 매개변수를 추출합니다.
            const { Details } = event
            const { Parameters } = Details
            // Parameters 객체에서 phoneNumber와 isAgree 속성을 추출합니다.
            const { phoneNumber, isAgree } = Parameters
        
            // 응답 본문 객체를 생성합니다.
            const responseBody = {
                phoneNumber: phoneNumber,
                isAgree: isAgree,
            }
        
            //전화번호와 동의 여부를 처리(원하는 데이터베이스, 외부시스템 등에 저장)하는setInformation 함수를 호출하고 결과를 기다립니다.
            const result = await setInformation(phoneNumber, isAgree)
        
            // 최종 응답 객체를 생성합니다.
            const response = {
                statusCode: 200,  // 성공 상태 코드
                body: JSON.stringify(responseBody),  // responseBody를 JSON 문자열로 변환합니다.
            };
        
            // 생성된 응답 객체를 반환합니다.
            return response;
        };
        
        JavaScript

위 코드들은 개발 중 사용된 Lambda 코드의 일부이며 Amazon Connect와 AWS Lambda 통합의 참고로만 봐주시길 바랍니다.

Amazon Connect 도입 후 제노스 개선 효과

Amazon Connect 도입 전 고려하던 IVR 의 경우, 전통적 방식인 실제 상담원을 통한 연결이었습니다. 예를 들어 약 2,000명의 고객에게 직접 전화를 거는 방식을 적용할 경우, 각 통화별 평균 1분 가량이 소요된다고 가정할 때 최소 2,000분 즉 약 33시간 이상이 소요될 것으로 예상되었습니다. 기존 IVR은 상담원의 좌석 수와 회선 수에 제한을 받고 비용과도 연계되지만 Amazon Connect는 기본적으로 인스턴스 당 10개의 동시 전화가 가능하며 이는 증량 가능합니다. 또한 증량한 동시 전화 수에 따라 비용이 증가하는 것이 아니라 통화 시간에 비례하여 과금이 되기 때문에 기존 IVR의 전통적인 방식에 비해 확장이 원활하고 비용 또한 효율적입니다.

일반적으로 DTMF입력 완료 후에 통화를 종료하거나 전화를 받지 않아서 빠르게 다음 회선으로 넘어가는 경우가 있어 평균적인 통화 연결은 20초 가량으로 통계가 나왔습니다. 따라서 성능을 산정하기 위하여, 고객 2000명을 대상으로 기본 쿼터인 최대 10개 동시 전화로 계산 시, (20초 * 총 2000회선 / 10개의 동시 회선)으로 대략 70분 정도라는 수치로 계산됩니다. 이를 검증하기 위한 실제 테스트에서 동시 발신 회선을 5개로 제한하였음에도 평균 70분 미만으로 2000콜을 소화 가능한 것으로 확인되었습니다.

해당 테스트에서는 각 시나리오 케이스에 맞는 음원을 재생하도록 하였습니다. 물론 통화시간은 콜 시나리오의 영향을 받지만 추후 실제 대고객 대상으로 서비스 시, 평균적인 동시 콜 수에 따라 쿼터 증량이 가능하기에 전통적 방식에 비해 비용과 운영이 효율적임을 확인하였습니다. 이 밖에도 여러 시나리오에서 Amazon Connect 도입으로 기대되는 효과들은 다음과 같습니다.

1. 콜센터 자동화: 상담 업무의 효율화

Amazon Connect는 고객의 기본적인 문의를 음성 안내와 DTMF 입력값으로 처리함으로써 콜센터의 효율성을 극대화합니다. 고객은 간단한 메뉴를 통해 필요한 정보를 신속하게 얻을 수 있어 대기 시간을 줄이고, 상담사는 반복적이거나 간단한 작업에서 벗어나 더 복잡한 고객 요청에 집중할 수 있습니다. 이를 통해 고객 만족도와 업무 효율이 동시에 향상됩니다. 예를 들어, 고객이 단순한 계정 정보 확인이나 주문 상태를 조회하려는 경우, IVR 메뉴를 통해 자동으로 처리가 가능합니다. 이러한 자동화는 상담 인력을 대체하는 것이 아니라, 고객의 기본적인 요구를 빠르게 해결함으로써 상담 품질을 높이는 데 초점이 맞춰져 있습니다.

2. 마케팅 캠페인 지원: 대규모 맞춤형 발신

Amazon Connect는 마케팅 팀이 대규모로 자동화된 발신 작업을 수행하도록 지원합니다. 예를 들어, 특정 프로모션이 시작될 때 기존 고객이나 신규 고객에게 맞춤형 메시지를 음성으로 전달할 수 있습니다. 이 과정에서 고객 정보를 기반으로 한 개별화된 메시지 작성도 가능하여, 일반적인 스팸 발송이 아닌 고객 맞춤형 서비스로 가치를 더합니다. 예를 들어, “고객님께만 제공되는 특별 할인 코드입니다!”와 같은 개인화된 음성을 재생하거나, 고객의 응답을 실시간으로 분석하여 추가 액션을 수행할 수 있습니다. 이를 통해 기업은 고객과의 관계를 강화하고, 마케팅 캠페인의 성공률을 높일 수 있습니다.

3. 고객 데이터 관리: 실시간 데이터 기반 의사결정

Amazon Connect는 고객과의 상호작용 데이터를 실시간으로 기록하고 데이터베이스에 저장하여 분석 및 개선에 활용할 수 있습니다. 이 기능은 단순한 콜 기록을 넘어 고객의 요청 유형, 상담 이력, 서비스 선호도 등을 구조화된 데이터로 관리할 수 있도록 지원합니다. 예를 들어 고객이 자주 요청하는 문제나 선호하는 커뮤니케이션 방식을 파악하면, 이를 바탕으로 더 나은 고객 경험을 설계할 수 있습니다. 또한 고객의 피드백을 자동으로 수집하고 분석함으로써, 서비스 품질 개선과 신규 비즈니스 기회 발굴에 기여합니다. 이 모든 데이터는 AWS의 강력한 분석 도구와 연동하여 활용할 수 있으므로, 기업이 전략적으로 성장하는 데 큰 도움을 줍니다. 이와 같은 활용 사례는 Amazon Connect가 단순한 IVR 및 발신 시스템을 넘어 대기업 뿐만 아니라 특히 기존의 IVR시스템 구축을 위해서 높은 초기 투자 비용에 어려움을 겪는 중소기업까지, 다양한 규모의 기업들의 운영과 고객 경험을 혁신적으로 변화시킬 수 있습니다.

향후 계획: 다양한 AI서비스 통합을 통한 고객경험 강화

IP 관련 업무의 특성상 고객 개개인이 보유한 지식재산권에 대한 진행상황을 보고하고 이에 대한 확인을 받아야 하는 과정이 있습니다. 특히 해외 고객의 경우, 현재는 시차로 인해 유선 통화가 제한적이고 이메일 위주의 소통이 이루어지고 있어, 즉각적인 응대와 세밀한 고객 케어에 한계가 있었습니다. 따라서 위에서 언급된 Amazon Polly, Lex외에도 여러 파운데이션 모델을 단일 API로 제공하는 Amazon Bedrock과의 통합을 통해 검색증강생성 기술을 도입하여 다국어와 시차에 상관없는 완전 자동 응대 시스템을 구축할 예정입니다.

  • 검색 증강 생성 (RAG, Retrieval-Augmented Generation): 자동 응대 시스템을 위해서는 질문에 대해 신뢰할 수 있는 지식 베이스를 참조하여 적절한 응답을 생성하도록 해주는 검색증강생성 기술이 필요합니다. 해당 기술을 활용하면 IP 관련 전문 지식과 절차, 케이스별 대응 방안, 그리고 FAQ 등을 데이터베이스화하고 이 지식 베이스에서 질문에 대한 적절한 답변을 검색하여 자동 응대를 하도록 하는 것이 가능합니다. Amazon Bedrock은 검색 증강 생성 워크플로우를 엔드 투 엔드로 손쉽게 구축할 수 있는 Knowledge Bases를제공합니다. 앞서 AWS Lambda를 사용하여 Amazon Connect와 다양한 AWS서비스 간에 통합이 가능하였듯, Amazon Bedrock Knowledge Bases와 Amazon Connect를 AWS Lambda를 사용하여 통합하는 자세한 내용은 워크샵을 참고할 예정입니다.
  • Amazon Connect Contact Lens: 자동 응대 시스템 구축 뿐만 아니라 추후 이를 지속적으로 개선하기 위해서는 콜을 분석하여 품질을 관리하는 것이 필요합니다. Amazon Connect Contact Lense 기능을 통한 콜 분석으로 지속적으로 고객 경험을 개선할 수 있습니다. 채팅 뿐만 아니라 음성을 자동으로 Speech to Text화 할 수 있고 이를 실시간 또는 통화 후 분석하여 고객의 감정을 분석하고 이에 따른 응대 및 개선이 필요한 부분 파악이 가능합니다. 또한 통화 후 스크립트와 녹음된 오디오에서 고객의 감정이 나빴던 부분과 같은 주요 하이라이트 부분을 표시하고 빠르게 검토할 수 있기 때문에 추후 품질 개선에 사용될 수 있습니다. 생성형 AI를 활용한 콜 내용 요약을 통해 필요한 경우 신속한 콜 파악 또한 가능합니다.

이러한 서비스 및 기능들은 시스템을 자동화하고 고객경험을 지속적으로 개선하는데 유용히 사용될 수 있습니다. 따라서 향후 다양한AI서비스 및 기능들을 추가적으로 활용하여 고객들의 다양한 니즈에 대응할 수 있도록 솔루션을 고도화할 계획입니다.

BoNam Son

손보남

인디프 손보남 대표는 변리사로 근무했던 경험을 바탕으로 법률전문가들이 손쉽게 고객을 만나고 지속적으로 커뮤니케이션할 수 있는 고객-업무 관리 서비스를 기획하고 있습니다.

SangHoon Son

손상훈

인디프 손상훈 기술이사는 백엔드 기반의 풀스택 개발자로 근무하며, 안정적이고 확장 가능하며 높은 수준의 보안이 가능한 시스템 설계를 지향합니다. 주로 Java와 Javascript, Python, SpringBoot Framework, Node.JS 를 사용하여 RESTful API와 데이터베이스 연동, 프론트엔드 Application 을 개발해 왔습니다.

Kyoungeun Kim

Kyoungeun Kim

김경은 Solutions Architect는 다양한 비즈니스에서 고객이 AWS 솔루션을 통해 요구사항을 충족하고 비즈니스 성과를 달성할 수 있도록 최적의 아키텍처를 설계하기 위한 도움을 드리고 있습니다.