

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Chime SDK의 통화 분석을 사용하여 통화에서 인사이트 생성
<a name="call-analytics"></a>

이 섹션의 주제에서는 Amazon Chime SDK 통화 분석을 사용하여 호출 데이터에서 인사이트를 생성하는 방법을 설명합니다.

Amazon Chime SDK 통화 분석은 개발자에게 오디오 수집, 분석, 경고 및 데이터 레이크 통합을 포함하여 실시간 오디오에서 비용 효율적인 인사이트를 생성하는 로우코드 솔루션을 제공합니다. 통화 분석을 사용하면 Amazon Transcribe 및 Transcribe Call Analytics(TCA)와의 통합을 통해, 그리고 기본적으로 Amazon Chime SDK 음성 분석을 통해 인사이트를 얻을 수 있습니다. 통화 분석은 Amazon S3 버킷에 대한 통화를 기록할 수도 있습니다.

다음 방법을 사용하여 통화 분석을 구성 및 실행할 수 있습니다.
+ Amazon Chime SDK 콘솔을 사용하여 통화 분석 구성을 생성하고 이를 Amazon Chime SDK 음성 커넥터와 연결할 수 있습니다. 이 과정에서 통화 레코딩 및 분석을 활성화할 수 있습니다. 프로세스를 완료하기 위해 코드를 작성할 필요가 없습니다.
+ 프로그래밍 방식으로 구성을 만들고 실행하기 위해 [Amazon Chime SDK](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/welcome.html) API 집합을 사용합니다.

자세한 내용은 이 섹션 뒷부분의 [Amazon Chime SDK의 통화 분석 구성 생성](creating-ca-configuration.md) 및 [Amazon Chime SDK의 통화 분석 구성 사용](using-call-analytics-configurations.md)을 참조하세요.

**Topics**
+ [Amazon Chime SDK 통화 분석이란](what-is-amazon-chime-sdk-call-analytics.md)
+ [Amazon Chime SDK의 통화 분석 용어 이해](ca-terms-concepts.md)
+ [Amazon Chime SDK의 통화 분석 구성 생성](creating-ca-configuration.md)
+ [Amazon Chime SDK의 통화 분석 구성 사용](using-call-analytics-configurations.md)
+ [Amazon Chime SDK의 통화 분석 파이프라인 관리](managing-call-analytics-pipelines.md)
+ [Amazon Chime SDK의 통화 분석 파이프라인 일시 중지 및 재개](pausing-and-resuming-call-analytics-pipelines.md)
+ [Amazon Chime SDK의 통화 분석 리소스 액세스 역할 사용](call-analytics-resource-access-role.md)
+ [Amazon Chime SDK의 통화 분석 상태 이해](call-analytics-statuses.md)
+ [Amazon CloudWatch를 통한 Amazon Chime SDK의 통화 분석 파이프라인 모니터링](monitoring-with-cloudwatch.md)
+ [Amazon Chime SDK의 통화 분석 프로세서 및 출력 대상](call-analytics-processor-and-output-destinations.md)
+ [Amazon Chime SDK용 통화 분석 데이터 모델](ca-data-model.md)
+ [Amazon Chime SDK 음성 분석 사용](voice-analytics.md)
+ [Amazon Chime SDK의 통화 분석 서비스 할당량](ca-regions.md)

# Amazon Chime SDK 통화 분석이란
<a name="what-is-amazon-chime-sdk-call-analytics"></a>

Amazon Chime SDK 통화 분석은 오디오 수집, 녹음, 음성 분석, 경고 및 데이터 레이크 기능을 포함하여 실시간 오디오에서 비용 효율적인 인사이트를 생성하는 로우코드 솔루션입니다. 워크플로에 사용할 기계 학습 통합 및 오디오 처리 기능을 결정하는 재사용 가능한 통화 분석 구성을 생성하여 통화 분석을 사용하여 AWS 기계 학습 기반 인사이트를 생성할 수 있습니다. 그런 다음 음성 커넥터 또는 Amazon Kinesis Video Streams와 같은 다양한 미디어 소스와 함께 통화 분석 구성을 사용합니다. 통화 분석은 Amazon Transcribe 및 Transcribe Call Analytics(TCA)와의 통합을 통해, 그리고 기본적으로 통화 분석에서 실행되는 서비스인 [Amazon Chime SDK 음성 분석](voice-analytics.md)을 통해 인사이트를 생성합니다.

통화 분석을 사용하려면 다음 단계를 따르세요.

![\[Amazon Chime SDK 통화 분석을 설정하는 프로세스를 보여주는 이미지.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/CallAnalyticsOverview.png)


다이어그램에서

1. 먼저 통화 분석 구성을 생성합니다.

1. 출력 목적지와 선택적 데이터 레이크를 설정합니다.

1. 구성을 음성 커넥터 및 Amazon Kinesis Video Streams와 연결하는 워크플로를 생성합니다.

1. 인사이트를 분석하고 선택적으로 시각화합니다.

Amazon Chime SDK 콘솔을 사용하여 통화 분석 구성을 생성하고 통화 분석이 자동으로 시작되도록 할 수 있습니다. 특정 통화 유형에 적용되는 구성을 제어해야 하는 경우 API를 사용하여 구성을 생성합니다. 어느 쪽이든 구성에는 통화 오디오를 호출하고 통화 녹음을 활성화하는 AWS 기계 학습 서비스에 대한 세부 정보와 인사이트, 메타데이터 및 녹음의 대상이 포함됩니다. 통화 분석은 다음과 같은 대상을 제공합니다.
+ Amazon Kinesis Data Stream(KDS)입니다. KDS를 사용하여 실시간 통화 정보를 수신한 다음 애플리케이션에 통합할 수 있습니다. 예를 들어 실시간 인사이트를 통합하여 영업 또는 고객 지원 에이전트가 고객 통화 중에 도움을 주거나 인사이트를 사용하여 생성형 AI 프롬프트 및 요약을 보강할 수 있습니다.
+ 데이터 웨어하우스로 구성된 Amazon S3 버킷. 버킷은 Parquet 형식으로 데이터를 저장합니다. Parquet은 대용량 데이터를 압축하고 저장하도록 설계된 오픈 소스 파일 형식입니다. 그런 다음 Amazon Athena에서 단순 쿼리 언어(SQL) 를 사용하여 해당 데이터를 쿼리하거나 데이터를 기존 데이터 웨어하우스로 이동하여 비즈니스 데이터와 페어링할 수 있습니다. 예를 들어, 통화 후 집계 분석을 수행하여 고객 통화의 효과, 제품의 문제 영역 또는 직원이 더 나은 고객 성과를 달성하도록 교육할 기회를 파악할 수 있습니다.

통화 분석은 이러한 목적지 외에도 인사이트를 기반으로 사전 구성할 수 있는 실시간 알림을 지원합니다. 알림은 Amazon EventBridge로 전송됩니다.

**참고**  
통화 분석 구성을 생성할 때 특정 오디오 소스를 선택하지 않습니다. 이를 통해 여러 오디오 소스에서 구성을 재사용할 수 있습니다. 예를 들어 구성을 통해 통화 레코딩을 활성화하고 통화 녹취를 제공할 수 있습니다. 그런 다음 Chime SDK 음성 커넥터와 함께 구성을 사용하고 Kinesis Video Stream을 통한 오디오 스트림을 사용할 수 있습니다. 또한 여러 음성 커넥터 간에 구성을 공유할 수 있습니다. 각 통화 분석 구성은 고유하며 ARN으로 식별됩니다.

# Amazon Chime SDK의 통화 분석 용어 이해
<a name="ca-terms-concepts"></a>

다음 용어 및 개념은 Amazon Chime SDK 통화 분석을 사용하는 방법을 이해하는 데 있어 매우 중요합니다.

**Amazon Athena**  
표준 SQL을 사용해 Amazon S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스입니다. Athena는 서버리스 서비스이므로 관리할 인프라가 없으며 실행한 쿼리에 대해서만 비용을 지불하면 됩니다. Athena를 사용하려면 Amazon S3의 데이터를 가리키고 스키마를 정의한 다음 표준 SQL 쿼리를 사용하세요. 또한 작업 그룹을 사용하여 사용자를 그룹화하고 쿼리를 실행할 때 액세스할 수 있는 리소스를 제어할 수도 있습니다. 작업 그룹을 사용하면 다양한 사용자 및 워크로드 그룹에서 쿼리 동시성을 관리하고 쿼리 실행의 우선순위를 지정할 수 있습니다. 자세한 내용은 [Amazon Athena란 무엇인가요?](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)를 확인하세요.

**Amazon Kinesis Data Firehose**  
추출, 전환, 적재(ETL) 서비스로서 스트리밍 데이터를 안정적으로 캡처, 변환하여 데이터 레이크, 데이터 스토어, 분석 서비스로 전달합니다. 자세한 내용은 [Amazon Kinesis Data Firehose란 무엇인가요?](https://aws.amazon.com/kinesis/data-firehose/)를 참조하세요.

**통화 분석 데이터 웨어하우스**  
통화 분석 데이터를 위한 선택적 저장소입니다. 웨어하우스는 Amazon S3 버킷에 Parquet 기반 데이터 파일 형식으로 데이터를 저장합니다. 표준 SQL을 사용하여 데이터를 쿼리할 수 있습니다. 통화 분석 구성에서 웨어하우스를 활성화합니다.

**Glue Data 카탈로그**  
다양한 데이터 소스의 데이터 자산을 위한 중앙 집중식 메타데이터 리포지토리입니다. 카탈로그는 데이터베이스와 테이블로 구성되어 있습니다. 통화 분석의 경우 테이블의 메타데이터가 Athena에게 Amazon S3 버킷의 위치를 알려줍니다. 또한 열 이름, 데이터 유형, 테이블 이름과 같은 데이터 구조를 지정합니다. 데이터베이스에는 데이터 세트의 메타데이터와 스키마 정보만 보관됩니다. 자세한 내용은 이 섹션의 뒷부분에서 [Amazon Chime SDK의 AWS Glue 데이터 카탈로그 테이블 구조 이해](ca-data-model-diagram.md) 항목을 참조하세요.

**미디어 인사이트 파이프라인**  
 고유 `MediaPipelineId`로 식별되는 임시 리소스입니다. 통화 분석 파이프라인 구성 및 런타임 파라미터를 사용하여 생성됩니다. 런타임 파라미터는 파이프라인의 데이터 소스를 지정합니다.

**미디어 인사이트 파이프라인 구성**  
미디어 인사이트 파이프라인을 만드는 데 사용되는 정적 구성입니다. 구성을 사용하여 하나 이상의 파이프라인을 인스턴스화할 수 있습니다.

**미디어 인사이트 파이프라인 구성 요소**  
미디어 인사이트 파이프라인 구성 요소에는 프로세서 요소를 사용하여 미디어를 처리하거나 싱크 요소를 사용하여 생성된 인사이트를 전달하기 위한 지침이 포함되어 있습니다.

**미디어 인사이트 파이프라인 태스크**  
미디어 파이프라인의 임시 하위 리소스입니다. 태스크에는 특정 스트림 ARN 및 채널 ID의 프로세스 상태에 대한 메타데이터가 보관됩니다. 고유 ID로 식별됩니다. 미디어 인사이트 파이프라인에서 음성 분석을 시작하여 생성됩니다.

**화자 검색**  
통화 참여자를 인식하는 데 도움이 되는 음성 분석 기능입니다.

**음성 분석**  
화자 검색 및 음성 톤 분석을 포함하는 Amazon Chime SDK 기능입니다.

**음성 임베딩**  
발신자 음성을 벡터로 표현하고 고유 ID를 더한 값입니다.

**음성 향상**  
전화 통화의 오디오 품질을 향상시키는 시스템입니다.

**음성 프로필**  
음성 임베딩, ID, 만료 날짜의 조합입니다.

**음성 프로필 도메인**  
음성 프로필 모음입니다.

**음성 톤 분석**  
발신자 음성에 대해 `positive`, `negative` 또는 `neutral` 감정을 분석할 수 있게 해주는 음성 분석 기능입니다.

콜 인사이트 구성을 생성하고, 파이프라인을 시작하고, 음성 분석을 실행하는 데 사용되는 API에 대한 자세한 내용은 *Amazon Chime SDK API 참조*의 [Amazon Chime SDK 미디어 파이프라인](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Media_Pipelines.html)을 참조하세요.

**참고**  
미디어 인사이트 파이프라인 API만 새로운 기능을 제공하므로 통화 분석을 실행할 때는 미디어 인사이트 파이프라인 API를 사용하는 것이 좋습니다. 미디어 파이프라인과 음성 네임스페이스 간의 차이점에 대한 자세한 내용은 이 섹션 뒷부분의 [음성 API를 사용하여 Amazon Chime SDK용 음성 분석 실행](va-in-voice-namespace.md)를 참조하세요.

# Amazon Chime SDK의 통화 분석 구성 생성
<a name="creating-ca-configuration"></a>

통화 분석을 사용하려면 먼저 통화 분석 파이프라인을 생성하는 데 필요한 정보가 들어 있는 정적 구조인 *구성*을 생성해야 합니다. Amazon Chime SDK 콘솔을 사용하여 구성을 생성하거나 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API를 직접 호출할 수 있습니다.

통화 분석 구성에는 녹음, 음성 분석 또는 Amazon Transcribe와 같은 오디오 프로세서에 대한 세부 정보가 포함됩니다. 또한 인사이트 대상 및 알림 이벤트 구성도 포함됩니다. 선택적으로 호출 데이터를 Amazon S3 버킷에 저장하여 추가로 분석할 수 있습니다.

하지만 *구성에는 특정 오디오 소스가 포함되지 않습니다*. 이를 통해 여러 통화 분석 워크플로에서 구성을 재사용할 수 있습니다. 예를 들어 동일한 통화 분석 구성을 다양한 음성 커넥터 또는 다양한 Amazon Kinesis Video Stream(KVS) 소스에서 사용할 수 있습니다.

구성을 사용하여 SIP 통화가 음성 커넥터를 통해 발생하거나 새 미디어가 Amazon Kinesis Video Stream(KVS)으로 전송될 때 파이프라인을 생성합니다. 그러면 파이프라인이 구성의 사양에 따라 미디어를 처리합니다.

언제든지 프로그래밍 방식으로 파이프라인을 중지할 수 있습니다. 또한 파이프라인은 보이스 커넥터 통화가 종료되면 미디어 처리를 중지합니다. 또한 파이프라인을 일시 중지할 수도 있습니다. 이렇게 하면 기본 Amazon Machine Learning 서비스에 대한 호출이 비활성화되고 필요할 때 다시 시작됩니다. 하지만 파이프라인을 일시 중지하는 동안 통화 레코딩이 실행됩니다.

다음 섹션에서는 통화 분석 구성을 만들기 위한 전제 조건과 구성 방법을 설명합니다.

**Topics**
+ [Amazon Chime SDK 통화 분석 사전 조건 이해](ca-prerequisites.md)
+ [Amazon Chime SDK 콘솔을 사용하여 통화 분석 구성 생성](create-config-console.md)
+ [API를 사용하여 Amazon Chime SDK의 통화 분석 구성 생성](create-config-apis.md)
+ [Amazon Chime SDK의 음성 커넥터와 구성 연결](ca-associate-vc-steps.md)

# Amazon Chime SDK 통화 분석 사전 조건 이해
<a name="ca-prerequisites"></a>

통화 분석 구성을 만들기 전에 다음 항목이 있어야 합니다. AWS 콘솔을 사용하여 생성할 수 있습니다.
+ Amazon Chime SDK 음성 커넥터. 그렇지 않은 경우 [Amazon Chime SDK 음성 커넥터 생성](https://docs.aws.amazon.com/chime-sdk/latest/ag/ca-prerequisites.html)을 참조하세요. 또한 다음을 수행해야 합니다.
  + 음성 커넥터의 스트리밍을 활성화합니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [EventBridge를 사용한 Amazon Chime SDK 자동화](https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html)를 참조하세요.
  + 통화 분석을 사용하도록 음성 커넥터를 구성하세요. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [통화 분석을 사용하도록 음성 커넥터 구성](https://docs.aws.amazon.com/chime-sdk/latest/ag/configure-voicecon.html)을 참조하세요.
+ Amazon EventBridge 대상. 그렇지 않은 경우 *Amazon Chime SDK 관리자 안내서*의 [EventBridge로 Amazon Chime SDK 모니터링](https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html)을 참조하세요.
+ 음성 커넥터가 EventBridge 대상의 작업에 액세스할 수 있도록 하는 서비스 연결 역할입니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [Amazon Chime SDK 음성 커넥터 서비스 연결 역할 정책 사용](https://docs.aws.amazon.com/chime-sdk/latest/ag/using-service-linked-roles-stream.html)을 참조하세요.
+ Amazon Kinesis Data Stream. 그렇지 않은 경우 *Amazon Kinesis Streams 개발자 안내서*의 [스트림 생성 및 관리](https://docs.aws.amazon.com/streams/latest/dev/working-with-streams.html)를 참조하세요. 음성 분석 및 트랜스크립션에는 Kinesis Data Stream이 필요합니다.
+ 통화를 오프라인으로 분석하려면 Amazon Chime SDK 데이터 레이크를 생성해야 합니다. 이 작업을 수행하려면 이 안내서 뒷부분의 [Amazon Chime SDK 데이터 레이크 생성](ca-data-lake.md) 섹션을 참조하세요.

# Amazon Chime SDK 콘솔을 사용하여 통화 분석 구성 생성
<a name="create-config-console"></a>

이전 섹션에 나열된 사전 요구 사항을 생성한 후 Amazon Chime SDK 콘솔을 사용하여 하나 이상의 통화 분석 구성을 생성할 수 있습니다. 콘솔을 사용하여 하나 이상의 음성 커넥터를 구성과 연결할 수도 있습니다. 이 프로세스를 완료하면 구성을 만들 때 활성화한 기능을 사용하여 통화 분석이 실행되기 시작합니다.

다음 단계에 따라 통화 분석 구성을 생성합니다.

1. 이름 및 선택적 태그를 포함한 구성 세부 정보를 지정합니다.

1. 레코딩 설정을 구성합니다. 녹음 및 기계 학습 기반 인사이트를 포함하는 통화 분석 구성을 만듭니다.

1. 분석 서비스를 구성합니다.

1. 실시간 인사이트를 사용할 출력 대상을 선택합니다. 통화 후 분석을 수행할 수 있는 선택적 데이터 레이크를 생성합니다.

1. 새 서비스 역할을 생성하거나 기존 역할을 사용합니다.

1. 특정 조건이 충족되면 Amazon EventBridge를 통해 알림을 보내는 실시간 알림을 설정합니다.

1. 설정을 검토하고 구성을 생성합니다.

구성을 생성한 후 음성 커넥터를 구성과 연결하여 통화 분석을 활성화합니다. 이렇게 하면 해당 음성 커넥터로 통화가 들어오면 통화 분석이 자동으로 시작됩니다. 자세한 내용은 이 섹션의 뒷부분에서 [Amazon Chime SDK의 음성 커넥터와 구성 연결](ca-associate-vc-steps.md) 항목을 참조하세요.

다음 섹션에서는 프로세스의 각 단계를 완료하는 방법을 설명합니다. 나열된 순서대로 확장합니다.

## 구성 세부 정보 지정
<a name="ca-config-details"></a>

**구성 세부 정보를 지정하려면**

1. [https://console.aws.amazon.com/chime-sdk/home](https://console.aws.amazon.com/chime-sdk/home)에서 Amazon Chime 콘솔을 엽니다.

1. 탐색 창의 **통화 분석** 아래에서 **구성**을 선택한 다음 **구성 생성**을 선택합니다.

1. **기본 정보**에서 다음과 같이 합니다.

   1. 구성의 이름을 입력합니다. 이름은 사용 사례와 태그를 반영해야 합니다.

   1. (선택 사항) **태그**에서 **새 태그 추가**를 선택한 다음 태그 키와 선택적 값을 입력합니다. 키와 값을 정의합니다. 태그는 구성 쿼리에 사용할 수 있습니다.

   1. **다음**을 선택합니다.

## 레코딩 구성
<a name="recording-details"></a>

**레코딩을 구성하려면**
+ **레코딩 구성** 페이지에서 다음 작업을 수행합니다.

  1. **통화 레코딩 활성화** 체크상자를 선택합니다. 이렇게 하면 음성 커넥터 통화 또는 KVS 스트림을 녹음하고 Amazon S3 버킷으로 데이터를 전송할 수 있습니다.

  1. 최상의 오디오 품질을 위해서는 **파일 형식**에서 **WAV(PCM 포함)**를 선택하세요.

     —또는—

     **OGG(OPUS 포함)**를 선택하여 오디오를 압축하고 스토리지를 최적화하세요.

  1. (선택 사항) 필요에 따라 **Amazon S3 버킷 생성** 링크를 선택하고 해당 단계에 따라 Amazon S3 버킷을 생성합니다.

  1. Amazon S3 버킷의 URI를 입력하거나 **찾아보기**를 선택하여 버킷을 찾습니다.

  1. (선택 사항) 녹음의 오디오 품질을 개선하려면 **음성 향상 활성화**를 선택합니다.

  1. **다음**을 선택합니다.

## 음성 향상에 대한 이해
<a name="understand-voice-enhancement"></a>

통화 분석 구성을 생성할 때 통화 레코딩을 활성화하고 녹음된 통화를 Amazon S3 버킷에 저장할 수 있습니다. 그 일환으로 음성 향상을 활성화하고 저장된 통화의 오디오 품질을 개선할 수도 있습니다. 음성 향상 기능은 기능이 활성화된 후 생성된 녹음에만 적용됩니다. 음성 향상 기능이 활성화되면 원본 녹음에 추가로 향상된 녹음이 생성되며, 동일한 Amazon S3 버킷 및 형식으로 저장됩니다. 음성 향상 기능을 사용하면 최대 30분 길이의 통화에 대해 향상된 녹음이 생성됩니다. 30분이 넘는 통화의 경우 향상된 녹음이 생성되지 않습니다.

전화 통화는 협대역 필터링이 적용되며 8KHz로 샘플링됩니다. 음성 향상 기능은 샘플링 속도를 8kHz에서 16kHz로 높이고 기계 학습 모델을 사용하여 주파수 콘텐츠를 협대역에서 광대역으로 확장하여 음성이 더욱 자연스럽게 들리도록 합니다. 또한 음성 향상 기능은 Amazon Voice Focus라는 노이즈 감소 모델을 사용하여 향상된 오디오의 배경 잡음을 줄이는 데 도움이 됩니다.

음성 향상 기능에는 Voice Focus라는 노이즈 감소 모델도 사용됩니다. 이 모델은 향상된 오디오의 배경 소음을 줄이는 데 도움이 됩니다. 음성 향상 기능은 업그레이드된 16kHz 오디오에 모델을 적용합니다.

**참고**  
음성 향상 기능은 미국 동부(버니지아 북부) 리전과 미국 서부(오레곤) 리전에서만 지원됩니다.

음성 향상 레코딩 메타데이터는 구성된 KDS를 통해 기존 AWS Glue 데이터 카탈로그 테이블 *call\$1analytics\$1recording\$1metadata*에 게시됩니다. 음성 향상 통화 레코딩에서 원본 통화 레코딩 레코드를 식별하기 위해 *VoiceEnhancement* 값을 가진 *detail-subtype*이라는 새 필드가 KDS 알림 및 Glue 테이블 *call\$1analytics\$1recording\$1metadata*에 추가됩니다. 데이터 웨어하우스 스키마에 대한 자세한 내용은 [Amazon Chime SDK용 통화 분석 데이터 모델](ca-data-model.md) 섹션을 참조하세요.

### 음성 향상 파일 형식
<a name="enhancement-file-format"></a>

향상된 레코딩 파일에 대한 다음 사항에 유의하세요.
+ 향상된 레코딩은 일반 레코딩과 동일한 Amazon S3 버킷에 기록됩니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_S3RecordingSinkConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_S3RecordingSinkConfiguration.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_S3RecordingSinkRuntimeConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_S3RecordingSinkRuntimeConfiguration.html) API를 직접 호출하거나 Amazon Chime SDK 콘솔을 사용하여 대상을 구성합니다.
+ 향상된 레코딩에는 기본 파일 이름에 **\$1enhanced**가 추가되었습니다.
+ 고급 레코딩은 원본 레코딩과 동일한 파일 형식을 유지합니다. 파일 형식은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_S3RecordingSinkConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_S3RecordingSinkConfiguration.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_S3RecordingSinkRuntimeConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_S3RecordingSinkRuntimeConfiguration.html) API를 직접 호출하거나 Amazon Chime SDK 콘솔을 사용하여 구성합니다.

다음 예제는 일반적인 파일 이름 형식을 보여줍니다.

```
s3://original_file_name_enhanced.wav
```

또는

```
s3://original_file_name_enhanced.ogg
```

## 분석 서비스 구성
<a name="configure-analytics"></a>

Amazon Transcribe는 통화의 텍스트 트랜스크립션을 제공합니다. 그런 다음 트랜스크립트를 사용하여 Amazon Comprehend와 같은 다른 기계 학습 서비스 또는 자체 기계 학습 모델을 보강할 수 있습니다.

**참고**  
Amazon Transcribe는 자동 언어 인식 기능도 제공합니다. 하지만 사용자 지정 언어 모델이나 콘텐츠 편집에는 이 기능을 사용할 수 없습니다. 또한 언어 식별을 다른 기능과 함께 사용하는 경우 해당 기능이 지원하는 언어만 사용할 수 있습니다. 자세한 내용은 Amazon Transcribe 개발자 안내서**에서 [스트리밍 트랜스크립션을 사용한 언어 식별](https://docs.aws.amazon.com/transcribe/latest/dg/lang-id-stream.html)을 참조하세요.

Amazon Transcribe Call Analytics는 통화 기록, 감정 및 실시간 대화 인사이트를 제공하는 기계 학습 기반 API입니다. 이 서비스를 사용하면 메모를 할 필요가 없으며 감지된 문제에 대해 즉각적인 조치를 취할 수 있습니다. 이 서비스는 또한 발신자 감정, 통화 유도, 통화 외 시간, 방해, 통화 속도 및 대화 특성과 같은 통화 후 분석을 제공합니다.

**참고**  
기본적으로 통화 후 분석은 통화 레코딩을 Amazon S3 버킷으로 스트리밍합니다. 중복 녹음이 생성되지 않도록 하려면 통화 레코딩과 통화 후 분석을 동시에 활성화하지 마세요.

마지막으로, Transcribe Call Analytics는 특정 문구를 기반으로 대화에 자동으로 태그를 지정하고 오디오 및 텍스트에서 민감한 정보를 삭제할 수 있습니다. 통화 분석 미디어 프로세서, 이러한 프로세서에서 생성된 인사이트 및 출력 대상에 대한 자세한 내용은 이 섹션 뒷부분의 [Amazon Chime SDK의 통화 분석 프로세서 및 출력 대상](call-analytics-processor-and-output-destinations.md) 항목을 참조하세요.

**분석 서비스를 구성하려면**

1. **분석 서비스 구성** 페이지에서 **음성 분석** 또는 **트랜스크립션 서비스** 옆의 확인란을 선택합니다. 두 항목을 모두 선택할 수 있습니다.

   **음성 분석** 확인란을 선택하여 **화자 검색**과 **어투 분석**을 원하는 대로 조합하여 사용할 수 있습니다.

   **트랜스크립션 서비스** 확인란을 선택하여 Amazon Transcribe 또는 Transcribe Call Analytics를 활성화합니다.

   1. **화자 검색을 활성화하려면**
      + **예, Amazon Chime SDK 음성 분석에 대한 동의 확인에 동의합니다** 확인란을 선택한 다음 **수락**을 선택합니다.

   1. 어투 분석을 활성화하려면
      + **어투 분석** 확인란을 선택합니다.

   1. Amazon Transcribe를 활성화하려면

      1. **Amazon Transcribe** 버튼을 선택합니다.

      1. **언어 설정**에서 다음 중 하나를 수행하세요.

         1. 발신자가 단일 언어를 사용하는 경우 **특정 언어**를 선택한 다음 **언어** 목록을 열고 언어를 선택합니다.

         1. 발신자가 여러 언어를 구사하는 경우 전화를 건 사람을 자동으로 식별할 수 있습니다. **언어 자동 감지**를 선택합니다.

         1. **자동 언어 식별을 위한 언어 옵션** 목록을 열고 두 개 이상의 언어를 선택합니다.

         1. (선택 사항) **기본 설정 언어** 목록을 열고 기본 설정 언어를 지정합니다. 이전 단계에서 선택한 언어의 신뢰도 점수가 일치하면 서비스가 선호 언어를 텍스트로 변환합니다.

         1. (선택 사항) **콘텐츠 제거 설정**을 열고 하나 이상의 옵션을 선택한 다음 나타나는 추가 옵션 중 하나 이상을 선택합니다. 헬퍼 텍스트에 각 옵션에 대한 설명이 나와 있습니다.

         1. (선택 사항) **추가 설정**을 열고 하나 이상의 옵션을 선택한 다음 나타나는 추가 옵션 중 하나 이상을 선택합니다. 헬퍼 텍스트에 각 옵션에 대한 설명이 나와 있습니다.

   1. Amazon Transcribe Call Analytics를 활성화하려면

      1. **Amazon Transcribe Call Analytics** 버튼을 선택합니다.

      1. **언어** 목록을 열고 언어를 선택합니다.

      1. (선택 사항) **콘텐츠 제거 설정**을 열고 하나 이상의 옵션을 선택한 다음 나타나는 추가 옵션 중 하나 이상을 선택합니다. 헬퍼 텍스트에 각 옵션에 대한 설명이 나와 있습니다.

      1. (선택 사항) **추가 설정**을 열고 하나 이상의 옵션을 선택한 다음 나타나는 추가 옵션 중 하나 이상을 선택합니다. 헬퍼 텍스트에 각 옵션에 대한 설명이 나와 있습니다.

      1. (선택 사항) **통화 후 분석 설정**을 열고 다음을 수행합니다.

         1. **통화 후 분석** 확인란을 선택합니다.

         1. Amazon S3 버킷의 URI를 입력합니다.

         1. 콘텐츠 삭제 유형을 선택합니다.

1. 선택을 마치면 **다음**을 선택합니다.

## 출력 세부 정보 구성
<a name="configure-output"></a>

미디어 처리 단계를 완료한 후 분석 출력의 대상을 선택합니다. 통화 분석은 Amazon Kinesis Data Streams를 통해, 그리고 선택적으로 선택한 Amazon S3 버킷의 데이터 웨어하우스를 통해 실시간 인사이트를 제공합니다. 데이터 웨어하우스를 만들려면 CloudFormation 템플릿을 사용합니다. 템플릿을 사용하면 Amazon S3 버킷에 호출 메타데이터 및 인사이트를 전달하는 인프라를 생성할 수 있습니다. 데이터 웨어하우스 생성에 대한 자세한 내용은 이 섹션 뒷부분에서 [Amazon Chime SDK 데이터 레이크 생성](ca-data-lake.md) 항목을 참조하세요. 데이터 웨어하우스 스키마에 대한 자세한 내용은 이 섹션 뒷부분에서 [Amazon Chime SDK용 통화 분석 데이터 모델](ca-data-model.md) 항목을 참조하세요.

이전 섹션에서 음성 분석을 활성화한 경우 AWS Lambda, Amazon Simple Queue Service 또는 Amazon Simple Notification Service와 같은 음성 분석 알림 대상을 추가할 수도 있습니다. 다음 단계에서는 방법을 설명합니다.

**출력 세부 정보를 구성하려면**

1. **Kinesis 데이터 스트림** 목록을 열고 데이터 스트림을 선택합니다.
**참고**  
데이터를 시각화하려면 Amazon S3 버킷과 Amazon Kinesis Data Firehose에서 사용하는 Kinesis 데이터 스트림을 선택해야 합니다.

1. (선택 사항) **추가 음성 분석 알림 대상**을 확장하고 AWS Lambda, Amazon SNS 및 Amazon SQS 대상의 조합을 선택합니다.

1. (선택 사항) **인사이트 분석 및 시각화**에서 **데이터 레이크를 사용한 기록 분석 수행** 확인란을 선택합니다. 데이터 레이크에 대한 자세한 내용은 이 섹션의 뒷부분에서 [Amazon Chime SDK 데이터 레이크 생성](ca-data-lake.md) 항목을 참조하세요.

1. 마친 후에는 **다음**을 선택합니다.

## 액세스 권한 구성
<a name="configure-perms"></a>

통화 분석을 활성화하려면 기계 학습 서비스 및 기타 리소스에 데이터 미디어에 액세스하고 인사이트를 제공할 수 있는 권한이 있어야 합니다. 콘솔에서 새 서비스 역할을 생성하거나 기존 서비스 역할을 선택합니다. 역할에 대한 자세한 내용은 이 섹션의 뒷부분에서 [Amazon Chime SDK의 통화 분석 리소스 액세스 역할 사용](call-analytics-resource-access-role.md) 항목을 참조하세요.

**액세스 권한을 구성하려면**

1. **네트워크 액세스 구성** 페이지에서 다음을 수행합니다.

   1. **새 서비스 역할 생성 및 사용**을 선택합니다.

   1. **서비스 역할 이름 접미사** 상자에 역할을 설명하는 접미사를 입력합니다.

   —또는—

   1. **기존 서비스 역할 사용**을 선택합니다.

   1. **서비스 역할** 목록을 열고 역할을 선택합니다.

1. **다음**을 선택합니다.

## (선택 사항) 실시간 알림 구성
<a name="configure-alerts"></a>

**중요**  
실시간 알림을 사용하려면 먼저 Amazon Transcribe 또는 Amazon Transcribe 분석을 활성화해야 합니다.

Amazon EventBridge에 실시간 알림을 보내는 규칙 세트를 생성할 수 있습니다. 분석 세션 중에 Amazon Transcribe 또는 Amazon Transcribe Call Analytics에서 생성된 인사이트가 지정된 규칙과 일치하면 알림이 전송됩니다. 알림에는 세부 유형 `Media Insights Rules Matched`가 있습니다. EventBridge는 Amazon Lambda, Amazon SQS 및 Amazon SNS와 같은 다운스트림 서비스와의 통합을 지원하여 최종 사용자를 위한 알림을 트리거하거나 다른 사용자 지정 비즈니스 로직을 시작할 수 있습니다. 자세한 내용은 이 섹션의 뒷부분에서 [Amazon Chime SDK에 Amazon EventBridge 알림 사용](using-eventbridge-notifications.md) 항목을 참조하세요.

**알림을 구성하려면**

1. **실시간 알림**에서 **실시간 알림 활성화**를 선택합니다.

1. **규칙**에서 **규칙 생성**을 선택합니다.

1. **규칙 이름** 상자에 규칙 이름을 입력합니다.

1. **규칙 유형** 목록을 열고 사용할 규칙 유형을 선택합니다.

1. 표시되는 컨트롤을 사용하여 규칙에 키워드를 추가하고 논리를 적용합니다(예: **mentioned** 또는 **not mentioned**).

1. **다음**을 선택합니다.

## 검토 및 생성
<a name="review-create"></a>

**구성 파일을 생성하려면**

1. 각 섹션의 설정을 검토하세요. 필요에 따라 **편집**을 선택하여 설정을 변경합니다.

1. **구성 생성**을 선택합니다.

구성은 Amazon Chime SDK 콘솔의 **구성** 페이지에 표시됩니다.

# API를 사용하여 Amazon Chime SDK의 통화 분석 구성 생성
<a name="create-config-apis"></a>

프로그래밍 방식으로 음성 커넥터 및 통화 분석 구성을 만든 다음 이를 연결하여 통화 분석 워크플로를 시작할 수 있습니다. 이 안내서에서는 사용자가 코드 작성 방법을 알고 있다고 가정합니다.

사용하는 API는 워크플로의 유형에 따라 달라집니다. 예를 들어 오디오를 녹음하려면 먼저 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API를 직접 호출하여 통화 분석 구성을 생성합니다. 그런 다음 [CreateVoiceConnector](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceConnector.html)를 호출하여 음성 커넥터를 생성합니다. 마지막으로 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorStreamingConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_PutVoiceConnectorStreamingConfiguration.html) API를 사용하여 구성을 음성 커넥터와 연결합니다.

반대로 Kinesis 비디오 스트림 프로듀서를 사용하여 오디오를 녹음하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html)을 직접 호출한 다음 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출합니다.

통화 분석 구성을 사용하여 다양한 워크플로를 활성화하는 방법에 대한 자세한 내용은 이 섹션 뒷부분에서 [Amazon Chime SDK의 통화 분석 구성 사용](using-call-analytics-configurations.md) 항목의 워크플로를 참조하세요.

# Amazon Chime SDK의 음성 커넥터와 구성 연결
<a name="ca-associate-vc-steps"></a>

콘솔을 사용하여 통화 분석 구성을 만든 후에는 음성 커넥터를 연결하여 구성을 사용합니다. 그러면 음성 커넥터가 구성에 지정된 분석 서비스 호출을 자동으로 호출합니다. 음성 커넥터는 각 통화에 대해 통화 분석을 호출합니다.

**음성 커넥터를 연결하려면**

1. [https://console.aws.amazon.com/chime-sdk/home](https://console.aws.amazon.com/chime-sdk/home)에서 Amazon Chime 콘솔을 엽니다.

1. 탐색 창의 **SIP 트렁킹**에서 **음성 커넥터**를 선택합니다.

1. 구성과 연결할 음성 커넥터의 이름을 선택한 다음 **스트리밍** 탭을 선택합니다.

1. 아직 선택하지 않은 경우 **시작**을 선택하여 Kinesis Video Streams로 스트리밍을 시작합니다.

1. **통화 분석**에서 **활성화**를 선택하고 나타나는 메뉴에서 통화 분석 구성 ARN을 선택합니다.

1. **저장**을 선택합니다.

**참고**  
음성 커넥터와 관련된 구성을 사용 설정, 사용 중지 또는 수정한 후 새 설정이 서비스를 통해 전파되어 적용될 때까지 5분 정도 기다리세요.

통화 분석 구성에 대한 자세한 내용은 Amazon Chime SDK** 관리자 안내서의 [통화 분석 관리](https://docs.aws.amazon.com/chime-sdk/latest/ag/ag-call-analytics.html)를 참조하세요.

통화 분석 구성을 사용하여 다양한 워크플로를 활성화하는 방법에 대한 자세한 내용은 이 섹션 뒷부분의 [Amazon Chime SDK의 통화 분석 구성 사용](using-call-analytics-configurations.md) 항목을 참조하세요.

# Amazon Chime SDK의 통화 분석 구성 사용
<a name="using-call-analytics-configurations"></a>

통화 분석 구성을 사용하여 오디오를 처리하려면 미디어 인사이트 파이프라인이라고도 하는 통화 분석 파이프라인을 만들어야 합니다. 파이프라인은 통화 중에 생성되어 오디오를 처리하고 통화가 끝나면 종료됩니다. 통화 분석 파이프라인에는 통화 분석 구성의 ARN과 오디오 소스에 대한 정보가 필요합니다. 통화 분석 구성에는 오디오 프로세서, 인사이트 대상 및 경고 이벤트 구성에 대한 세부 정보가 포함되지만 *오디오 소스는 포함되지 않습니다*. 이를 통해 다양한 음성 커넥터 또는 KVS 소스와 같은 다양한 통화 분석 워크플로에서 구성을 재사용할 수 있습니다. 통화 분석 파이프라인은 구성에 지정된 기계 학습 서비스를 호출하고 오디오를 녹음합니다. 통화가 종료되면 파이프라인을 수동 또는 자동으로 중지할 수 있습니다.

다양한 사용 사례에서 통화 분석 파이프라인을 사용할 수 있습니다. 다음 워크플로는 통화 분석 구성 및 파이프라인을 사용할 수 있는 잠재적 방법을 보여줍니다.

**Topics**
+ [Amazon Chime SDK의 통화 녹음 워크플로 이해](recording-workflows.md)
+ [Amazon Chime SDK의 기계 학습 기반 분석을 위한 워크플로 이해](ml-based-analytics.md)

# Amazon Chime SDK의 통화 녹음 워크플로 이해
<a name="recording-workflows"></a>

이 섹션의 주제에서는 통화 레코딩 및 Kinesis Video Streams를 위한 워크플로를 나열하고 설명합니다.

# 음성 커넥터 통화 레코딩
<a name="record-vc-calls"></a>

다음과 같은 경우 이 워크플로를 사용하세요.
+ 이미 음성 커넥터를 사용 중이거나 사용할 계획이며 SIP 미디어를 통화 분석에 사용할 계획입니다.
**참고**  
음성 커넥터는 SIP 및 SIPREC를 지원합니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [Amazon Chime SDK 음성 커넥터 관리](https://docs.aws.amazon.com/chime-sdk/latest/ag/voice-connectors.html)를 참조하세요.
+ 선택한 Amazon Simple Storage Service 대상에 대한 SIP 또는 SIPREC 통화를 짧은 지연 시간으로 자동으로 녹음하고 싶습니다.
+ Amazon Chime SDK 콘솔을 사용하여 구성을 생성하고 이를 음성 커넥터와 연결하려고 합니다.
+ 모든 음성 커넥터 통화에 동일한 녹음 구성을 적용하려고 합니다. 하나 이상의 음성 커넥터에 여러 구성을 적용하려면 다음 섹션을 참조하세요.

프로그래밍 방식으로 호출을 활성화하려면 다음 Amazon Chime SDK API를 사용하세요.
+ [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API - 통‎‎‎‎화 분석 구성을 생성합니다.
+ [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceConnector.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceConnector.html) - 음성 커넥터를 생성합니다.
+ [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_PutVoiceConnectorStreamingConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_PutVoiceConnectorStreamingConfiguration.html) API - 구성을 음성 커넥터와 연결합니다.

자세한 내용은 *Amazon Chime SDK 관리자 안내서*의 [통화 분석을 사용하도록 음성 커넥터 구성](https://docs.aws.amazon.com/chime-sdk/latest/ag/configure-voicecon.html)을 참조하세요.

 다음 다이어그램은 음성 커넥터가 통화 레코딩 세션을 시작할 때의 데이터 흐름을 보여줍니다. 다이어그램의 숫자는 아래 번호가 매겨진 텍스트에 해당합니다.

![\[음성 커넥터가 통화 레코딩을 시작할 때의 데이터 흐름을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/call-analytics-workflow-1.png)


 다이어그램에서 

1. Amazon Chime SDK 콘솔 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API를 사용하여 통화 분석 구성을 생성합니다. 구성 생성 과정에서 통화 레코딩을 활성화하고, 원하는 녹음 파일 형식을 선택하고, 녹음 파일을 저장할 Amazon S3 대상을 지정하기만 하면 됩니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [통화 분석 구성 생성](https://docs.aws.amazon.com/chime-sdk/latest/ag/create-ca-config.html)을 참조하세요.

1. Amazon Chime SDK 콘솔 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_PutVoiceConnectorStreamingConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_PutVoiceConnectorStreamingConfiguration.html) API를 사용하여 구성을 음성 커넥터와 연결합니다. 콘솔을 사용하려면 [ 통화 분석을 사용하도록 음성 커넥터 구성](https://docs.aws.amazon.com/chime-sdk/latest/ag/configure-voicecon.html)을 참조하세요.

1. 발신 통화 중에 음성 커넥터는 각 통화 참가자의 음성을 수신합니다.

1. 음성 커넥터에 통화 분석 녹음 구성이 연결되어 있는 경우 음성 커넥터 서비스는 미디어 파이프라인 서비스를 사용하여 통화 분석 녹음 세션을 시작합니다.

1. 미디어 파이프라인 서비스는 진행 중인 통화를 모니터링하는 통화 레코딩 프로세서를 시작합니다.

1. 통화가 종료되면 미디어 파이프라인 서비스는 지정된 Amazon S3 버킷으로 통화 레코딩 파일을 전송하고 Amazon Kinesis Data Stream을 통해 녹음 메타데이터를 제공합니다. 데이터 웨어하우스가 활성화되어 있으면 호출 메타데이터도 Amazon 심플 스토리지 서비스 데이터 웨어하우스로 이동합니다. SIPREC를 사용하여 SIP 오디오를 통화 분석에 통합하는 경우, 통화 메타데이터에는 표 형식의 SIPREC 메타데이터가 포함됩니다. 레코딩 테이블에 대한 자세한 내용은 이 섹션의 뒷부분에서 [Amazon Chime SDK의 AWS Glue 데이터 카탈로그 테이블 이해](glue-tables.md) 항목을 참조하세요.

1. 미디어 파이프라인 서비스는 파이프라인 상태 이벤트를 기본 Amazon EventBridge로 보냅니다. 자세한 내용은 이 안내서의 [EventBridge 알림 사용](https://docs.aws.amazon.com/chime-sdk/latest/dg/ca-eventbridge-notifications.html)을 참조하세요.

**참고**  
 음성 커넥터로 녹음하려면 음성 커넥터 스트리밍을 활성화해야 한다는 점에 유의하세요. 이 기능을 사용하면 계정의 음성 커넥터 관리형 Kinesis Video Streams로 통화 데이터를 스트리밍할 수 있습니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [Kinesis Video Streams로 Amazon Chime SDK 음성 커넥터 미디어 스트리밍](https://docs.aws.amazon.com/chime-sdk/latest/ag/start-kinesis-vc.html)을 참조하세요.

 또한 음성 커넥터가 생성한 통화 데이터를 몇 시간에서 며칠 또는 몇 년까지 다양한 기간 동안 Kinesis Video Streams에 저장할 수도 있습니다. 데이터 보존 안 함을 선택하면 통화 데이터를 즉시 사용할 수 있는 기능이 제한됩니다. Kinesis Video Streams의 비용은 사용된 대역폭과 총 스토리지에 따라 결정됩니다. 음성 커넥터 스트리밍 구성 내에서 언제든지 데이터 보존 기간을 조정할 수 있습니다. 통화 분석 녹화를 활성화하려면 Kinesis Video Stream이 통화 분석을 수행할 수 있을 만큼 충분히 오랫동안 데이터를 보존하는지 확인해야 합니다. 적절한 데이터 보존 기간을 지정하면 됩니다.

 통화 인사이트 파이프라인 구성을 원하는 수만큼의 음성 커넥터와 연결할 수 있습니다. 각 음성 커넥터에 대해 서로 다른 구성을 만들 수도 있습니다. 음성 커넥터는 트랜잭션 ID당 한 번씩 사용자를 대신하여 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출하기 위해 AWSServiceRoleForAmazonChimeVoiceConnector를 사용합니다. 역할에 대한 자세한 내용은 Amazon Chime SDK 관리자 안내서**에서 [ Amazon Chime SDK 음성 커넥터에 대한 Amazon Chime SDK 서비스 연동형 역할 사용](https://docs.aws.amazon.com/chime-sdk/latest/ag/using-service-linked-roles-stream.html#service-linked-role-permissions-stream)을 참조하세요.

# Amazon Kinesis Video Stream 프로듀서와 함께 레코딩하기
<a name="record-kvs-streams"></a>

다음과 같은 경우 Amazon Kinesis Video Streams를 레코딩합니다.
+ 모든 음성 커넥터 통화에 동일한 구성을 사용하는 대신 통화에 다른 구성을 적용해야 합니다.
+ 음성 커넥터로 처리되지 않는 SIP 또는 비 SIP 오디오를 레코딩하려고 합니다.

 이 통화 녹음 옵션을 사용하려면 Kinesis Video Streams(KVS)에 오디오를 게시한 다음 KVS 스트림 채널 정보 및 통화 분석 구성 ARN을 사용하여 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출해야 합니다.

**참고**  
통화 분석 API는 최대 2개의 오디오 채널을 지원합니다. 음성 커넥터 스트리밍을 활성화한 다음 음성 커넥터의 EventBridge 알림에 게시된 KVS 정보를 사용하여 통화 레코딩을 시작할 수도 있습니다.

 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출할 때 각 KVS 스트림 채널 정의에 프래그먼트 번호를 지정할지 여부를 선택할 수 있습니다. 프래그먼트 번호를 제공하면 통화 분석이 해당 프래그먼트에서 스트림 처리를 시작합니다. 프래그먼트 ID를 지정하지 않으면 통화 분석이 사용 가능한 최신 프래그먼트로부터 스트림을 처리하기 시작합니다.

 다음 다이어그램은 음성 커넥터가 통화 레코딩 세션을 시작할 때의 데이터 흐름을 보여줍니다. 다이어그램의 숫자는 아래 번호가 매겨진 텍스트에 해당합니다.

![\[음성 커넥터가 통화 레코딩을 시작할 때의 데이터 흐름을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/call-analytics-workflow-2.png)


다이어그램에서

1. Amazon Chime SDK 콘솔 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API를 사용하여 통화 녹음 구성을 생성할 수 있습니다.

1.  AWS SDK를 사용하여 외부 오디오를 KVS로 푸시하는 애플리케이션을 생성하거나 Voice Connector 스트리밍을 활성화하여 통화 오디오를 KVS에 자동으로 게시할 수 있습니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [Amazon Chime SDK 음성 커넥터 미디어를 Kinesis Video Streams로 스트리밍](https://docs.aws.amazon.com/chime-sdk/latest/ag/start-kinesis-vc.html)을 참조하세요.

1. 음성 커넥터 스트리밍이 활성화된 경우 음성 커넥터 서비스는 기본 EventBridge에 알림을 보냅니다.

1. 음성 커넥터 스트리밍의 경우 애플리케이션은 EventBridge의 Amazon Chime Voice Connector 스트리밍 `STARTED` 이벤트를 사용하여 두 통화 구간의 KVS 스트림 정보를 수집할 수 있습니다.

1. 애플리케이션이 음성 커넥터 스트리밍 이벤트 또는 외부 소스의 오디오 정보를 받으면 Amazon Chime SDK [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 간접 호출합니다.

1. 미디어 파이프라인 서비스는 진행 중인 통화를 모니터링하는 통화 레코딩 프로세서를 시작합니다.

1. 미디어 파이프라인 서비스는 파이프라인 상태 이벤트를 기본 Amazon EventBridge로 보냅니다. 자세한 내용은 [EventBridge 알림 사용](https://docs.aws.amazon.com/chime-sdk/latest/dg/ca-eventbridge-notifications.html)을 참조하세요.

1. 호출이 완료되면 미디어 파이프라인 서비스가 지정된 Amazon S3 버킷으로 통화 레코딩 파일을 전송하고 Amazon Kinesis Data Stream을 통해 녹음 메타데이터를 제공합니다. 데이터 웨어하우스가 활성화된 경우 호출 메타데이터도 Amazon S3 데이터 웨어하우스로 전송됩니다. SIPREC를 사용하여 SIP 오디오를 통화 분석에 통합하는 경우, 통화 메타데이터에 편리한 표 형식의 SIPREC 메타데이터가 포함됩니다. 레코딩 테이블에 대한 자세한 내용은 이 섹션의 뒷부분에서 [Amazon Chime SDK의 AWS Glue 데이터 카탈로그 테이블 이해](glue-tables.md) 항목을 참조하세요.

1. 애플리케이션은 Amazon EventBridge에 게시된 이벤트를 사용하여 파이프라인을 모니터링하고 음성 커넥터의 경우 통화 상태를 모니터링할 수 있습니다. 자세한 내용은 이 안내서의 [EventBridge 알림 사용](https://docs.aws.amazon.com/chime-sdk/latest/dg/ca-eventbridge-notifications.html)을 참조하세요.

1. 녹음을 종료하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html) API를 직접 호출하여 통화 녹음을 종료합니다.

API 기반 레코딩 및 예제는 이 안내서의 [Amazon S3 레코딩 싱크](https://docs.aws.amazon.com/chime-sdk/latest/dg/ca-processors-sinks.html#ca-s3-recording-sink)를 참조하세요.

# CLI를 사용하여 기록 시작
<a name="using-the-cli-to-start-recording"></a>

이 섹션의 예제에서는 다음을 수행하는 방법을 보여 줍니다.
+ CLI를 사용하여 통화 분석 구성을 실행하고 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html)을 간접 호출할 수 있습니다.
+ CLI를 사용하여 녹음 대상, 오디오 파일 형식, 오디오 파일 이름을 지정합니다.

**Topics**
+ [구성 실행 및 파이프라인 시작](#cli-run-config)
+ [대상, 이름, 형식 설정](#cli-set-buckets-formats)

## 구성 실행 및 파이프라인 시작
<a name="cli-run-config"></a>

다음 명령어를 사용하여 구성을 실행하고 미디어 파이프라인을 시작합니다. pipeline.json 파일에는 구성 설정이 포함되어 있습니다.

```
aws chime-sdk-media-pipeline create-media-insights-pipeline --cli-input-json file://pipeline.json
```

다음 예제는 일반적인 `pipeline.json` 파일을 보여줍니다.

```
{
    "MediaInsightsPipelineConfigurationArn": arn:aws:chime:region;account_id:media-insights-pipeline-configuration/MyConfiguration,
    "KinesisVideoStreamRecordingSourceRuntimeConfiguration": {
        "Streams": [
            {
                "StreamArn": kinesis_video_stream_arn_1
            },
            {
                "StreamArn": kinesis_video_stream_arn_2
            }
        ],
        "FragmentSelector": {
            "FragmentSelectorType": "selector_type", // Specify "server_timestamp" or "producer_timestamp" as the fragment selector type
            "TimestampRange": {
                "StartTimestamp": epoch_time_seconds,
                "EndTimestamp": epoch_time_seconds
            }
        }
    },
    "S3RecordingSinkRuntimeConfiguration": {
        "Destination": arn:aws:s3:::bucket_name/prefix/optional_file_name,
        "RecordingFileFormat": file_format // Specify "Opus" or "WAV" as the recording file format, if you want to override the configuration
    }
}
```

`MediaInsightsPipelineConfigurationArn`은 통화 분석 구성을 생성한 후 받는 구성 ARN입니다.

## 대상, 이름, 형식 설정
<a name="cli-set-buckets-formats"></a>

 다음 예제에서는 `S3SinkConfiguration.Destination`이라는 폴더를 `Opus` 값으로, `RecordingFileFormat`를 `MyRecordingBucket` 값으로 사용합니다.

```
arn:aws:s3:::MyRecordingBucket/voice-connector-id/transaction-id_year-month-date-hour-minute-second-millisecond.ogg
```

다음 예제에서는 `MyRecordingBucket`을 `S3SinkConfiguration.Destination` 값으로, `Wav`를 `RecordingFileFormat` 값으로 사용합니다.

```
arn:aws:s3:::MyRecordingBucket/voice-connector-id/transaction-id_year-month-date-hour-minute-second-millisecond.wav
```

# Amazon Chime SDK의 기계 학습 기반 분석을 위한 워크플로 이해
<a name="ml-based-analytics"></a>

다음 섹션에서는 Amazon Chime SDK 통화 분석에서 제공하는 기계 학습 분석 기능을 사용하는 방법을 설명합니다.

**참고**  
동일한 Kinesis Video Stream에서 여러 기계 학습 분석을 실행하려는 경우, 비디오 스트림의 `GetMedia` 및`GetMediaForFragmentList`에 대한 연결 수준 제한을 늘려야 할 수 있습니다. 자세한 내용은 Amazon Kinesis Video Streams 개발자 안내서**에서 [Kinesis Video Streams 제한](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/limits.html)을 참조하세요.

# 음성 커넥터를 사용하여 통화 분석을 자동으로 시작합니다.
<a name="automatic-vc-analytics"></a>

다음과 같은 경우 이 워크플로를 사용하세요.
+ 콘솔 기반 설정이 필요합니다.
+ 이미 음성 커넥터를 사용 중이거나 사용할 계획이며 SIP 미디어를 통화 분석에 사용할 계획입니다. 음성 커넥터는 SIP뿐만 아니라 SIPREC도 지원합니다. 음성 커넥터 구성에 대한 자세한 내용은 [Amazon Chime SDK 음성 커넥터 관리](https://docs.aws.amazon.com/chime-sdk/latest/ag/voice-connectors.html)를 참조하세요.
+ 모든 음성 커넥터 호출에 동일한 미디어 인사이트 구성을 적용하고 싶습니다.
+ Amazon Chime SDK 음성 분석을 사용해야 하며, 이를 위해서는 음성 커넥터 또는 미디어 인사이트 파이프라인이 필요합니다.

Amazon Chime SDK 콘솔에서 이 워크플로를 사용 설정하려면 [통화 분석을 사용하도록 음성 커넥터 구성](https://docs.aws.amazon.com/chime-sdk/latest/ag/configure-voicecon.html)에서 녹음 구성을 만드는 단계를 따르세요.

이 워크플로를 프로그래밍 방식으로 활성화하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API를 사용하여 통화 분석 구성을 생성한 다음 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_PutVoiceConnectorStreamingConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_PutVoiceConnectorStreamingConfiguration.html) API를 사용하여 구성을 음성 커넥터와 연결합니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [음성 분석을 사용하도록 음성 커넥터 구성](https://docs.aws.amazon.com/chime-sdk/latest/ag/configure-voicecon.html)을 참조하세요.

 다음 다이어그램은 음성 커넥터가 통화 분석 세션을 시작할 때의 데이터 흐름을 보여줍니다. 다이어그램의 숫자는 아래 번호가 매겨진 텍스트에 해당합니다.

 ![\[Image showing the flow of data when a Voice Connector initiates a call.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/call-analytics-workflow-1.png)

 다이어그램에서 

1. Amazon Chime SDK 콘솔 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API를 사용하여 미디어 인사이트 파이프라인 구성을 생성합니다.

1. Amazon Chime SDK 콘솔 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_PutVoiceConnectorStreamingConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_PutVoiceConnectorStreamingConfiguration.html) API를 사용하여 구성을 음성 커넥터와 연결합니다. 기존 구성을 음성 커넥터와 연결하려면 *Amazon Chime SDK 관리자 안내서*의 [통화 분석을 사용하도록 음성 커넥터 구성](https://docs.aws.amazon.com/chime-sdk/latest/ag/configure-voicecon.html)을 참조하세요.

1. 발신 통화 중에 음성 커넥터는 각 통화 참가자의 음성을 수신합니다.

1. 통화 분석과의 기본 통합으로 인해 통화 분석 구성이 음성 커넥터에 첨부되어 있으면 음성 커넥터 서비스가 미디어 파이프라인 서비스를 사용하여 통화 분석 세션을 시작합니다.

1. 미디어 파이프라인 서비스는 구성에 지정된 대로 하나 이상의 미디어 프로세서를 호출합니다.

1. 미디어 파이프라인 서비스는 구성에 따라 출력 데이터를 하나 이상의 대상으로 전송합니다. 예를 들어 Amazon Kinesis Data Streams을 통해 실시간 분석을 전송할 수 있으며, 구성된 경우 Amazon S3 데이터 웨어하우스로 호출 메타데이터와 분석을 전송할 수 있습니다.

1. 미디어 파이프라인 서비스는 파이프라인 상태 이벤트를 기본 Amazon EventBridge로 보냅니다. 규칙을 구성한 경우 해당 규칙에 대한 알림은 Amazon EventBridge에도 전송됩니다. 자세한 내용은 [EventBridge 알림 사용](https://docs.aws.amazon.com/chime-sdk/latest/dg/ca-eventbridge-notifications.html)을 참조하세요.

**참고**  
음성 분석 프로세서는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartVoiceToneAnalysisTask.html) API를 직접 호출할 때만 자동으로 시작됩니다.
음성 커넥터를 통한 통화 분석을 사용하려면 음성 커넥터 스트리밍을 활성화해야 합니다. 이 기능을 사용하면 계정의 음성 커넥터 관리형 Kinesis Video Streams로 통화 데이터를 스트리밍할 수 있습니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [Kinesis Video Streams로 Amazon Chime SDK 음성 커넥터 미디어 스트리밍](https://docs.aws.amazon.com/chime-sdk/latest/ag/start-kinesis-vc.html)을 참조하세요.

 음성 커넥터 통화 데이터를 몇 시간에서 몇 년까지 다양한 기간 동안 Kinesis Video Streams에 저장할 수 있습니다. 데이터 보존 안 함을 선택하면 통화 데이터를 즉시 사용할 수 있는 기능이 제한됩니다. Kinesis Video Streams의 비용은 사용된 대역폭과 총 스토리지에 따라 결정됩니다. 음성 커넥터의 스트리밍 구성을 편집하여 언제든지 데이터 보존 기간을 조정할 수 있습니다. 통화 분석 녹화를 활성화하려면 통화 분석이 완료될 때까지 Kinesis Video Stream이 데이터를 보존하는지 확인해야 합니다. 적절한 데이터 보존 기간을 지정하면 됩니다.

 미디어 인사이트 파이프라인 구성을 원하는 수만큼 음성 커넥터와 연결할 수 있습니다. 각 음성 커넥터에 대해 서로 다른 구성을 만들 수도 있습니다. 음성 커넥터는 트랜잭션 ID당 한 번씩 사용자를 대신하여 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출하기 위해 AWSServiceRoleForAmazonChimeVoiceConnector를 사용합니다. 역할에 대한 자세한 내용은 Amazon Chime SDK 관리자 안내서**에서 [ Amazon Chime SDK 음성 커넥터에 대한 Amazon Chime SDK 서비스 연동형 역할 사용](https://docs.aws.amazon.com/chime-sdk/latest/ag/using-service-linked-roles-stream.html#service-linked-role-permissions-stream)을 참조하세요.

# 음성 커넥터와 함께 통화 분석 API 사용
<a name="ca-apis-with-vc"></a>

음성 커넥터를 사용하지만 통화 분석 구성을 적용하는 시기와 구성을 적용할 통화를 제어해야 하는 경우 이 워크플로를 사용하세요.

 이 방법을 사용하려면 음성 커넥터가 게시하는 이벤트에 대한 EventBridge 대상을 만든 다음 이벤트를 사용하여 통화 분석 파이프라인 API를 트리거해야 합니다. 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [EventBridge를 사용한 Amazon Chime SDK 자동화](https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html)를 참조하세요.

 다음 다이어그램은 음성 커넥터로 통화 분석을 사용할 때 보다 세분화된 제어를 구현하는 방법을 보여줍니다. 다이어그램의 숫자는 아래 텍스트의 숫자와 일치합니다.

![\[음성 커넥터와 함께 API 호출을 사용할 때의 데이터 흐름을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/analytics-vc-with-apis.png)


 다이어그램에서 

1. Amazon Chime SDK 콘솔 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API를 사용하여 미디어 인사이트 파이프라인 구성을 생성합니다.

1. 발신 통화 중에 음성 커넥터는 참가자의 음성을 수신합니다.

1. 음성 커넥터는 통화 오디오를 Kinesis Video Stream으로 전송하고 해당 이벤트를 EventBridge로 보냅니다. 이러한 이벤트에는 스트림 및 통화 메타데이터가 있습니다.

1. 애플리케이션은 EventBridge 타겟을 통해 EventBridge에 가입되어 있습니다.

1. 애플리케이션에서 Amazon Chime SDK [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 간접 호출합니다.

1. 미디어 파이프라인 서비스는 미디어 인사이트 파이프라인 구성의 프로세서 요소를 기반으로 하나 이상의 미디어 프로세서를 호출합니다.

1. 미디어 파이프라인 서비스는 구성에 따라 출력 데이터를 하나 이상의 대상으로 전송합니다. Amazon Chime SDK 통화 분석은 Amazon Kinesis Data Stream을 통해 실시간 분석을 제공하며, 구성된 경우 Amazon S3 데이터 웨어하우스에 대한 호출 메타데이터 분석을 제공합니다.

1. 미디어 파이프라인 서비스는 Amazon EventBridge로 이벤트를 보냅니다. 규칙을 구성한 경우 해당 규칙에 대한 알림은 Amazon EventBridge에도 전송됩니다.

1. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineStatus.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineStatus.html) API를 간접 호출하여 통화 분석 세션을 일시 중지하거나 재개할 수 있습니다.
**참고**  
통화 레코딩은 통화 일시 중지 및 재개를 지원하지 않습니다. 또한 세션을 일시 중지하면 해당 통화에 대해 시작된 음성 분석 작업도 중지됩니다. 다시 시작하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html) API를 직접 호출해야 합니다.

1. 구성 중에 음성 톤 분석을 선택한 경우 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html) API를 직접 호출하여 음성 분석을 시작합니다.

# Kinesis Video Streams 프로듀서와 함께 통화 분석 사용
<a name="ca-apis-kvs"></a>

 이 옵션을 사용하려면 오디오 데이터를 Kinesis Video Streams(KVS)에 게시한 다음 KVS 스트림 채널 정보와 함께 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출해야 합니다.

**참고**  
통화 분석 API는 최대 2개의 오디오 채널을 지원합니다.

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출할 때 각 KVS 스트림 채널 정의에 프래그먼트 번호를 지정할 수 있습니다. 프래그먼트 번호를 제공하면 통화 분석이 해당 프래그먼트에서 스트림 처리를 시작합니다. 그렇지 않으면 통화 분석이 사용 가능한 최신 프래그먼트에서 스트림을 처리하기 시작합니다.

통화 분석은 오디오 샘플 속도가 8kHz\$148kHz 사이인 PCM 오디오(WAV는 포함되지 않는 서명된 16비트 리틀 엔디안 오디오 형식만 지원)를 지원합니다. 전화 오디오와 같은 저품질 오디오는 일반적으로 약 8,000Hz입니다. 고품질 오디오의 범위는 일반적으로 16,000Hz에서 48,000Hz입니다. 지정하는 샘플 레이트는 오디오의 샘플 레이트와 일치해야 합니다. 자세한 내용은 *Amazon Chime SDK API 참조*에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_KinesisVideoStreamSourceRuntimeConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_KinesisVideoStreamSourceRuntimeConfiguration.html) 단원을 참조하세요.

Kinesis Video Streams 프로듀서 SDK는 오디오 데이터를 Kinesis Video Stream으로 스트리밍하는 데 사용할 수 있는 라이브러리 세트를 제공합니다. 자세한 내용은 Amazon Kinesis Video Streams 개발자 안내서**에서 [ Kinesis Video Streams 생산자 라이브러리](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/producer-sdk.html)를 참조하세요.

다음 다이어그램은 사용자 지정 Kinesis Video Stream 프로듀서와 함께 통화 분석을 사용할 때의 데이터 흐름을 보여줍니다. 다이어그램의 숫자는 아래 번호가 매겨진 텍스트에 해당합니다.

![\[Kinesis Video Stream 프로듀서와의 통화 분석을 사용할 때의 데이터 흐름을 보여주는 이미지입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/analytics-kvs-with-apis.png)


1.  AWS 콘솔 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API를 사용하여 미디어 인사이트 파이프라인 구성을 생성합니다.

1. Kinesis Video Stream 프로듀서를 사용하여 Kinesis Video Stream에 오디오를 쓸 수 있습니다.

1. 애플리케이션에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 간접 호출합니다.

1. 미디어 파이프라인 서비스는 고객의 Kinesis Video Streams에서 오디오를 읽습니다.

1. 미디어 파이프라인 서비스는 Amazon EventBridge로 이벤트를 보냅니다. 규칙을 구성한 경우 해당 규칙에 대한 알림은 Amazon EventBridge에도 전송됩니다.

1. 미디어 파이프라인 서비스는 하나 이상의 프로세서 요소를 호출합니다.

1. 미디어 파이프라인 서비스는 출력 데이터를 하나 이상의 싱크 요소로 전송합니다.

1. [ UpdateMediaInsightsPipelineStatus](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineStatus.html) API를 호출하여 통화 분석 세션을 일시 중지하거나 재개할 수 있습니다.
**참고**  
통화 레코딩은 일시 중지 및 재개를 지원하지 않습니다.

1. 애플리케이션은 Amazon EventBridge 이벤트를 처리하여 사용자 지정 비즈니스 워크플로를 트리거할 수 있습니다.

1. 구성을 생성할 때 음성 분석을 선택하면 애플리케이션에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html) API를 직접 호출하여 음성 분석을 시작할 수 있습니다.

# Amazon Chime SDK의 통화 분석 파이프라인 관리
<a name="managing-call-analytics-pipelines"></a>

 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipeline.html), [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_ListMediaPipelines.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_ListMediaPipelines.html), [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html) API를 직접 호출하면 미디어 인사이트 파이프라인을 읽고, 나열하고 삭제할 수 있습니다.

 미디어 파이프라인은 다음 조건 중 하나라도 충족되면 중지됩니다.
+ 모든 Kinesis Video 스트림은 15초 동안 `InProgress` 파이프라인에 새 프래그먼트를 전송하지 않습니다.
+ [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaPipeline.html) API가 직접 호출됩니다.
+ 미디어 인사이트 파이프라인이 생성된 지 8시간이 넘었습니다. 시스템이 파이프라인을 자동으로 중지합니다.
+ 미디어 인사이트 파이프라인이 2시간 이상 일시 중지되었습니다. 시스템이 파이프라인을 자동으로 중지합니다.

# Amazon Chime SDK의 통화 분석 파이프라인 일시 중지 및 재개
<a name="pausing-and-resuming-call-analytics-pipelines"></a>

미디어 인사이트 파이프라인을 일시 중지했다가 재개하려면 `Pause` 또는 `Resume` 작업을 사용하여 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineStatus.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineStatus.html) API를 간접 호출하세요. 이렇게 하려면 파이프라인의 ID 또는 ARN을 `Identifier` 필드에 전달해야 합니다.

**주의**  
경고: `UpdateMediaInsightsPipelineStatus` API는 `Pause` 상태가 제공되면 미디어 인사이트 파이프라인에서 시작된 모든 음성 분석 작업을 *중지합니다*. `Resume` 상태가 제공되면 작업이 다시 시작되지 않으며 재시작해야 합니다. 작업을 다시 시작하기 전에 필요한 모든 공지를 제공하고 발표자로부터 필요한 모든 동의를 얻어야 합니다. 자세한 내용은 *Amazon Chime SDK API 참조*에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html)를 참조하세요.

일시 중지된 동안 파이프라인은 프로세서로의 미디어 전송 및 Kinesis Data Streams 및 데이터 웨어하우스에 데이터 쓰기를 중지합니다. 파이프라인이 `Resume`되면 서비스는 스트림에서 사용 가능한 최신 청크를 전송합니다. 미디어 인사이트 파이프라인이 2시간 이상 일시 중지되면 자동으로 중지됩니다. **참고로** 통화 레코딩은 일시 중지 및 다시 시작을 지원하지 않습니다.

 자세한 정보는 다음 주제를 참조하세요.
+ [EventBridge 알림 사용](https://docs.aws.amazon.com/chime-sdk/latest/dg/ca-eventbridge-notifications.html).
+ [https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_StartSelector.html#KinesisVideo-Type-dataplane_StartSelector-StartSelectorType](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/API_dataplane_StartSelector.html#KinesisVideo-Type-dataplane_StartSelector-StartSelectorType) - *Amazon Kinesis Video Streams 개발자 안내서*
+ [Amazon Transcribe Call Analytics 프로세서](https://docs.aws.amazon.com/chime-sdk/latest/dg/ca-processors-sinks.html#ca-transcribe-analytics-processor).

**참고**  
 파이프라인이 일시 중지된 동안에는 통화 분석 사용량에 대한 요금이 청구됩니다. 그러나 Amazon Transcribe 및 Amazon Kinesis와 같은 리소스 액세스 역할을 통해 액세스하는 AWS 서비스에 대해서는 요금이 청구되지 않습니다.

 식별자 필드에 구성 이름 또는 ARN을 전달하면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaInsightsPipelineConfiguration.html), [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html), [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_DeleteMediaInsightsPipelineConfiguration.html) API를 사용하여 기존 통화 분석 구성을 읽고 업데이트하고 삭제할 수 있습니다.

 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_media-pipelines-chime_ListMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_media-pipelines-chime_ListMediaInsightsPipelineConfiguration.html) API를 직접 호출하면 구성을 나열할 수 있습니다.

# Amazon Chime SDK의 통화 분석 리소스 액세스 역할 사용
<a name="call-analytics-resource-access-role"></a>

통화 계정은 미디어 인사이트 파이프라인 구성에서 사용하는 리소스 액세스 역할을 만들어야 합니다. 교차 계정 역할은 사용할 수 없습니다.

통화 분석 구성을 만들 때 사용 설정하는 기능에 따라 추가 리소스 정책을 사용해야 합니다. 다음 섹션을 확장하여 자세히 알아봅니다.

## 최소 필수 정책
<a name="minimum-policy"></a>

역할에는 최소한 다음과 같은 정책이 필요합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "transcribe:StartCallAnalyticsStreamTranscription",
                "transcribe:StartStreamTranscription"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesisvideo:GetDataEndpoint",
                "kinesisvideo:GetMedia"
            ],
            "Resource": "arn:aws:kinesisvideo:us-east-1:111122223333:stream/Chime*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesisvideo:GetDataEndpoint",
                "kinesisvideo:GetMedia"
            ],
            "Resource": "arn:aws:kinesisvideo:us-east-1:111122223333:stream/*",
            "Condition": {
                "StringLike": {
                    "aws:ResourceTag/AWSServiceName": "ChimeSDK"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": ["kms:Decrypt"],
            "Resource": "arn:aws:kms:us-east-1:111122223333:key/*",
            "Condition": {
                "StringLike": {
                    "aws:ResourceTag/AWSServiceName": "ChimeSDK"
                }
            }
        }
    ]
}
```

------

또한 다음과 같은 신뢰 정책을 사용해야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "mediapipelines.chime.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "111122223333"
        },
        "ArnLike": {
            "aws:SourceARN": "arn:aws:chime:*:111122223333:*"
        }
        }
    }
  ]
}
```

------

## KinesisDataStreamSink 정책
<a name="kds-stream-sink-policy"></a>

`KinesisDataStreamSink`를 사용하는 경우 다음 정책을 추가하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
            "Effect": "Allow",
            "Action": [
                "kinesis:PutRecord"
            ],
            "Resource": [
                "arn:aws:kinesis:us-east-1:111122223333:stream/output_stream_name"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": [
            "arn:aws:kms:us-east-1:111122223333:key/*"
            ],
            "Condition": {
                "StringLike": {
                    "aws:ResourceTag/AWSServiceName": "ChimeSDK"
                }
            }
        }
    ]
}
```

------

## S3RecordingSink 정책
<a name="s3-recording-sink-policy"></a>

`S3RecordingSink`를 사용하는 경우 다음 정책을 추가하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::input_bucket_path/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesisvideo:GetDataEndpoint",
                "kinesisvideo:ListFragments",
                "kinesisvideo:GetMediaForFragmentList"
            ],
            "Resource": [
                "arn:aws:kinesisvideo:us-east-1:111122223333:stream/*"
            ],
            "Condition": {
                "StringLike": {
                    "aws:ResourceTag/AWSServiceName": "ChimeSDK"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "kinesisvideo:ListFragments",
                "kinesisvideo:GetMediaForFragmentList"
            ],
            "Resource": [
            "arn:aws:kinesisvideo:us-east-1:111122223333:stream/Chime*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "kms:GenerateDataKey"
            ],
            "Resource": [
            "arn:aws:kms:us-east-1:111122223333:key/*"
            ],
            "Condition": {
                "StringLike": {
                    "aws:ResourceTag/AWSServiceName": "ChimeSDK"
                }
            }
        }
    ]
}
```

------

## 통화 후 분석 정책
<a name="post-call-analytics-policy"></a>

`AmazonTranscribeCallAnalyticsProcessor`의 통화 후 분석 기능을 사용하는 경우 다음 정책을 추가하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::111122223333:role/transcribe_role_name"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "transcribe.streaming.amazonaws.com"
                }
            }
        }
    ]
}
```

------

## VoiceEnhancementSinkConfiguration 정책
<a name="enhancement-sink-config-policy"></a>

`VoiceEnhancementSinkConfiguration` 요소를 사용하는 경우 다음 정책을 추가하세요.

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:GetObject",
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:PutObjectTagging"
         ],
         "Resource":[
            "arn:aws:s3:::input_bucket_path/*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "kinesisvideo:GetDataEndpoint",
            "kinesisvideo:ListFragments",
            "kinesisvideo:GetMediaForFragmentList"
         ],
         "Resource":[
            "arn:aws:kinesisvideo:us-east-1:111122223333:stream/*"
         ],
         "Condition":{
            "StringLike":{
               "aws:ResourceTag/AWSServiceName":"ChimeSDK"
            }
         }
      },
      {
         "Effect":"Allow",
         "Action":[
            "kinesisvideo:ListFragments",
            "kinesisvideo:GetMediaForFragmentList"
         ],
         "Resource":[
         "arn:aws:kinesisvideo:us-east-1:111122223333:stream/Chime*"
         ]
      },
      {
         "Effect":"Allow",
         "Action":[
            "kms:GenerateDataKey"
         ],
         "Resource":[
         "arn:aws:kms:us-east-1:111122223333:key/*"
         ],
         "Condition":{
            "StringLike":{
               "aws:ResourceTag/AWSServiceName":"ChimeSDK"
            }
         }
      }
   ]
}
```

------

## VoiceAnalyticsProcessor 정책
<a name="voice-analytics-processor-policy"></a>

`VoiceAnalyticsProcessor`를 사용하는 경우 정의한 싱크에 따라 `LambdaFunctionSink`, `SqsQueueSink`, `SnsTopicSink`에 대한 정책을 추가하세요.

`LambdaFunctionSink` 정책:    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "lambda:InvokeFunction",
        "lambda:GetPolicy"
       ],
      "Resource": [
          "arn:aws:lambda:us-east-1:111122223333:function:function_name"
       ],
      "Effect": "Allow"
    }
  ]
}
```

`SqsQueueSink` 정책    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "sqs:SendMessage",
        "sqs:GetQueueAttributes"
       ],
      "Resource": [
      "arn:aws:sqs:us-east-1:111122223333:queue_name"
        ],
      "Effect": "Allow"
    },
    {
      "Effect": "Allow",
      "Action": ["kms:GenerateDataKey", "kms:Decrypt"],
      "Resource": "arn:aws:kms:us-east-1:111122223333:key/*",
      "Condition": {
        "StringLike": {
            "aws:ResourceTag/AWSServiceName": "ChimeSDK"
        }
      }
    }
  ]
}
```

`SnsTopicSink` 정책:    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "sns:Publish",
        "sns:GetTopicAttributes"
      ],
      "Resource": [
      "arn:aws:sns:us-east-1:111122223333:topic_name"
      ],
      "Effect": "Allow"
    },
    {
      "Effect": "Allow",
      "Action": ["kms:GenerateDataKey", "kms:Decrypt"],
      "Resource": "arn:aws:kms:us-east-1:111122223333:key/*",
      "Condition": {
        "StringLike": {
            "aws:ResourceTag/AWSServiceName": "ChimeSDK"
        }
      }
    }
  ]
}
```

# Amazon Chime SDK의 통화 분석 상태 이해
<a name="call-analytics-statuses"></a>

미디어 인사이트 파이프라인은 사용자가 다음 중 하나 또는 둘 모두를 수행할 때 일련의 상태를 추적합니다.
+ Amazon Transcribe 및 음성 분석과 같은 여러 기계 학습 처리 요소를 사용하세요.
+ 기계 학습 처리를 사용하거나 사용하지 않고 통화 레코딩을 활성화할 수 있습니다.

파이프라인 및 요소 상태를 가져오려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaPipeline.html) API와 [EventBridge 알림](using-eventbridge-notifications.md)을 사용하세요.

음성 분석 작업의 상태를 가져오려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetSpeakerSearchTask.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetVoiceToneAnalysisTask.html) API와 [음성 분석 알림 대상](va-notification-targets.md)을 사용하세요.

미디어 파이프라인은 다음 상태를 추적합니다.
+ **파이프라인 상태** - 통화 분석 파이프라인(미디어 인사이트 파이프라인이라고도 함)의 전체 상태입니다. 이는 요소 상태에 따라 결정됩니다.
+ **요소 상태** - 개별 미디어 인사이트 파이프라인 구성 요소의 처리 상태입니다.
+ **작업 상태** - 음성 분석을 위해 시작된 미디어 인사이트 파이프라인 작업의 처리 상태입니다. `VoiceAnalyticsProcessor` 요소 상태는 작업 상태에 따라 결정됩니다. 통화 분석 파이프라인의 다른 요소에는 작업 상태가 없습니다.

  미디어 파이프라인 작업에 대한 자세한 내용은 이 안내서 앞부분의 [Amazon Chime SDK의 통화 분석 용어 이해](ca-terms-concepts.md) 항목을 참조하세요.

모든 미디어 인사이트 구성 요소 유형에 요소 상태가 있는 것은 아닙니다. 일반적으로 ‘프로세서’ 유형의 미디어 인사이트 구성 요소에만 요소 상태가 있습니다. 또한 Amazon S3 녹음 및 음성 향상 싱크에는 프로세서 상태가 있습니다. 특히, 요소 상태는 다음과 같은 미디어 인사이트 구성 요소 유형에 존재합니다.
+ `AmazonTranscribeProcessor`
+ `AmazonTranscribeCallAnalyticsProcessor`
+ `S3RecordingSink`
+ `VoiceAnalyticsProcessor`
+ `VoiceEnhancementSink`

파이프라인 상태는 다음과 같이 요소 상태에 따라 결정됩니다.


| 파이프라인 상태 | 조건 | 
| --- | --- | 
| NotStarted | 모든 요소 상태가 시작되지 않았습니다. | 
| Initializing | 하나 이상의 요소가 초기화되고 나머지는 시작되지 않았습니다. | 
| InProgress | 하나 이상의 요소가 진행 중입니다. | 
| Failed | 하나 이상의 요소가 실패했고 나머지 요소는 중지되었습니다. | 
| Stopping | 중지 조건의 전체 목록은 [Amazon Chime SDK의 통화 분석 파이프라인 관리](managing-call-analytics-pipelines.md) 항목을 참조하세요. | 
| Stopped | 모든 요소가 중지되었습니다. | 
| Paused | 모든 요소가 일시 중지되었습니다. | 

다른 요소 상태와 달리 `VoiceAnalyticsProcessor` 요소에는 몇 가지 미묘한 차이가 있습니다. 앞서 언급했듯이 Amazon Chime SDK 음성 분석 기능에 해당하는 `VoiceAnalyticsProcessor` 요소 상태는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html)에서 생성된 작업 상태에 따라 결정됩니다.
+ `VoiceAnalyticsProcessor`의 요소 상태는 `NotStarted` 상태에서 시작하는데, 이는 요소가 `Initializing` 그리고 `InProgress`로 상태를 변경하기 전에 `StartSpeakerSearchTask`와 `StartVoiceToneAnalysisTask`를 호출해야 하기 때문입니다.
+ `VoiceAnalyticsProcessor`는 하나의 작업이 시작되고 작업이 실행되는 동안 [중지 조건](managing-call-analytics-pipelines.md)이 충족되지 않는 한 `InProgress`로 유지됩니다.
+ `VoiceAnalyticsProcessor`가 `InProgress`일지라도 작업이 처리되는 기간에 대해서만 요금이 청구됩니다.
+ 하나 이상의 음성 분석 작업이 시작되고 더 이상 실행 중인 작업이 없는 미디어 인사이트 파이프라인을 정리하려면 `DeleteMediaPipeline`을 호출해야 합니다.
+ 작업이 성공적으로 실행되거나 완료되는 한 `VoiceAnalyticsProcessor` 요소 상태는 `InProgress`로 유지됩니다.

# Amazon CloudWatch를 통한 Amazon Chime SDK의 통화 분석 파이프라인 모니터링
<a name="monitoring-with-cloudwatch"></a>

Amazon CloudWatch를 사용하여 Amazon Chime SDK 통화 분석 파이프라인을 모니터링할 수 있습니다. 특정 임계값을 주시하다가 해당 임계값이 충족될 때 알림을 전송하거나 조치를 취하도록 경보를 설정할 수도 있습니다. CloudWatch에 대한 자세한 정보는 [Amazon CloudWatch 사용 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)를 참조하세요.

**Topics**
+ [사전 조건](#monitoring-prereqs)
+ [통화 분석 지표](#monitoring-metrics)
+ [파이프라인 지표에 대한 CloudWatch 차원](#monitoring-dimensions)

## 사전 조건
<a name="monitoring-prereqs"></a>

CloudWatch 지표를 사용하려면 먼저 Amazon CloudWatch에 서비스 지표를 게시할 권한을 부여하는 미디어 파이프라인 서비스 연결 역할을 생성해야 합니다. 서비스 연결 역할에 대한 자세한 내용은 이 가이드의 [Amazon Chime SDK 미디어 파이프라인에 대한 서비스 연결 역할 생성](create-pipeline-role.md) 섹션을 참조하세요.

## 통화 분석 지표
<a name="monitoring-metrics"></a>

Amazon Chime SDK 통화 분석은 미디어 인사이트 구성을 사용하여 생성하는 미디어 인사이트 파이프라인의 `AWS/ChimeSDK` 네임스페이스에 다음 지표를 게시합니다.


| 지표 | 설명 | 
| --- | --- | 
|  `MediaInsightsPipelineCreated`  |  미디어 인사이트 파이프라인이 성공적으로 생성되었습니다. 단위: 수  | 
|  `MediaInsightsPipelineStopped`  |  미디어 인사이트 파이프라인이 성공적으로 중지되었습니다. 단위: 수  | 
|  `MediaInsightsPipelineFailed`  |  미디어 인사이트 파이프라인이 실패했습니다. 단위: 수  | 
|  `MediaInsightsPipelineDuration`  |  파이프라인 생성과 중지/실패 사이의 시간입니다. 단위: 초  | 
|  `MediaInsightsPipelineBillingDuration`  |  미디어 인사이트 파이프라인의 청구 기간입니다. 단위: 수  | 
|  `RecordingFileSize`  |  녹음 파일의 크기입니다. 단위: 바이트  | 
|  `RecordingDuration `  |  녹음 지속 시간입니다. 단위: 초  | 

## 파이프라인 지표에 대한 CloudWatch 차원
<a name="monitoring-dimensions"></a>

다음 표에는 통화 분석 파이프라인을 모니터링하는 데 사용할 수 있는 CloudWatch 차원이 나와 있습니다.


| 차원 | 설명 | 
| --- | --- | 
| `MediaInsightsPipelineConfigurationId` | 미디어 인사이트 파이프라인 구성의 ID입니다. | 
| `MediaInsightsPipelineConfigurationName` | 미디어 인사이트 파이프라인 구성의 이름입니다. | 

# Amazon Chime SDK의 통화 분석 프로세서 및 출력 대상
<a name="call-analytics-processor-and-output-destinations"></a>

 미디어 인사이트 파이프라인 구성당 고유한 요소를 한 번만 지정할 수 있습니다. 모든 프로세서와 싱크는 동일한 AWS 계정에 있어야 하며 호출하는 엔드포인트와 동일한 AWS 리전에 생성해야 합니다. 예를 들어 Amazon Chime SDK 미디어 파이프라인에 `us-east-1` 엔드포인트를 사용하는 경우 `us-west-2` 리전에서 Kinesis Data Stream을 전달할 수 없습니다.

각 대상에 대한 정보를 보려면 각 섹션을 펼치세요.

## Amazon Transcribe Call Analytics 프로세서 대상
<a name="amazon-transcribe-call-analytics-processor"></a>

지원되는 싱크는 `KinesisDataStreamSink`입니다.

이 프로세서를 Amazon Transcribe 프로세서와 함께 사용할 수 없습니다. Amazon Transcribe Call Analytics에 대한 자세한 내용은 *Amazon Transcribe 개발자 안내서*의 [실시간 통화 분석](https://docs.aws.amazon.com/transcribe/latest/dg/call-analytics-streaming.html)을 참조하세요. `AmazonTranscribeCallAnalyticsProcessorConfiguration` API 호출에 `PostCallAnalyticsSettings`를 포함하여 [통화 후 분석](https://docs.aws.amazon.com/transcribe/latest/dg/tca-post-call.html)을 활성화하면 미디어 인사이트 파이프라인이 중지되고 처리가 완료되면 지정된 Amazon S3 위치에서 아티팩트를 수신합니다.

**참고**  
파이프라인을 35초 이상 일시 중지했다가 다시 시작하면 Amazon S3 버킷에서 세션 ID가 다른 별도의 파일에 호출 후 아티팩트가 생성됩니다.

통화 후 아티팩트에는 분석 JSON 파일과 오디오 녹음 WAV 또는 Opus 파일이 포함됩니다. 편집된(콘텐츠 편집을 활성화한 경우) 및 편집되지 않은 녹음 파일에 대한 Amazon S3 버킷 URL은 메타데이터 섹션의 `onetimeMetadata`의 일부로 각 Amazon Transcribe Call Analytics 통화 후 세션마다 한 번씩 Kinesis Data Stream으로 전송됩니다.

Amazon Transcribe Call Analytics을 사용한 통화 분석은 Kinesis Video Stream에서 오디오 데이터 입력을 가져옵니다.
+ 지원되는 미디어 인코딩: PCM 서명 16비트 리틀 엔디안 오디오.
+ 지원되는 미디어 샘플 속도: 8,000Hz에서 48,000Hz 사이.

Amazon Transcribe 분석 프로세스를 위한 `StreamConfiguration` 입력:
+ 각 스트림에 대해 `KinesisVideoStreamArn`을 지정해야 합니다.
+ (선택 사항) KVS `FragmentNumber`는 지정된 프래그먼트 다음에 있는 청크를 사용하여 통화 분석 작업을 시작합니다. 제공되지 않은 경우 Kinesis Video Stream의 최신 청크를 사용합니다.
+ `StreamChannelDefinition`은 누가 말하고 있는지를 정의합니다. Amazon Transcribe Call Analytics에는 2채널 오디오가 필요합니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출할 때는 어떤 화자가 어느 채널에 있는지 지정해야 합니다. 예를 들어 에이전트가 먼저 말하는 경우 `ChannelId`를 `0`으로 설정하여 첫 번째 채널을 나타내고, `ParticipantRole`을 `AGENT`로 설정하여 에이전트가 말하고 있음을 나타냅니다.

**참고**  
음성 커넥터를 사용하여 Amazon Transcribe Call Analytics 프로세서가 있는 `MediaInsightsPipeline`을 만드는 경우, 음성 커넥터 계정 레그 오디오는 `AGENT`이고 PSTN 레그 오디오는 `ParticipantRole`에 대해 `CUSTOMER`입니다.  
음성 커넥터 SIPREC의 경우 SIPREC 메타데이터를 사용합니다. 대부분의 경우 사전식 값이 가장 낮은 스트림 레이블이 `AGENT`로 간주됩니다.

다음 예제는 듀얼 채널 오디오 스트림 하나에 대한 Kinesis Video Stream 입력을 보여줍니다.

```
"StreamChannelDefinition" : {
    "NumberOfChannels" : 2
    "ChannelDefinitions": [
        {
            "ChannelId": 0,
            "ParticipantRole": "AGENT"
        },
        {
            "ChannelId": 1,
            "ParticipantRole": "CUSTOMER"
        }
    ]
}
```

 반대로 다음 예에서는 서로 다른 두 Kinesis Video 스트림의 모노 입력 2개를 보여줍니다.

```
KVS-1:
    "StreamChannelDefinition" : {
        "NumberOfChannels"  : 1
        "ChannelDefinitions": [
            {
                "ChannelId": 0,
               "ParticipantRole": "AGENT"
            }
        ]
    }
KVS-2:
    "StreamChannelDefinition" : {
        "NumberOfChannels"  : 1
        "ChannelDefinitions": [
            {
                "ChannelId": 1,
               "ParticipantRole": "CUSTOMER"
            }
        ]
    }
```

## Amazon Transcribe Call Analytics 출력
<a name="amazon-transcribe-call-analytics-output"></a>

 각 Amazon Transcribe 레코드에는 `UtteranceEvent` 또는 `CategoryEvent`가 포함되지만 둘 다 포함되지는 않습니다. `CategoryEvents`에는 `TranscribeCallAnalyticsCategoryEvent`의 `detail-type`이 있습니다.

다음 예제는 Amazon Transcribe의 일회성 메타데이터 출력 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "CallAnalyticsMetadata",
    "mediaInsightsPipelineId": "string",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "oneTimeMetadata": "string" // JSON encoded string of oneTimeMetadata object
}
 
// onetimeMetadata object
{
    "inviteHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string", // siprec metadata in JSON (converted from above XML) 
    
    // If PostcallSettings are enabled for Amazon Transcribe Call Analytics
    "s3RecordingUrl": "string", 
    "s3RecordingUrlRedacted": "string"
}
 
// inviteHeaders object
{
    "string": "string"
}
```

 다음 예제는 Amazon Transcribe Call Analytics 출력 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "TranscribeCallAnalytics",
    "mediaInsightsPipelineId": "string",
    "metadata": {
        "voiceConnectorId": "string",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "direction": "string"
    },
    "UtteranceEvent": {
        "UtteranceId": "string",
        "ParticipantRole": "string",
        "IsPartial": boolean,
        "BeginOffsetMillis": number,
        "EndOffsetMillis": number,
        "Transcript": "string",
        "Sentiment": "string",
        "Items": [{
            "Content": "string",
            "Confidence": number,
            "VocabularyFilterMatch": boolean,
            "Stable": boolean,
            "ItemType": "string",
            "BeginOffsetMillis": number,
            "EndOffsetMillis": number,
        }, ]
        "Entities": [{
            "Content": "string",
            "Confidence": number,
            "Category": "string", // Only PII is supported currently
            "Type": "string",
            "BeginOffset": number,
            "EndOffset": number,
        }, ],
        "IssuesDetected": [{
            "CharacterOffsets": {
                "Begin": number,
                "End": number
            }
        }]
    },
    "CategoryEvent": {
        "MatchedCategories": ["string"],
        "MatchedDetails": {
            "string": {
                "TimestampRanges": [{
                    "BeginOffsetMillis": number,
                    "EndOffsetMillis": number
                }]
            }
        }
    }
}
```

## Amazon Chime SDK Voice Connector 스트리밍 업데이트 메타데이터
<a name="cvc-stream-update-metadata"></a>

통화 분석 구성이 Amazon Chime SDK Voice Connector와 연결된 경우 [음성 커넥터 스트리밍 업데이트](https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html)가 있을 때 다음 음성 커넥터 업데이트 페이로드가 전송됩니다.

다음 예에서는 Amazon Transcribe 프로세서 및 Transcribe 통화 분석 프로세서의 업데이트 메타데이터 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "CallAnalyticsMetadata",
    "callevent-type": "Update",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "oneTimeMetadata": "string" // JSON encoded string of oneTimeMetadata object
}
 
// onetimeMetadata object
{
    "sipHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string" // siprec metadata in JSON (converted from above XML) 
}
 
// sipHeaders object
{
    "string": "string"
}
```

다음 예에서는 통화 분석 S3 녹음의 업데이트 메타데이터 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "Recording",
    "callevent-type": "Update",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "oneTimeMetadata": "string" // JSON encoded in string of oneTimeMetadata object
}

// onetimeMetadata object
{
    "sipHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string" // siprec metadata in JSON (converted from above XML) 
}

// sipHeaders object
{
    "string": "string"
}
```

## SIP 통화 녹음 메타데이터
<a name="sip-update-metadata"></a>

다음 예에서는 Alice와 Bob이라는 두 사람 간의 SIP 통화 녹음에 대한 메타데이터를 보여줍니다. 두 참가자 모두 오디오와 비디오를 보내고 받습니다. 단순화를 위해 이 예에는 SIP 및 SDP의 코드 조각만 있으며 SRC는 각 참가자의 스트림을 믹싱 없이 SRS에 기록합니다.

```
INVITE sip:recorder@example.com SIP/2.0
   Via: SIP/2.0/TCP src.example.com;branch=z9hG4bKdf6b622b648d9
   From: <sip:2000@example.com>;tag=35e195d2-947d-4585-946f-09839247
   To: <sip:recorder@example.com>
   Call-ID: d253c800-b0d1ea39-4a7dd-3f0e20a
   Session-ID: ab30317f1a784dc48ff824d0d3715d86
    ;remote=00000000000000000000000000000000
   CSeq: 101 INVITE
   Max-Forwards: 70
   Require: siprec
   Accept: application/sdp, application/rs-metadata,
   application/rs-metadata-request
   Contact: <sip:2000@src.example.com>;+sip.src
   Content-Type: multipart/mixed;boundary=boundary
   Content-Length: [length]

   Content-Type: application/SDP
   ...
   m=audio 49170 RTP/AVP 0
   a=rtpmap:0 PCMU/8000
   a=label:96
   a=sendonly
   ...
   m=video 49174 RTP/AVPF 96
   a=rtpmap:96 H.264/90000
   a=label:97
   a=sendonly
   ...
   m=audio 51372 RTP/AVP 0
   a=rtpmap:0 PCMU/8000
   a=label:98
   a=sendonly
   ...
   m=video 49176 RTP/AVPF 96
   a=rtpmap:96 H.264/90000
   a=label:99
   a=sendonly
   ....

Content-Type: application/rs-metadata
Content-Disposition: recording-session

<?xml version="1.0" encoding="UTF-8"?>
<recording xmlns='urn:ietf:params:xml:ns:recording:1'>
  <datamode>complete</datamode>
        <group group_id="7+OTCyoxTmqmqyA/1weDAg==">
                <associate-time>2010-12-16T23:41:07Z</associate-time>
                <!-- Standardized extension -->
                <call-center xmlns='urn:ietf:params:xml:ns:callcenter'>
                        <supervisor>sip:alice@atlanta.com</supervisor>
                </call-center>
                <mydata xmlns='http://example.com/my'>
                        <structure>structure!</structure>
                        <whatever>structure</whatever>
                </mydata>
        </group>
        <session session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <sipSessionID>ab30317f1a784dc48ff824d0d3715d86;
                                      remote=47755a9de7794ba387653f2099600ef2</sipSessionID>
                <group-ref>7+OTCyoxTmqmqyA/1weDAg==
                </group-ref>
                <!-- Standardized extension -->
                <mydata xmlns='http://example.com/my'>
                        <structure>FOO!</structure>
                        <whatever>bar</whatever>
                </mydata>
        </session>
        <participant
              participant_id="srfBElmCRp2QB23b7Mpk0w==">
                <nameID aor="sip:alice@atlanta.com">
                        <naSRCme xml:lang="it">Alice</name>
                </nameID>
                <!-- Standardized extension -->
                <mydata xmlns='http://example.com/my'>
                        <structure>FOO!</structure>
                        <whatever>bar</whatever>
                </mydata>
        </participant>
        <participant
               participant_id="zSfPoSvdSDCmU3A3TRDxAw==">
                <nameID aor="sip:bob@biloxy.com">
                        <name xml:lang="it">Bob</name>
                </nameID>
                <!-- Standardized extension -->
                <mydata xmlns='http://example.com/my'>
                        <structure>FOO!</structure>
                        <whatever>bar</whatever>
                </mydata>
        </participant>
        <stream stream_id="UAAMm5GRQKSCMVvLyl4rFw=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <label>96</label>
        </stream>
        <stream stream_id="i1Pz3to5hGk8fuXl+PbwCw=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <label>97</label>
        </stream>
        <stream stream_id="8zc6e0lYTlWIINA6GR+3ag=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <label>98</label>
        </stream>
        <stream stream_id="EiXGlc+4TruqqoDaNE76ag=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <label>99</label>
        </stream>
        <sessionrecordingassoc session_id="hVpd7YQgRW2nD22h7q60JQ==">
            <associate-time>2010-12-16T23:41:07Z</associate-time>
        </sessionrecordingassoc>
        <participantsessionassoc
              participant_id="srfBElmCRp2QB23b7Mpk0w=="
              session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <associate-time>2010-12-16T23:41:07Z</associate-time>
        </participantsessionassoc>
        <participantsessionassoc
               participant_id="zSfPoSvdSDCmU3A3TRDxAw=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <associate-time>2010-12-16T23:41:07Z</associate-time>
        </participantsessionassoc>
        <participantstreamassoc
              participant_id="srfBElmCRp2QB23b7Mpk0w==">
                <send>i1Pz3to5hGk8fuXl+PbwCw==</send>
                <send>UAAMm5GRQKSCMVvLyl4rFw==</send>
                <recv>8zc6e0lYTlWIINA6GR+3ag==</recv>
                <recv>EiXGlc+4TruqqoDaNE76ag==</recv>
        </participantstreamassoc>
        <participantstreamassoc
               participant_id="zSfPoSvdSDCmU3A3TRDxAw==">
                <send>8zc6e0lYTlWIINA6GR+3ag==</send>
                <send>EiXGlc+4TruqqoDaNE76ag==</send>
                <recv>UAAMm5GRQKSCMVvLyl4rFw==</recv>
                <recv>i1Pz3to5hGk8fuXl+PbwCw==</recv>
        </participantstreamassoc>
</recording>
```

다음 예에서는 한 통화 참가자가 다른 통화 참가자를 대기시켰을 때 업데이트된 메타데이터를 보여줍니다. 이 경우 `participant_id srfBElmCRp2QB23b7Mpk0w==`는 미디어 스트림만 수신하고 미디어는 전송하지 않으므로 `send` XML 요소는 생략됩니다. 반면, `participant_id zSfPoSvdSDCmU3A3TRDxAw==`는 미디어를 다른 참가자에게 보내지만 다른 참가자로부터 미디어를 수신하지는 않으므로 `recv` XML 요소는 생략됩니다.

```
INVITE sip:recorder@example.com SIP/2.0
            Via: SIP/2.0/TCP src.example.com;branch=z9hG4bKdf6b622b648d9
      From: <sip:2000@example.com>;tag=35e195d2-947d-4585-946f-09839247
      To: <sip:recorder@example.com>
      Call-ID: d253c800-b0d1ea39-4a7dd-3f0e20a
      Session-ID: ab30317f1a784dc48ff824d0d3715d86
       ;remote=f81d4fae7dec11d0a76500a0c91e6bf6
      CSeq: 101 INVITE
      Max-Forwards: 70
      Require: siprec
      Accept: application/sdp, application/rs-metadata,
      application/rs-metadata-request
      Contact: <sip:2000@src.example.com>;+sip.src
      Content-Type: multipart/mixed;boundary=foobar
      Content-Length: [length]

      Content-Type: application/SDP
      ...
      m=audio 49170 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      a=label:96
      a=sendonly
      ...
      m=video 49174 RTP/AVPF 96
      a=rtpmap:96 H.264/90000
      a=label:97
      a=sendonly
      ...
      m=audio 51372 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      a=label:98
      a=sendonly
      ...
      m=video 49176 RTP/AVPF 96
      a=rtpmap:96 H.264/90000
      a=label:99
      a=sendonly
      ....

   Content-Type: application/rs-metadata
   Content-Disposition: recording-session

      <?xml version="1.0" encoding="UTF-8"?>
        <recording xmlns='urn:ietf:params:xml:ns:recording:1'>
          <datamode>partial</datamode>
            <participantstreamassoc
             participant_id="srfBElmCRp2QB23b7Mpk0w==">
             <recv>8zc6e0lYTlWIINA6GR+3ag==</recv>
             <recv>EiXGlc+4TruqqoDaNE76ag==</recv>
            </participantstreamassoc>
            <participantstreamassoc
             participant_id="zSfPoSvdSDCmU3A3TRDxAw==">
              <send>8zc6e0lYTlWIINA6GR+3ag==</send>
              <send>EiXGlc+4TruqqoDaNE76ag==</send>
             </participantstreamassoc>
           </recording>
```

다음 예에서는 통화가 재개될 때의 메타데이터 업데이트를 보여줍니다. 이제 페이로드에는 `send` 및 `recv` XML 요소가 포함됩니다.

```
INVITE sip:recorder@example.com SIP/2.0
      Via: SIP/2.0/TCP src.example.com;branch=z9hG4bKdf6b622b648d9
      From: <sip:2000@example.com>;tag=35e195d2-947d-4585-946f-09839247
      To: <sip:recorder@example.com>
      Call-ID: d253c800-b0d1ea39-4a7dd-3f0e20a
      Session-ID: ab30317f1a784dc48ff824d0d3715d86
       ;remote=f81d4fae7dec11d0a76500a0c91e6bf6
      CSeq: 101 INVITE
      Max-Forwards: 70
      Require: siprec
      Accept: application/sdp, application/rs-metadata,
      application/rs-metadata-request
      Contact: <sip:2000@src.example.com>;+sip.src
      Content-Type: multipart/mixed;boundary=foobar
      Content-Length: [length]

      Content-Type: application/SDP
      ...
      m=audio 49170 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      a=label:96
      a=sendonly
      ...
      m=video 49174 RTP/AVPF 96
      a=rtpmap:96 H.264/90000
      a=label:97
      a=sendonly
      ...
      m=audio 51372 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      a=label:98
      a=sendonly
      ...
      m=video 49176 RTP/AVPF 96
      a=rtpmap:96 H.264/90000
      a=label:99
      a=sendonly
      ....
    
   Content-Type: application/rs-metadata
   Content-Disposition: recording-session

      <?xml version="1.0" encoding="UTF-8"?>
        <recording xmlns='urn:ietf:params:xml:ns:recording:1'>
          <datamode>partial</datamode>
            <participantstreamassoc
             participant_id="srfBElmCRp2QB23b7Mpk0w==">
             <send>i1Pz3to5hGk8fuXl+PbwCw==</send>
             <send>UAAMm5GRQKSCMVvLyl4rFw==</send>
             <recv>8zc6e0lYTlWIINA6GR+3ag==</recv>
             <recv>EiXGlc+4TruqqoDaNE76ag==</recv>
            </participantstreamassoc>
            <participantstreamassoc
             participant_id="zSfPoSvdSDCmU3A3TRDxAw==">
              <send>8zc6e0lYTlWIINA6GR+3ag==</send>
              <send>EiXGlc+4TruqqoDaNE76ag==</send>
              <recv>i1Pz3to5hGk8fuXl+PbwCw==</recv>
             <recv>UAAMm5GRQKSCMVvLyl4rFw==</recv>
             </participantstreamassoc>
           </recording>
```

## Amazon Transcribe 프로세서 대상
<a name="amazon-transcribe-processors"></a>

지원되는 싱크는 `KinesisDataStreamSink`입니다.

이 프로세서를 Amazon Transcribe Call Analytics와 결합할 수 없습니다. Amazon Transcribe의 입력 및 출력에 대한 자세한 내용은 *Amazon Transcribe 개발자 안내서*의 [ Transcribe 스트리밍 오디오](https://docs.aws.amazon.com/transcribe/latest/dg/streaming.html)를 참조하세요.

Amazon Transcribe를 사용한 통화 분석 세션에서는 Kinesis Video Stream에서 오디오 데이터를 입력합니다.
+ 지원되는 MediaEncoding: PCM 서명 16비트 리틀 엔디안 오디오.
+ 지원되는 MediaSampleRate 샘플링 속도: 8,000Hz에서 48,000Hz 사이.

 Amazon Transcribe 프로세서용 `StreamConfiguration` 입력: 
+ 각 스트림에 대해 `KinesisVideoStreamArn`을 지정해야 합니다.
+ (선택 사항) KVS `FragmentNumber` - 특정 프래그먼트 뒤에 있는 청크를 사용하여 통화 분석 작업을 시작합니다. 제공되지 않으면 Kinesis Video Stream에서 사용 가능한 최신 청크를 사용합니다.
+ `StreamChannelDefinition` Amazon Transcribe는 현재 두 채널의 오디오를 지원합니다. `StreamChannelDefinition` 런타임에서 `NumberOfChannels`를 지정해야 합니다. 또한 모노 오디오를 두 개의 별도 채널로 전송하는 경우 반드시 `ChannelId`를 전달해야 합니다. 트랜스크립트에서 채널에는 `ch_0` 및 `ch_1` 레이블이 지정됩니다. 다음 예제는 하나의 모노 오디오 채널 스트림에 대한 KVS 입력을 보여줍니다.

```
"StreamChannelDefinition" : {"
    NumberOfChannels" : 1
}
```

 다음 예제는 서로 다른 두 스트림의 두 모노 오디오 입력에 대한 KVS 입력을 보여줍니다.

```
KVS-1:
    "StreamChannelDefinition" : {
        "NumberOfChannels"  : 1
        "ChannelDefinitions": [
            {
                "ChannelId": 0
            }
        ]
    }
KVS-2:
    "StreamChannelDefinition" : {
        "NumberOfChannels"  : 1
        "ChannelDefinitions": [
            {
                "ChannelId": 1
            }
        ]
    }
```

**참고**  
Amazon Transcribe 프로세서로 생성된 `MediaInsightsPipeline`의 경우, 보이스 커넥터 계정 레그 오디오는 `channel-0`에, PSTN 레그 오디오는 `channel-1`에 할당됩니다.  
음성 커넥터 SIPREC의 경우 SIPREC 메타데이터를 사용합니다. 대부분의 경우 사전 값이 가장 낮은 스트림 레이블이 `channel-0`에 할당됩니다.  
Amazon Transcribe 및 Amazon Transcribe Call Analytics 프로세서의 경우 두 개의 Kinesis Video 스트림을 전달하고 각 스트림에 모노 오디오 채널이 포함되어 있는 경우 Transcribe 또는 Transcribe 통화 분석 데이터를 처리하기 전에 두 채널을 단일 오디오 스트림으로 인터리브합니다.

## Amazon Transcribe 출력
<a name="amazon-transcribe-output"></a>

다음 예제는 Amazon Transcribe의 일회성 메타데이터 출력 형식을 보여 줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "CallAnalyticsMetadata",
    "mediaInsightsPipelineId": "string",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "oneTimeMetadata": "string" // JSON encoded string of oneTimeMetadata object
}
 
// onetimeMetadata object
{
    "inviteHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string" // siprec metadata in JSON (converted from above XML) 
}
 
// inviteHeaders object
{
    "string": "string"
}
```

다음 예제는 Amazon Transcribe 출력 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "Transcribe",
    "mediaInsightsPipelineId": "string",
    "metadata": {
        "voiceconnectorId": "string",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "direction": "string"
    }
    "TranscriptEvent": {
        "Transcript": {
            "Results": [{
                "Alternatives": [{
                    "Entities": [{
                        "Category": "string",
                        "Confidence": number,
                        "Content": "string",
                        "EndTime": number,
                        "StartTime": number,
                        "Type": "string"
                    }],
                    "Items": [{
                        "Confidence": number,
                        "Content": "string",
                        "EndTime": number,
                        "Speaker": "string",
                        "Stable": boolean,
                        "StartTime": number,
                        "Type": "string",
                        "VocabularyFilterMatch": boolean
                    }],
                    "Transcript": "string"
                }],
                "ChannelId": "string",
                "EndTime": number,
                "IsPartial": boolean,
                "LanguageCode": "string",
                "LanguageIdentification": [{
                    "LanguageCode": "string",
                    "Score": number
                }],
                "ResultId": "string",
                "StartTime": number
            }]
        }
    }
}
```

## 음성 분석 프로세서 대상
<a name="voice-analytics-processor"></a>

 지원되는 싱크는 `KinesisDataStreamSink`, `SqsQueueSink`, `SnsTopicSink`, `LambdaFunctionSink`입니다.

 이 프로세서를 Amazon Transcribe Call Analytics 프로세서, Amazon Transcribe 프로세서 또는 통화 레코딩과 결합할 수 있습니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html) API를 사용하여 음성 분석 프로세서를 간접 호출해야 합니다. 음성 분석 사용에 대한 자세한 내용은 [Amazon Chime SDK 음성 분석 사용](https://docs.aws.amazon.com/chime-sdk/latest/dg/voice-analytics.html)을 참조하세요.

## 싱크로 Kinesis Data Streams 사용
<a name="kinesis-data-stream-destination"></a>

통화 분석을 통해 생성되는 KDS(Kinesis Data Stream) 레코드에는 미디어 파이프라인 ID, 세부 정보 유형, 메타데이터, 프로세서별 섹션이 포함됩니다. Kinesis Data Stream의 데이터 소비에 대한 자세한 내용은 *Amazon Kinesis Streams 개발자 안내서*의 [Amazon Kinesis Data Streams에서 데이터 읽기](https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html)를 참조하세요. 이 싱크를 사용하여 구성을 생성하려면 지정된 스트림에 대한 `kinesis:DescribeStream` 권한이 있어야 합니다.

 **Metadata**

 생성된 KDS 레코드의 `metadata` 섹션에는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API 직접 호출 중에 `CallAnalyticsRuntimeMetadata`에 지정된 키-값 페어가 포함됩니다. 음성 커넥터로 통화 분석 세션을 시작한 경우 메타데이터 섹션이 다음 파라미터로 자동으로 채워집니다.
+ `transactionId`
+ `fromNumber`
+ `toNumber`
+ `callId`
+ `voiceConnectorId`
+ `direction`

 위에 표시된 파라미터 외에도 음성 커넥터에서 시작한 통화 분석 세션의 메타데이터 섹션에는 다음이 포함된 `oneTimeMetadata` 필드가 채워집니다.
+ `inviteHeaders`
+ `siprecMetadata`

이는 세션이 시작될 때 한 번만 Kinesis Data Stream에 게시되며, `detail-type`은 `CallAnalyticsMetadata`입니다.

각 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API 직접 호출마다 `MediaInsightsRuntimeMetadata`에 고유 식별자를 전달하여 Kinesis Data Stream으로 전달되는 각 레코드의 출처를 고유하게 식별할 수 있습니다.

## Amazon S3 통화 녹음
<a name="amazon-s3-call-recording"></a>

 통화 분석 녹음은 KVS 스트림에서 오디오를 읽고, 오디오 파일로 녹음하고, 파일을 지정된 Amazon S3 버킷에 업로드합니다. 또한 통화 분석은 녹음 후 파일 위치와 함께 통화 메타데이터를 KDS로 보냅니다. 데이터 웨어하우스를 활성화하면 호출 메타데이터(SIPREC가 사용된 경우 SIPREC 메타데이터 포함)가 쿼리할 수 있는 Parquet 테이블 세트로 데이터 웨어하우스에 전달됩니다.

다른 통화 분석 프로세서와 마찬가지로 파이프라인에 대한 구성을 먼저 만들어야 합니다. Amazon Chime SDK 콘솔 또는 CLI를 사용하여 새 구성을 생성할 수 있습니다. 그런 다음 CLI를 사용하여 파이프라인을 생성합니다. 콘솔을 사용하여 녹화 구성을 만드는 방법에 대한 자세한 내용은 이 섹션 앞부분에 있는 [Amazon Chime SDK의 통화 분석 구성 생성](creating-ca-configuration.md) 항목을 참조하세요. 기록 워크플로 사용에 대한 자세한 내용은 이 섹션 앞부분에 있는 [Amazon Chime SDK의 통화 녹음 워크플로 이해](recording-workflows.md) 항목을 참조하세요.

 **CLI를 사용하여 구성 생성**

 다음 명령을 실행합니다.

```
aws chime-sdk-media-pipeline create-media-insights-pipeline-configuration --cli-input-json file://configuration.json 
```

 다음 예제에서는 레코딩만 사용 설정된 구성 JSON 파일을 보여줍니다.

```
{
    "MediaInsightsPipelineConfigurationName": configuration_name,
    "ResourceAccessRoleArn": role_arn,
    "Elements": [
        {
            "KinesisDataStreamSinkConfiguration": {
                "InsightsTarget": KDS_arn //Where recording live metadata will be delivered.
            },
            "Type": "KinesisDataStreamSink"
        },
        {
            "S3RecordingSinkConfiguration": {
                "Destination": "arn:aws:s3:::kvs-recording-testing",
                "RecordingFileFormat": file_format // Specify "Opus" or "WAV" as the recording file format.
            },
            "Type": "S3RecordingSink"
        }         
    ]
}
```

다음 사항에 유의하세요.
+ Kinesis Video Stream을 통해 통화 녹음을 활성화하려면 오디오는 PCM 서명 16비트 리틀 엔디안 형식이어야 합니다. 샘플 레이트는 8kHz여야 합니다.
+ 빌더는 Kinesis Video Stream의 데이터 보존 기간을 충분히 길게 설정하여 통화 분석을 통해 프래그먼트를 보존하고 사용할 수 있도록 해야 합니다.
+ 통화 레코딩을 단독으로 또는 다른 프로세서와 조합하여 활성화하는 경우 녹음용 Kinesis Video Stream ARN 2개를 제공해야 합니다. 통화 레코딩은 단일 스테레오 오디오 입력을 지원하지 않습니다.

## Amazon S3 통화 레코딩 메타데이터 출력
<a name="s3-recording-metadata-output"></a>

다음 예는 통화 분석 Amazon S3 녹음을 위한 메타데이터 출력 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "Recording",   
    "mediaInsightsPipelineId": "string",
    "s3MediaObjectConsoleUrl": "string",
    "recordingDurationSeconds": "number",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "startTime": "string", // ISO8601 format
    "endTime": "string", // ISO8601 format
    "oneTimeMetadata": "string" // JSON encoded in string of oneTimeMetadata object
}

// onetimeMetadata object
{
    "sipHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string" // siprec metadata in JSON (converted from above XML) 
}

// sipHeaders object
{
    "string": "string"
}
```

## 음성 향상 활성화
<a name="voice-enhancement-sink"></a>

음성 향상을 활성화하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API 직접 호출에 `VoiceEnhancementSinkConfiguration` 요소를 포함합니다.

이 예제는 일반적인 요소를 보여줍니다.

```
{
  "Type":"VoiceEnhancementSink",
  "VoiceEnhancementSinkConfiguration": {
       "Disabled": Boolean (string) // FALSE ==> Voice Enhancement will be performed
}
```

구성을 업데이트하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html) API 직접 호출에 `VoiceEnhancementSinkConfiguration` 요소를 추가합니다. 이 경우 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaInsightsPipelineConfiguration.html) API는 결과에 `VoiceEnhancementSinkConfiguration` 요소를 포함합니다.

이 예제 요청은 음성 향상 및 Amazon S3 녹음을 활성화하는 방법을 보여줍니다.

```
POST /media-insights-pipeline-configurations HTTP/1.1
Content-type: application/json

{
   "MediaInsightsPipelineConfigurationName":"media_insights_configuration_name",
   "ResourceAccessRoleArn":"arn:aws:iam::account_id:role/resource_access_role",
   "Elements":[
      {
         "Type":"S3RecordingSink",
         "S3RecordingSinkConfiguration":{
            "Destination":"arn:aws:s3:::input_bucket_path",
            "RecordingFileFormat":"Wav"
         }
      },
      {
         "Type":"VoiceEnhancementSink",
         "VoiceEnhancementSinkConfiguration": {
            "disabled":"false"
         }
      }
   ],
   "ClientRequestToken":"client_request_token"
}
```

**참고**  
통화 분석 구성의 `S3RecordingSink` 요소에는 항상 `VoiceEnhancementSink` 요소가 필요합니다.

# Amazon Chime SDK의 트랜스크립션과 레코딩 싱크 결합
<a name="combining-recording-transcription"></a>

Amazon Transcribe 및 Amazon Transcribe Call Analytics를 Amazon S3 레코딩 싱크와 결합할 수 있습니다. 빌더는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API 직접 호출 또는 콘솔을 사용하여 Amazon Transcribe 프로세서 외에도S3RecordingSinkConfiguration을 전달할 수 있습니다.

Amazon S3 레코딩 싱크와 함께 Amazon Transcribe 또는 Amazon Transcribe Call Analytics를 사용할 수 있지만 둘 다 사용할 수는 없습니다. 트랜스크립션 프로세서가 있든 없든 녹음 싱크 외에도 동일한 구성에 음성 분석을 추가할 수도 있습니다.

**참고**  
위에 나열된 프로세서 중 하나로 녹음을 활성화할 수 있습니다. 하지만 Amazon S3 통화 녹음과 함께 Amazon Transcribe Call Analytics를 활성화하는 경우 두 개의 Kinesis 비디오 스트림을 제공해야 하며, Amazon Transcribe Call Analytics와 Amazon S3 통화 녹음에서 각각 하나씩 중복된 녹음 파일을 받게 됩니다.

다음 사항에 유의하세요.
+ 고유한 `MediaInsightsPipelineConfigurationName`을 사용해야 합니다.
+ `ResourceAccessRoleArn`에 대한 자세한 내용은 이 안내서의 [Amazon Chime SDK의 통화 분석 리소스 액세스 역할 사용](call-analytics-resource-access-role.md) 섹션을 참조하세요.
+ `Destination` 값은 S3 경로 ARN이어야 합니다. Amazon S3 버킷은 동일한 계정이 소유해야 합니다.
+ Transcribe 및 레코딩이 포함된 구성을 사용하여 파이프라인을 생성하는 경우 일시 중지 및 다시 시작은 Kinesis Data 스트림에서 생성된 인사이트에만 나타납니다. KVS 스트림의 모든 데이터는 기록되고 Amazon S3에 업로드됩니다.
+ 구성에서 레코딩 외에 Amazon Transcribe 또는 TCA(Transcribe Call Analytics)를 사용하는 경우, 미디어 인사이트 파이프라인은 트랜스크립션 또는 Transcribe Call Analytics 인사이트를 실시간으로 제공하고, 통화 종료 시 Amazon S3 레코딩을 제공합니다. 통화 분석 중에 트랜스크립션 서비스가 실패하더라도 S3 레코딩 작업은 계속 실행을 시도합니다. 반대로, Amazon S3 기록 실패는 트랜스크립션이 완료된 후에 실행되므로 트랜스크립션 인사이트에 영향을 주지 않습니다.

이 예제는 Amazon Transcribe 프로세서와 Amazon S3 레코딩 싱크를 사용한 구성을 보여줍니다. 또한 이 예제는 부분적인 결과 안정화를 지원하여 출력 지연 시간을 줄일 수 있지만 정확도에는 영향을 미칠 수 있습니다. 자세한 내용은 Amazon Transcribe 개발자 안내서**의 [일부 결과 안정화](https://docs.aws.amazon.com/transcribe/latest/dg/streaming-partial-results.html#streaming-partial-result-stabilization)를 참조하세요.

```
{
    "MediaInsightsPipelineConfigurationName": unique_configuration_name,
    "ResourceAccessRoleArn": role_arn,
    "Elements": [{
            "AmazonTranscribeProcessorConfiguration": {
                "ContentIdentificationType": "string",
                "ContentRedactionType": "string",
                "EnablePartialResultsStabilization": boolean, //Enables partial result stabilization. Can reduce latency. May impact accuracy. 
                "FilterPartialResults": boolean, //To control partial utterance events
                "LanguageCode": "string",
                "LanguageModelName": "string",
                "PartialResultsStability": "string",
                "PiiEntityTypes": "string",
                "ShowSpeakerLabel": boolean,
                "VocabularyFilterMethod": "string",
                "VocabularyFilterName": "string",
                "VocabularyName": "string"
            },
            "Type": "AmazonTranscribeProcessor"
        },
        {
            "KinesisDataStreamSinkConfiguration": {
                "InsightsTarget": KDS_arn //Where recording and insights live metadata will be delivered.
            },
            "Type": "KinesisDataStreamSink"
        },
        {
            "S3RecordingSinkConfiguration": {
                "Destination": S3_Arn,
                "RecordingFileFormat": file_format // Specify "Opus" or "WAV" as the recording file format.
            },
            "Type": "S3RecordingSink"
        }
    ]
}
```

# Amazon Chime SDK에 Amazon EventBridge 알림 사용
<a name="using-eventbridge-notifications"></a>

Amazon Chime SDK Call Analytics는 미디어 인사이트 파이프라인 상태가 변경되거나 통화 분석 실시간 알림 조건이 충족될 때 기본 EventBridge 버스로 이벤트를 전송할 수 있도록 지원합니다. 미디어 인사이트 파이프라인 오류 상태 업데이트의 경우 리소스가 비동기적으로 실패할 경우 이를 알리도록 EventBridge 대상을 구성하는 것이 좋습니다. 통화 분석 알림에는 aws.chime 소스와 다양한 세부 정보 유형이 있으며, 이는 다음 섹션에서 공유됩니다. 자세한 내용은 [Amazon EventBridge 사용자 설명서](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)를 참조하세요.

**Topics**
+ [상태 업데이트](#status-updates)
+ [실시간 경고](#realtime-alerts)

## 상태 업데이트
<a name="status-updates"></a>

 미디어 인사이트 파이프라인은 통화 분석 세션이 진행되면서 성공적으로 종료되거나 오류가 발생할 때 EventBridge 알림을 보냅니다. 다음과 같은 경우 ‘미디어 인사이트 상태 변경’ 세부 정보 유형이 포함된 EventBridge 알림을 받게 됩니다.
+ 미디어 파이프라인의 상태가 바뀝니다.
+ 미디어 파이프라인 요소의 상태가 바뀝니다.
+ 파이프라인 요소가 중지됩니다.
+ 파이프라인 요소가 실패합니다.

세부 정보 섹션에는 항상 다음 필드가 포함됩니다.
+ `version`
+ `mediaInsightsPipelineArn`
+ `eventType`

미디어 인사이트 파이프라인에 분석 프로세서, 데이터 싱크 등 여러 요소가 포함된 경우 세부 정보 섹션에는 `mediaInsightsPipelineElementStatuses` 필드도 포함됩니다. 이 필드는 파이프라인 내 각 요소의 상태를 나타냅니다. 각 파이프라인 요소의 가능한 상태는 다음과 같을 수 있습니다.
+ `NotStarted`
+ `InProgress`
+ `Stopped`
+ `Failed`

 세부 정보 섹션에는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API 직접 호출 중에 `MediaInsightsRuntimeMetadata`에 지정된 모든 키-값 페어도 포함됩니다. 음성 커넥터로 통화 분석 세션을 시작한 경우 메타데이터 섹션은 다음 파라미터로 자동으로 채워집니다.
+ `transactionId`
+ `fromNumber`
+ `toNumber`
+ `callId`
+ `voiceConnectorId`
+ `direction`

 미디어 인사이트 파이프라인에 단일 요소가 포함될 때마다 다음과 같은 이벤트 유형이 나타날 수 있습니다. 각 섹션을 펼쳐 자세히 알아보세요.

### Amazon Chime SDK 미디어 인사이트 진행 중
<a name="insights-in-progress"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsInProgress",
        "version": "0",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string"
    }
}
```

### Amazon Chime SDK 미디어 인사이트 일시 중지
<a name="insights-paused"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsPaused",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string"
    }
}
```

### Amazon Chime SDK 미디어 인사이트 중지
<a name="insights-stoppped"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsStopped",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string"
    }
}
```

### Amazon Chime SDK 미디어 인사이트 일시적 실패
<a name="insights-temp-failure"></a>

서비스에 일시적인 장애가 발생하여 재시도를 시도할 것임을 나타냅니다. 아무 조치도 필요하지 않습니다.

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsTemporaryFailure",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string"
    }
}
```

### Amazon Chime SDK 미디어 인사이트 영구 실패
<a name="insights-perm-failure"></a>

사용자의 조치가 필요한 장애를 나타냅니다. `failureReason`을 사용하여 문제를 해결하세요. 일반적인 장애에는 다음이 포함될 수 있습니다.
+ 리소스 액세스 역할에 대한 권한이 부족함
+ 누락되거나 삭제된 리소스
+ 분석을 호출하는 AWS 서비스에서 제한하면 Amazon Transcribe 또는 Amazon Kinesis와 같이 사용자를 대신하여가 호출합니다.
+ KVS 스트림의 미디어 형식이 호환되지 않습니다.

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsPermanentFailure",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string",
        "failureReason": "string"              
    }
}
```

**참고**  
`failureReason` 필드는 선택 사항입니다. 예를 들어, 일반적인 이유는 `Access denied when assuming resource access role`일 수 있습니다.

다음 이벤트 유형은 Amazon Chime SDK 음성 커넥터에 의해 시작된 통화 분석 세션에 대해 미디어 인사이트 파이프라인이 만들어지거나 만들어지려는 시도가 실패할 때마다 나타날 수 있습니다. 각 섹션을 펼쳐 자세히 알아보세요.

### Amazon Chime SDK 미디어 인사이트 생성됨
<a name="vc-pipeline-created"></a>

이 예제는 일반적인 성공 이벤트를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": 
    {
        "version": "0",
        "mediaInsightsPipelineConfigurationArn": "string",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsCreated",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string",
    }
}
```

### Amazon Chime SDK 미디어 인사이트 생성 실패
<a name="vc-pipeline-failed"></a>

이 예시는 일반적인 장애 이벤트를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change",     
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": 
    {
        "version": "0",
        "mediaInsightsPipelineConfigurationArn": "string",
        "eventType": "chime:MediaInsightsCreateFailed", 
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string",
        "failureOrigin": "Voice Connector",
        "httpStatusCode": "string",
        "failureReason": "string"
    }
}
```

미디어 인사이트 파이프라인에 여러 요소가 포함된 경우 다음과 같은 이벤트 유형이 나타날 수 있습니다. 예제 알림은 다음과 `S3RecordingSink`와 결합된 `AmazonTranscribeProcessor`에 대한 것입니다. 각 섹션을 펼쳐 자세히 알아보세요.

### AmazonTranscribeProcessor가 진행 중이며 S3RecordingSink가 시작되지 않음
<a name="processor-running-sink-not-started"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsInProgress",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "InProgress",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "NotStarted",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor가 성공했고 S3RecordingSink가 진행 중임
<a name="processor-success-sink-in-progress"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsInProgress",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Stopped",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "InProgress",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor에 장애가 발생했고 S3RecordingSink가 진행 중임
<a name="processor-fail-sink-in-process"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsInProgress",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Failed",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "InProgress",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor에 장애가 발생했고 S3RecordingSink가 성공함
<a name="processor-fail-record-finish"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsPermanentFailure",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Failed",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "Stopped",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string",
        "failureReason": "string" 
    } 
}
```

### AmazonTranscribeProcessor가 성공했고 S3RecordingSink에 장애가 발생함
<a name="processor-success-recording-fail"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsPermanentFailure",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Stopped",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "Failed",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string",
        "failureReason": "string" 
    } 
}
```

### AmazonTranscribeProcessor가 일시 중지되고S3RecordingSink가 시작되지 않음
<a name="processor-pause-recording-no-start"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsPaused",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Paused",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "NotStarted",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor가 일시적으로 실패하고S3RecordingSink가 시작되지 않았음
<a name="processor-temp-fail-recording-no-start"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsTemporaryFailure",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "TemporarilyFailed",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "NotStarted",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor와 S3RecordingSink가 성공함
<a name="processor-sink-success"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsStopped",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Stopped",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "Stopped",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### S3RecordingSink가 성공하고 VoiceEnhancement 진행 중
<a name="voice-enhancement-sink-inprogress"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
  "version": "0",
  "id": "string",
  "detail-type": "Media Insights State Change",
  "source": "aws.chime",
  "account": number,
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "string",
  "detail": {
    "mediaInsightsPipelineArn": "string",
    "eventType": "chime:MediaInsightsInProgress",
    "version": "0",
    "mediaInsightsPipelineElementStatuses": [
      {
        "type": "VoiceEnhancementSink",
        "status": "InProgress",
        "updatedOn": 1686184070655
      },
      {
        "type": "S3RecordingSink",
        "status": "Stopped",
        "updatedOn": 1686184070655
      }
    ]
  }
}
```

### 30분이 넘는 통화로 인해 S3RecordingSink는 성공하고 VoiceEnhancement는 실패함
<a name="voice-enhancement-sink-fail-longerthan30minutes"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
  "version": "0",
  "id": "string",
  "detail-type": "Media Insights State Change",
  "source": "aws.chime",
  "account": number,
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "string",
  "detail": {
    "mediaInsightsPipelineArn": "string",
    "eventType": "chime:MediaInsightsStopped",
    "version": "0",
    "mediaInsightsPipelineElementStatuses": [
      {
        "type": "VoiceEnhancement",
        "status": "NotSupported",
        "updatedOn": 1686184070655,
        "statusDetail": "Unsupported recording length"
      },
      {
        "type": "S3RecordingSink",
        "status": "Stopped",
        "updatedOn": 1686184070655
      }
    ]
  }
}
```

### 30분 미만의 통화로 인해 S3RecordingSink는 성공했지만 VoiceEnhancement는 실패함
<a name="voice-enhancement-sink-fail-lessthan30minutes"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
  "version": "0",
  "id": "string",
  "detail-type": "Media Insights State Change",
  "source": "aws.chime",
  "account": number,
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "string",
  "detail": {
    "mediaInsightsPipelineArn": "string",
    "eventType": "chime:MediaInsightsPermanentFailure",
    "version": "0",
    "mediaInsightsPipelineElementStatuses": [
      {
        "type": "VoiceEnhancement",
        "status": "Failed",
        "updatedOn": 1686184070655
      },
      {
        "type": "S3RecordingSink",
        "status": "Stopped",
        "updatedOn": 1686184070655
      }
    ]
  }
}
```

## 실시간 경고
<a name="realtime-alerts"></a>

**참고**  
Amazon Transcribe 및 Amazon Transcribe Call Analytics 프로세서만 실시간 알림을 지원합니다.

 Amazon Chime SDK 통화 분석을 사용하면 개발자가 분석 세션 중에 프로세서를 통해 실시간 알림을 보내는 규칙을 설정할 수 있습니다. 알림은 세부 정보 유형 `Media Insights Rules Matched`와 함께 Amazon EventBridge로 전송됩니다. EventBridge는 Lambda, Amazon SQS, Amazon SNS와 같은 다운스트림 서비스와의 통합을 지원하여 최종 사용자를 위한 알림을 트리거하거나 다른 사용자 지정 비즈니스 로직을 시작합니다.

 실시간 알림은 `MediaInsightsPipelineConfiguration`에 대한 `RealTimeAlertConfiguration` 필드의 일부로 설정됩니다. Amazon Chime SDK 콘솔을 사용하여 필드를 구성하거나 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html) API를 직접 호출할 수 있습니다.

 이 예제는 API를 통해 실시간 알림 구성을 생성하거나 업데이트하는 방법을 보여줍니다.

```
{
    "MediaInsightsPipelineConfigurationName": "config_name",
    "ResourceAccessRoleArn": "arn:aws:iam::account_id:role/role_name",
    "RealTimeAlertConfiguration": {
        "Disabled": false,
        "Rules": [{
                "Type": "KeywordMatch",
                "KeywordMatchConfiguration": {
                    "RuleName": "rule_name_1",
                    "Keywords": [
                        "hello",
                        "thank you"
                    ],
                    "Negate": false
                }
            },
            {
                "Type": "Sentiment",
                "RuleName": "rule_name_2",
                "SentimentType": "NEGATIVE",
                "TimePeriod": 60
            },
            {
                "Type": "IssueDetection",
                "RuleName": "rule_name_3"
            }
        ]
    },
    "Elements": [{
            "Type": "AmazonTranscribeCallAnalyticsProcessor",
            "AmazonTranscribeCallAnalyticsProcessorConfiguration": {
                "LanguageCode": "en-US"
            }
        },
        {
            "Type": "KinesisDataStreamSink",
            "KinesisDataStreamSinkConfiguration": {
                "InsightsTarget": "arn:aws:kinesis:us-east-1:account_id:stream/stream_name"
            }
        }
    ]
}
```

실시간 알림 구성의 각 규칙은 독립적으로 트리거됩니다. 여러 규칙 조건이 동시에 충족되는 경우 EventBridge 알림을 여러 개 받을 수 있습니다. 알림에 대한 규칙 목록을 만들려면 다음 규칙 유형 중에서 선택할 수 있습니다.

키워드 일치  
발화 또는 트랜스크립트 이벤트에서 지정된 키워드 또는 구문 세트가 일치하면 알림을 보냅니다. 다음과 같은 경우 이벤트가 발생하도록 알림을 구성할 수 있습니다.  
+ 지정된 키워드가 모두 음성으로 전달되며, `Negate`는 `false`로 설정됩니다.
+ `Negate`가 `true`로 설정된 경우 지정된 모든 키워드는 통화 전체에 걸쳐 음성으로 전달되지 않은 것으로 처리됩니다.
Amazon Transcribe 및 Amazon Transcribe 애널리틱스는 이 규칙 유형을 지원합니다.

감정 분석  
특정 감정 유형이 일정 기간 동안 지속되면 알림을 보냅니다. Transcribe Call Analytics만 이 규칙을 지원합니다.

문제 감지  
발화 이벤트에서 문제가 감지되면 경보를 보냅니다. Transcribe Call Analytics만 이 규칙 유형을 지원합니다.

다음 예제는 `KeywordMatch` 규칙에 대한 실시간 알림 이벤트를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights Rules Matched", 
    "source": "aws.chime", 
    "account": number,
    "region": "us-east-1",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail":   {
        "version": "0",
        "sourceMetadata": {}
        "ruleName": "string"
        "utteranceId": "string",
        "beginTimestamp": "yyyy-mm-ddThh:mm:ssZ",
    }
}
```

일부 EventBridge 필드는 일치하는 규칙 유형에 고유해야 합니다.

**키워드 매칭 필드**  
`utteranceId`: Amazon Transcribe Call Analytics를 사용하는 경우 일치하는 키워드가 포함된 트랜스크립트의 ID입니다. 발화된 키워드 매칭에만 해당됩니다.  
`resultId`: Amazon Transcribe를 사용하는 경우 일치하는 키워드가 포함된 트랜스크립트의 ID입니다. 발화된 키워드 매칭에만 해당됩니다.  
`beginTimestamp`: 일치하는 키워드가 포함된 트랜스크립트의 시작 시간입니다. 발화된 키워드 매칭에만 해당됩니다.

**감정 분석 필드**  
`beginTimestamp`: 일치하는 감정의 롤링 윈도우 시작 시간입니다.  
`endTimestamp`: 일치하는 감정의 롤링 윈도우 종료 시간입니다.

# Amazon Chime SDK 데이터 레이크 생성
<a name="ca-data-lake"></a>

Amazon Chime SDK 통화 분석 데이터 레이크를 사용하면 Amazon Kinesis Data Stream의 기계 학습 기반 인사이트와 모든 메타데이터를 Amazon S3 버킷으로 스트리밍할 수 있습니다. 예를 들어, 데이터 레이크를 사용하여 레코딩 URL에 액세스할 수 있습니다. 데이터 레이크를 생성하려면 Amazon Chime SDK 콘솔에서 또는를 사용하여 프로그래밍 방식으로 AWS CloudFormation 템플릿 세트를 배포합니다 AWS CLI. 데이터 레이크를 사용하면 Amazon Athena의 AWS Glue 데이터 테이블을 참조하여 통화 메타데이터 및 음성 분석 데이터를 쿼리할 수 있습니다.

**Topics**
+ [사전 조건](#data-lake-prereqs)
+ [데이터 레이크 용어 및 개념](#data-lake-terms)
+ [다중 데이터 레이크 생성](#creating-multiple-data-lakes)
+ [데이터 레이크 리전별 가용성](#data-lake-regions)
+ [데이터 레이크 아키텍처](#data-lake-architecture)
+ [데이터 레이크 설정](#data-lake-setup)

## 사전 조건
<a name="data-lake-prereqs"></a>

Amazon Chime SDK 레이크를 생성하려면 다음 항목이 있어야 합니다.
+ Amazon Kinesis Data Stream. 자세한 내용은 Amazon Kinesis Streams 개발자 안내서**의 [AWS Management Console을 통한 스트림 생성](https://docs.aws.amazon.com/streams/latest/dev/how-do-i-create-a-stream.html)을 참조하세요.
+ S3 버킷. 자세한 내용은 Amazon S3 사용 설명서**의 [첫 번째 Amazon S3 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)을 참조하세요.

## 데이터 레이크 용어 및 개념
<a name="data-lake-terms"></a>

다음 용어와 개념을 사용하여 데이터 레이크의 작동 방식을 이해하세요.

**Amazon Kinesis Data Firehose**  
추출, 전환, 적재(ETL) 서비스로서 스트리밍 데이터를 안정적으로 캡처, 변환하여 데이터 레이크, 데이터 스토어, 분석 서비스로 전달합니다. 자세한 내용은 Amazon Kinesis Data Firehose란 무엇인가요?(What Is Amazon Kinesis Data Firehose?)를 참조하세요.

**Amazon Athena**  
Amazon Athena는 표준 SQL을 사용하여 Amazon S3의 데이터를 분석할 수 있는 대화형 쿼리 서비스입니다. Athena는 서버리스 서비스이므로 관리할 인프라가 없으며 실행한 쿼리에 대해서만 비용을 지불하면 됩니다. Athena를 사용하려면 Amazon S3의 데이터를 가리키고 스키마를 정의한 다음 표준 SQL 쿼리를 사용하세요. 또한 작업 그룹을 사용하여 사용자를 그룹화하고 쿼리를 실행할 때 액세스할 수 있는 리소스를 제어할 수도 있습니다. 작업 그룹을 사용하면 다양한 사용자 및 워크로드 그룹에서 쿼리 동시성을 관리하고 쿼리 실행의 우선순위를 지정할 수 있습니다.

**Glue Data 카탈로그**  
Amazon Athena에서 테이블과 데이터베이스에는 기본 소스 데이터의 스키마를 자세히 설명하는 메타데이터가 포함되어 있습니다. 각 데이터 세트에 대한 테이블이 Athena에 반드시 있어야 합니다. 테이블의 메타데이터는 Athena에게 Amazon S3 버킷의 위치를 알려줍니다. 또한 열 이름, 데이터 유형, 테이블 이름과 같은 데이터 구조를 지정합니다. 데이터베이스에는 데이터 세트의 메타데이터와 스키마 정보만 보관됩니다.

## 다중 데이터 레이크 생성
<a name="creating-multiple-data-lakes"></a>

고유한 Glue 데이터베이스 이름을 제공하여 통화 인사이트를 저장할 위치를 지정함으로써 여러 데이터 레이크를 생성할 수 있습니다. 특정 AWS 계정의 경우 각각 해당 데이터 레이크가 있는 여러 통화 분석 구성이 있을 수 있습니다. 즉, 보존 정책 사용자 지정 및 데이터 저장 방식에 대한 액세스 정책과 같은 특정 사용 사례에 데이터 분리를 적용할 수 있습니다. 인사이트, 기록, 메타데이터에 대한 액세스에 다양한 보안 정책이 적용될 수 있습니다.

## 데이터 레이크 리전별 가용성
<a name="data-lake-regions"></a>

Amazon Chime SDK 데이터 레이크는 다음 리전에서 사용할 수 있습니다.


| 리전 | Glue 테이블 | Quick | 
| --- | --- | --- | 
| us-east-1 | 사용 가능 | Available | 
| us-west-2 | 사용 가능 | Available | 
| eu-central-1 | 사용 가능 | Available | 

## 데이터 레이크 아키텍처
<a name="data-lake-architecture"></a>

다음 다이어그램은 데이터 레이크 아키텍처를 보여줍니다. 그림의 숫자는 아래 번호가 매겨진 텍스트와 일치합니다.

![\[프로그램은 데이터 레이크를 통과합니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/call-analytics-data-lake-architecture.png)


다이어그램에서 AWS 콘솔을 사용하여 미디어 인사이트 파이프라인 구성 설정 워크플로에서 CloudFormation 템플릿을 배포하면 다음 데이터가 Amazon S3 버킷으로 흐릅니다.

1. Amazon Chime SDK 통화 분석은 고객의 Kinesis Data Stream으로 실시간 데이터를 스트리밍하기 시작합니다.

1. Amazon Kinesis Firehose는 누적된 데이터가 128MB 또는 60초 경과 중 빠른 시점이 될 때까지 이 실시간 데이터를 버퍼링합니다. 그런 다음 Firehose는 Glue 데이터 카탈로그에서 `amazon_chime_sdk_call_analytics_firehose_schema`를 사용하여 데이터를 압축하고 JSON 레코드를 Parquet 파일로 변환합니다.

1. Parquet 파일은 Amazon S3 버킷에 파티셔닝된 형식으로 저장됩니다.

1. 실시간 데이터 외에도 통화 후 Amazon Transcribe Call Analytics 요약 .wav 파일(구성에 지정된 경우 편집되거나 편집되지 않음) 및 통화 레코딩 .wav 파일도 Amazon S3 버킷으로 전송됩니다.

1. Amazon Athena와 표준 SQL을 사용하여 Amazon S3 버킷에서 데이터를 쿼리할 수 있습니다.

1. 또한 CloudFormation 템플릿은 Athena를 통해 이 통화 후 요약 데이터를 쿼리할 수 있는 Glue 데이터 카탈로그를 생성합니다.

1. Amazon S3 버킷의 모든 데이터는 Quick을 사용하여 시각화할 수도 있습니다. QuickSight는 Amazon Athena를 사용하여 Amazon S3 버킷과의 연결을 구축합니다.

Amazon Athena 테이블은 다음 기능을 사용하여 쿼리 성능을 최적화합니다.

**데이터 파티셔닝**  
파티셔닝은 테이블을 여러 부분으로 나누고 날짜, 국가, 리전과 같은 열 값을 기준으로 관련 데이터를 함께 유지합니다. 파티션은 가상 열 역할을 합니다. 이 경우 CloudFormation 템플릿은 테이블 생성 시 파티션을 정의하므로 쿼리당 스캔되는 데이터의 양을 줄이고 성능을 개선하는 데 도움이 됩니다. 파티션별로 필터링하여 쿼리가 검사하는 데이터의 양을 제한할 수도 있습니다. Parquet 데이터를 읽는 데 Athena를 사용하는 방법에 대한 자세한 내용은 Amazon Athena 사용 설명서**의 [Athena에서 데이터 분할](https://docs.aws.amazon.com/athena/latest/ug/partitions.html)을 참조하세요.  
이 예제에서는 날짜가 2023년 1월 1일인 파티션 구조를 보여줍니다.  

1. 

   ```
   s3://example-bucket/amazon_chime_sdk_data_lake
                               /serviceType=CallAnalytics/detailType={DETAIL_TYPE}/year=2023
                               /month=01/day=01/example-file.parquet
   ```

1. `DETAIL_TYPE`이 다음 중 하나여야 합니다.

   1. `CallAnalyticsMetadata`

   1. `TranscribeCallAnalytics`

   1. `TranscribeCallAnalyticsCategoryEvents`

   1. `Transcribe`

   1. `Recording`

   1. `VoiceAnalyticsStatus`

   1. `SpeakerSearchStatus`

   1. `VoiceToneAnalysisStatus`

**열 기반 데이터 저장소 생성 최적화**  
Apache Parquet은 열 단위 압축, 데이터 유형에 따른 압축, 조건부 푸시다운을 사용하여 데이터를 저장합니다. 압축률이 높거나 데이터 블록을 건너뛰면 Amazon S3 버킷에서 읽는 바이트 수가 줄어듭니다. 따라서 쿼리 성능이 향상되고 비용이 절감됩니다. 이러한 최적화를 위해 Amazon Kinesis Data Firehose에서 JSON에서 parquet 데이터로의 데이터 변환이 활성화되어 있습니다.

**파티션 프로젝션**  
이 Athena 기능은 날짜별 파티션을 자동으로 생성하여 날짜 기반 쿼리 성능을 향상시킵니다.

## 데이터 레이크 설정
<a name="data-lake-setup"></a>

Amazon Chime SDK 콘솔을 사용하여 다음 단계를 완료하세요.

1. Amazon Chime SDK 콘솔([ https://console.aws.amazon.com/chime-sdk/home](https://console.aws.amazon.com/chime-sdk/home))을 시작하고 탐색 창의 **통화 분석** 아래에서 **구성**을 선택합니다.

1. 1단계를 완료하고 **다음**을 선택한 후 2단계 페이지에서 **음성 분석** 확인란을 선택합니다.

1. **출력 세부 정보**에서 **기록 분석을 수행하기 위한 데이터 웨어하우스** 확인란을 선택한 다음 **CloudFormation 스택 배포** 링크를 선택합니다.

   시스템이 CloudFormation 콘솔의 **빠른 스택 생성** 페이지로 이동합니다.

1. 스택 이름을 입력한 후 다음 파라미터를 입력합니다.

   1. `DataLakeType` - **통화 분석 데이터 레이크 생성**을 선택합니다.

   1. `KinesisDataStreamName` - 스트림을 선택합니다. 통화 분석 스트리밍에 사용되는 스트림이어야 합니다.

   1. `S3BucketURI` - Amazon S3 버킷을 선택합니다. URI에는 접두사 `s3://bucket-name`가 있어야 합니다.

   1. `GlueDatabaseName` - 고유한 AWS Glue 데이터베이스 이름을 선택합니다. AWS 계정에 있는 기존 데이터베이스는 재사용할 수 없습니다.

1. 승인 체크박스를 선택한 다음 **데이터 레이크 생성**을 선택합니다. 시스템에서 레이크를 생성하는 데 10분 정도 걸릴 수 있습니다.

### 를 사용한 데이터 레이크 설정 AWS CLI
<a name="data-lake-setup-using-cli"></a>

 AWS CLI 를 사용하여 CloudFormation의 생성 스택을 호출할 권한이 있는 역할을 생성합니다. 아래 절차에 따라 IAM 역할을 생성하고 설정하세요. 자세한 내용을 알아보려면AWS CloudFormation 사용 설명서**의 [스택 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html)을 참조하세요.

1. *AmazonChimeSdkCallAnalytics-Datalake-Provisioning-Role*이라는 역할을 생성하고 CloudFormation이 역할을 맡도록 허용하는 역할에 신뢰 정책을 연결합니다.

   1. 다음 템플릿을 사용하여 IAM 신뢰 정책을 생성하고 파일을.json 형식으로 저장합니다.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "cloudformation.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole",
                  "Condition": {}
              }
          ]
      }
      ```

------

   1. **aws iam create-role** 명령을 실행하고 신뢰 정책을 파라미터로 전달합니다.

      ```
                                          aws iam create-role \
          --role-name AmazonChimeSdkCallAnalytics-Datalake-Provisioning-Role
          --assume-role-policy-document file://role-trust-policy.json
      ```

   1. 응답에서 반환된 *role arn*을 기록해 둡니다. 다음 단계에서 *role arn*이 필요합니다.

1. CloudFormation 스택을 생성할 수 있는 권한이 있는 정책을 생성합니다.

   1. 다음 템플릿을 사용하여 IAM 정책을 생성하고 파일을 .json 형식으로 저장합니다. 이 파일은 create-policy를 호출할 때 필요합니다.

------
#### [ JSON ]

****  

      ```
      {  
          "Version":"2012-10-17",		 	 	   
          "Statement": [  
              {  
                  "Sid": "DeployCloudFormationStack",  
                  "Effect": "Allow",  
                  "Action": [  
                      "cloudformation:CreateStack"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. **aws iam create-policy**를 실행하고 스택 정책 생성을 파라미터로 전달합니다.

      ```
                                      aws iam create-policy --policy-name testCreateStackPolicy 
      --policy-document file://create-cloudformation-stack-policy.json
      ```

   1. 응답에서 반환된 *role arn*을 기록해 둡니다. 다음 단계에서 *role arn*이 필요합니다.

1. **aws iam attach-role-policy** 정책을 역할에 연결합니다.

   ```
                               aws iam attach-role-policy --role-name {Role name created above}
   --policy-arn {Policy ARN created above}
   ```

1. CloudFormation 스택을 생성하고 필수 파라미터 **aws cloudformation create-stack**을 입력합니다.

   ParameterValue를 사용하여 각 ParameterKey에 대한 파라미터 값을 제공합니다.

   ```
                               aws cloudformation create-stack  --capabilities CAPABILITY_NAMED_IAM 
   --stack-name testDeploymentStack 
   --template-url https://chime-sdk-assets.s3.amazonaws.com/public_templates/AmazonChimeSDKDataLake.yaml 
   --parameters  ParameterKey=S3BucketURI,ParameterValue={S3 URI}
   ParameterKey=DataLakeType,ParameterValue="Create call analytics datalake" 
   ParameterKey=KinesisDataStreamName,ParameterValue={Name of Kinesis Data Stream}
   --role-arn {Role ARN created above}
   ```

#### 데이터 레이크 설정으로 생성된 리소스
<a name="cf-resources"></a>

다음 표에는 데이터 레이크를 생성할 때 생성되는 리소스가 나열되어 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/ca-data-lake.html)

# Amazon Chime SDK에 대한 빠른 대시보드 구성
<a name="quicksight-setup-setup"></a>

데이터 레이크를 설정한 후에는 데이터를 시각화하는 사전 정의된 지표로 빠른 대시보드를 구성할 수 있습니다. 다음과 같은 대시보드를 사용할 수 있습니다.
+ **Transcribe 통화 분석 \$1 음성 분석** 지표에는 턴바이턴 대화 기록, 감지된 문제, 결과, 개체 감지, 음성 프로필 ID 일치에 대한 요약 및 세부 정보가 포함됩니다.
+ **Transcribe \$1 음성 분석**. 지표에는 턴바이턴 대화 내용, 어휘 검색, 음성 톤, 음성 프로필 ID 일치에 대한 요약 및 세부 정보가 포함됩니다.

다음 주제에서는 Quick 계정이 아직 없는 경우 Quick 계정을 설정하는 방법과 대시보드를 구성하는 방법을 설명합니다.

**Topics**
+ [QuickSight 계정 만들기](#create-quicksight-account)
+ [QuickSight 계정 설정하기](#configure-qs-acct)
+ [QuickSight 대시보드 생성](#create-qs-dashboard)

## QuickSight 계정 만들기
<a name="create-quicksight-account"></a>

이 섹션의 단계에서는 빠른 계정을 생성하는 방법을 설명합니다. 계정이 이미 있는 경우 [QuickSight 대시보드 생성](#create-qs-dashboard)로 건너뛸 수 있습니다.

다음과 같은 방법으로 QuickSight 계정을 만들 수 있습니다.
+ Amazon CloudFormation 템플릿을 사용합니다.
+ Amazon Chime SDK 콘솔을 사용합니다.

### 사전 조건
<a name="qs-account-prereqs"></a>

시작하기 전에 다음 정보를 수집합니다.
+ 통화 분석 Amazon S3 버킷의 이름.
+ 알림 이메일 주소. 시스템이 QuickSight 알림을 이 주소로 전송합니다.

### CloudFormation 템플릿을 사용하여 계정 생성
<a name="account-by-cft"></a>

다음 단계에서는 Amazon CloudFormation 템플릿을 배포하여 Quick 계정을 생성하는 방법을 설명합니다. 이 프로세스를 통해서는 엔터프라이즈 계정만 구독할 수 있습니다. 요금에 대한 자세한 내용은 [빠른 요금을](https://aws.amazon.com/quicksight/pricing/) 참조하세요.

**템플릿을 배포하려면**

1.  AWS 콘솔을 시작하고 AWS 계정에 로그인합니다.

1. 브라우저의 주소 표시줄에 다음 URL을 붙여넣습니다. 리전을 표시된 대로 입력해야 합니다.

   `https://region.console.aws.amazon.com/cloudformation/home?region=region#/stacks/quickcreate?templateURL=https://chime-sdk-assets.s3.amazonaws.com/public_templates/AmazonChimeSDKQuickSightSubscription.yaml`.

1. **빠른 스택 생성** 페이지에서 다음을 입력합니다.

   1. **스택 이름**에 계정 이름을 입력합니다.

   1. **QuickSightNotificationEmail**에 앞서 수집한 이메일 주소를 입력합니다.

   1. **QuickSightSubscriptionForDataVisualization**에서 **New AWS QuickSight 계정 생성을** 선택합니다.

   1. **S3BucketName**에 Amazon S3 버킷의 이름을 입력합니다.

   1. **AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다.** 확인란을 선택합니다.

1. **스택 생성**을 선택합니다.

   시스템에서 스택을 생성하는 데 약 10분이 소요됩니다.

1. 빌드가 완료되면 **빠른으로 이동을** 선택하고 이메일 주소를 입력하여 계정에 로그인합니다.

### 콘솔을 사용하여 계정 생성
<a name="account-by-console"></a>

다음 단계에서는 Amazon Chime SDK 콘솔을 사용하여 Quick 계정을 생성하는 방법을 설명합니다. 엔터프라이즈 또는 엔터프라이즈 \$1 Q 계정을 사용해야 합니다.

**콘솔을 사용하려면**

1. [ https://console.aws.amazon.com/chime-sdk/home](https://console.aws.amazon.com/chime-sdk/home)에서 Amazon Chime SDK 콘솔을 시작하고 **QuickSight**를 검색한 다음 검색 결과에서 **QuickSight**를 선택합니다.  
![\[Quick에 연결되는 검색 결과입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/quicksightsetup-1.png)

1. **QuickSight 가입**을 선택합니다.

1. **엔터프라이즈** 또는 **엔터프라이즈 \$1 Q**를 선택한 다음 **계속**을 선택합니다.

1. 이름, 성, 전화번호, 앞서 수집한 이메일 주소를 입력한 다음 **계속**을 선택합니다.

1. 다음을 따릅니다.

   1. **인증 방법**에서 옵션을 선택합니다.
**참고**  
페더레이션 사용자 옵션을 선택하는 경우 올바른 IAM 권한이 필요합니다. 자세한 내용은 [ 빠른 사용 설명서의 빠른 구독 가입](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html)을 참조하세요. ** 

   1. **QuickSight 리전**에서 리전을 선택합니다.

   1. **계정 정보**에서 계정 이름과 앞서 수집한 이메일 주소를 입력합니다.

   1. **AWS 서비스에 대한 QuickSight 액세스**에서 기본 역할을 사용하거나 **기존 역할 사용**을 선택하고 목록에서 역할을 선택합니다.

   1. (선택 사항) 필요에 따라 **이러한 리소스에 대한 액세스 및 자동 검색 허용**에서 추가 리소스를 선택합니다.

   1. 완료되면 **마침**을 선택합니다.

   1. 빌드가 완료되면 **빠른으로 이동을** 선택하고 이메일 주소를 입력하여 계정에 로그인합니다.

## QuickSight 계정 설정하기
<a name="configure-qs-acct"></a>

QuickSight 계정에 로그인한 후 보안을 구성하고 설정 프로세스에서 만든 그룹에 자신을 추가해야 합니다.

**보안 키를 구성하려면**

1. 오른쪽 상단의 프로필 아이콘을 선택한 다음 나타나는 메뉴에서 **QuickSight 관리**를 선택합니다.  
![\[QuickSight 관리 명령이 포함된 메뉴입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/quicksightsetup-1-a.png)

1. 탐색 창에서**보안 및 권한**을 선택합니다.

1. ** AWS 서비스에 대한 QuickSight 액세스**에서 **관리를** 선택하고 다음 서비스가 선택되어 있는지 확인합니다.
   + Amazon Redshift
   + Amazon RDS
   + Amazon S3
   + Amazon Athena
   +  IAM

1. **Amazon S3 버킷 선택** 링크를 선택합니다.

1. Amazon S3 버킷 옆의 확인란을 선택한 다음 **Athena Workgroup에 대한 쓰기 권한** 열에서 오른쪽에 있는 확인란을 선택합니다.

1. **마침**을 클릭합니다.

1. **저장**을 선택합니다.

**그룹에 자신을 추가하려면**

1. 탐색 창에서 **그룹 관리**를 선택한 다음 이름에 **Admins**가 포함된 그룹을 선택합니다. 예: *S3BucketName*–**Admins**.

1. **사용자 추가**를 선택한 다음 나타나는 상자에 이메일 별칭을 입력합니다.

   이름은 **Admin – ***내-별칭* 형식으로 표시됩니다.

1. **추가**를 선택합니다.

## QuickSight 대시보드 생성
<a name="create-qs-dashboard"></a>

데이터 레이크를 만든 후 데이터를 시각화하는 QuickSight 대시보드를 만들 수 있습니다. Amazon CloudFormation 템플릿 또는 Amazon Chime SDK 콘솔을 사용하여 대시보드를 생성할 수 있습니다. 다음 단계에서는 두 가지 방법을 모두 설명합니다.

**템플릿을 사용하려면**

1. Amazon CloudFormation 콘솔을 시작합니다.

1. 브라우저의 주소 표시줄에 다음 링크를 붙여넣습니다. `https://region.console.aws.amazon.com/cloudformation/home?region=region#/stacks/quickcreate?templateURL=https://chime-sdk-assets.s3.amazonaws.com/public_templates/AmazonChimeSDKQuickSightDashboards.yaml` 

1. **빠른 스택 생성** 페이지의 **스택 이름** 아래에 계정 이름을 입력합니다.

1. **ActiveQuickSightAccount**에서 **True**를 선택합니다.

1. **QuicksightDashboardSelection**에서 **Call Analytics – Transcribe Call Analytics and Voice Analytics dashboard** 또는 **Call Analytics – Transcribe and Voice Analytics dashboard**를 선택합니다.

1. **Amazon S3BucketName**에서 Amazon S3 버킷의 URI를 입력합니다.

1. **GlueDatabaseName**에서 QuickSight 대시보드를 배포하려는 Glue 데이터베이스를 입력합니다.

1. **AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다** 확인란을 선택하고 **스택 생성**을 선택합니다.

**QuickSight 대시보드를 수동으로 구성하려면**

1. QuickSight 계정으로 이동합니다.

1. 화면 맨 위 오른쪽에 있는 프로파일 아이콘을 선택한 다음 **QuickSight 관리**를 선택합니다.  
![\[QuickSight 계정 대화 상자 및 QuickSight 관리 명령\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/quicksightsetup-1-a.png)

1. 탐색 창에서 **그룹 관리**를 선택한 다음 설치 프로세스에서 만든 그룹을 선택합니다.

1. **사용자 추가**를 선택하고 이메일 주소를 입력한 다음 **추가**를 선택합니다.

   시스템에서 페이지를 배포하는 데 10분 정도 걸립니다.

1. Amazon Chime SDK 콘솔을 사용하여 QuickSight 계정에 로그인하고 대시보드를 사용하세요.

# Amazon Chime SDK용 통화 분석 데이터 모델
<a name="ca-data-model"></a>

이 섹션의 정보는 AWS Glue 데이터 카탈로그의 테이블 세트인 Amazon Chime SDK 통화 분석 데이터 모델을 나열하고 설명합니다.

**Topics**
+ [Amazon Chime SDK의 AWS Glue 데이터 카탈로그 테이블 구조 이해](ca-data-model-diagram.md)
+ [Amazon Chime SDK의 AWS Glue 데이터 카탈로그 테이블 이해](glue-tables.md)
+ [Amazon Chime SDK 통화 분석을 위해 데이터 카탈로그에서 AWS Glue 데이터 추출](ca-data-model-queries.md)

# Amazon Chime SDK의 AWS Glue 데이터 카탈로그 테이블 구조 이해
<a name="ca-data-model-diagram"></a>

다음 다이어그램은 Amazon Chime SDK 통화 분석 및 음성 분석 세션을 위해 생성된 AWS Glue 데이터 카탈로그의 테이블 구조를 보여줍니다.

![\[통화 분석 Glue 데이터 카탈로그의 테이블입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/glue-cat-diag-12-03.jpg)


다음 섹션에서는 카탈로그의 테이블과 필드를 나열하고 설명합니다.

# Amazon Chime SDK의 AWS Glue 데이터 카탈로그 테이블 이해
<a name="glue-tables"></a>

다음 표는 Amazon Chime SDK 통화 분석 Glue 데이터 카탈로그의 열, 데이터 유형, 요소를 나열하고 설명합니다.

**Topics**
+ [call\$1analytics\$1metadata](#ca-glue-metadata)
+ [call\$1analytics\$1recording\$1metadata](#ca-glue-analytics-recording)
+ [transcribe\$1call\$1analytics](#ca-glue-transcribe-ca)
+ [transcribe\$1call\$1analytics\$1category\$1events](#ca-glue-transcribe-ca-events)
+ [transcribe\$1call\$1analytics\$1post\$1call](#ca-glue-transcribe)
+ [transcribe](#ca-glue-transcribe)
+ [voice\$1analytics\$1status](#ca-glue-va-status)
+ [speaker\$1search\$1status](#ca-glue-speaker-status)
+ [voice\$1tone\$1analysis\$1status](#ca-glue-tone-status)

## call\$1analytics\$1metadata
<a name="ca-glue-metadata"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

## call\$1analytics\$1recording\$1metadata
<a name="ca-glue-analytics-recording"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

## transcribe\$1call\$1analytics
<a name="ca-glue-transcribe-ca"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

## transcribe\$1call\$1analytics\$1category\$1events
<a name="ca-glue-transcribe-ca-events"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

## transcribe\$1call\$1analytics\$1post\$1call
<a name="ca-glue-transcribe"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

## transcribe
<a name="ca-glue-transcribe"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

## voice\$1analytics\$1status
<a name="ca-glue-va-status"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

## speaker\$1search\$1status
<a name="ca-glue-speaker-status"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

## voice\$1tone\$1analysis\$1status
<a name="ca-glue-tone-status"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/glue-tables.html)

# Amazon Chime SDK 통화 분석을 위해 데이터 카탈로그에서 AWS Glue 데이터 추출
<a name="ca-data-model-queries"></a>

이 샘플 쿼리를 사용하여 Amazon Chime SDK 통화 분석 Glue 데이터 카탈로그에서 데이터를 추출하고 구성할 수 있습니다.

**참고**  
Amazon Athena에 연결하고 Glue 데이터 카탈로그를 쿼리하는 방법에 대한 자세한 내용은 [ODBC로 Amazon Athena에 연결](https://docs.aws.amazon.com/athena/latest/ug/connect-with-odbc.html)을 참조하세요.

필요에 따라 각 섹션을 열어보세요.

## call\$1analytics\$1metadata 테이블의 메타데이터(STRING 데이터 유형)에서 값 추출
<a name="qry-insights-metadata"></a>

`call_analytics_metadata`에는 JSON 문자열 형식의 `metadata` 필드가 있습니다. 이 문자열의 요소를 쿼리하려면 Athena의 [json\$1extract\$1scalar 함수](https://docs.aws.amazon.com/athena/latest/ug/extracting-data-from-JSON.html)를 사용하세요.

```
SELECT
    json_extract_scalar(metadata,'$.voiceConnectorId') AS "VoiceConnector ID",
    json_extract_scalar(metadata,'$.fromNumber') AS "From Number",
    json_extract_scalar(metadata,'$.toNumber') AS "To Number",
    json_extract_scalar(metadata,'$.callId') AS "Call ID",
    json_extract_scalar(metadata,'$.direction') AS Direction,
    json_extract_scalar(metadata,'$.transactionId') AS "Transaction ID"
FROM 
    "GlueDatabaseName"."call_analytics_metadata"
```

## call\$1analytics\$1metadata 테이블에서 SIPRECMetadata 업데이트 쿼리
<a name="qry-insights-siprec-metadata"></a>

`call_analytics_metadata` 필드에는 JSON 문자열 형식의 메타데이터 필드가 있습니다. `metadata`에는 `oneTimeMetadata`라는 또 다른 중첩된 객체가 있습니다. 이 객체에는 원본 XML 및 변환된 JSON 형식의 SIPRec 메타데이터가 포함되어 있습니다. 이 문자열의 요소를 쿼리하려면 Athena의 `json_extract_scalar` 함수를 사용하세요.

```
SELECT
    json_extract_scalar(metadata,'$.voiceConnectorId') AS "VoiceConnector ID",
    json_extract_scalar(metadata,'$.fromNumber') AS "From Number",
    json_extract_scalar(metadata,'$.toNumber') AS "To Number",
    json_extract_scalar(metadata,'$.callId') AS "Call ID",
    json_extract_scalar(metadata,'$.direction') AS Direction,
    json_extract_scalar(metadata,'$.transactionId') AS "Transaction ID",
    json_extract_scalar(json_extract_scalar(metadata,'$.oneTimeMetadata'),'$.siprecMetadata') AS "siprec Metadata XML",
    json_extract_scalar(json_extract_scalar(metadata,'$.oneTimeMetadata'),'$.siprecMetadataJson') AS "Siprec Metadata JSON",
    json_extract_scalar(json_extract_scalar(metadata,'$.oneTimeMetadata'),'$.inviteHeaders') AS "Invite Headers"
FROM 
    "GlueDatabaseName"."call_analytics_metadata"
WHERE 
    callevent-type = "update";
```

## call\$1analytics\$1recording\$1metadata 테이블의 메타데이터(문자열 데이터 유형)에서 값 추출
<a name="qry-recording-metadata"></a>

`call_analytics_recording_metadata`에는 JSON 문자열 형식의 메타데이터 필드가 있습니다. 이 문자열의 요소를 쿼리하려면 Athena의 [json\$1extract\$1scalar 함수](https://docs.aws.amazon.com/athena/latest/ug/extracting-data-from-JSON.html)를 사용하세요.

```
SELECT
    json_extract_scalar(metadata,'$.voiceConnectorId') AS "VoiceConnector ID",
    json_extract_scalar(metadata,'$.fromNumber') AS "From Number",
    json_extract_scalar(metadata,'$.toNumber') AS "To Number",
    json_extract_scalar(metadata,'$.callId') AS "Call ID",
    json_extract_scalar(metadata,'$.direction') AS Direction,
    json_extract_scalar(metadata,'$.transactionId') AS "Transaction ID"
FROM 
    "GlueDatabaseName"."call_analytics_recording_metadata"
WHERE 
    detail-subtype = "Recording"
```

## voice\$1analytics\$1status 테이블의 세부 정보(구조체 데이터 유형)에서 값 추출
<a name="qry-va-status"></a>

`voice_analytics_status`에는 `struct` 데이터 유형에 세부 정보 필드가 있습니다. 다음 예에서는 `struct` 데이터 유형 필드를 쿼리하는 방법을 보여줍니다.

```
SELECT
    detail.transactionId AS "Transaction ID",
    detail.voiceConnectorId AS "VoiceConnector ID",
    detail.siprecmetadata AS "Siprec Metadata",
    detail.inviteheaders AS "Invite Headers",
    detail.streamStartTime AS "Stream Start Time"
FROM 
    "GlueDatabaseName"."voice_analytics_status"
```

## voice\$1analytics\$1status 및 call\$1analytics\$1metadata tables 조인
<a name="qry-join-va-meta"></a>

다음 예제 쿼리는`call_analytics_metadata`와 `voice_analytics_status`를 조인합니다.

```
SELECT
    a.detail.transactionId AS "Transaction ID",
    a.detail.voiceConnectorId AS "VoiceConnector ID",
    a.detail.siprecmetadata AS "Siprec Metadata",
    a.detail.inviteheaders AS "Invite Headers",
    a.detail.streamStartTime AS "Stream Start Time"
    json_extract_scalar(b.metadata,'$.fromNumber') AS "From Number",
    json_extract_scalar(b.metadata,'$.toNumber') AS "To Number",
    json_extract_scalar(b.metadata,'$.callId') AS "Call ID",
    json_extract_scalar(b.metadata,'$.direction') AS Direction
FROM 
    "GlueDatabaseName"."voice_analytics_status" a
INNER JOIN 
    "GlueDatabaseName"."call_analytics_metadata" b
ON a.detail.transactionId = json_extract_scalar(b.metadata,'$.transactionId')
```

## transcribe\$1call\$1analytics\$1post\$1call 테이블에서 대화 내용 추출하기
<a name="qry-transcribe-ca-post-call"></a>

transcribe\$1call\$1analytics\$1post\$1call에는 중첩된 배열이 있는 구조체 형식의 트랜스크립트 필드가 있습니다. 다음 쿼리를 사용하여 배열의 중첩을 해제하세요.

```
SELECT 
    jobstatus,
    languagecode,
    IF(CARDINALITY(m.transcript)=0 OR CARDINALITY(m.transcript) IS NULL, NULL, e.transcript.id) AS utteranceId,
    IF(CARDINALITY(m.transcript)=0 OR CARDINALITY(m.transcript) IS NULL, NULL, e.transcript.content) AS transcript,
    accountid,
    channel,
    sessionid,
    contentmetadata.output AS "Redaction"
FROM 
    "GlueDatabaseName"."transcribe_call_analytics_post_call" m
CROSS JOIN UNNEST
    (IF(CARDINALITY(m.transcript)=0, ARRAY[NULL], transcript)) AS e(transcript)
```

## transcribe\$1call\$1analytics\$1post\$1call 및 call\$1analytics\$1metadata 테이블 조인
<a name="qry-va-status"></a>

다음 쿼리는 transcribe\$1call\$1analytics\$1post\$1call 및 call\$1analytics\$1metadata 를 조인합니다.

```
WITH metadata AS(
  SELECT 
    from_iso8601_timestamp(time) AS "Timestamp",
    date_parse(date_format(from_iso8601_timestamp(time), '%m/%d/%Y %H:%i:%s') , '%m/%d/%Y %H:%i:%s') AS "DateTime",
    date_parse(date_format(from_iso8601_timestamp(time) , '%m/%d/%Y') , '%m/%d/%Y') AS "Date",
    date_format(from_iso8601_timestamp(time) , '%H:%i:%s')  AS "Time",
    mediainsightspipelineid,
    json_extract_scalar(metadata,'$.toNumber') AS "To Number",
    json_extract_scalar(metadata,'$.voiceConnectorId') AS "VoiceConnector ID",
    json_extract_scalar(metadata,'$.fromNumber') AS "From Number",
    json_extract_scalar(metadata,'$.callId') AS "Call ID",
    json_extract_scalar(metadata,'$.direction') AS Direction,
    json_extract_scalar(metadata,'$.transactionId') AS "Transaction ID",
    REGEXP_REPLACE(REGEXP_EXTRACT(json_extract_scalar(metadata,'$.oneTimeMetadata.s3RecordingUrl'), '[^/]+(?=\.[^.]+$)'), '\.wav$', '') AS "SessionID"
  FROM 
    "GlueDatabaseName"."call_analytics_metadata"
),
transcript_events AS(
  SELECT 
    jobstatus,
    languagecode,
    IF(CARDINALITY(m.transcript)=0 OR CARDINALITY(m.transcript) IS NULL, NULL, e.transcript.id) AS utteranceId,
    IF(CARDINALITY(m.transcript)=0 OR CARDINALITY(m.transcript) IS NULL, NULL, e.transcript.content) AS transcript,
    accountid,
    channel,
    sessionid,
    contentmetadata.output AS "Redaction"
  FROM 
    "GlueDatabaseName"."transcribe_call_analytics_post_call" m
  CROSS JOIN UNNEST
    (IF(CARDINALITY(m.transcript)=0, ARRAY[NULL], transcript)) AS e(transcript)
)
SELECT 
    jobstatus,
    languagecode,
    a.utteranceId,
    transcript,
    accountid,
    channel,
    a.sessionid,
    "Redaction"
    "Timestamp",
    "DateTime",
    "Date",
    "Time",
    mediainsightspipelineid,
    "To Number",
    "VoiceConnector ID",
    "From Number",
    "Call ID",
    Direction,
    "Transaction ID"
FROM 
    "GlueDatabaseName"."transcribe_call_analytics_post_call" a
LEFT JOIN 
    metadata b
ON 
    a.sessionid = b.SessionID
```

## 음성 향상 통화 레코딩을 위한 미디어 개체 URL 쿼리
<a name="qry-voice-enhancement-call-recording"></a>

다음 예제 쿼리는 `Voice enhancement call recording` URL을 조인합니다.

```
SELECT 
    json_extract_scalar(metadata,'$.voiceConnectorId') AS "VoiceConnector ID",
    json_extract_scalar(metadata,'$.fromNumber') AS "From Number",
    json_extract_scalar(metadata,'$.toNumber') AS "To Number",
    json_extract_scalar(metadata,'$.callId') AS "Call ID",
    json_extract_scalar(metadata,'$.direction') AS Direction,
    json_extract_scalar(metadata,'$.transactionId') AS "Transaction ID",
    s3MediaObjectConsoleUrl
FROM
    {GlueDatabaseName}."call_analytics_recording_metadata"
WHERE
    detail-subtype = "VoiceEnhancement"
```

# Amazon Chime SDK 음성 분석 사용
<a name="voice-analytics"></a>

Amazon Chime SDK 음성 분석 기능을 사용하면 화자 검색 및 음성 톤 분석을 구현할 수 있습니다. 화자 검색을 사용하여 새 발신자를 식별 및 등록하고, 반복 발신자를 식별하여 해당 식별에 신뢰도 점수를 할당합니다. 음성 톤 분석을 사용하여 발신자의 감정을`neutral`, `positive`, 또는 `negative`로 예측합니다.

음성 분석은 Amazon Chime SDK 호출 분석 세션의 선택적 구성 요소로 실행합니다.

음성 분석은 미디어 인사이트 파이프라인 또는 Amazon Chime SDK 음성 커넥터 호출과 함께 작동합니다. 작업을 보다 세밀하게 제어하고 정보를 얻으려면 [ 미디어 파이프라인 SDK](media-pipelines.md)를 사용하고 미디어 인사이트 파이프라인에서 작업을 호출하는 것이 좋습니다.

이전 버전과의 호환성을 보장하기 위해 음성 커넥터를 사용할 수 있지만, 새로운 기능으로 미디어 인사이트 파이프라인 API만 업데이트합니다.

음성 커넥터 생성 및 사용에 대한 자세한 내용은 Amazon Chime SDK 관리자 안내서**의 [Amazon Chime SDK 음성 커넥터 관리](https://docs.aws.amazon.com/chime-sdk/latest/ag/voice-connectors.html)를 참조하세요.

음성 분석은 다음도 제공합니다.
+ 비동기 작업 처리. 서로 독립적으로 실행되는 작업.
+ 인사이트 처리 시기 제어.

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html) API를 직접 호출하여 음성 분석을 시작할 수 있습니다.

다음 항목에서는 음성 분석 사용 방법을 설명합니다.

**Topics**
+ [Amazon Chime SDK의 음성 분석 아키텍처 이해](va-architecture.md)
+ [Amazon Chime SDK의 화자 검색 워크플로 이해](va-data-flow.md)
+ [Amazon Chime SDK의 샘플 음성 톤 분석 워크플로](va-tone-flow.md)
+ [Amazon Chime SDK의 작업 결과 폴링](va-task-result-poll.md)
+ [Amazon Chime SDK의 알림 이해](va-notification-targets.md)
+ [Amazon Chime SDK의 데이터 스토리지, 옵트아웃, 데이터 보존 정책 이해](va-opt-out.md)
+ [음성 API를 사용하여 Amazon Chime SDK용 음성 분석 실행](va-in-voice-namespace.md)

# Amazon Chime SDK의 음성 분석 아키텍처 이해
<a name="va-architecture"></a>

이 섹션의 주제에서는 각 기능에 대한 데이터 흐름을 포함하여 Amazon Chime SDK 음성 분석 아키텍처에 대한 개요를 제공합니다.

이 다이어그램은 음성 분석을 통한 데이터 흐름 방식을 간략하게 보여 줍니다.

![\[음성 분석을 통한 높은 수준의 데이터 흐름을 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/va-architecture-kvs.png)


다이어그램에서

1. 오디오는 발신자 및 상담원을 위해 Kinesis Video Stream으로 스트리밍됩니다. Kinesis Video Streams 프로듀서 또는 Amazon Chime SDK 음성 커넥터 스트리밍을 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 이 안내서의 [Amazon Chime SDK의 기계 학습 기반 분석을 위한 워크플로 이해](ml-based-analytics.md) 항목과 Amazon Chime SDK 관리자 안내서**의 [ Kinesis로 Amazon Chime SDK 음성 커넥터 미디어 스트리밍](https://docs.aws.amazon.com/chime-sdk/latest/ag/start-kinesis-vc.html)을 참조하세요.

1. 애플리케이션 또는 빌더는 발신자의 동의 후 오디오 스트림에 대해 화자 검색, 음성 톤 분석 또는 두 가지 모두를 트리거합니다.

1. 통화 중 음성 분석은 Amazon SQS(Simple Queue Service), SNS(Simple Notification Service), AWS Lambda, Amazon Kinesis Data Streams 중 하나로 대상에 알림을 보냅니다.

또한 음성 분석은 생성된 데이터를 관리하기 위한 이러한 도구를 제공합니다.

**음성 프로필**  
음성 임베딩, 임베딩의 고유 ID, 만료 날짜의 조합입니다. 음성 프로필은 보안상의 이유와 시간이 지남에 따라 음성이 변하기 때문에 3년 후에 만료됩니다. 음성 프로필을 다시 만들지 않으려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html) API를 직접 호출하세요. 만료 날짜에 대한 자세한 내용은 [Amazon Chime SDK 음성 분석을 위한 데이터 보존 이해](va-data-retention.md) 섹션을 참조하세요.  
음성 임베딩을 등록하거나 등록된 음성 임베딩을 업데이트하려면 통화 종료 후 24시간 이내에 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceProfile.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html) API를 직접 호출해야 합니다.

**음성 프로필 도메인**  
음성 프로필 모음입니다.

# Amazon Chime SDK의 화자 검색 워크플로 이해
<a name="va-data-flow"></a>

이 단원에서는 Amazon Chime SDK 화자 검색 분석을 위한 예제 데이터 및 프로그램 흐름을 보여줍니다.

화자 검색 기능에는 음성 임베딩 생성이 포함되며, 이를 통해 발신자의 음성을 이전에 저장된 음성 데이터와 비교할 수 있습니다. 생체 식별자 및 생체 인식 정보를 디지털 성문 형태로 수집, 사용, 저장 및 보관하려면 서면 동의서를 통한 발신자의 사전 동의가 필요할 수 있습니다. 이러한 동의는 일리노이주, 텍사스주, 워싱턴주의 생체인식법 및 기타 주 개인정보 보호법을 비롯한 다양한 주법에 따라 요구됩니다. 화자 검색 기능을 사용하기 전에 관련 법률 및 기능 사용에 적용되는 [AWS 서비스 약관](https://aws.amazon.com/service-terms/)에 따라 필요한 대로 모든 통지를 제공하고 모든 동의를 얻어야 합니다.

다음 다이어그램은 화자 검색 분석 작업을 통한 데이터 흐름 예를 보여줍니다. 다이어그램 아래에 번호가 매겨진 설명은 프로세스의 각 단계를 설명합니다. 이 다이어그램에서는 이미 `VoiceAnalyticsProcessor`가 있는 통화 분석 구성으로 Amazon Chime SDK 음성 커넥터를 구성했다고 가정합니다. 자세한 내용은 [음성 커넥터 통화 레코딩](record-vc-calls.md) 단원을 참조하십시오.

![\[화자 검색 분석을 통한 데이터 흐름을 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/speaker-search-workflow-2.png)


1. 사용자 또는 시스템 관리자는 음성 임베딩 및 음성 프로필을 저장하기 위한 음성 프로필 도메인을 생성합니다. 음성 프로필 도메인 생성에 대한 자세한 내용은 Amazon Chime SDK** 관리자 안내서의 [음성 프로필 도메인 생성](https://docs.aws.amazon.com/chime-sdk/latest/ag/create-vp-domain.html)을 참조하세요. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceProfileDomain.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceProfileDomain.html) API를 사용할 수도 있습니다.

1. 발신자는 Amazon Chime SDK 음성 커넥터에 할당된 전화번호를 사용하여 전화를 겁니다. 또는 상담원이 음성 커넥터 번호를 사용하여 아웃바운드 전화를 걸 수도 있습니다.

1. Amazon Chime SDK 음성 커넥터 서비스는 트랜잭션 ID를 생성하고 이를 호출과 연결합니다.

1. 애플리케이션이 EventBridge 이벤트를 구독한다고 가정하면 애플리케이션은 미디어 인사이트 파이프라인 구성을 사용하여 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출하고 음성 커넥터 호출을 위한 Kinesis Video Stream ARN을 직접 호출합니다.

   EventBridge 사용에 대한 자세한 내용은 [Amazon Chime SDK의 기계 학습 기반 분석을 위한 워크플로 이해](ml-based-analytics.md) 섹션을 참조하세요.

1. 대화형 음성 응답 시스템과 같은 애플리케이션 또는 상담원은 발신자에게 통화 레코딩 및 음성 분석을 위한 음성 임베딩 사용에 대해 고지하고 참여에 대한 동의를 구합니다.

1. 발신자가 동의를 제공하면 음성 커넥터와 트랜잭션 ID가 있는 경우 애플리케이션이나 상담원이 [음성 SDK](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Voice.html)를 통해 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask.html) API를 직접 호출할 수 있습니다. 또는 트랜잭션 ID 대신 미디어 인사이트 파이프라인 ID가 있는 경우 [미디어 파이프라인 SDK](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Media_Pipelines.html)에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) API를 직접 호출합니다.

   발신자가 동의를 제공하면 애플리케이션 또는 상담원이 `StartSpeakerSearchTask` API를 호출합니다. 음성 커넥터 ID, 트랜잭션 ID 및 음성 프로필 도메인 ID를 API에 전달해야 합니다. 비동기 작업을 식별하기 위해 화자 검색 작업 ID가 반환됩니다.
**참고**  
SDK 중 하나에서 `StartSpeakerSearchTask` API를 호출하기 전에 법률 및 [AWS 서비스 약관](https://aws.amazon.com/service-terms/)에 따라 필요한 대로 필요한 공지를 제공하고 필요한 동의를 얻어야 합니다.

1. 시스템은 10초 분량의 발신자 음성을 누적합니다. 발신자는 최소한 그 시간 동안 통화해야 합니다. 시스템은 침묵을 캡처하거나 분석하지 않습니다.

1. 미디어 인사이트 파이프라인은 해당 도메인의 음성 프로필과 음성을 비교하여 신뢰도가 높은 상위 10개 일치 항목을 나열합니다. 일치하는 항목을 찾지 못하면 음성 커넥터가 음성 프로필을 생성합니다.

1. 미디어 인사이트 파이프라인 서비스는 구성된 알림 대상에 알림 이벤트를 보냅니다.

1. 발신자는 계속 말하고 추가로 10초 동안 비침묵 발화를 제공합니다.

1. 미디어 인사이트 파이프라인은 음성 프로필을 생성하거나 기존 음성 프로필을 업데이트하는 데 사용할 수 있는 등록 음성 임베딩을 생성합니다.

1. 미디어 인사이트 파이프라인은 구성된 `VoiceprintGenerationSuccessful` 알림 대상에 알림을 보냅니다.

1. 애플리케이션에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceProfile.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html) API를 직접 호출하여 프로필을 만들거나 업데이트합니다.

1. 애플리케이션에서 필요에 따라 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetSpeakerSearchTask.html) API를 직접 호출하여 화자 검색 작업의 최신 상태를 가져옵니다.

# Amazon Chime SDK의 샘플 음성 톤 분석 워크플로
<a name="va-tone-flow"></a>

**중요**  
음성 톤 분석에는 언어 및 음조 정보를 기반으로 화자의 감정을 예측하는 작업이 포함됩니다. 개인에게 법적 또는 유사하게 중대한 영향을 미칠 수 있는 개인에 대한 결정을 내리는 경우(예: 고용, 주택, 신용 등급 또는 금융 제안 등과 관련하여)를 포함하여 법률에서 금지하는 방식으로는 감정 분석을 사용해서는 안 됩니다.

음성 톤 분석은 통화 중인 사람들의 목소리를 분석하고 그들의 감정(`positive`, `negative`, 또는 `neutral`)을 예측합니다.

다음 다이어그램은 음성 톤 분석을 위한 워크플로의 예를 보여 줍니다. 이미지 아래의 번호가 매겨진 항목은 프로세스의 각 단계를 설명합니다.

**참고**  
이 다이어그램에서는 이미 `VoiceAnalyticsProcessor`가 있는 통화 분석 구성으로 Amazon Chime SDK 음성 커넥터를 구성했다고 가정합니다. 자세한 내용은 [음성 커넥터 통화 레코딩](record-vc-calls.md) 단원을 참조하십시오.

![\[음성 톤 분석을 통한 데이터 흐름을 보여주는 다이어그램입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/voice-tone-workflow-v2.png)


다이어그램에서

1. 발신자는 Amazon Chime SDK 음성 커넥터에 할당된 전화번호를 사용하여 전화를 겁니다. 또는 상담원이 음성 커넥터 번호를 사용하여 아웃바운드 전화를 걸 수도 있습니다.

1. 음성 커넥터 서비스는 트랜잭션 ID를 생성하여 통화와 연결합니다.

1. 대화형 음성 응답 시스템과 같은 애플리케이션 또는 상담원은 발신자에게 통화 레코딩 및 음성 분석을 위한 음성 임베딩 사용에 대해 고지하고 참여에 대한 동의를 구합니다.

1. 애플리케이션이 EventBridge 이벤트를 구독한다고 가정하면 애플리케이션은 미디어 인사이트 파이프라인 구성을 사용하여 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출하고 음성 커넥터 호출을 위한 Kinesis Video Stream ARN을 직접 호출합니다.

   EventBridge 사용에 대한 자세한 내용은 [Amazon Chime SDK의 기계 학습 기반 분석을 위한 워크플로 이해](ml-based-analytics.md) 섹션을 참조하세요.

1. 발신자가 동의를 제공하면 음성 커넥터와 트랜잭션 ID가 있는 경우 애플리케이션이나 상담원이 [음성 SDK](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Voice.html)를 통해 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask.html) API를 직접 호출할 수 있습니다. 또는 트랜잭션 ID 대신 미디어 인사이트 파이프라인 ID가 있는 경우 [미디어 파이프라인 SDK](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Media_Pipelines.html)에서 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) API를 직접 호출합니다.

   발신자가 동의를 제공하면 애플리케이션 또는 상담원이 `StartSpeakerSearchTask` API를 호출합니다. 음성 커넥터 ID, 트랜잭션 ID 및 음성 프로필 도메인 ID를 API에 전달해야 합니다. 비동기 작업을 식별하기 위해 화자 검색 작업 ID가 반환됩니다.

1. 사용자는 통화 내내 말을 합니다.

1. 상담원은 통화 내내 말을 합니다.

1. 미디어 인사이트 파이프라인은 5초마다 기계 학습 모델을 사용하여 마지막 30초 간의 음성을 분석하고 해당 인터벌, 그리고 `StartVoiceToneAnalysisTask`가 처음 호출된 시점부터 전체 통화에 대한 발신자의 어조를 예측합니다.

1. 미디어 인사이트 파이프라인은 해당 정보가 포함된 알림을 구성된 알림 대상에 보냅니다. 스트림 ARN 및 채널 ID를 기반으로 알림을 식별할 수 있습니다. 자세한 내용은 이 섹션 뒷부분의 [Amazon Chime SDK의 알림 이해](va-notification-targets.md) 항목을 참조하세요.

1. 통화가 종료될 때까지 9단계와 10단계를 반복합니다.

1. 통화가 끝나면 미디어 인사이트 파이프라인은 지난 30초 동안의 현재 평균 톤 예측치에 전체 통화의 평균 톤을 더한 최종 알림 하나를 보냅니다.

1. 애플리케이션에서 필요에 따라 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceToneAnalysisTask.html) API를 직접 호출하여 음성 톤 분석 작업의 최신 상태를 가져옵니다.
**참고**  
`GetVoiceToneAnalysisTask` API는 톤 데이터를 스트리밍하지 않습니다.

**참고**  
[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceToneAnalysisTask.html) API는 음성 톤 데이터를 반환하지 않습니다.

# Amazon Chime SDK의 작업 결과 폴링
<a name="va-task-result-poll"></a>

**중요**  
기본적으로 음성 분석은 7일 동안 결과를 제공하고 나면 데이터가 자동으로 삭제됩니다. 작업 데이터를 더 오래 사용하거나 데이터 보존법을 준수하려면 작업 데이터를 저장해야 합니다. 자세한 내용은 이 안내서 뒷부분의 [Amazon Chime SDK 음성 분석을 위한 데이터 보존 이해](va-data-retention.md) 섹션을 참조하세요.

음성 분석은 각 작업 결과가 최소 한 번 이상 전달되도록 합니다. 하지만 네트워크 문제로 인해 지연이 증가할 수 있습니다. 잠재적인 문제를 해결하거나 동기식 프로세스를 선호하는 경우 [미디어 파이프라인](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Media_Pipelines.html) SDK 또는 [음성 SDK](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Voice.html)에서 다음 API를 사용할 수 있습니다.
+  [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetSpeakerSearchTask.html) 
+  [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetVoiceToneAnalysisTask.html)
**중요**  
`GetVoiceToneAnalysisTask` API는 작업 상태만 반환합니다. 작업 결과는 반환하지 않습니다. 결과를 보려면 Amazon SQS, Amazon SNS 또는 AWS Lambda 알림 대상을 사용합니다.

`GetSpeakerSearchTask` API는 작업 ID, 지연된 메시지 또는 잘못 도착한 메시지에 대한 최신 결과를 동기적으로 가져옵니다. 그러나 알림 대상과 비동기 처리를 사용하는 것이 좋습니다. 이렇게 하면 컴퓨팅 리소스 사용량이 줄어듭니다.

# Amazon Chime SDK의 알림 이해
<a name="va-notification-targets"></a>

음성 분석은 화자 검색 또는 음성 톤 분석 작업이 시작될 때, 실행 중일 때, 완료될 때 자동으로 이벤트를 대상으로 전송합니다. 알림 대상을 사용하여 이러한 이벤트를 수신합니다. 워크플로 또는 애플리케이션에 고가용성이 필요한 경우 여러 알림 대상을 사용하는 것이 좋습니다.

또한 알림 대상에 액세스하는 데 필요한 정책이 포함된 IAM 역할을 사용해야 합니다. 자세한 내용은 [Amazon Chime SDK의 통화 분석 리소스 액세스 역할 사용](call-analytics-resource-access-role.md) 단원을 참조하십시오.

**참고**  
Amazon SQS 및 Amazon SNS의 경우 선입선출 대기열이 지원되지 않습니다. 따라서 메시지가 잘못된 순서로 도착할 수 있습니다. 타임스탬프를 확인하여 필요에 따라 메시지를 정렬하고 Amazon DynamoDB와 같은 데이터 스토어에 메시지를 보관하는 것이 좋습니다. [Amazon Chime SDK의 작업 결과 폴링](va-task-result-poll.md)에 설명된 Get API를 사용하여 최신 결과를 받을 수도 있습니다.

다음 표에는 이벤트와 해당 세부 정보 유형이 나와 있습니다.


| 알림 이벤트 | 세부 정보 유형 | 
| --- | --- | 
| 음성 분석 메타데이터 | `VoiceAnalyticsStatus` | 
| 화자 검색 | `SpeakerSearchStatus` | 
| 음성 톤 분석 | `VoiceToneAnalysisStatus` | 

# Amazon Chime SDK의 알림 대상에 대한 IAM 정책 이해
<a name="va-iam-target-policies"></a>

Amazon SQS, Amazon SNS, AWS Lambda 또는 Amazon KDS 알림 대상에 대한 액세스를 허용하는 호출 분석 구성의 IAM 역할 정책을 사용해야 합니다. 자세한 내용은 이 안내서의 [Amazon Chime SDK의 통화 분석 리소스 액세스 역할 사용](call-analytics-resource-access-role.md) 섹션을 참조하세요.

## 화자 검색 이벤트
<a name="va-speaker-search-events"></a>

화자 검색 이벤트에는 `SpeakerSearchStatus` 세부 유형이 있습니다.

Amazon Chime SDK 음성 커넥터는 다음과 같은 화자 검색 이벤트를 전송합니다.
+ 식별 일치
+ 음성 임베딩 생성

이벤트에는 다음과 같은 상태가 있을 수 있습니다:
+ `IdentificationSuccessful` – 주어진 음성 프로필 도메인에서 높은 신뢰도 점수로 일치하는 음성 프로필 ID를 하나 이상 식별하는 데 성공했습니다.
+ `IdentificationFailure` – 식별을 수행하지 못했습니다. 원인: 발신자가 10초 이상 말을 하지 않았으며, 음질이 좋지 않습니다.
+ `IdentificationNoMatchesFound` – 해당 음성 프로필 도메인에서 신뢰도가 높은 일치 항목을 찾을 수 없습니다. 전화를 건 사람이 처음이거나 목소리가 바뀌었을 수 있습니다.
+ `VoiceprintGenerationSuccessful` – 시스템이 20초 분량의 무음이 아닌 오디오를 사용하여 음성 임베딩을 생성했습니다.
+ `VoiceprintGenerationFailure` – 시스템에서 음성 임베딩을 생성하지 못했습니다. 원인: 발신자가 20초 이상 말을 하지 않았으며, 음질이 좋지 않습니다.

### 식별 일치
<a name="va-id-matches"></a>

특정 `transactionId`로 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask) API를 직접 호출한 후 음성 커넥터 서비스는 10초 동안 무음이 아닌 발화가 지속되면 식별 일치 알림을 반환합니다. 이 서비스는 음성 프로필 ID와 [0, 1] 범위의 신뢰도 점수와 함께 상위 10개의 매칭을 반환합니다. 신뢰도 점수가 높을수록 통화 중인 화자가 음성 프로필 ID와 일치할 가능성이 높아집니다. 기계 학습 모델에서 일치하는 항목이 없는 경우 알림의 `detailStatus` 필드에 `IdentificationNoMatchesFound`가 포함됩니다.

다음 예제는 매칭 성공 알림을 보여줍니다.

```
{    
    "version": "0",
    "id": "12345678-1234-1234-1234-111122223333",
    "detail-type": "SpeakerSearchStatus",
    "service-type": "VoiceAnalytics",
    "source": "aws.chime",
    "account": "111122223333",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "taskId": "uuid",
        "detailStatus": "IdentificationSuccessful",
        "speakerSearchDetails" : {
            "results": [
                {
                    "voiceProfileId": "vp-505e0992-82da-49eb-9d4a-4b34772b96b6",
                    "confidenceScore": "0.94567856",
                },
                {
                    "voiceProfileId": "vp-fba9cbfa-4b8d-4f10-9e41-9dfdd66545ab",
                    "confidenceScore": "0.82783350",
                },
                {
                    "voiceProfileId": "vp-746995fd-16dc-45b9-8965-89569d1cf787",
                    "confidenceScore": "0.77136436",
                }
            ]
        },
        "mediaInsightsPipelineId": "87654321-33ca-4dc6-9cdf-abcde6612345",
        "sourceArn": "arn:aws:chime:us-east-1:111122223333:media-pipeline/87654321-33ca-4dc6-9cdf-abcde6612345",
        "streamArn": "arn:aws:kinesisvideo:us-east-1:111122223333:stream/my-stream/0123456789012",
        "channelId": 0
    }
}
```

### 음성 임베딩 생성
<a name="va-voice-print-generation"></a>

추가로 10초 동안 무음이 아닌 발화가 지속되면 음성 커넥터는 알림 대상에 음성 임베딩 생성 알림을 보냅니다. 음성 프로필에 새 음성 임베딩을 등록하거나 이미 음성 프로필에 있는 성문을 업데이트할 수 있습니다.

다음 예제는 매칭에 성공하면 관련 음성 프로필을 업데이트할 수 있다는 의미의 알림을 보여줍니다.

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-111122223333",
    "detail-type": "SpeakerSearchStatus",
    "service-type": "VoiceAnalytics",
    "source": "aws.chime",
    "account": "111122223333",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "taskId": "guid",
        "detailStatus": "VoiceprintGenerationSuccess",
        "mediaInsightsPipelineId": "87654321-33ca-4dc6-9cdf-abcde6612345",
        "sourceArn": "arn:aws:chime:us-east-1:111122223333:media-pipeline/87654321-33ca-4dc6-9cdf-abcde6612345",
        "streamArn": "arn:aws:kinesisvideo:us-east-1:111122223333:stream/my-stream/0123456789012",
        "channelId": 0
    }
}
```

## 음성 톤 분석 이벤트
<a name="va-tone-status"></a>

음성 톤 분석 이벤트에는 `VoiceToneAnalysisStatus` 세부 유형이 있습니다. 분석 결과 다음과 같은 상태가 반환될 수 있습니다.
+ `VoiceToneAnalysisSuccessful` – 발신자와 상담원의 음성을 긍정, 부정, 중립 등 감정의 확률로 분석하는 데 성공했습니다.
+ `VoiceToneAnalysisFailure` – 톤 분석을 수행하지 못했습니다. 발신자가 10초 동안 말을 하지 않고 전화를 끊거나 오디오 품질이 너무 나빠지면 이런 일이 발생할 수 있습니다.
+ `VoiceToneAnalysisCompleted` – 사용자와 상담원의 음성을 전체 통화에 대한 감정 확률로 분석하는 데 성공했습니다. 음성 톤 분석이 완료될 때 전송되는 마지막 이벤트입니다.

다음 예제에서는 일반적인 음성 톤 분석 이벤트를 보여줍니다.

```
{
  "detail-type": "VoiceToneAnalysisStatus",
  "service-type": "VoiceAnalytics",
  "source": "aws.chime",
  "account": "216539279014",
  "time": "2022-08-26T17:55:15.563441Z",
  "region": "us-east-1",
  "detail": {
    "taskId": "uuid",
    "detailStatus": "VoiceToneAnalysisSuccessful",
    "voiceToneAnalysisDetails": {
      "currentAverageVoiceTone": {
          "startTime": "2022-08-26T17:55:15.563Z",
          "endTime": "2022-08-26T17:55:45.720Z",
          "voiceToneLabel": "neutral",
          "voiceToneScore": {    
            "neutral": "0.83",    
            "positive": "0.13",    
            "negative": "0.04"
          }
      },
      "overallAverageVoiceTone": {
          "startTime": "2022-08-26T16:23:13.344Z",
          "endTime": "2022-08-26T17:55:45.720Z",
          "voiceToneLabel": "positive",
          "voiceToneScore": {    
            "neutral": "0.25",    
            "positive": "0.65",    
            "negative": "0.1"
          }
      }
    },
        "startFragmentNumber": "01234567890123456789",
        "mediaInsightsPipelineId": "87654321-33ca-4dc6-9cdf-abcde6612345",
        "sourceArn": "arn:aws:chime:us-east-1:111122223333:media-pipeline/87654321-33ca-4dc6-9cdf-abcde6612345",
        "streamArn": "arn:aws:kinesisvideo:us-east-1:111122223333:stream/my-stream/0123456789012",
        "channelId": 0
  },
  "version": "0",
  "id": "Id-f928dfe3-f44b-4965-8a17-612f9fb92d59"
}
```

## 통화 후 요약 이벤트
<a name="va-post-call-summary-events"></a>

통화 종료 후 5분 후에 통화 요약 이벤트가 전송됩니다. 이 요약은 통화 중에 발생한 화자 검색 작업에 대한 개요를 제공합니다.

다음 예에서는 가장 일치하는 음성 프로필, 확인된 화자 ID, 통화 중에 이루어진 `CreateVoiceProfile` 및 `UpdateVoiceProfile` API 호출을 통해 생성되거나 업데이트된 음성 프로필 목록을 포함한 통화 후 요약 정보를 보여줍니다.

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-111122223333",
    "detail-type": "VoiceAnalyticsStatus",
    "service-type": "VoiceAnalytics",
    "source": "aws.chime",
    "account": "111122223333",
    "time": "yyyy-mm-ddThh:mm:ssZ",    
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "detailStatus": "PostCallVoiceAnalytics",
        "callId": "22e8dee8-bbd7-4f94-927b-2d0ebaeddc1c",
        "transactionId": "daaeb6bf-2fe2-4e51-984e-d0fbf2f09436",
        "voiceConnectorId": "abcdef1ghij2klmno3pqr4",
        "isCaller": true | false,
        "speakerSearchResults": {
            "bestMatchedVoiceProfileId": "vp-04c25ba1-a059-4fd3-8495-4ac91b55e2bf",
            "customerValidatedCallerIdentity": "vp-04c25ba1-a059-4fd3-8495-4ac91b55e2bf",
            "createVoiceProfileTransactions": [
                {
                    "voiceProfileId": "vp-04c25ba1-a059-4fd3-8495-4ac91b55e2bf",
                    "requestTimestamp": "2022-12-14T18:38:38.796Z"
                },
                {
                    "voiceProfileId": "vp-04c25ba1-a059-4fd3-8495-4ac91b55e2bf",
                    "requestTimestamp": "2022-12-14T18:38:38.796Z",
                }
            ],
            "updateVoiceProfileTransactions": [
                {
                    "voiceProfileId": "vp-04c25ba1-a059-4fd3-8495-4ac91b55e2bf",
                    "requestTimestamp": "2022-12-14T18:38:38.796Z",
                },
                {
                    "voiceProfileId": "vp-04c25ba1-a059-4fd3-8495-4ac91b55e2bf",
                    "requestTimestamp": "2022-12-14T18:38:38.796Z",
                }
            ]
        }
    }
}
```

# Amazon Chime SDK용 음성 분석 예제 Lambda 함수
<a name="va-sample-lambda"></a>

다음 예제의 Python 코드는 음성 커넥터에서 받은 알림을 처리합니다. AWS Lambda 함수에 코드를 추가할 수 있습니다. 또한 이를 사용하여 Amazon SQS 대기열, Amazon SNS 주제 또는 Amazon Kinesis Data Stream을 트리거할 수 있습니다. 그런 다음 향후 처리를 위해 알림을 `EventTable`에 저장할 수 있습니다. 정확한 알림 형식은 [Amazon Chime SDK의 알림 이해](va-notification-targets.md) 섹션을 참조하세요.

```
import base64
import boto3
import json
import logging
import time

from datetime import datetime
from enum import Enum

log = logging.getLogger()
log.setLevel(logging.INFO)

dynamo = boto3.client("dynamodb")

EVENT_TABLE_NAME = "EventTable"

class EventType(Enum):
    """
    This example code uses a single Lambda processor to handle either
    triggers from SQS, SNS, Lambda, or Kinesis. You can adapt it to fit your
    desired infrastructure depending on what you prefer. To distinguish
    where we get events from, we use an EventType enum as an
    example to show the different ways of parsing the notifications.
    """
    SQS = "SQS"
    SNS = "SNS"
    LAMBDA = "LAMBDA"
    KINESIS = "KINESIS"


class AnalyticsType(Enum):
    """
    Define the various analytics event types that this Lambda will
    handle.
    """
    SPEAKER_SEARCH = "SpeakerSearch"
    VOICE_TONE_ANALYSIS = "VoiceToneAnalysis"
    ANALYTICS_READY = "AnalyticsReady"
    UNKNOWN = "UNKNOWN"
 
   
class DetailType(Enum):
    """
    Define the  various detail types that Voice Connector's voice
    analytics feature can return.
    """
    SPEAKER_SEARCH_TYPE = "SpeakerSearchStatus"
    VOICE_TONE_ANALYSIS_TYPE = "VoiceToneAnalysisStatus"
    ANALYTICS_READY = "VoiceAnalyticsStatus"
 

def handle(event, context):
    """
    Example of how to handle incoming Voice Analytics notification messages
    from Voice Connector.
    """
    logging.info(f"Received event of type {type(event)} with payload {event}")
    is_lambda = True
    
    # Handle triggers from SQS, SNS, and KDS. Use the below code if you would like
    # to use this Lambda as a trigger for an existing SQS queue, SNS topic or Kinesis
    # stream.
    if "Records" in event:
        logging.info("Handling event from SQS or SNS since Records exists")
        is_lambda = False
        for record in event.get("Records", []):
            _process_record(record)
    
    # If you would prefer to have your Lambda invoked directly, use the
    # below code to have the Voice Connector directly invoke your Lambda.
    # In this scenario, there are no "Records" passed.
    if is_lambda:
        logging.info(f"Handling event from Lambda")
        event_type = EventType.LAMBDA
        _process_notification_event(event_type, event)


def _process_record(record):
    # SQS and Kinesis use eventSource.
    event_source = record.get("eventSource")
    
    # SNS uses EventSource.
    if not event_source:
        event_source = record.get("EventSource")

    # Assign the event type explicitly based on the event source value.
    event_type = None
    if event_source == "aws:sqs":
        event = record["body"]
        event_type = EventType.SQS
    elif event_source == "aws:sns":
        event = record["Sns"]["Message"]
        event_type = EventType.SNS
    elif event_source == "aws:kinesis":
        raw_data = record["kinesis"]["data"]
        raw_message = base64.b64decode(raw_data).decode('utf-8')
        event = json.loads(raw_message)
        event_type = EventType.KINESIS
    else:
        raise Exception(f"Event source {event_source} is not supported")

    _process_notification_event(event_type, event)


def _process_notification_event(
    event_type: EventType,
    event: dict
):
    """
    Extract the attributes from the Voice Analytics notification message
    and store it as a DynamoDB item to process later.
    """
    message_id = event.get("id")
    analytics_type = _get_analytics_type(event.get("detail-type"))
    pk = None
    if analytics_type == AnalyticsType.ANALYTICS_READY.value or analytics_type == AnalyticsType.UNKNOWN.value:
        transaction_id = event.get("detail").get("transactionId")
        pk = f"transactionId#{transaction_id}#notificationType#{event_type.value}#analyticsType#{analytics_type}"
    else:
        task_id = event.get("detail").get("taskId")
        pk = f"taskId#{task_id}#notificationType#{event_type.value}#analyticsType#{analytics_type}"
    logging.info(f"Generated PK {pk}")
    _create_request_record(pk, message_id, json.dumps(event))


def _create_request_record(pk: str, sk: str, body: str):
    """
    Record this notification message into the Dynamo db table
    """
    try:
        # Use consistent ISO8601 date format.
        # 2019-08-01T23:09:35.369156 -> 2019-08-01T23:09:35.369Z
        time_now = (
            datetime.utcnow().isoformat()[:-3] + "Z"
        )
        response = dynamo.put_item(
            Item={
                "PK": {"S": pk},
                "SK": {"S": sk},
                "body": {"S": body},
                "createdOn": {"S": time_now},
            },
            TableName=EVENT_TABLE_NAME,
        )
        logging.info(f"Added record in table {EVENT_TABLE_NAME}, response : {response}")
    except Exception as e:
        logging.error(f"Error in adding record: {e}")


def _get_analytics_type(detail_type: str):
    """
    Get analytics type based on message detail type value.
    """
    if detail_type == DetailType.SPEAKER_SEARCH_TYPE.value:
        return AnalyticsType.SPEAKER_SEARCH.value
    elif detail_type == DetailType.VOICE_TONE_ANALYSIS_TYPE.value:
        return AnalyticsType.VOICE_TONE_ANALYSIS.value
    elif detail_type == DetailType.ANALYTICS_READY.value:
        return AnalyticsType.ANALYTICS_READY.value
    else:
        return AnalyticsType.UNKNOWN.value
```

**중요**  
[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartVoiceToneAnalysis.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartVoiceToneAnalysis.html) API를 직접 호출하려면 먼저 동의를 받아야 합니다. 동의를 받을 때까지 Amazon DynamoDB와 같은 보류 영역에서 이벤트를 지속하는 것이 좋습니다.

# Amazon Chime SDK의 데이터 스토리지, 옵트아웃, 데이터 보존 정책 이해
<a name="va-opt-out"></a>

Amazon Chime SDK는 음성 데이터를 사용하여 화자 검색 서비스를 제공하고 개선합니다. 그 일환으로 음성 임베딩을 생성하는 데 사용되는 녹음된 스니펫인 등록 오디오를 사용하여 기계 학습 및 인공 지능 모델을 교육합니다. 모델 학습에 데이터를 사용하지 않도록 선택할 수 있으며, 이 섹션의 항목에서는 그 방법을 설명합니다.

**Topics**
+ [Amazon Chime SDK의 화자 검색을 위한 데이터 스토리지 이해](speaker-search-data-storage.md)
+ [Amazon Chime SDK의 화자 검색에 대한 옵트아웃 처리](va-handle-opt-outs.md)
+ [Amazon Chime SDK 음성 분석을 위한 데이터 보존 이해](va-data-retention.md)

# Amazon Chime SDK의 화자 검색을 위한 데이터 스토리지 이해
<a name="speaker-search-data-storage"></a>

Amazon Chime SDK는 화자 검색을 위해 다음 데이터를 저장합니다.
+ 화자 검색 기능을 제공하는 데 사용하는 음성 프로필에 첨부된 음성 임베딩.
+ 등록 오디오는 각 음성 프로필의 음성 임베딩을 만드는 데 사용되는 녹음된 음성 스니펫입니다. 등록 오디오 레코딩을 사용하여 다음을 수행합니다.
  + 화자 검색 기능을 제공하는 데 있어 중요한 부분인 화자 검색 모델을 최신 상태로 유지합니다.
  + 기계 학습 모델을 학습시켜 서비스를 개발하고 개선합니다. 교육에 등록 오디오를 사용하는 것은 선택 사항이며, 다음 섹션에 설명된 대로 옵트아웃 정책을 선택하여 이러한 사용을 거부할 수 있습니다.

# Amazon Chime SDK의 화자 검색에 대한 옵트아웃 처리
<a name="va-handle-opt-outs"></a>

최종 사용자 및 전체 조직에 대한 옵트아웃을 처리할 수 있습니다. 옵트아웃은 다음과 같은 효과가 있습니다.
+ 옵트아웃한 후에는 음성 분석에서 모델 교육에 새 등록 오디오를 사용하지 않으며 옵트아웃 전에 수집 및 저장된 등록 오디오도 사용하지 않습니다.
+ 옵트아웃한 후에는 음성 분석이 화자 검색 서비스를 제공하기 위해 등록 오디오를 저장하고 사용합니다.

**주의**  
다음 옵트아웃 조치는 되돌릴 수 없습니다. 삭제한 데이터는 복구할 수 없습니다.

**최종 사용자 옵트아웃 처리**  
최종 사용자가 화자 검색을 거부하면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceProfile.html) API를 직접 호출하세요. 이 작업을 수행하면 음성 프로필은 물론 음성 임베딩 및 등록 오디오도 제거됩니다.

음성 임베딩 그룹을 삭제하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceProfileDomain.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_DeleteVoiceProfileDomain.html) API를 직접 호출하여 도메인을 제거합니다. 이 작업을 수행하면 도메인의 *모든* 음성 프로필이 삭제됩니다.

**조직 수준에서 옵트아웃 처리**  
전체 조직의 옵트아웃을 처리하려면 AWS Organizations 옵트아웃 정책을 사용합니다. `chimesdkvoiceanalytics` 서비스 이름을 사용합니다. 정책에 대한 자세한 내용은AWS Organizations 사용 설명서**의 [AI 서비스 옵트아웃 정책](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html)을 참조하세요.

**참고**  
옵트아웃 정책을 사용하려면 AWS Organizations에서 AWS 계정을 중앙에서 관리해야 합니다. AWS 계정에 대한 조직을 아직 만들지 않았다면AWS Organizations 사용 설명서**의 [조직 생성 및 관리](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org.html)를 참조하세요.

# Amazon Chime SDK 음성 분석을 위한 데이터 보존 이해
<a name="va-data-retention"></a>

기본적으로 Amazon Chime SDK 음성 분석은 3년이 지나면 음성 임베딩을 삭제합니다. 이는 사람들의 목소리가 시간이 지남에 따라 변하기 때문이며 보안을 위해서도 그렇게 합니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html) API를 사용하여 만료된 음성 임베딩을 업데이트할 수 있습니다.

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartVoiceToneAnalysisTask.html)의 결과는 최대 7일 동안 해당 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetSpeakerSearchTask.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_GetVoiceToneAnalysisTask.html) API에서도 사용할 수 있습니다.

[https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask.html)에서 생성된 음성 임베딩은 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_CreateVoiceProfile.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html) API를 통해 24시간 동안 지속 가능하며 그 이후에는 삭제되어 사용할 수 없습니다.

결과를 삭제하고 고객의 동의 철회를 처리하려면 이전 섹션을 참조하세요.

# 음성 API를 사용하여 Amazon Chime SDK용 음성 분석 실행
<a name="va-in-voice-namespace"></a>

이전 버전과의 호환성을 위해 Amazon Chime SDK Voice API를 사용하여 음성 분석을 시작하고 관리할 수 있습니다. 그러나 음성 분석을 위한 미디어 인사이트 파이프라인 API만 새로운 기능을 제공하므로 대신 해당 API를 사용하는 것이 좋습니다.

다음 섹션에서는 음성 및 미디어 인사이트 파이프라인 API의 차이점을 설명합니다.

## 작업 중지
<a name="va-stopping-tasks"></a>

음성 커넥터를 사용하여 음성 분석 작업을 시작한 다음 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineStatus.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineStatus.html) API를 사용하여 파이프라인을 일시 중지하면 작업이 계속 실행됩니다. 작업을 중지하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StopSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StopSpeakerSearchTask.html) 및 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StopVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StopVoiceToneAnalysisTask.html) API를 직접 호출해야 합니다.

## 알림의 차이점 이해
<a name="va-notification-differences"></a>

음성 API를 사용하여 음성 분석을 실행하는 경우 알림은 미디어 인사이트 파이프라인에서 생성되는 알림과 다릅니다.
+ 음성 분석 준비 이벤트는 음성 API를 사용하여 시작된 작업에만 사용할 수 있습니다.
+ 음성 분석 작업을 통화와 연결하려면 알림의 `voiceConnectorId`, `transactionId`, 또는 `callId` 필드를 사용해야 합니다. 미디어 인사이트 파이프라인을 사용하여 음성 분석을 실행하는 경우 `mediaInsightsPipelineId` `streamArn` 및/또는 `channelId` 필드를 사용하여 작업을 통화와 연결합니다.

다음 주제에서는 음성 API로 알림을 사용하는 방법을 설명합니다.

**Topics**
+ [음성 분석 준비 이벤트](#va-ready-events)
+ [화자 검색 이벤트](#va-speaker-search-events)
+ [음성 톤 분석 이벤트](#va-tone-status)

### 음성 분석 준비 이벤트
<a name="va-ready-events"></a>

음성 분석 준비 이벤트에는 `VoiceAnalyticsStatus` 세부 유형이 있습니다.

Amazon Chime SDK 음성 커넥터를 사용하여 분석 작업을 시작합니다. 음성 분석 준비 이벤트를 수신하면 다음 속성으로 식별되는 통화의 화자 검색 또는 음성 톤 분석 작업을 트리거할 수 있습니다.
+ `voiceConnectorId`
+ `transactionId`

**참고**  
이 알림은 음성 분석이 활성화되고 음성 커넥터와 연결된 미디어 인사이트 파이프라인 구성이 있는 경우에만 제공됩니다. 고객이 `CreateMediaInsightsPipeline` API를 호출하고 Media Pipelines SDK를 통해 화자 검색 작업 또는 음성 톤 분석 작업을 시작하는 경우에는 이 알림이 제공되지 않습니다.

음성 커넥터에서 반환되는 SIP 헤더에는 `transactionId`가 포함됩니다. SIP 헤더에 액세스할 수 없는 경우 `AnalyticsReady` 알림 이벤트에는 `voiceConnectorId` 및 `transactionId`도 포함됩니다. 이를 통해 프로그래밍 방식으로 정보를 수신하고 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartVoiceToneAnalysis.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartVoiceToneAnalysis.html) API를 직접 호출할 수 있습니다.

음성 분석을 처리할 준비가 되면 음성 커넥터는 `"detailStatus": "AnalyticsReady"`와 함께 이벤트를 알림 대상에 JSON 본문으로 보냅니다. Amazon SNS 또는 Amazon SQS를 사용하는 경우 해당 본문은 Amazon SNS 또는 Amazon SQS 페이로드의 ‘레코드’ 필드에 표시됩니다.

다음 예에서는 일반적인 JSON 본문을 보여줍니다.

```
{
    "detail-type": "VoiceAnalyticsStatus",
    "version": "0",
    "id": "Id-f928dfe3-f44b-4965-8a17-612f9fb92d59",
    "source": "aws.chime",
    "account": "123456789012",
    "time": "2022-08-26T17:55:15.563441Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "detailStatus": "AnalyticsReady",
        "callDetails": {
            "isCaller": false,
            "transactionId": "daaeb6bf-2fe2-4e51-984e-d0fbf2f09436",
            "voiceConnectorId": "fuiopl1fsv9caobmqf2vy7"
        }
    }
}
```

이 알림을 통해 음성 분석 작업 API를 호출하기 전에 애플리케이션에 대한 추가 콜백을 트리거하고 통지 및 동의와 같은 법적 요구 사항을 처리할 수 있습니다.

### 화자 검색 이벤트
<a name="va-speaker-search-events"></a>

화자 검색 이벤트에는 `SpeakerSearchStatus` 세부 유형이 있습니다.

Amazon Chime SDK 음성 커넥터는 다음과 같은 화자 검색 이벤트를 전송합니다.
+ 식별 일치
+ 음성 임베딩 생성

이벤트에는 다음과 같은 상태가 있을 수 있습니다:
+ `IdentificationSuccessful` – 주어진 음성 프로필 도메인에서 높은 신뢰도 점수로 일치하는 음성 프로필 ID를 하나 이상 식별하는 데 성공했습니다.
+ `IdentificationFailure` – 식별을 수행하지 못했습니다. 원인: 발신자가 10초 이상 말을 하지 않았으며, 음질이 좋지 않습니다.
+ `IdentificationNoMatchesFound` – 해당 음성 프로필 도메인에서 신뢰도가 높은 일치 항목을 찾을 수 없습니다. 전화를 건 사람이 처음이거나 목소리가 바뀌었을 수 있습니다.
+ `VoiceprintGenerationSuccessful` – 시스템이 20초 분량의 무음이 아닌 오디오를 사용하여 음성 임베딩을 생성했습니다.
+ `VoiceprintGenerationFailure` – 시스템에서 음성 임베딩을 생성하지 못했습니다. 원인: 발신자가 20초 이상 말을 하지 않았으며, 음질이 좋지 않습니다.

#### 식별 일치
<a name="va-id-matches"></a>

특정 `transactionId`로 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_StartSpeakerSearchTask) API를 직접 호출한 후 음성 커넥터 서비스는 10초 동안 무음이 아닌 발화가 지속되면 식별 일치 알림을 반환합니다. 이 서비스는 음성 프로필 ID와 [0, 1] 범위의 신뢰도 점수와 함께 상위 10개의 매칭을 반환합니다. 신뢰도 점수가 높을수록 통화 중인 화자가 음성 프로필 ID와 일치할 가능성이 높아집니다. 기계 학습 모델에서 일치하는 항목이 없는 경우 알림의 `detailStatus` 필드에 `IdentificationNoMatchesFound`가 포함됩니다.

다음 예제는 매칭 성공 알림을 보여줍니다.

```
{    
    "version": "0",
    "id": "12345678-1234-1234-1234-111122223333",
    "detail-type": "SpeakerSearchStatus",
    "service-type": "VoiceAnalytics",
    "source": "aws.chime",
    "account": "111122223333",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "taskId": "uuid",
        "detailStatus": "IdentificationSuccessful",
        "speakerSearchDetails" : {
            "results": [
                {
                    "voiceProfileId": "vp-505e0992-82da-49eb-9d4a-4b34772b96b6",
                    "confidenceScore": "0.94567856",
                },
                {
                    "voiceProfileId": "vp-fba9cbfa-4b8d-4f10-9e41-9dfdd66545ab",
                    "confidenceScore": "0.82783350",
                },
                {
                    "voiceProfileId": "vp-746995fd-16dc-45b9-8965-89569d1cf787",
                    "confidenceScore": "0.77136436",
                }
            ]
        },
        "isCaller": false,
        "voiceConnectorId": "abcdef1ghij2klmno3pqr4",
        "transactionId": "daaeb6bf-2fe2-4e51-984e-d0fbf2f09436"
    }
}
```

#### 음성 임베딩 생성
<a name="va-voice-print-generation"></a>

추가로 10초 동안 무음이 아닌 발화가 지속되면 음성 커넥터는 알림 대상에 음성 임베딩 생성 알림을 보냅니다. 음성 프로필에 새 음성 임베딩을 등록하거나 이미 음성 프로필에 있는 성문을 업데이트할 수 있습니다.

다음 예제는 매칭에 성공하면 관련 음성 프로필을 업데이트할 수 있다는 의미의 알림을 보여줍니다.

```
{
    "version": "0",
    "id": "12345678-1234-1234-1234-111122223333",
    "detail-type": "SpeakerSearchStatus",
    "service-type": "VoiceAnalytics",
    "source": "aws.chime",
    "account": "111122223333",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "taskId": "guid",
        "detailStatus": "VoiceprintGenerationSuccess",
        "isCaller": false,
        "transactionId": "12345678-1234-1234",
        "voiceConnectorId": "abcdef1ghij2klmno3pqr"
    }
}
```

### 음성 톤 분석 이벤트
<a name="va-tone-status"></a>

음성 톤 분석 이벤트에는 `VoiceToneAnalysisStatus` 세부 유형이 있습니다. 분석 결과 다음과 같은 상태가 반환될 수 있습니다.
+ `VoiceToneAnalysisSuccessful` – 발신자와 상담원의 음성을 긍정, 부정, 중립 등 감정의 확률로 분석하는 데 성공했습니다.
+ `VoiceToneAnalysisFailure` – 톤 분석을 수행하지 못했습니다. 발신자가 10초 동안 말을 하지 않고 전화를 끊거나 오디오 품질이 너무 나빠지면 이런 일이 발생할 수 있습니다.
+ `VoiceToneAnalysisCompleted` – 사용자와 상담원의 음성을 전체 통화에 대한 감정 확률로 분석하는 데 성공했습니다. 음성 톤 분석이 완료될 때 전송되는 마지막 이벤트입니다.

다음 예제에서는 일반적인 음성 톤 분석 이벤트를 보여줍니다.

```
{
  "detail-type": "VoiceToneAnalysisStatus",
  "service-type": "VoiceAnalytics",
  "source": "aws.chime",
  "account": "216539279014",
  "time": "2022-08-26T17:55:15.563441Z",
  "region": "us-east-1",
  "detail": {
    "taskId": "uuid",
    "detailStatus": "VoiceToneAnalysisSuccessful",
    "voiceToneAnalysisDetails": {
      "currentAverageVoiceTone": {
          "startTime": "2022-08-26T17:55:15.563Z",
          "endTime": "2022-08-26T17:55:45.720Z",
          "voiceToneLabel": "neutral",
          "voiceToneScore": {    
            "neutral": "0.83",    
            "positive": "0.13",    
            "negative": "0.04"
          }
      },
      "overallAverageVoiceTone": {
          "startTime": "2022-08-26T16:23:13.344Z",
          "endTime": "2022-08-26T17:55:45.720Z",
          "voiceToneLabel": "positive",
          "voiceToneScore": {    
            "neutral": "0.25",    
            "positive": "0.65",    
            "negative": "0.1"
          }
      }
    },
    "isCaller": true,
    "transactionId": "daaeb6bf-2fe2-4e51-984e-d0fbf2f09436",
    "voiceConnectorId": "fuiopl1fsv9caobmqf2vy7"
  },
  "version": "0",
  "id": "Id-f928dfe3-f44b-4965-8a17-612f9fb92d59"
}
```

# Amazon Chime SDK의 통화 분석 서비스 할당량
<a name="ca-regions"></a>

이 섹션의 표에는 Amazon Chime SDK 통화 분석에 대한 서비스 할당량이 나열되어 있습니다.

통화 분석 리전에 대한 자세한 내용은 이 설명서 앞부분에 있는 [Amazon Chime SDK에 사용 가능한 AWS 리전](sdk-available-regions.md) 항목을 참조하세요.

Amazon Chime SDK 통화 분석 및 음성 분석에는 다음과 같은 서비스 할당량이 있습니다.


| Resource | 기본 한도 | 조정 가능 | 
| --- | --- | --- | 
| 리전별 미디어 인사이트 파이프라인 구성 | 100 | 예 | 
| 리전별 액티브 미디어 인사이트 파이프라인 | 20 | 예 | 
| 리전별 음성 프로필 도메인 | 3 | 예 | 
| 음성 프로필 도메인별 음성 프로필 | 20 | 예 | 
| 리전별 활성 화자 검색 작업 | 25 | 예 | 
| 리전별 활성 음성 톤 분석 작업 | 25 | 예 | 
| 리전별 음성 분석을 포함한 액티브 보이스 커넥터 통화 | 25 | 예 | 
| 트랜잭션 ID당 음성 커넥터 통화당 활성 스피커 검색 작업 | 1 | 아니요 | 
| 트랜잭션 ID당 음성 커넥터 호출당 활성 음성 톤 분석 작업 | 1 | 아니요 | 
| 음성 프로필 도메인당 최대 동시 API 호출 | 1 | 예 | 
| 음성 프로필당 최대 동시 API 호출 | 1 | 예 | 
| 스피커 검색 작업당 최대 동시 API 호출 수 | 1 | 예 | 
| 음성 톤 분석 작업당 최대 동시 API 호출 | 1 | 예 | 

API 요금 및 할당량에 대한 자세한 내용은 *AWS 일반 참조*의 [Amazon Chime SDK 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/chime-sdk.html)을 참조하세요.

**참고**  
특정 리전의 할당량을 초과하는 경우 **리소스 한도 초과** 예외가 발생합니다. AWS 콘솔의 **Service Quotas** 페이지를 사용하여 증가를 요청하거나 [고객 지원 담당자에게](https://docs.aws.amazon.com/awssupport/latest/user/getting-started.html) 문의할 수 있습니다.  
일부 통화 분석 API는 다른 AWS 서비스를 위한 리소스 및 API 요청을 생성합니다. 이러한 추가 사항은 계정 할당량에 포함됩니다. 통화 분석에서 할당량 또는 transactions-per-second 증가를 요청하는 경우 다른 AWS 서비스에 대해서도 증가를 요청해야 합니다. 그렇지 않으면 요청이 병목 현상을 일으켜 실패할 수 있습니다.