Skip to content

Commit aad0587

Browse files
committed
Merge branch 'develop' v0.4.0
2 parents 044f80b + a5257a8 commit aad0587

25 files changed

+1096
-403
lines changed

CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [0.4.0] - 2022-11-27
8+
### Added
9+
- Supports ingestion of post-call output transcripts from Transcribe Real-time Call Analytics.
10+
- Supports integration with Live Call Analytics and Agent Assist (LCA) v0.6.0 or later. See [LCA Integration](./README.md#live-call-analytics-and-agent-assist-companion-solution)
11+
12+
713
## [0.3.4] - 2022-11-9
814
### Added
915
- Additional processing for Genesys CTR telephony files. See [Integration with Telephony CTR Files](./README.md#integration-with-telephony-ctr-files)
@@ -90,7 +96,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9096
### Added
9197
- Initial release
9298

93-
[Unreleased]: https://github.com/aws-samples/amazon-transcribe-post-call-analytics/compare/v0.3.4...develop
99+
[Unreleased]: https://github.com/aws-samples/amazon-transcribe-post-call-analytics/compare/v0.4.0...develop
100+
[0.4.0]: https://github.com/aws-samples/amazon-transcribe-post-call-analytics/releases/tag/v0.3.4
94101
[0.3.4]: https://github.com/aws-samples/amazon-transcribe-post-call-analytics/releases/tag/v0.3.4
95102
[0.3.3]: https://github.com/aws-samples/amazon-transcribe-post-call-analytics/releases/tag/v0.3.3
96103
[0.3.2]: https://github.com/aws-samples/amazon-transcribe-post-call-analytics/releases/tag/v0.3.2

README.md

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,26 @@
66

77
Your contact center connects your business to your community, enabling customers to order products, callers to request support, clients to make appointments, and much more. Each conversation with a caller is an opportunity to learn more about that caller’s needs, and how well those needs were addressed during the call. You can uncover insights from these conversations that help you manage script compliance and find new opportunities to satisfy your customers, perhaps by expanding your services to address reported gaps, improving the quality of reported problem areas, or by elevating the customer experience delivered by your contact center agents.
88

9-
This sample solution, Post Call Analytics (PCA), does most of the heavy lifting associated with providing an end-to-end solution that can process call recordings from your existing contact center. PCA provides actionable insights to spot emerging trends, identify agent coaching opportunities, and assess the general sentiment of calls.
9+
This sample solution, Post Call Analytics (PCA), does most of the heavy lifting associated with providing an end-to-end solution that can process call recordings from your existing contact center. PCA provides actionable insights to spot emerging trends, identify agent coaching opportunities, and assess the general sentiment of calls.
10+
11+
If you already have Amazon Transcribe transcripts generated from the Streaming Call Analytics feature then those output transcripts can de delivered to PCA so that they can be aggregated and analyzed in exactly the same way as any audio files that you process from telephony system. You can use PCA with audio files, with transcript files, or with both.
12+
13+
*(New!) The latest version (v0.6.0) of our companion Live Call Analytics and Agent Assist (LCA) supports Amazon Transcribe Real-time Call Analytics and provides easy integration with PCA. See [Live Call Analytics and Agent Assist: Companion Solution](#live-call-analytics-and-agent-assist-companion-solution) section below.*
1014

1115
PCA currently supports the following features:
1216

13-
* **Transcription**
17+
* **Source Input Data**
18+
* Audio files can be delivered to audio ingestion location in Amazon S3, which is defined in AWS Systems Manager Parameter store in the bucket defined in `InputBucketName` and folder `InputBucketRawAudio`.
19+
* Transcript files from Transcribe's Streaming Analytics APIs can be delivered to the transcript ingest location in Amazon S3, which is defined in AWS Systems Manager Parameter store in the bucket defined in `InputBucketName` and folder `InputBucketOrigTranscripts`
20+
21+
22+
* **Transcription** *(audio files only)*
1423
* Batch turn-by-turn transcription with support for [Amazon Transcribe custom vocabulary](https://docs.aws.amazon.com/transcribe/latest/dg/custom-vocabulary.html) for accuracy of domain-specific terminology
1524
* [Personally identifiable information (PII) redaction](https://docs.aws.amazon.com/transcribe/latest/dg/call-analytics-pii-redaction.html) from transcripts and audio files, and [vocabulary filtering](https://docs.aws.amazon.com/transcribe/latest/dg/create-filter.html) for masking custom words and phrases
1625
* Multiple languages and automatic language detection
1726
* Standard audio file formats
1827
* Caller and agent speaker labels using [channel identification](https://docs.aws.amazon.com/transcribe/latest/dg/channel-id.html) or [speaker diarization](https://docs.aws.amazon.com/transcribe/latest/dg/diarization.html)
19-
* **Analytics**
28+
* **Analytics** *(audio files only)*
2029
* Caller and agent sentiment details and trends
2130
* Talk and non-talk time for both caller and agent
2231
* Configurable Transcribe Call Analytics categories based on the presence or absence of keywords or phrases, sentiment, and non-talk time
@@ -44,13 +53,15 @@ Call recording audio files are uploaded to the S3 bucket and folder, identified
4453

4554
As each recording file is added to the input bucket, an S3 event notification triggers a Lambda function that initiates a workflow in Step Functions to process the file. The workflow orchestrates the steps to start an Amazon Transcribe batch job and process the results by doing entity detection and additional preparation of the call analytics results. Processed results are stored as JSON files in another S3 bucket and folder, identified in the main stack outputs as ``OutputBucket`` and ``OutputBucketPrefix``**.**
4655

56+
If you deliver transcript files rather than audio files then the majority of the above is bypassed, and the transcripts just undergo the same post-Transcribe results procesing, giving you a single store of call analytics data for your call data from multiple sources.
57+
4758
As the Step Functions workflow creates each JSON results file in the output bucket, an S3 event notification triggers a Lambda function, which loads selected call metadata into a DynamoDB table.
4859

4960
The PCA UI web app queries the DynamoDB table to retrieve the list of processed calls to display on the home page. The call detail page reads additional detailed transcription and analytics from the JSON results file for the selected call.
5061

5162
Amazon S3 lifecycle policies delete recordings and JSON files from both input and output buckets after a configurable retention period, defined by the deployment parameter `RetentionDays`. S3 event notifications and Lambda functions keep the DynamoDB table synchronized as files are both created and deleted.
5263

53-
When the `EnableTranscriptKendraSearch` parameter** **is `true`, the Step Functions workflow also adds time markers and metadata attributes to the transcription, which are loaded into an Amazon Kendra index. The transcription search web application is used to search call transcriptions. For more information on how this works, see [Make your audio and video files searchable using Amazon Transcribe and Amazon Kendra](http://www.amazon.com/mediasearch).
64+
When the `EnableTranscriptKendraSearch` parameter is `true`, the Step Functions workflow also adds time markers and metadata attributes to the transcription, which are loaded into an Amazon Kendra index. The transcription search web application is used to search call transcriptions. For more information on how this works, see [Make your audio and video files searchable using Amazon Transcribe and Amazon Kendra](http://www.amazon.com/mediasearch).
5465

5566
## Integration with Telephony CTR Files
5667

@@ -200,6 +211,10 @@ As before, your new password must have a length of at least 8 characters, and co
200211

201212
You’re now logged in to the transcript search Finder application. The sample audio files are indexed already, and ready for search.
202213

214+
## Live Call Analytics and Agent Assist: Companion solution
215+
216+
Our companion solution, Live Call Analytics and Agent Assist (LCA), offers real-time transcription and analytics capabilities by using the Amazon Transcribe real-time APIs. Unlike PCA, which transcribes and analyzes recorded audio after the call has ended, LCA transcribes and analyzes your calls as they are happening and provides real-time updates to supervisors and agents.  The new Amazon Transcribe Real-time Call Analytics service provides post-call analytics output from your streaming sessions just a few minutes after the call has ended. LCA (v 0.6.0 or later) can now send this post-call analytics data to PCA to provide analytics visualizations for completed calls without needing to transcribe the audio a second time. Configure LCA (v0.6.0 or later) to integrate with PCA (v0.4.0 or later) and use the two solutions together to get the best of both worlds.. See [Live call analytics and agent assist for your contact center with Amazon language AI services](https://www.amazon.com/live-call-analytics) for more information.
217+
203218
## Learn more
204219

205220
Check out the AWS blog post: [Post call analytics for your contact center with Amazon language AI services](https://www.amazon.com/post-call-analytics)

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.3.4
1+
0.4.0

output_json_structure.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -253,13 +253,15 @@ Present when the source of the conversation is Amazon Transcribe. A mixture of
253253
"TranscribeJobInfo": {
254254
"TranscriptionJobName": "string",
255255
"TranscribeApiType": "string",
256+
"StreamingSession": "string",
256257
"CompletionTime": "string",
257258
"VocabularyName": "string",
258259
"VocabularyFilter": "string",
259260
"MediaFormat": "string",
260261
"MediaSampleRateHertz": "integer",
261262
"MediaFileUri": "string",
262263
"MediaOriginalUri": "string",
264+
"RedactedTranscript": "boolean",
263265
"ChannelIdentification": "boolean",
264266
"AverageWordConfidence": "float",
265267
"CombinedAnalyticsGraph": "string"
@@ -270,18 +272,20 @@ Present when the source of the conversation is Amazon Transcribe. A mixture of
270272

271273
| Field | Type | Description |
272274
| ---------------------- | ------ | ------------------------------------------------------------ |
273-
| TranscriptionJobName | string | The name of the transcription job |
275+
| TranscriptionJobName | string | The name of the transcription job (audio file input) or the name of the transcription file (transcription file input) |
274276
| TranscribeApiType | string | The Transcribe API used, must be one of: `standard`, `analytics` |
277+
| StreamingSession | string | ID for any associated Transcribe Streaming session |
275278
| CompletionTime | string | A timestamp that shows when the job was completed |
276279
| VocabularyName | string | The name of the vocabulary used in the transcription job |
277280
| VocabularyFilter | string | The name and mask method of the vocabulary filter used in the transcription job |
278281
| MediaFormat | string | The format of the input media file, as determined by Amazon Transribe |
279282
| MediaSampleRateHertz | Int | The sample rate, in Hertz, of the audio track in the input audio |
280283
| MediaFileUri | string | The S3 object location of the media file to use during playback, as we may playback an audio-redacted version or a version that has a format unplayable in all browsers with the HTML5 audio control |
281284
| MediaOriginalUri | string | The S3 object location of the original input audio file |
285+
| RedactedTranscript | bool | Indicates that the transcript has been redacted |
282286
| ChannelIdentifcation | bool | Indicates whether the transcription job used channel- (true) or speaker-separation (false) |
283287
| AverageWordConfidence | float | Percentage value between 0.00 and 1.00 indicating overall word confidence score for this job |
284-
| CombinedAnalyticsGraph | string | S3 URL for the pre-generated combined Call Analytics chart |
288+
| CombinedAnalyticsGraph | string | S3 URL for the pre-generated combined Call Analytics chart |
285289

286290
### SpeechSegments
287291

pca-main-nokendra.template

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
AWSTemplateFormatVersion: "2010-09-09"
22

3-
Description: Amazon Transcribe Post Call Analytics - PCA (v0.3.4) (uksb-1sn29lk73)
3+
Description: Amazon Transcribe Post Call Analytics - PCA (v0.4.0) (uksb-1sn29lk73)
44

55
Parameters:
66

@@ -73,8 +73,8 @@ Parameters:
7373

7474
InputBucketAudioPlayback:
7575
Type: String
76-
Default: mp3
77-
Description: Folder that holds the audio files to playback in the browser when original audio cannot be used
76+
Default: playbackAudio
77+
Description: Folder that holds the audio files to playback in the browser.
7878

7979
InputBucketFailedTranscriptions:
8080
Type: String
@@ -93,6 +93,13 @@ Parameters:
9393
Default: originalAudio
9494
Description: Prefix/Folder that holds the audio files to be ingested into the system
9595

96+
InputBucketOrigTranscripts:
97+
Type: String
98+
Default: originalTranscripts
99+
Description: >
100+
Folder that holds Transcripts from other applications (e.g. Live Call Analytics) that are to be
101+
processed as if PCA had processed that audio
102+
96103
MaxSpeakers:
97104
Type: String
98105
Default: "2"
@@ -353,6 +360,7 @@ Metadata:
353360
Parameters:
354361
- InputBucketFailedTranscriptions
355362
- InputBucketRawAudio
363+
- InputBucketOrigTranscripts
356364
- InputBucketAudioPlayback
357365
- OutputBucketParsedResults
358366
- OutputBucketTranscribeResults
@@ -503,6 +511,7 @@ Resources:
503511
- !Ref InputBucket
504512
- !Ref InputBucketName
505513
InputBucketRawAudio: !Ref InputBucketRawAudio
514+
InputBucketOrigTranscripts: !Ref InputBucketOrigTranscripts
506515
MaxSpeakers: !Ref MaxSpeakers
507516
MinSentimentNegative: !Ref MinSentimentNegative
508517
MinSentimentPositive: !Ref MinSentimentPositive
@@ -597,6 +606,14 @@ Outputs:
597606
Description: S3 Bucket prefix/folder for uploading input audio files
598607
Value: !Ref InputBucketRawAudio
599608

609+
InputBucketTranscriptPrefix:
610+
Description: S3 Bucket prefix/folder for uploading input transcripts
611+
Value: !Ref InputBucketOrigTranscripts
612+
613+
InputBucketPlaybackAudioPrefix:
614+
Description: S3 Bucket prefix/folder for audio used for playboack from browser
615+
Value: !Ref InputBucketAudioPlayback
616+
600617
OutputBucket:
601618
Description: S3 Bucket where Transcribe output files are delivered
602619
Value:

pca-main.template

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
AWSTemplateFormatVersion: "2010-09-09"
22

3-
Description: Amazon Transcribe Post Call Analytics - PCA (v0.3.4) (uksb-1sn29lk73)
3+
Description: Amazon Transcribe Post Call Analytics - PCA (v0.4.0) (uksb-1sn29lk73)
44

55
Parameters:
66

@@ -37,7 +37,7 @@ Parameters:
3737

3838
ComprehendLanguages:
3939
Type: String
40-
Default: en | es | fr | de | it | pt | ar | hi | ja | ko | zh | zh-TW
40+
Default: de | en | es | it | pt | fr | ja | ko | hi | ar | zh | zh-TW
4141
Description: Languages supported by Comprehend's standard calls, separated by " | "
4242

4343
ContentRedactionLanguages:
@@ -73,8 +73,8 @@ Parameters:
7373

7474
InputBucketAudioPlayback:
7575
Type: String
76-
Default: mp3
77-
Description: Folder that holds the audio files to playback in the browser when original audio cannot be used
76+
Default: playbackAudio
77+
Description: Folder that holds the audio files to playback in the browser
7878

7979
InputBucketFailedTranscriptions:
8080
Type: String
@@ -93,6 +93,13 @@ Parameters:
9393
Default: originalAudio
9494
Description: Prefix/Folder that holds the audio files to be ingested into the system
9595

96+
InputBucketOrigTranscripts:
97+
Type: String
98+
Default: originalTranscripts
99+
Description: >
100+
Folder that holds Transcripts from other applications (e.g. Live Call Analytics) that are to be
101+
processed as if PCA had processed that audio
102+
96103
MaxSpeakers:
97104
Type: String
98105
Default: "2"
@@ -355,6 +362,7 @@ Metadata:
355362
Parameters:
356363
- InputBucketFailedTranscriptions
357364
- InputBucketRawAudio
365+
- InputBucketOrigTranscripts
358366
- InputBucketAudioPlayback
359367
- OutputBucketParsedResults
360368
- OutputBucketTranscribeResults
@@ -635,6 +643,7 @@ Resources:
635643
- !Ref InputBucket
636644
- !Ref InputBucketName
637645
InputBucketRawAudio: !Ref InputBucketRawAudio
646+
InputBucketOrigTranscripts: !Ref InputBucketOrigTranscripts
638647
MaxSpeakers: !Ref MaxSpeakers
639648
MinSentimentNegative: !Ref MinSentimentNegative
640649
MinSentimentPositive: !Ref MinSentimentPositive
@@ -743,6 +752,14 @@ Outputs:
743752
Description: S3 Bucket prefix/folder for uploading input audio files
744753
Value: !Ref InputBucketRawAudio
745754

755+
InputBucketTranscriptPrefix:
756+
Description: S3 Bucket prefix/folder for uploading input transcripts
757+
Value: !Ref InputBucketOrigTranscripts
758+
759+
InputBucketPlaybackAudioPrefix:
760+
Description: S3 Bucket prefix/folder for audio used for playboack from browser
761+
Value: !Ref InputBucketAudioPlayback
762+
746763
OutputBucket:
747764
Description: S3 Bucket where Transcribe output files are delivered
748765
Value:

pca-server/cfn/lib/pca-definition.json

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
{
22
"Comment": "Post-Call Analytics Workflow with Transcribe and Comprehend",
3-
"StartAt": "TranscribeAudio",
3+
"StartAt": "CheckFileType?",
44
"States": {
5+
"CheckFileType?": {
6+
"Type": "Choice",
7+
"Comment": "Picks the correct pathway for audio and json files",
8+
"Choices": [
9+
{
10+
"Variable": "$.inputType",
11+
"StringEquals": "audio",
12+
"Next": "TranscribeAudio"
13+
}
14+
],
15+
"Default": "ProcessTranscriptHeader"
16+
},
517
"TranscribeAudio": {
618
"Comment": "Sends the file in S3 for Transcription",
719
"Type": "Task",
@@ -52,7 +64,7 @@
5264
{
5365
"Variable": "$.transcribeStatus",
5466
"StringEquals": "COMPLETED",
55-
"Next": "ProcessTranscription"
67+
"Next": "ProcessJobHeader"
5668
},
5769
{
5870
"Variable": "$.transcribeStatus",
@@ -62,6 +74,26 @@
6274
],
6375
"Default": "TranscriptionFailed"
6476
},
77+
"ProcessJobHeader": {
78+
"Comment": "Creates header information based upon the Transcribe job",
79+
"Type": "Task",
80+
"Resource": "${SFExtractJobHeaderArn}",
81+
"Retry": [{
82+
"IntervalSeconds": 5,
83+
"ErrorEquals": ["Lambda.Unknown"]
84+
}],
85+
"Next": "ProcessTranscription"
86+
},
87+
"ProcessTranscriptHeader": {
88+
"Comment": "Creates header information based upon what's available in a transcript file",
89+
"Type": "Task",
90+
"Resource": "${SFExtractTranscriptHeaderArn}",
91+
"Retry": [{
92+
"IntervalSeconds": 5,
93+
"ErrorEquals": ["Lambda.Unknown"]
94+
}],
95+
"Next": "ProcessTranscription"
96+
},
6597
"ProcessTranscription": {
6698
"Comment": "Takes the output from Transcribe and creates the initial results processing",
6799
"Type": "Task",

0 commit comments

Comments
 (0)