View a markdown version of this page

Processore di analisi delle chiamate e destinazioni di output per l'SDK Amazon Chime - SDK Amazon Chime

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Processore di analisi delle chiamate e destinazioni di output per l'SDK Amazon Chime

Puoi specificare elementi univoci solo una volta per configurazione della pipeline di Media Insights. Tutti i processori e i sink devono risiedere nello stesso AWS account e devi crearli nella stessa AWS regione dell'endpoint che chiami. Ad esempio, se utilizzi l'us-east-1endpoint per Amazon Chime SDK Media Pipelines, non puoi trasmettere un Kinesis Data Stream dalla regione. us-west-2

Espandi ogni sezione per informazioni su ciascuna destinazione.

Lavelli supportati:. KinesisDataStreamSink

Non puoi combinare questo processore con un processore Amazon Transcribe. Per ulteriori informazioni su Amazon Transcribe Call Analytics, consulta l'analisi delle Real-time chiamate nella Amazon Transcribe Developer Guide. Se abiliti l'analisi post call includendola PostCallAnalyticsSettings nella chiamata AmazonTranscribeCallAnalyticsProcessorConfiguration API, riceverai degli artefatti nella posizione Amazon S3 specificata quando la pipeline di Media Insights si interrompe e l'elaborazione termina.

Nota

Se metti in pausa la pipeline per più di 35 secondi e poi la riprendi, gli artefatti successivi alla chiamata vengono generati in file separati con ID di sessione diversi nel bucket Amazon S3.

Post-call gli artefatti includono un file JSON di analisi e un file WAV o Opus di registrazione audio. L'URL del bucket Amazon S3 per i file di registrazione oscurati (se abiliti la redazione dei contenuti) e non oscurati viene inviato a Kinesis Data Stream una volta per ogni sessione di analisi delle chiamate di Amazon Transcribe Post Call come parte della sezione dei metadati. onetimeMetadata

L'analisi delle chiamate con Amazon Transcribe prende i dati audio in ingresso da Kinesis Video Stream.

  • Codifica multimediale supportata: audio little-endian a 16 bit firmato PCM.

  • Frequenze di campionamento multimediali supportate: tra 8.000 Hz e 48.000 Hz.

StreamConfigurationinput per un processo di Amazon Transcribe Analytics:

  • È necessario specificare il valore KinesisVideoStreamArn per ogni stream.

  • (Facoltativo) Il KVS FragmentNumber avvia un processo di analisi delle chiamate con il blocco dopo un frammento specificato. Se non viene fornito, utilizza la parte più recente dello streaming video Kinesis.

  • StreamChannelDefinitionDefinisce chi sta parlando. L'analisi delle chiamate di Amazon Transcribe richiede un audio a due canali. Devi specificare quale altoparlante si trova su quale canale quando chiami l'API. CreateMediaInsightsPipeline Ad esempio, se il tuo agente parla per primo, imposti su ChannelId 0 to per indicare il primo canale e ParticipantRole su AGENT per indicare che l'agente sta parlando.

Nota

Quando utilizzi un Voice Connector per crearne uno MediaInsightsPipeline con un processore di analisi delle chiamate Amazon Transcribe, l'audio della connessione dell'account Voice Connector è AGENT destinato a. CUSTOMER ParticipantRole

Per Voice Connector SIPREC, ci affidiamo ai metadati SIPREC. Nella maggior parte dei casi, l'etichetta dello stream con il valore lessicografico più basso è considerata la. AGENT

L'esempio seguente mostra l'ingresso Kinesis Video Stream per uno stream audio a doppio canale.

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

Al contrario, l'esempio seguente mostra due ingressi mono da due diversi stream Kinesis Video.

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

Ogni record Amazon Transcribe contiene un UtteranceEvent o un recordCategoryEvent, ma non entrambi. CategoryEventsavere un didetail-type. TranscribeCallAnalyticsCategoryEvent

L'esempio seguente mostra il formato di output dei metadati monouso per 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" }

L'esempio seguente mostra il formato di output di 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 }] } } } }

Se la configurazione di analisi delle chiamate è associata a un Amazon Chime SDK Voice Connector, il seguente payload di Voice Connector Update verrà inviato quando è disponibile un aggiornamento in streaming di Voice Connector. https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html

L'esempio seguente mostra un formato di metadati di aggiornamento per il processore Amazon Transcribe e il processore Transcribe Call Analytics.

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

L'esempio seguente mostra un formato di metadati di aggiornamento per Call Analytics Amazon S3 Recording.

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

Gli esempi seguenti mostrano i metadati per la registrazione di una chiamata SIP tra due persone, Alice e Bob. Entrambi i partecipanti inviano e ricevono audio e video. Per semplicità, l'esempio contiene solo frammenti di SIP e SDP e SRC registra gli stream di ciascun partecipante su SRS senza mixarli.

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>

L'esempio seguente mostra i metadati aggiornati quando un partecipante alla chiamata mette in attesa l'altro. In questo caso, riceve participant_id srfBElmCRp2QB23b7Mpk0w== solo flussi multimediali e non invia alcun file multimediale, quindi l'elemento send XML viene omesso. Al contrario, participant_id zSfPoSvdSDCmU3A3TRDxAw== invia contenuti multimediali all'altro partecipante, ma non li riceve, pertanto l'elemento recv XML viene omesso.

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>

L'esempio seguente mostra l'aggiornamento dei metadati quando la chiamata riprende. Il payload ora contiene gli elementi XML e. send recv

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>

Lavelli supportati:. KinesisDataStreamSink

Non puoi combinare questo processore con l'analisi delle chiamate Amazon Transcribe. Per ulteriori informazioni sull'input e sull'output di Amazon Transcribe, consulta Transcribe streaming audio nella Amazon Transcribe Developer Guide.

La sessione di analisi delle chiamate con Amazon Transcribe riceve l'input di dati audio da Kinesis Video Stream.

  • Supportato MediaEncoding: audio little-endian a 16 bit con firma PCM.

  • Frequenze di MediaSampleRate campionamento supportate: tra 8.000 Hz e 48.000 Hz.

StreamConfigurationinput per processori Amazon Transcribe:

  • È necessario specificare il valore KinesisVideoStreamArn per ogni stream.

  • (Facoltativo) KVSFragmentNumber: avvia un processo di analisi delle chiamate con il blocco dopo un frammento specifico. Se non viene fornito, utilizzerà l'ultimo blocco disponibile su Kinesis Video Stream.

  • StreamChannelDefinitionAmazon Transcribe attualmente supporta l'audio con due canali. È necessario specificarlo NumberOfChannels in fase di esecuzione. StreamChannelDefinition Inoltre, è necessario superare il limite ChannelId se si invia audio mono in due canali separati. Nella trascrizione, ai canali vengono assegnate le etichette ch_0 e ch_1. L'esempio seguente mostra l'ingresso KVS per lo streaming di un canale audio mono.

"StreamChannelDefinition" : {" NumberOfChannels" : 1 }

L'esempio seguente mostra l'ingresso KVS per due ingressi audio mono in due flussi diversi.

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

Per il Voice Connector creato MediaInsightsPipeline con un processore Amazon Transcribe, viene assegnato l'audio della gamba dell'account Voice Connector channel-0 e l'audio della gamba PSTN a. channel-1

Per Voice Connector SIPREC, ci affidiamo ai metadati SIPREC. Nella maggior parte dei casi, viene assegnata l'etichetta dello stream con il valore lessicografico più basso. channel-0

Per i processori di analisi delle chiamate Amazon Transcribe e Amazon Transcribe, se passate due stream Kinesis Video e ogni stream contiene un canale audio mono, interlacciamo entrambi i canali in un unico flusso audio prima di elaborare i dati di analisi delle chiamate Transcribe o Transcribe.

L'esempio seguente mostra un formato di output di metadati monouso per 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" }

L'esempio seguente mostra il formato di output di 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 }] } } }

Lavelli supportati:KinesisDataStreamSink, SqsQueueSinkSnsTopicSink, eLambdaFunctionSink.

Puoi combinare questo processore con il processore di analisi delle chiamate Amazon Transcribe, il processore Amazon Transcribe o la registrazione delle chiamate. È necessario utilizzare le StartVoiceToneAnalysisTask API StartSpeakerSearchTask o per richiamare un processore di analisi vocale. Per ulteriori informazioni sull'utilizzo dell'analisi vocale, consulta Utilizzo dell'analisi vocale dell'SDK di Amazon Chime. https://docs.aws.amazon.com/chime-sdk/latest/dg/voice-analytics.html

I record Kinesis Data Stream (KDS) generati dall'analisi delle chiamate includono l'ID della pipeline multimediale, il tipo di dettaglio, i metadati e le sezioni specifiche del processore. Per informazioni sul consumo di dati da un Kinesis Data Stream, consulta Reading Data from Amazon Kinesis Data Streams, nella guida per sviluppatori di Amazon Kinesis Streams. Per creare una configurazione con questo sink, è necessario disporre dell'kinesis:DescribeStreamautorizzazione per lo stream specificato.

Metadati

La metadata sezione dei record KDS generati contiene tutte le coppie chiave-valore specificate CallAnalyticsRuntimeMetadata durante la CreateMediaInsightsPipeline chiamata API. Se una sessione di analisi delle chiamate è stata avviata da un Voice Connector, la sezione dei metadati viene automaticamente popolata con i seguenti parametri:

  • transactionId

  • fromNumber

  • toNumber

  • callId

  • voiceConnectorId

  • direction

Oltre ai parametri mostrati sopra, la sezione dei metadati per le sessioni di analisi delle chiamate avviate da Voice Connector verrà compilata con un campo che contiene: oneTimeMetadata

  • inviteHeaders

  • siprecMetadata

Viene pubblicato su Kinesis Data Streams solo una volta all'inizio della sessione e ha un valore di disattivazione. detail-type CallAnalyticsMetadata

Puoi passare identificatori univoci MediaInsightsRuntimeMetadata per ogni chiamata CreateMediaInsightsPipeline API in modo da poter identificare in modo univoco l'origine di ogni record inviato al tuo Kinesis Data Stream.

La registrazione dell'analisi delle chiamate legge l'audio da uno stream KVS, lo registra come file audio e carica il file nel bucket Amazon S3 specificato. Dopo la registrazione, l'analisi delle chiamate invia anche i metadati della chiamata insieme alla posizione del file a KDS. Se abiliti un data warehouse, i metadati delle chiamate (inclusi i metadati SIPREC se è stato utilizzato SIPREC) vengono consegnati al data warehouse in una serie di tabelle Parquet su cui puoi interrogare.

Come qualsiasi altro processore di analisi delle chiamate, è necessario innanzitutto creare una configurazione per la pipeline. Puoi utilizzare la console SDK Amazon Chime o l'interfaccia a riga di comando per creare la configurazione. È quindi possibile utilizzare la CLI per creare la pipeline. Per ulteriori informazioni sull'uso della console per creare configurazioni di registrazione, fate riferimento aCreazione di configurazioni di analisi delle chiamate per l'SDK Amazon Chime, all'inizio di questa sezione. Per ulteriori informazioni sull'utilizzo dei flussi di lavoro di registrazione, fare riferimento aComprendere i flussi di lavoro per la registrazione delle chiamate per l'SDK Amazon Chime, all'inizio di questa sezione.

Per utilizzare la CLI per creare una configurazione

Esegui il comando seguente:

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

L'esempio seguente mostra un file JSON di configurazione con solo la registrazione abilitata:

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

Ricorda quanto segue:

  • Per abilitare la registrazione delle chiamate tramite Kinesis Video Streams, l'audio deve essere firmato PCM little-endian a 16 bit. La frequenza di campionamento deve essere di 8 kHz.

  • Gli sviluppatori devono impostare un periodo di conservazione dei dati sufficientemente lungo per consentire a Kinesis Video Stream di garantire che i frammenti vengano conservati e consumabili dall'analisi delle chiamate.

  • Se abiliti la registrazione delle chiamate, da sola o in combinazione con altri processori, devi fornire due ARN Kinesis Video Stream per la registrazione. La registrazione delle chiamate non supporta un singolo ingresso audio stereo.

L'esempio seguente mostra il formato di output dei metadati per la registrazione dell'analisi delle chiamate su 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" }

Per abilitare il miglioramento vocale, includi un VoiceEnhancementSinkConfiguration elemento in una chiamata CreateMediaInsightsPipelineConfiguration API.

Questo esempio mostra un elemento tipico.

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

Per aggiornare una configurazione, aggiungete l'VoiceEnhancementSinkConfigurationelemento a una chiamata UpdateMediaInsightsPipelineConfiguration API. Quando lo fai, l'GetMediaInsightsPipelineConfigurationAPI include l'VoiceEnhancementSinkConfigurationelemento nei risultati.

Questa richiesta di esempio mostra come abilitare Voice Enhancement e la registrazione di 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" }
Nota

L'VoiceEnhancementSinkelemento richiede sempre un S3RecordingSink elemento in una configurazione di analisi delle chiamate.