

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 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 通话分析功能处理器目的地
<a name="amazon-transcribe-call-analytics-processor"></a>

支持的接收器：`KinesisDataStreamSink`。

您不能将此处理器与 Amazon Transcribe 处理器结合使用。有关 Amazon Transcribe 呼叫分析的更多信息，请参阅《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 存储桶中使用不同的会话在单独的文件 IDs 中生成调用后工件。

通话后构件包括分析 JSON 文件和录音 WAV 或 Opus 文件。作为元数据章节中 `onetimeMetadata` 的一部分，对于每个 Amazon Transcribe 通话分析功能通话后会话，已编辑（如果您启用内容编辑）和未编辑录音文件的 Amazon S3 存储桶 URL 都会发送到 Kinesis Data Streams 一次。

使用 Amazon Transcribe 通话分析功能进行呼叫分析采用 Kinesis 视频流中的音频数据输入。
+ 支持的媒体编码：PCM 签名的 16 位小端序音频。
+ 支持的媒体采样率：介于 8,000Hz 和 48,000Hz 之间。

Amazon Transcribe 分析流程的 `StreamConfiguration` 输入：
+ 必须为每个流指定 `KinesisVideoStreamArn`。
+ （可选）KVS `FragmentNumber` 使用指定片段之后的数据块启动呼叫分析作业。如果未提供，则它将使用 Kinesis 视频流中的最新片段。
+ `StreamChannelDefinition` 定义了发言人。Amazon Transcribe 通话分析功能需要双声道音频。当您调用 [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` 表示座席正在发言。

**注意**  
当您使用 Voice Connector 创建带有 Amazon Transcribe 通话分析功能处理器的 `MediaInsightsPipeline` 时，Voice Connector 账户分支音频是 `AGENT`，PSTN 分支音频是用于 `ParticipantRole` 的 `CUSTOMER`。  
对于 Voice Connector SIPREC，我们依赖于 SIPREC 元数据。在大多数情况下，认为 `AGENT` 是词典值最低的流标签。

以下示例介绍了一个双声道音频流的 Kinesis 视频流输入。

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

 相比之下，以下示例介绍了来自两个不同的 Kinesis 视频流的两个单声道输入。

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

## Amazon Transcribe 通话分析功能输出
<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 通话分析功能输出格式。

```
{
    "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 相关联，则在有 [Voice Connector 流式处理更新](https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html)时，将发送以下 Voice Connector 更新有效负载。

以下示例显示了 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}}"
}
```

以下示例显示了通话分析 Amazon 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 通话分析功能结合使用。有关 Amazon Transcribe 的输入和输出的更多信息，请参阅《Amazon Transcribe 开发者指南》**中的[转录流式传输音频](https://docs.aws.amazon.com/transcribe/latest/dg/streaming.html)。

Amazon Transcribe 的呼叫分析会话采用 Kinesis 视频流中的音频数据输入。
+ 支持 MediaEncoding：PCM 签名的 16 位小端音频。
+ 支持的 MediaSampleRate 采样率：介于 8,000 Hz 和 48,000 Hz 之间。

 Amazon Transcribe 处理器的 `StreamConfiguration` 输入：
+ 必须为每个流指定 `KinesisVideoStreamArn`。
+ （可选）KVS `FragmentNumber`：使用特定片段之后的数据块启动呼叫分析作业。如果未提供，它将使用 Kinesis 视频流中最新的可用区块。
+ `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
            }
        ]
    }
```

**注意**  
对于 Voice Connector 使用 Amazon Transcribe 处理器创建的 `MediaInsightsPipeline`，Voice Connector 账户分支音频分配给 `channel-0`，PSTN 分支音频分配给 `channel-1`。  
对于 Voice Connector SIPREC，我们依赖于 SIPREC 元数据。在大多数情况下，会将词典值最低的流标签分配给 `channel-0`。  
对于 Amazon Transcribe 和 Amazon Transcribe 通话分析功能处理器，如果您传递两个 Kinesis 视频流，并且每个流都包含一个单声道音频频道，则在处理 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 通话分析功能处理器、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) APIs 来调用语音分析处理器。有关使用语音分析的更多信息，请参阅[使用 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>

呼叫分析生成的 Kinesis Data Streams (KDS) 记录包括媒体管道 ID、详细信息类型、元数据和处理器特定部分。有关使用来自 Kinesis Data Streams 的数据的更多信息，请参阅《Amazon Kinesis Streams 开发者指南》**中的[从 Amazon Kinesis Data Streams 读取数据](https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html)。要使用此接收器创建配置，您必须拥有对指定流的 `kinesis:DescribeStream` 权限。

 **元数据**

 生成的 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` 中指定的任何键值对。如果呼叫分析会话是由 Voice Connector 发起的，则元数据部分将自动填充以下参数：
+ `transactionId`
+ `fromNumber`
+ `toNumber`
+ `callId`
+ `voiceConnectorId`
+ `direction`

 除上述参数外，Voice Connector 启动的呼叫分析会话的元数据部分还将填入一个包含以下内容的 `oneTimeMetadata` 字段：
+ `inviteHeaders`
+ `siprecMetadata`

这仅在会话开始时一次性发布到 Kinesis Data Streams，并且具有 `CallAnalyticsMetadata` 的 `detail-type`。

您可以在 `MediaInsightsRuntimeMetadata` 中为每个 [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 Data Streams 的每条记录来源进行唯一性标识。

## 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 Streams 启用通话录音，音频应采用 PCM 签名 16 位小端序字节序。采样率必须为 8 KHz。
+ 构建者必须为 Kinesis Video Streams 设置足够长的数据保留期，以确保呼叫分析保留和使用这些片段。
+ 如果您单独或与其他处理器组合启用通话录音，则必须提供两个 Kinesis 视频流 ARNs 进行录音。通话录音不支持单个立体声音频输入。

## 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
}
```

要更新配置，请将该 `VoiceEnhancementSinkConfiguration` 元素添加到 [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 调用中。执行此操作后，[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}}"
}
```

**注意**  
`VoiceEnhancementSink` 元素始终需要呼叫分析配置中的 `S3RecordingSink` 元素。