

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

# 使用 Amazon Chime SDK 语音分析
<a name="voice-analytics"></a>

Amazon Chime SDK 语音分析功能使您能够实现发言人搜索和语音音调分析。您可以使用发言人搜索来识别和注册新呼叫者，识别重复呼叫者，并为这些识别分配置信度分数。您可以使用语音音调分析来预测呼叫者的情绪为 `negative`、`neutral` 或 `positive`。

您可以将语音分析作为 Amazon Chime SDK 呼叫分析会话的可选组件来运行。

语音分析可与媒体见解管线或 Amazon Chime SDK 语音连接器呼叫结合使用。我们建议使用[媒体管道 SDK](media-pipelines.md) 并在媒体见解管线上调用任务，以便对任务及有关信息进行更精细的控制。

你可以使用 Voice Connectors 来确保向后兼容，但我们只 APIs 使用新功能更新媒体见解管道。

有关创建和使用语音连接器的更多信息，请参阅 *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) APIs。

以下主题介绍如何使用语音分析。

**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)
+ [使用语音 APIs 对 Amazon Chime SDK 运行语音分析](va-in-voice-namespace.md)

# 了解 Amazon Chime SDK 的语音分析架构
<a name="va-architecture"></a>

本部分中的主题概述了 Amazon Chime SDK 语音分析架构，包括每项功能的数据流。

此图提供数据流如何通过语音分析的概要视图。

![\[显示通过语音分析的高级数据流的图。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/va-architecture-kvs.png)


在下图中：

1. 音频流式传输到 Kinesis 视频流，供呼叫者和座席使用。您可以使用 Kinesis Video Streams 制作程序或 Amazon Chime SDK 语音连接器流式传输来做到这一点。有关更多信息，请参阅本指南中的 [了解 Amazon Chime SDK 基于机器学习的分析工作流程](ml-based-analytics.md)，以及 *Amazon Chime SDK 管理员指南*中的 [Amazon Chime SDK 语音连接器媒体流式传输到 Kinesis](https://docs.aws.amazon.com/chime-sdk/latest/ag/start-kinesis-vc.html)。

1. 在呼叫者同意后，应用程序或生成器会触发针对音频流的发言人搜索、语音音调分析，或两者兼而有之。

1. 在呼叫期间，语音分析发送通知至目标，可以是 Amazon Simple Queue Service (SQS)、Amazon Simple Notification Service (SNS)、 AWS Lambda 或 Amazon Kinesis Data Streams。

此外，语音分析还提供以下工具来管理自己生成的数据。

**语音配置文件**  
语音嵌入、嵌入的唯一 ID 及其过期日期的组合。出于安全考虑，也因为语音会随着时间变化，语音配置文件将在三年后过期。为避免重新创建语音配置文件，请调用 [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_UpdateVoiceProfile.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_voice-chime_UpdateVoiceProfile.html) APIs 内致电[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)或。

**语音配置文件域**  
语音配置文件集合。

# 了解 Amazon Chime SDK 的发言人搜索工作流程
<a name="va-data-flow"></a>

在本节中，我们会展示 Amazon Chime SDK 发言人搜索分析的示例数据和程序流。

发言人搜索功能涉及创建语音嵌入，该嵌入可用于比较呼叫者的语音与先前存储的语音数据。以数字声纹的形式收集、使用、存储和保留生物识别标识符和生物识别信息，可能需要以书面形式获得呼叫者的知情同意。根据各种州法律，包括伊利诺伊州、德克萨斯州、华盛顿州的生物识别法和其他州的隐私法，都要求获得此类同意。在使用发言人搜索功能之前，您必须根据适用法律以及监督您使用该功能的 [AWS 服务条款](https://aws.amazon.com/service-terms/)的要求，全面通知并获得一致同意。

下图显示了通过发言人搜索分析任务的数据流示例。图下方的带编号的描述介绍了该过程的每个步骤。该图假设您已经使用具有 `VoiceAnalyticsProcessor` 的呼叫分析配置来配置了 Amazon Chime SDK 语音连接器。有关更多信息，请参阅 [录制 Voice Connector 通话](record-vc-calls.md)。

![\[显示通过发言人搜索分析的数据流的图。\]](http://docs.aws.amazon.com/zh_cn/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 事件，则您的应用程序使用媒体见解管道配置和 Kinesis Video ARNs Stream 调用 Voice Connector 调用 [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。

   有关使用的更多信息 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 以识别异步任务。
**注意**  
在其中任何一个中调用 `StartSpeakerSearchTask` API 之前 SDKs，您必须根据法律和 AW [S 服务](https://aws.amazon.com/service-terms/)条款的要求提供所有必要的通知并获得必要的同意。

1. 系统会累积 10 秒钟的呼叫者语音。呼叫者必须至少在这段时间内说话。系统不会捕获或分析静默。

1. 媒体见解管线比较话音与域中的语音配置文件，并列出置信度最高的十个匹配项。如果找不到匹配项，语音连接器就会创建语音配置文件。

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) APIs 来创建或更新配置文件。

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 语音连接器。有关更多信息，请参阅 [录制 Voice Connector 通话](record-vc-calls.md)。

![\[显示通过语音音调分析的数据流的图。\]](http://docs.aws.amazon.com/zh_cn/chime-sdk/latest/dg/images/voice-tone-workflow-v2.png)


在下图中：

1. 呼叫者使用分配给 Amazon Chime SDK 语音连接器的电话号码拨号。或者，座席使用语音连接器号码执行出站呼叫。

1. 语音连接器服务创建事务 ID 并将其与呼叫关联。

1. 您的应用程序（例如交互式语音应答系统）或座席会向呼叫者提供有关呼叫记录和使用语音嵌入进行语音分析的通知，并征得他们的同意才能参与。

1. 假设您的应用订阅了 EventBridge 事件，则您的应用程序使用媒体见解管道配置和 Kinesis Video ARNs Stream 调用 Voice Connector 调用 [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。

   有关使用的更多信息 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)。

语音分析试图确保每个任务结果至少有一次交付。但是，网络问题可能会增加延迟。要解决潜在的问题，或者如果您更喜欢同步处理，可以在[媒体管道 SDK 或[语音](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_Operations_Amazon_Chime_SDK_Voice.html) SDK APIs ](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_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 仅返回任务的状态。它不返回任务结果。要查看结果，请使用亚马逊 SQS、亚马逊 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)。

**注意**  
对于亚马逊 SQS 和亚马逊 SNS，我们不支持队列。 first-in-first-out因此，消息可能会无序到达。我们建议您检查时间戳以根据需要排序消息，并保留消息在 Amazon DynamoDB 等数据存储中。您也可以使用 APIs 中所述的 “获取” [轮询 Amazon Chime SDK 的任务结果](va-task-result-poll.md) 来接收最新结果。

下表列出了事件及其相应的细节类型。


| 通知事件 | 细节类型 | 
| --- | --- | 
| 语音分析元数据 | `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 秒钟的非静默话音后返回识别匹配通知。该服务会返回前 10 个匹配项，以及语音配置文件 ID 和范围为 [0, 1] 的置信度分数。置信度分数越高，呼叫中的发言人与语音配置文件 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 分钟后发送。这些摘要概述了整个呼叫过程中发生的发言人搜索任务。

以下示例显示了呼叫后摘要，其中包含最佳的语音配置文件匹配、已确认的发言人身份，以及在呼叫期间通过调用 `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 数据流。然后，您可以存储通知到 `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) APIs。我们建议您在获得同意之前，将活动保留在等候区域（例如 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 来移除域。此操作会删除域中的*所有*语音配置文件。

**处理组织级别的选择退出**  
要处理整个组织的选择退出，请使用 Organization AWS s 的选择退出政策。使用 `chimesdkvoiceanalytics` 服务名称。有关这些策略的信息，请参阅 *AWS 组织用户指南*中的 [AI 服务选择退出策略](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_ai-opt-out.html)。

**注意**  
要使用选择退出政策，您的 AWS 账户必须由 Organizations 集中管理。 AWS 如果您尚未为自己的 AWS 账户创建组织，请参阅 *AWS 组织用户指南*中的[创建和管理组织](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_StartVoiceToneAnalysisTask.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_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_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) APIs 为7天。

从 a 生成的语音嵌入[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) APIs 留 24 小时，之后它们将被删除且不可用。

要删除结果并处理您的客户撤回同意的情况，请参阅上一部分。

# 使用语音 APIs 对 Amazon Chime SDK 运行语音分析
<a name="va-in-voice-namespace"></a>

为了向后兼容，您可以使用 Amazon Chime SDK APIs 语音来启动和管理语音分析。但是，只有 APIs 用于语音分析的媒体洞察渠道才能提供新功能，因此我们强烈建议改用它们。

以下各节解释了语音和媒体洞察渠道之间的区别 APIs。

## 停止任务
<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) APIs。

## 了解通知差异
<a name="va-notification-differences"></a>

当你使用语音 APIs 运行语音分析时，通知与媒体见解管道生成的通知不同。
+ 语音分析就绪事件仅适用于使用语音启动的任务 APIs。
+ 您需要使用您通知中的字段 `voiceConnectorId`、`transactionId` 或 `callId` 来关联语音分析任务与呼叫。如果您使用媒体见解管线来运行语音分析，则可以使用字段 `mediaInsightsPipelineId` 和 `streamArn` 或 `channelId` 来关联任务与呼叫。

以下主题说明了如何使用语音通知 APIs。

**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 并通过媒体管道 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) APIs。

当语音分析准备好进行处理时，语音连接器会以 JSON 正文的形式向通知目标发送包含 `"detailStatus": "AnalyticsReady"` 的事件。如果您使用 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"
        }
    }
}
```

此通知允许您在调用语音分析任务 APIs之前触发对应用程序的额外回调，并处理任何法律要求，例如通知和同意。

### 发言人搜索事件
<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 秒钟的非静默话音后返回识别匹配通知。该服务会返回前 10 个匹配项，以及语音配置文件 ID 和范围为 [0, 1] 的置信度分数。置信度分数越高，呼叫中的发言人与语音配置文件 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"
}
```