Amazon ConnectとAmazon Transcribeの組み合わせ

こんにちは。

今回は、前回までに作ったAmazon Connectのフローと、Amazon Transcribeを組み合わせて、Amazon Connectでの通話内容をテキスト化してみようと思います。

Amazon Transcribeとは

Amazon Transcribeは、AWSが提供する音声文字起こしサービスです。ユーザが用意した音声ファイルを、自動でテキスト化してくれます。

基本的な処理の流れとしては、まず音声ファイルをS3(AWSが提供するオブジェクトストレージサービス)にアップロードします。その後Amazon TranscribeでJOBを作成し、アップロードした音声ファイルの文字起こしを行います。

Amazon Transcribeの詳しいサービス内容は、公式サイトをご覧ください。

Amazon Connectでの通話内容をテキスト化

それではAmazon Connectでの通話内容を、Amazon Transcribeを使ってテキスト化していきます。

今回の処理の流れはこんな感じです。

・Amazon Connectで通話終了→S3に通話内容アップロード
・S3にアップロードされたのをトリガーにLambda処理開始
・LambdaでAmazon TranscribeのJOBを作成する
・通話内容をテキスト化

Amazon S3(Amazon Simple Storage Service)というストレージサービスを使います。Amazon Connectではあらかじめ設定をしておくと、通話内容が記録された音声ファイルを自動的にS3にアップロードしてくれます。

※通話内容を自動で記録するためには、「記録と分析の動作を設定する」ブロックを問い合わせフローに配置する必要があります。「エントリポイント」ブロックのすぐ後ろに配置し、通話記録設定をオンにする必要があります。

例)エージェント(オペレータ)と顧客両方の通話内容を記録する場合​

画像4

このように設定しておけば、通話終了後に通話内容(エージェントと顧客)がS3にアップロードされます。自分の場合、「connect」から始まる名前のパケットが自動作成され、その中に日付別に通話内容の音声ファイルが保存されていました。

この音声ファイルのアップロードをトリガーに、テキスト化までの処理を行うという流れです。

LambdaとS3の連携設定

S3をトリガーにLambdaを起動させる設定をします。

Lambdaで新しく関数を作成します(言語はNode.js)。
関数が作成できたら、次のような画面が出てくるので、「トリガーを追加」を選択します。

画像1

そしてトリガーの設定を「S3」で選択し、パケットで通話記録が保存されているパケットを選択します。「トリガーの有効化」にチェックを入れ、以下のようになっていれば大丈夫です。

画像2


Transcribeへのアクセス

次にLambdaからTranscribeにアクセスする事前設定を行います。

Lambda関数編集画面の「アクセス権限」タブを選択し、ロール名をクリックしてロールの編集画面を開きます。
「ポリシーをアタッチします」と書かれた青いボタンを押すと、アクセス権限追加の設定画面が開かれます。「AmazonTranscribeFullAccess」をチェックし、「ポリシーのアタッチ」を押してアクセス権限を追加します。

画像3

「AmazonTranscribeFullAccess」が追加されているのを確認できればOKです。

Lambda設定

それでは、Lambdaにコードを書いていきましょう。ここまで出来れば設定は完了です。

const AWS = require('aws-sdk');
const transcribeservice = new AWS.TranscribeService({apiVersion: '2017-10-26'});

exports.handler = async (event, context) => {
 const Bucket = event.Records[0].s3.bucket.name
 const ObjKey = event.Records[0].s3.object.key
 const FilePath = "https://s3-ap-northeast-1.amazonaws.com/" + Bucket + '/' + ObjKey
 const FileType = ObjKey.split(".")[1]
 const jobName = context.awsRequestId

 console.log('BucketName : ' + Bucket);
 console.log('ObjKey : ' + ObjKey);
 console.log('FilePath : ' + FilePath);
 console.log(FileType)

 const params = {
   LanguageCode: "ja-JP",                 
   Media: {                        
     MediaFileUri: FilePath
   },
   TranscriptionJobName: jobName,
   MediaFormat: FileType,
 };

 try{
   const response = await transcribeservice.startTranscriptionJob(params).promise()
   console.log(response)
   return response
 }catch(error){
   console.log(error)
 }
};


動きを確認

実際にAmazon Connectで通話をし、Transcribeが動いているか確認しましょう。問題なく設定できていれば、このように通話終了後にTranscribeに新規jobが追加されます。

画像5

StatusがCompleteになったら完了です。テキスト化出来ているか確認してみてください。


まとめ

今回は、S3に音声ファイルアップロード→Lambda起動→Transcribeでテキスト化、と言う流れで通話内容のテキスト化を行いました。

今回はテキスト化して終わりでしたが、テキスト化した内容を別のS3のパケットに保存して、それをトリガーにチャットアプリで通話内容が従業員に通知される、みたいな仕組みも作れたら良いですね。

今回も最後まで読んでいただきありがとうございました。




この記事が気に入ったらサポートをしてみませんか?