BLOG
컨택 센터의 어시스턴트는 FAQ, Wiki, 제품 설명서 혹은 가이드와 같은 문서를 참조해야 하는 질문을 자주 접합니다. 그러나, 대부분의 컨택 센터는 어시스턴스가 고객과 상호 작용할 때 사용하는 애플리케이션과 잘 통합되지 않고 고립된 지식 관리 시스템이나 문서 저장소를 사용하고 있습니다. 결과적으로 상담원은 고객의 문제를 해결하기 위한 정보를 얻기 위해 데이터 소스 전체를 수동으로 검색하는 데 귀중한 시간을 허비하게 되고, 고객은 이러한 늦은 처리에 실망하게 되겠죠.
Amazon Connect Wisdom을 사용하면 어시스턴트는 연결된 리포지토리를 검색하고 에이전트 데스크톱 내에서 실시간 추천을 받아 고객의 문제에 대한 답변을 빠르게 찾을 수 있습니다. Wisdom은 Salesforce 및 ServiceNow를 포함한 타사 응용 프로그램에 대한 기본 제공 커넥터를 제공합니다. 또한, 컨택 센터 관리자는 Amazon Connect Wisdom API를 사용하여 데이터를 수집하고, Amazon S3 버킷과 같은 다른 엔터프라이즈 애플리케이션 및 데이터 원본의 콘텐츠를 사용하는 사용자 지정 커넥터를 구축할 수 있습니다.
AWS Management 콘솔을 통해 기본 제공 커넥터를 설정하는 help documentation를 볼 수 있습니다. 이번 포스팅에서는 기본 제공 커넥터에서 다루지 않는 소스의 콘텐츠가 있는 경우, Amazon Connect Wisdom API를 사용하여 사용자 지정 커넥터를 구축하고 다른 데이터 저장소에서 데이터를 수집하는 방법을 소개하고자 합니다. 프로덕션 수준 구현의 예로 고객은 Lambda 함수 내에서 이러한 API 호출의 SDK 버전을 사용하고 지식 소스의 정보가 변경될 때마다 Lambda 함수를 트리거할 수 있습니다.
솔루션 개요
AnyCompany는 1년 동안 1000명 이상의 에이전트와 함께 Amazon Connect를 사용해 왔습니다. 에이전트는 회사의 S3 버킷에 저장된 지식 문서를 찾는 데 정기적으로 시간을 보냅니다. Wisdom을 사용하면 에이전트는 지식 기반에서 실시간 권장 사항을 얻고 에이전트 애플리케이션에서 직접 지식 기반을 검색할 수 있습니다. 이 솔루션은 S3 버킷에서 Wisdom으로 지식을 자동으로 수집합니다. 오늘 포스팅의 뒷부분에서 이러한 솔루션의 세 가지 주요 부분을 안내해 드리겠습니다.
- AWS CLI를 사용하여 Wisdom 리소스 및 Connect 통합 설정
- S3 버킷에서 모든 파일 생성/업데이트를 트리거하고 AWS SDK를 통해 Wisdom API를 사용하여 파일을 수집하는 Lambda를 사용
- AWS CLI를 사용하여 방금 업로드한 콘텐츠를 기반으로 Wisdom에서 쿼리 결과를 얻을 수 있는지 확인
Wisdom의 데이터 구조
어시스턴트는 Wisdom의 최상위 리소스이며 콘텐츠가 검색을 해결하고 실시간 추천을 제공하는 데 사용되는 지식 기반과 연결됩니다. 사용자는 여러 어시스턴트를 생성할 수 있으며 어시스턴트는 하나 이상의 Connect 인스턴스와 연관될 수 있습니다. 그러나 하나의 Connect 인스턴스에는 현재 하나의 어시스턴트만 있을 수 있습니다. Wisdom의 실시간 추천을 활성화하고 연락처를 보다 세밀하게 제어하기 위해 어시스턴트는 연락처 블록을 통해 개별 연락처 흐름과 연결합니다.
지식 기반은 콘텐츠 모음을 나타냅니다. Wisdom은 외부 및 사용자 정의의 두 가지 유형을 지원합니다. 전자는 Salesforce 및 ServiceNow와 같은 기본 제공 통합에 사용되는 반면 후자는 고객이 공개 API를 통해 콘텐츠를 업로드하려는 경우에 사용됩니다(아래 참조). 또한, 지식 기반은 여러 어시스턴트와 연관될 수 있습니다. 콘텐츠 리소스는 개별 문서 또는 도움말 문서를 나타냅니다. Wisdom은 HTML과 일반 텍스트의 두 가지 형식을 지원합니다. 외부 지식 기반이 생성되면 Wisdom은 소스와 동기화할 때 자동으로 콘텐츠를 생성합니다. 사용자 지정 지식 기반의 경우 고객이 수동으로 콘텐츠를 만듭니다.
연습
이 솔루션에서는 콘텐츠(이 경우 HTML 파일)가 포함된 Amazon S3 버킷을 사용합니다. 이벤트 생성 및 제거 시 Lambda 실행을 트리거하도록 버킷을 설정합니다. 이 tutorial을 참조하여 S3 버킷 및 Lambda 트리거를 설정하고 버킷에서 버전 관리를 활성화하는 것을 잊지 마십시오. 다음은 필요한 경우 S3 버전 관리에 대한 참조 입니다. Lambda 함수는 콘텐츠를 Wisdom으로 수집합니다. AWS CLI를 통해 어시스턴트, 지식 기반 및 다양한 연결을 설정하는 것은 일회성 작업이므로 앞서 언급한 Lambda 함수에 추가할 수 있는 JavaScript 스니펫으로 나머지 연습을 계속합니다.
전제 조건
- AWS 계정
- Amazon Connect 인스턴스
- 버전 관리가 활성화된 S3 버킷
- 2021년 9월 27일 이후에 릴리스된 최신 AWS CLI
Wisdom constructs 설정
다음 명령은 AWS CLI를 통해 실행됩니다. CLI를 사용하여 Assistant, KnowledgeBase, AssistantAssociation 및 IntegrationAssociation을 생성한 다음 Lambda 코드로 이동합니다.
- 어시스턴트 생성
Amazon Connect Wisdom API create-assistant를 사용하여 최상위 보조 리소스 생성
Bash
aws wisdom create-assistant \
–name TestAssistant \
–type AGENT
명령을 실행하면 assistantId 및 assistantArn이 반환됩니다. 다음 명령에 대해 이 값을 저장하십시오.
- 지식 기반 만들기(사용자 지정)
create-knowledge-base CLI 명령을 사용하여 custom 유형의 새로운 지식 기반 리소스를 생성합니다.
Bash
aws wisdom create-knowledge-base \
–name TestKnowledgeBase \
–knowledge-base-type CUSTOM
이 명령은 knowledgeBaseId 및 knowledgeBaseArn을 반환합니다. 다음 명령에 대해 이 값을 저장하십시오.
- 지식 기반을 어시스턴트에 연결
create-assistant-association CLI 명령을 사용하여 이전에 만든 도우미를 마지막 단계에서 만든 지식 기반과 연결합니다.
Bash
aws wisdom create-assistant-association \
–assistant-id 00000000-0000-0000-0000-000000000000 \
–association knowledgeBaseId=11111111-1111-1111-1111-111111111111 \
–association-type KNOWLEDGE_BASE
- 어시스턴트와 지식 기반을 Connect 인스턴스에 연결
Amazon Connect의 create-integration-association CLI 명령을 사용하여 이전에 생성한 어시스턴트와 지식 기반을 Connect 인스턴스와 연결합니다. 이렇게 하면 상담원이 자동 추천을 볼 수 있도록 Connect 고객 응대 흐름에 비서를 추가할 수 있습니다. 해당 아티팩트를 생성할 때부터 integrationArn 및 knowledgeBaseArn을 사용합니다.
Bash
aws connect create-integration-association \
–instance-id aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa \
–integration-type WISDOM_ASSISTANT \
–integration-arn arn:aws:wisdom:us-east-
1:123456789012:assistant/00000000-0000-0000-0000-000000000000
Bash
aws connect create-integration-association \
–instance-id aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa \
–integration-type WISDOM_KNOWLEDGE_BASE \
–integration-arn arn:aws:wisdom:us-east-1:123456789012:knowledge-base/11111111-1111-1111-1111-111111111111
데이터 수집하기
이제 CLI 리소스를 통해 Wisdom 도우미 및 지식 기반 설정을 완료했으므로 S3에서 Wisdom 지식 기반으로 지식을 수집하는 Lambda 함수 함수를 설정해 보겠습니다. S3 버킷에서 객체를 추가하거나 제거할 때 JavaScript 코드가 Lambda 함수에서 실행된다는 점을 기억하십시오. Amazon Connect Snippets 리포지토리 에서 전체 코드를 찾을 수 있습니다. CreateContent, UpdateContent 및 DeleteContent 기능에 대해 설명합니다.
Lambda 계층의 노드 모듈 사용하기
콘텐츠 업로드를 위한 HTTP 요청을 실행하기 위해 우리는 axios라는 약속 기반 HTTP 라이브러리를 사용하고 싶습니다. Wisdom API는 최신 AWS SDK 버전에서만 사용할 수 있으므로 Lambda 함수가 최신 AWS SDK를 사용하고 있는지도 확인해야 합니다. 이러한 이유로 우리는 Lambda계층을 생성하고 이를 Lambda 함수에서 사용할 것입니다. 2021년 9월 27일 이후에 출시된 최신 Nodejs용 AWS SDK를 다운로드하여 설치해보세요. 로컬 시스템에서 레이어에 대한 디렉토리를 만들고 이름을 nodejs로 지정합니다.
참고: nodejs 디렉토리 이름은 nodejs여야 합니다. 여기에서 환경 경로에 대해 알아보실 수 있습니다.
Bash
mkdir nodejs
cd nodejs
npm init
npm install –save axios aws-sdk
cd ..
zip -r lambda-layer.zip nodejs
이제 nodejs 디렉터리(lambda-layer.zip)를 압축하고 Lambda 콘솔 또는 CLI를 통해 zip 파일을 사용하여 Lambda 계층을 생성합니다
Lambda 함수 설정
다음으로는 S3 버킷에서 객체를 추가하거나 제거할 때 콘텐츠를 Wisdom으로 수집하는 Lambda 함수를 설정합니다. Amazon Connect Snippets 리포지토리에서 전체 코드를 찾을 수 있습니다. Lambda 함수에 Nodejs 계층을 추가하고 함수가 맡는 IAM 역할에 S3 버킷을 읽고 Wisdom에 콘텐츠를 업로드할 수 있는 권한이 있는지 확인하십시오.
다음 몇 단락에서는 Lambda 함수 코드의 주요 부분을 안내합니다. createContent 또는 updateContent 호출 전에 Lambda 함수에서 startContentUpload API를 실행합니다. 이 API를 호출하면 미리 서명된 URL과 헤더가 반환됩니다.
- 콘텐츠 업로드 시작
JavaScript
const uploadDetails = await client.startContentUpload({
“knowledgeBaseId“: knowledgeBaseId,
“contentType”: s3Object.contentType
}).promise();
URL과 헤더 값을 포함하는 응답을 uploadDetails 변수에 저장합니다.
- HTTP 요청
JavaScript
await axios.put(uploadDetails.url, s3Object.Body, {
headers: uploadDetails.headersToInclude
});
uploadDetails를 사용하여 PUT 요청을 만듭니다. 필수 헤더를 포함하지 않으면 요청이 수락되지 않습니다. 이제 Wisdom 콘텐츠를 보냈습니다. 새 콘텐츠를 만들거나 기존 콘텐츠를 업데이트하는지 Wisdom에 알려야 합니다. 사용할 작업을 결정하기 위해 동일한 파일 이름을 공유하는 콘텐츠에 대해 Wisdom에 쿼리합니다.
- 기존 콘텐츠 검색
JavaScript
const searchResponse = await client.searchContent({
“knowledgeBaseId”: knowledgeBaseId,
“searchExpression”: {
“filters”: [{
“field”: “name”,
“operator”: “equals”,
“value”: s3Object.key
}]
}
}).promise();
SearchContent가 빈 contentSummaries 배열을 반환하면 CreateContent API 호출을 실행합니다. 나중에 이 콘텐츠를 검색할 수 있도록 이름을 S3 개체 키(파일 이름을 나타냄)와 동일하게 설정했습니다. 또한 메타데이터 키 s3Version을 설정했습니다. 이를 통해 나중에 보게 되겠지만 수명 주기를 더 잘 관리할 수 있습니다.
- 콘텐츠 만들기
JavaScript
await client.createContent({
“knowledgeBaseId”: knowledgeBaseId,
“name”: s3Object.key,
“uploadId”: uploadDetails.uploadId,
“metadata”: {
“s3Version”: s3Object.version
}
}).promise();
대신 SearchContent가 기존 콘텐츠 리소스를 반환하는 경우 UpdateContent API 호출을 실행합니다. RevisionId 인수가 포함되어 있습니다. UpdateContent 작업은 SearchContent를 사용하여 읽은 이후 콘텐츠가 수정되지 않았는지 확인하기 위해 optimistic locking 을 사용합니다.
- 콘텐츠 업데이트
JavaScript
await client.updateContent({
“knowledgeBaseId”: knowledgeBaseId,
“contentId”: searchResponse.contentSummaries[0].contentId,
“revisionId”: searchResponse.contentSummaries[0].revisionId,
“uploadId”: uploadDetails.uploadId,
“metadata”: {
“s3Version”: s3Object.version
}
}).promise();
Lambda 함수 테스트
Lambda 콘솔에서 테스트 이벤트를 구성하거나 S3 버킷에 파일을 업로드하여 Lambda 함수를 테스트할 수 있습니다. 이제 앞의 두 가지 기능을 테스트해 보겠습니다. 여기 에서 샘플 콘텐츠 파일을 사용하여 S3 버킷에 업로드할 수 있습니다. 업로드 시 S3 이벤트는 Lambda 함수를 트리거하여 CreateContent logic branch를 실행하고 실행합니다. CloudWatch Logs를 사용하여 성공적인 실행을 확인하거나 오류를 디버깅합니다. CloudWatch 로그를 확인하여 콘텐츠가 생성되었음을 확인한 후 content.html을 다시 업로드하면 UpdateContent logic branch가 트리거됩니다.
콘텐츠 수집을 검증하기 위한 Query Wisdom
콘텐츠가 S3에 업로드 되었으므로 다음 CLI 명령을 실행하여 업로드 된 지식이 Wisdom에서 수집되었는지 확인합니다.
Bash
aws wisdom query-assistant \
–assistant-id 00000000-0000-0000-0000-000000000000 \
–query-text “dog”
그러면 Wisdom 엔진에서 쿼리 결과가 반환됩니다.
콘텐츠 삭제
콘텐츠를 수집했으므로 이제 삭제해 보겠습니다. S3 버킷에서 content.html 파일을 삭제하면 이벤트가 Lambda 함수를 트리거하여 DeleteContent API 호출을 호출합니다.
JavaScript
await client.deleteContent({
“knowledgeBaseId”: knowledgeBaseId,
“contentId”: existingContent.contentId
}).promise();
결론
이번 포스팅에서는 에이전트가 고객 문제를 해결하는 데 필요한 정보에 더 쉽게 액세스할 수 있도록 Amazon Connect Wisdom을 사용하는 방법을 살펴보았습니다. 특히 API를 사용하여 콘텐츠를 수집, 관리 및 쿼리하는 방법을 배웠습니다. Amazon Connect Wisdom을 사용하면 컨택 센터 상담원은 더 빠른 고객 서비스를 제공하는 데 필요한 정보를 얻을 수 있으므로 더 높은 고객 만족도를 얻을 수 있습니다. Amazon Connect Wisdom을 사용하여 Wisdom API로 지식 콘텐츠를 수집하고, 지금 에이전트에게 실시간 추천 및 검색 기능을 제공해보세요!
메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글이나 관련 기사 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.