Amazon Connect CTI Adapter for Salesforce v5.7 音声データ連携をセットアップしてみました

記事タイトルとURLをコピーする

音声再生設定部分については、CTI Adapter for Salesforce v5.15より、CloudFrontを使用しないよう変更されました。最新の手順については公式ページをご確認ください。

amazon-connect.github.io


Amazon Connect CTI Adapter for Salesforce(以下CTIアダプタ)を利用し、セールスフォース上で音声データを再生する設定をしてみましたので、注意ポイントなどを紹介します
セールスフォースのページ上で下記のように、会話の文字起こし、感情分析が表示され、音声再生も可能となります

前提環境

CTIアダプタはアップデートが早く、仕組みも結構ダイナミックに変更されるので、対象となるバージョンはよく確認されることをおすすめします
v5.0がリリースされたのが2020年8月、その3ヶ月後の11月には今回のv5.7がリリースされています

blog.serverworks.co.jp

手順

CTIアダプタパッケージインストール(セールスフォース)

CTIアダプタをセールスフォースへインストールする手順は従来と同様、AppExchangeからのインストールと各種設定となっています
下記記事に注意点がありますので、ご参照ください

blog.serverworks.co.jp

なお、今回からインストールガイドがgithubへのリンクとなっています。 PDFですが、ベースとなる情報も同じリポジトリにあるので、PDFだと読みにくい場合はソースを参照することも可能です

https://github.com/amazon-connect/amazon-connect-salesforce-cti/blob/main/util/lightning.pdf
https://github.com/amazon-connect/amazon-connect-salesforce-cti/tree/main/lightning

Lambdaパッケージインストール(AWS)

インストールガイド 「Installing the Amazon Connect Salesforce Lambda Package」 セクション部分に沿って設定します
手順が少し複雑なので、ステップごとに手順と注意ポイントを残します

https://github.com/amazon-connect/amazon-connect-salesforce-cti/blob/main/lightning/02%20Installation/02%20Installing%20the%20Amazon%20Connect%20Salesforce%20Lambda%20Package.md

Check your Salesforce API Version

手順どおり、セールスフォースのApex ClassページからAPIバージョンを確認します
今回実施した際のバージョンは 50.0 でした

Create a New Connected App

設定→アプリケーションマネージャ→新規接続アプリケーション を操作し、 Amazon Connect Integration 接続アプリケーションを作成します

下記を控えておきます

  • コンシューマ鍵
  • コンシューマの秘密

Create a new API user

APIアクセス用のユーザーを作成します
実際に設定するのは下記となります

  • API_ONLY プロファイル作成
  • Amazon Connect Integration 接続アプリケーションへ API_ONLY プロファイルを関連付け
  • apiuser ユーザ作成
  • apiuser ユーザを AC_Administrator 権限セットへ関連付け
  • apiuser ユーザのセキュリティトークン払い出し

下記を控えておきます

  • apiuser のユーザ名
  • apiuser のパスワード
  • apiuser のセキュリティトークン

Gather Information from Your Amazon Connect Instance

Amazon Connectインスタンス側の情報を確認します

下記を控えておきます

  • Amazon ConnectインスタンスID
  • 通話記録保存先 S3バケット名
  • エクスポートされたレポート S3バケット名

音声データ関連の処理は問い合わせ追跡レコード(CTR)作成イベントをトリガーに実行されるため、Kinesis Data Streamが必要になります。 (別途Kinesis利用料金が発生します)
Kinesisストリームを作成し、Amazon Connectインスタンスへ指定します

データストリーミング→問い合わせ追跡レコード

また、KinesisストリームのARNを控えておきます

  • 問い合わせ追跡レコードに指定したKinesisストリームARN

Store Salesforce Credentials in AWS Secrets Manager

セールスフォースへのクレデンシャルを AWS Secrets Manager へ保存します

操作が前後するのですが、先に、シークレット作成ページの下部「新しいキーを追加」から暗号化キーを作成し、作成したキーのARNを控えておきます

シークレットへクレデンシャル情報(コンシューマ鍵、コンシューマの秘密、パスワード、セキュリティトークン)を指定し、シークレットを作成します
作成したシークレットのARNを控えておきます

Install the Amazon Connect Salesforce Lambda package

Lambdaパッケージをインストールします(やっと)
ここまでの手順で設定/確認してきた各種値をパラメータ設定してデプロイします

SalesforceHostの指定値はセールスフォース→設定→私のドメインページで確認できます
表示されているドメイン名の先頭に https:// を付加した文字列を指定します
DeveloperEditionであれば、下記のようになります

https://yourorgname-dev-ed.my.salesforce.com

設定パラメータ

パラメータ 設定値・例 補足
アプリケーション名 AmazonConnectSalesforceLambda デフォルト値
CTRKinesisARN arn:aws:kinesis:ap-northeast-1:000000000000:stream/connect-ctr-stream 上記手順で作成したKinesisストリームARN
ConnectReportingS3BucketName connect-xxxxxx 上記手順で控えた エクスポートされたレポート S3バケット名
HistoricalReportingImportEnabled true デフォルト値
LambdaLoggingLevel INFO デフォルト値
PrivateVpcEnabled false デフォルト値
RealtimeReportingImportEnabled true デフォルト値
SalesforceAdapterNamespace amazonconnect デフォルト値
SalesforceCredentialsKMSKeyARN arn:aws:kms:ap-northeast-1:000000000000:key/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 上記手順で作成したキー(KMS)のARN
SalesforceCredentialsSecretsManagerARN arn:aws:secretsmanager:ap-northeast-1:000000000000:secret:SalesforceCredentials1-xxxxxx 上記手順で作成したシークレット(Secrets Manager)のARN
SalesforceHost https://xxxxxxx-dev-ed.my.salesforce.com セールスフォース私のドメインURL
SalesforceProduction true デフォルト値(本番組織/DE組織はtrue,Sandboxはfalse)
SalesforceUsername your-apiuser@example.com apiuser のユーザID
SalesforceVersion v50.0 上記手順で確認したセールスフォースAPIバージョン
VpcSecurityGroupList (ブランク) デフォルト値
VpcSubnetList (ブランク) デフォルト値
AmazonConnectInstanceId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 上記手順で確認したConnectインスタンスID
AmazonConnectQueueMaxRecords 100 デフォルト値
AmazonConnectQueueMetricsMaxRecords 100 デフォルト値
CTREventSourceMappingMaximumRetryAttempts 100 デフォルト値
ConnectRecordingS3BucketName connect-xxxxxx 上記手順で控えた 通話記録保存先 S3バケット名
PostcallCTRImportEnabled true デフォルト値
PostcallRecordingImportEnabled true デフォルト値
PostcallTranscribeEnabled true デフォルト値
TranscribeOutputS3BucketName connect-xxxxxx 上記手順で控えた 通話記録保存先 S3バケット名
TranscriptionJobCheckWaitTime 20 デフォルト値

Test the Core Functionality

デプロイしたLambda関数をテスト実行し、セールスフォースへアクセスできるか確認します
インストールガイドの手順だと下記のようなエラーになりました

{
  "errorMessage": "An error occurred (AccessDeniedException) when calling the PutSecretValue operation: Access to KMS is not allowed",
  "errorType": "ClientError",
  "stackTrace": [
    "  File \"/var/task/sfInvokeAPI.py\", line 41, in lambda_handler\n    sf.sign_in()\n",

手順にはありませんが、上記手順で作成したキー(KMS)のキーユーザーとして、Lambda実行ロールを追加します

Lambdaからセールスフォースへアクセスし、データ取得ができることを確認します

コンタクトチャネル分析の設定

続いて、インストールガイド 「Contact Channel Analytics」 セクション部分に沿って設定します こちらも、ステップごとに手順と注意ポイントを残します

https://amazon-connect.github.io/amazon-connect-salesforce-cti/docs/lightning/salesforce-lambdas/04-contact-channel-analytics

Call Recording Import (1)

下記ドキュメントに沿ってCloudFrontの設定を行います
(慣れていないとちょっと複雑な作業になるかもしれません)

  • ローカル環境でキーペアを作成
  • CloudFrontへパブリックキーをアップロード
  • CloudFrontキーグループを作成し、アップロードしたパブリックキーを関連付け
  • CloudFrontディストリビューションの署名者として、キーグループを関連付け

docs.aws.amazon.com

パブリックキーを作成します
パブリックキーIDを控えておきます

キーグループを作成します

ディストリビューションへ署名者を設定
(ディストリビューションはLambdaパッケージインストール手順で作成されています)

設定結果

Call Recording Import (2~5)

上記で作成したキーペアの秘密鍵をSecrets Managerへ設定します

CloudFrontPrivateKey へは、秘密鍵は改行文字をスペース文字へ置換して長い文字列として設定します
テキストエディタで置換するか、シェルなら tr コマンドを利用して下記のようにして置換できます

$ tr '\n' ' ' < private_key.pem

CloudFrontAccessKeyID へは、上記手順で控えたCloudFrontパブリックキーIDを指定します

Call Recording Import (6~10)

音声データが保存されているS3バケットのCORS設定です
アクセス元となる、セールスフォース側のページ(Visualforceページ)URLを許可する設定になります

Call Recording Import (11~14)

IAMユーザを作成します
作成されているポリシー(invokeSfGenerateAudioRecordingStreamingURLPolicy)を適用し、最後にアクセスキーIDとシークレットアクセスキーを控えておきます

Call Recording Import (15)

Lambda関数 sfGenerateAudioRecording のフルネームを控えておきます
(後続の手順でセールスフォースへ設定します)

serverlessrepo-AmazonConn-sfGenerateAudioRecording-XXXXXXXXXX のようになります

Call Recording Import (16~20)

CloudFrontで使用するLambda関数を作成します
Lambda@Edgeとしてデプロイするため、リージョンは us-east-1 を指定します
最後にCloudFrontディストリビューションを指定してデプロイします

Salesforce Side Setup

Named Credentialを設定します
日本語表示の場合は 指定ログイン情報 になります
(訳がなかなか分かりにくい印象)

利用するユーザを権限セット AC_CallRecording へ追加します

Enabling call recording import

音声連携機能を有効にするため、Amazon Connectの問い合わせフローを修正します
問い合わせ属性 postcallRecordingImportEnabledtrue をセットします
(逆にいうと、音声連携したくないフローはこの属性をセットしないようにします)

Adding Contact Channel Analytics to the Service Console

セールスフォースのページにコンタクトチャネル分析が表示されるように設定します

補足ですが、音声データを保存するために、問い合わせフロー内で通話記録を有効にしておく必要がありますので確認しておきます

Recording Transcripts

Amazon Transcribe を利用した音声の文字起こし設定を行います

Enabling recording transcription

機能を有効にするため、Amazon Connectの問い合わせフローを修正します
問い合わせ属性へ下記設定すると、その通話について文字起こし機能が実行されます
こちらも、機能を実行したくない場合は属性を設定しないか、true 以外を設定すれば良いので、フローによって柔軟に設定可能です

  • postcallTranscribeEnabledtrue を設定
  • postcallTranscribeLanguageja-JP を設定(日本語の場合)

AI Driven Contact Analysis

Amazon Comprehend を利用した感情分析機能を有効にします
文字起こしと同様、Amazon Connectの問い合わせフローを修正します
問い合わせ属性へ下記設定します

  • postcallTranscribeComprehendAnalysissnt,dl,kw
    • 必要な機能をカンマ区切りで指定します

指定可能な機能と値は下記のようになっています
注意: Syntax Analysis は現状日本語対応していません。指定するとエラーとなり、情報連携されません

機能
snt Sentiment Analysis 感情分析
kw Keyphrase Extraction キーフレーズ抽出
dl Language Detection 言語検出
ne Custom Entities カスタムエンティティ
syn Syntax Analysis 構文解析

動作確認

通話終了後、1分程度でセールスフォースページ上で音声再生が可能に、さらに数分待つと文字起こし結果が表示されます 🙌
(通話とは、アフターコールワークを含みます)

最後に

CTIアダプタv4系では音声ファイルが添付される、つまりセールスフォースのストレージに複製される動作でしたが、本バージョンではS3のファイルを直接参照、再生する仕組みに変更になっています
複製すると保持期間ポリシーなどの運用・管理も煩雑になると思いますので、そのあたりを考慮したアップデートと推測しています

AWSとSalesforce、AWSの中でも複数のサービスを組み合わせて利用するため、簡単設定とはとても言えませんが、機能は充実してきている印象ですね