前提条件
Saleforce API Version : v55.0
serverlessrepo-AmazonConnectSalesforceLambda : 5.19.0
この記事は、2022/10頃に書かれています。
AmazonConnect自体には、コンタクト追跡レコードをFirehoseに流す機能があるけど、連携用のLambdaは提供されてないけど、提供されてるLambdaを流用して、どうにかならないかな?というお試しした話の後編。
- serverlessrepo-AmazonConnectSalesf-sfIntervalAgent-xxxxxx
- serverlessrepo-AmazonConnectS-sfContactTraceRecord-xxxxxx
設定に迷った時に参照するのは、上記2つの『Amazon Connect Salesforce CTI Adapter』で作成されるLambdaです。
Lambdaの作成
Lambdaの一覧画面から作成画面へ遷移する。
Lambdaのレイヤー
名前 | 値 |
---|---|
マージ順序 | 1 |
名前 | sfLambdaLayer |
レイヤーバージョン | 1 |
互換性のあるランタイム | python3.7 |
互換性のあるアーキテクチャ | - |
バージョン ARN | arn:aws:lambda:リージョン:AWSアカウントID:layer:sfLambdaLayer:1 |
LambdaのIAM(権限:ロール&ポリシー)
『Amazon Connect Salesforce CTI Adapter』で作成されたポリシーで流用するのは、下記の3つです。
- serverlessrepo-AmazonConnectSalesforceLambda-CloudWatchManagedPolicy-XXXXXX
- serverlessrepo-AmazonConnectSalesforceLambda-KMSManagedPolicy-XXXXXX
- serverlessrepo-AmazonConnectSalesforceLambda-SecretsManagerManagedPolicy-XXXXXX
新規作成分:S3読み取り用
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::FirehoseのS3出力先バケット名/*"
],
"Effect": "Allow"
}
]
}
新規作成分:Salesforce連携用Lamdba実行用
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"lambda:InvokeAsync",
"lambda:InvokeFunction"
],
"Resource": [
"arn:aws:lambda:リージョン:AWSアカウントID:function:serverlessrepo-AmazonConn-sfExecuteTranscriptionSt-XXXXXX",
"arn:aws:lambda:リージョン:AWSアカウントID:function:serverlessrepo-AmazonConnectS-sfContactTraceRecord-XXXXXX"
],
"Effect": "Allow"
}
]
}
コンタクト追跡レコードの連携用という意味では、『AmazonConnectS-sfContactTraceRecord』の方の実行許可があれば良いのですが、コピー元のポリシーと揃える。
Lambdaの環境変数
キー | 値 |
---|---|
EXECUTE_CTR_IMPORT_LAMBDA | serverlessrepo-AmazonConnectS-sfContactTraceRecord-xxxxxx |
EXECUTE_TRANSCRIPTION_STATE_MACHINE_LAMBDA | serverlessrepo-AmazonConn-sfExecuteTranscriptionSt-xxxxxx |
LOGGING_LEVEL | INFO |
POSTCALL_CTR_IMPORT_ENABLED | true |
POSTCALL_RECORDING_IMPORT_ENABLED | false |
POSTCALL_TRANSCRIBE_ENABLED | false |
SF_ADAPTER_NAMESPACE | 他Lambdaを参照して同じネームスペースを設定 |
SF_CREDENTIALS_SECRETS_MANAGER_ARN | 他Lambdaを参照して同じSECRETSのARNを設定 |
SF_HOST | https://利用ドメイン.my.salesforce.com |
SF_PRODUCTION | 本番かsandboxを利用しているかで切り替える(true/false) |
SF_USERNAME | 他Lambdaを参照して連携用のユーザIDを設定 |
SF_VERSION | 他Lambdaを参照して同じバージョンを設定 |
Salesforceへの連携処理も新規作成のLambdaで行うか、現状の実装の通り、非同期Lambda実行とするか迷ったので、環境変数は、どちらにでも対応できるように余分に設定しています。
Lambdaの起動設定(メモリ&タイムアウト)
新規作成時の「デフォルト:3秒」は、流石に厳しいので1分に伸ばしています。
LambdaのS3のPUTトリガー
Firehoseはデータを一定周期でS3にファイル出力をしてくれるので、履歴データ連携のようにS3のPUTトリガーを設定することで連携できます。
拡張子がつかないので、Prefix条件とSuffix条件はつけれません。専用のS3バケットが必要です。
設定 | 値 |
---|---|
Bucket arn | arn:aws:s3:::バケット名 |
Event type | s3:ObjectCreated:Put |
Notification name | s3トリガー名 |
Prefix | なし |
Service principal | s3.amazonaws.com |
Source account | AWSアカウントID |
Suffix | なし |
後半総括
既存で動いてるLambdaがある時に、どの辺りを設定を確認して設定を施すか?といった所を中心に書く事になりましたが、前編・後編を併せて、コンタクト追跡レコードのFirehose~S3~経由で連携する事ができるようになりました。
(純正のCTIアダプターにも機能として実装して欲しいですね!)
AWSの相談・お困りごとありましたら、、、
AWSの活用方法や、お困りごとの相談、随時、お仕事の受付しております。