

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Grundlegendes zu Benachrichtigungen für das Amazon Chime SDK
<a name="va-notification-targets"></a>

Die Sprachanalyse sendet Ereignisse automatisch an ein Ziel, wenn Aufgaben zur Lautsprechersuche oder Stimmenanalyse beginnen, während sie ausgeführt werden und wenn sie beendet sind. Sie verwenden Benachrichtigungsziele, um diese Ereignisse zu empfangen. Wir empfehlen, mehrere Benachrichtigungsziele zu verwenden, wenn Ihr Workflow oder Ihre Anwendung eine hohe Verfügbarkeit benötigt.

Außerdem müssen Sie eine IAM-Rolle mit den Richtlinien verwenden, die für den Zugriff auf Ihre Benachrichtigungsziele erforderlich sind. Weitere Informationen finden Sie unter [Verwenden der Ressourcenzugriffsrolle Call Analytics für das Amazon Chime SDK](call-analytics-resource-access-role.md).

**Anmerkung**  
Für Amazon SQS und Amazon SNS unterstützen first-in-first-out wir keine Warteschlangen. Dies kann dazu führen, dass Nachrichten nicht in der richtigen Reihenfolge ankommen. Wir empfehlen, die Zeitstempel zu überprüfen, um Nachrichten nach Bedarf zu sortieren und Nachrichten in einem Datenspeicher wie Amazon DynamoDB zu speichern. Sie können auch das APIs unter beschriebene Get verwenden, um die neuesten Ergebnisse [Abfrage von Aufgabenergebnissen für das Amazon Chime SDK](va-task-result-poll.md) zu erhalten.

In der folgenden Tabelle sind die Ereignisse und ihre entsprechenden Detailtypen aufgeführt.


| Benachrichtigungsereignis | Art des Details | 
| --- | --- | 
| Metadaten zur Sprachanalyse | `VoiceAnalyticsStatus` | 
| Suche nach Lautsprechern | `SpeakerSearchStatus` | 
| Analyse des Stimmtons | `VoiceToneAnalysisStatus` | 

# Grundlegendes zu den IAM-Richtlinien für Benachrichtigungsziele für das Amazon Chime SDK
<a name="va-iam-target-policies"></a>

Sie müssen Richtlinien in der IAM-Rolle in einer Call Analytics-Konfiguration verwenden, die den Zugriff auf Ihre Amazon SQS-, Amazon SNS-, AWS Lambda- oder Amazon KDS-Benachrichtigungsziele ermöglichen. Weitere Informationen finden Sie unter [Verwenden der Ressourcenzugriffsrolle Call Analytics für das Amazon Chime SDK](call-analytics-resource-access-role.md) in diesem Handbuch.

## Veranstaltungen zur Suche nach Rednern
<a name="va-speaker-search-events"></a>

Ereignisse zur Suche nach Rednern haben den Typ „`SpeakerSearchStatus`Detail“.

Amazon Chime SDK Voice Connectors senden die folgenden Lautsprecher-Suchereignisse:
+ Die Identifizierung stimmt überein
+ Generierung von Spracheinbettung

Die Ereignisse können den folgenden Status haben:
+ `IdentificationSuccessful`— Es wurde erfolgreich mindestens eine passende Sprachprofil-ID mit einem hohen Konfidenzwert in der angegebenen Sprachprofildomäne identifiziert.
+ `IdentificationFailure`— Identifizierung konnte nicht durchgeführt werden. Ursachen: Der Anrufer spricht mindestens 10 Sekunden lang nicht, schlechte Audioqualität.
+ `IdentificationNoMatchesFound`— In der angegebenen Sprachprofildomäne konnte keine Übereinstimmung mit hoher Zuverlässigkeit gefunden werden. Der Anrufer ist möglicherweise neu, oder seine Stimme hat sich geändert.
+ `VoiceprintGenerationSuccessful`— Das System generierte eine Spracheinbettung mithilfe von 20 Sekunden ohne Geräuschlosigkeit.
+ `VoiceprintGenerationFailure`— Das System konnte keine Spracheinbettung generieren. Ursachen: Der Anrufer spricht mindestens 20 Sekunden lang nicht, schlechte Audioqualität.

### Die Identifizierung stimmt überein
<a name="va-id-matches"></a>

Nachdem die [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 für einen bestimmten Vorgang aufgerufen wurde`transactionId`, sendet der Voice Connector-Dienst nach 10 Sekunden Spracheingabe eine Benachrichtigung über den Identifizierungsabgleich zurück. Der Dienst gibt die 10 besten Treffer zusammen mit einer Stimmprofil-ID und einem Konfidenzwert zwischen [0, 1] zurück. Je höher der Konfidenzwert, desto wahrscheinlicher ist es, dass der Sprecher des Anrufs mit der Stimmprofil-ID übereinstimmt. Wenn das Modell für maschinelles Lernen keine Treffer findet, enthält das `detailStatus` Feld der Benachrichtigung Folgendes`IdentificationNoMatchesFound`.

Das folgende Beispiel zeigt eine Benachrichtigung über einen erfolgreichen Treffer.

```
{    
    "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
    }
}
```

### Generierung von Spracheinbettung
<a name="va-voice-print-generation"></a>

Nach weiteren 10 Sekunden Spracheingabe ohne Ton sendet der Voice Connector eine Benachrichtigung über die Generierung der Spracheinbettung an die Benachrichtigungsziele. Sie können neue Spracheinbettungen in ein Stimmprofil aufnehmen oder einen Ausdruck aktualisieren, der sich bereits in einem Sprachprofil befindet.

Das folgende Beispiel zeigt die Benachrichtigung für einen erfolgreichen Abgleich, was bedeutet, dass Sie das zugehörige Stimmprofil aktualisieren können.

```
{
    "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
    }
}
```

## Ereignisse zur Stimmentonanalyse
<a name="va-tone-status"></a>

Ereignisse zur Stimmenanalyse haben den Typ „`VoiceToneAnalysisStatus`Detail“. Die Analysen können folgende Status zurückgeben:
+ `VoiceToneAnalysisSuccessful`— Die Stimmen des Anrufers und des Agenten wurden erfolgreich nach Stimmungswahrscheinlichkeiten — positiv, negativ oder neutral — analysiert.
+ `VoiceToneAnalysisFailure`— Die Tonanalyse konnte nicht durchgeführt werden. Dies kann passieren, wenn der Anrufer 10 Sekunden lang hängen bleibt, ohne zu sprechen, oder wenn die Audioqualität zu schlecht wird.
+ `VoiceToneAnalysisCompleted`— Die Stimmen von Benutzern und Agenten wurden erfolgreich auf Stimmungswahrscheinlichkeiten für den gesamten Anruf hin analysiert. Dies ist das letzte Ereignis, das gesendet wird, wenn die Stimmenanalyse abgeschlossen ist.

Das folgende Beispiel zeigt ein typisches Ereignis zur Stimmentonanalyse.

```
{
  "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"
}
```

## Zusammenfassung der Ereignisse nach dem Anruf
<a name="va-post-call-summary-events"></a>

Eine Zusammenfassung der Ereignisse nach dem Anruf wird 5 Minuten nach Ende des Anrufs gesendet. Diese Zusammenfassungen bieten einen Überblick über die Aufgaben zur Sprechersuche, die während des Anrufs durchgeführt wurden.

Das folgende Beispiel zeigt eine Zusammenfassung nach dem Anruf mit der besten Übereinstimmung mit dem Stimmprofil, der bestätigten Sprecheridentität und einer Liste der Sprachprofile, die über die während des Anrufs `CreateVoiceProfile` getätigten `UpdateVoiceProfile` API-Aufrufe erstellt oder aktualisiert wurden.

```
{
    "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",
                }
            ]
        }
    }
}
```

# Beispiel für Sprachanalyse-Lambda-Funktion für das Amazon Chime SDK
<a name="va-sample-lambda"></a>

Der Python-Code im folgenden Beispiel verarbeitet Benachrichtigungen, die von einem Voice Connector empfangen wurden. Sie können den Code zu einer AWS Lambda-Funktion hinzufügen. Sie können es auch verwenden, um Ihre Amazon SQS SQS-Warteschlange, Ihr Amazon SNS SNS-Thema oder Ihren Amazon Kinesis Data Stream auszulösen. Sie können die Benachrichtigungen dann `EventTable` für eine future Verarbeitung speichern. Die genauen Benachrichtigungsformate finden Sie unter[Grundlegendes zu Benachrichtigungen für das 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
```

**Wichtig**  
Sie müssen Ihre Zustimmung einholen, bevor Sie den [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)oder anrufen [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. Wir empfehlen, dass Sie die Ereignisse in einem Wartebereich wie Amazon DynamoDB so lange fortführen, bis Sie die Zustimmung erhalten.