本ドキュメントは、AWS側からSalesforceの接続アプリケーションを介してAPIコールするための設定手順です。
以下、完了し発着信ができる状態になった後に実施する必要があります
なお、本手順はパートナーテレフォニーコンタクトセンター Service Cloud Voiceのバージョンは 19.0 を対象にしています。
概要
Salesforce の REST API を AWS Lambda 関数 InvokeSalesforceRestApiFunction を介してコールするための機能です。
本セットアップが完了すると、以下の機能をAmazon Connect のコンタクトフローから呼び出して利用ができるようになります。
- Salesforceのレコード作成 (
createRecord) - Salesforceのレコード更新 (
updateRecord) - Salesforceのレコードクエリ (
queryRecord)
加えて執筆時点では記述はありませんが、以下のような機能があります。
- Salesforceのグローバル検索SOSLを実行する (
searchRecord)
手動で、Lambda関数を起動して、リアルタイム文字起こしの結果を取得して、組織に取り込む (uploadTranscript,fetchUploadIdsStatus)- Service Cloud Voiceのディザスターリカバリーなど複数組織のユースケースなど、XMLインポートを通じて作成された 手動でAmazon Connect と Service Cloud Voiceが統合された時に使用
- Amazon Connectインスタンス と Service Cloud Voice構築時に作成される Lambda関数のリアルタイムアラート を Salesforceのプラットフォームイベントにパブリッシュする (
realtimeAlertEvent)- アラートの一覧はリンク先を参照
- Field Serviceで、顧客の電話番号とサービス予定(ServiceResourceId)割り当てられた派遣作業員の電話番号を取得する (
SFSPhoneCallFlowQuery)- 外線転送する用途で利用します
-
エージェントへの直通電話のための、エージェントに割り当てられた電話番号を取得(
fetchOutboundPhoneNumber)
準備
OpenSSLのコマンドを使用して、秘密鍵と自己証明書を作成する必要があります。
ターミナルを開き、which openssl コマンドを実行してコマンドが存在することを確認してください。
インストールされていない場合、インストールしてください。
セットアップ-接続アプリケーション
自己署名証明書を作成
以下のコマンドを実行して秘密鍵と自己署名証明書を作成します。
${Password} の部分は実際に使用するパスワードで置き換えてください。
-
作業用ディレクトリを作成
mkdir certificate cd certificate -
秘密鍵
server.keyを生成server.pass.keyは不要になるため削除しますopenssl genpkey -des3 -algorithm RSA -pass pass:${Password} -out server.pass.key -pkeyopt rsa_keygen_bits:2048 openssl rsa -passin pass:${Password} -in server.pass.key -out server.key rm server.pass.key -
秘密鍵(
server.key)から証明書署名要求(CSR:公開鍵)を生成
いくつか入力が求められますが、全て空のままで決定します。必要に応じて任意で入力してください。ただし、"A challenge password" は何も入力せずEnter(return)してください。openssl req -new -key server.key -out server.csr -
秘密鍵(key)と証明書署名要求(csr)から自己署名証明書(CRT:サーバー署名書)
server.crtを生成-days 0の部分は有効期限(日)です1。必要に応じて書き換えてください。openssl x509 -req -sha256 -days 0 -in server.csr -signkey server.key -out server.crt
接続アプリケーションにサーバー署名書をアップロード
- Salesforceの設定から [アプリケーション], [アプリケーションマネージャー]の順に移動します
- "Connected App for RestAPI OAuth" の名前が入っている接続アプリケーションを探し、右の[▼]ボタンを押下し、開かれたドロップダウンメニューから[編集]を押下します
- 補足: この接続アプリケーションはパートナーテレフォニーコンタクトセンター作成時に作成されます
- コールバックURLに
http://localhost:1717/OauthRedirectが入っていることを確認し、なければ追加します - [デジタル署名を使用]にチェックを入れ、自己署名証明書ファイル(
server.crt)をアップロードします - [選択した OAuth 範囲]で以下のスコープが選択されていることを確認し、なければ追加します
- APIを使用してユーザーデータを管理 (api)
- いつでも要求を実行 (refresh_token, offline_access)
- [保存]ボタンを押下します
- 有効になるまで10分程度かかる旨の表示が出たら [次へ]を選択します
Connected App for RestAPI OAuthの編集

コンシューマー鍵を取得
接続アプリケーションに接続ユーザプロファイルを登録するの続きから作業します。
- [API (OAuth 設定の有効化)]セクションにある、[コンシューマーの詳細を管理]ボタンを押下します
- IDを検証 の画面に切り替わり確認コードのメールがシステム管理者のメールアドレスに送付されますので、確認コードを入れ [検証]ボタンを押下します
- コンシューマー鍵の [コピー]ボタンを押下し、メモをして値を控えます
- 補足: コンシューマーの秘密を控える必要はありません
接続アプリケーションに接続ユーザプロファイルを登録する
- 上段の[Manage]ボタンを押下します
- [プロファイル]セクションにある[プロファイルを管理する]ボタンを押下します
- 接続アプリケーションにアクセスできるプロファイルを選択します。公式のドキュメントによると [システム管理者] を含めることがお勧めされているため、システム管理者を選択します2
- [保存]ボタンを押下します
- [OAuthポリシー]のセクションにスクロールし、[許可されているユーザー]の設定が "管理者が承認したユーザーは事前承認済み" になっていることを確認します
許可されているユーザーの設定が管理者が承認したユーザーになっているかチェック

セットアップ-AWS側
Amazon Connectの問い合わせフローからLambda関数を介して、SalesforceのAPIをコールするための設定を行っていきます。
- サービスの検索から
SecretsManagerと入力して、[Secrets Manager]のリンクを押下しま - 以下のパラメータの設定を行なっていきます
-
${コンタクトセンター名}-salesforce-secretの名前のリンクを押下します - [シークレットの値を取得する]ボタンを押下します
- [編集する]ボタンを押下します
- 以下のパラメータを値を上書きします
-
${コンタクトセンター名}-salesforce-rest-api-auth-consumer-key: コンシューマー鍵を取得 で控えた値を貼り付けます -
${コンタクトセンター名}-salesforce-rest-api-auth-private-key: 自己署名証明書を作成で作成したserver.keyの内容を貼り付けます
貼り付ける際は、-----BEGIN PRIVATE KEY-----から、-----END PRIVATE KEY-----までの全文を改行コードをエンコードして[プレーンテキスト]タブで貼り付けます(注釈2)
例-----BEGIN PRIVATE KEY-----\nMIIE*******\n-----END PRIVATE KEY-----\n -
${コンタクトセンター名}-salesforce-rest-api-subject: APIアクセスするSalesforceユーザー名を入力します。ここではシステム管理者のユーザー名を入力します(※注釈1) -
${コンタクトセンター名}-salesforce-rest-api-audience:- 本値は Sandbox, スクラッチ組織のみ変更します。本番組織、Developer Editionの組織ではスキップしてください
-
https://login.salesforce.com/からhttps://test.salesforce.com/に変更します
-
- パラメータの編集が終わったら、[保存]ボタンを押下します
-
- アクセストークンのパラメータを初期化します
-
${コンタクトセンター名}-salesforce-access-secretの名前のリンクを押下します - [シークレットの値を取得する]ボタンを押下します
- [編集する]ボタンを押下します
- 以下のパラメータの値を削除します
${コンタクトセンター名}-salesforce-rest-api-access-token
- パラメータの編集が終わったら、[保存]ボタンを押下します
-
Secrets Managerのサービスを検索してコンソールへアクセス

注釈1: 必要に応じて Salesforce Integrationライセンス(API Only)のプロファイルが付与されたユーザーなど使うなどを検討してください。ただし制限されたライセンスではケースの作成できない(追加でServiceCloudのライセンスが必要になるため競合する)など制約があります。ガバナンス、ライセンス数、要件などを踏まえて必要なプロファイル作成、接続アプリケーションへの登録、ユーザー作成を行なって設定してください。
秘密鍵は改行コードが含まれています。改行コードも含めて正確に貼り付ける必要があります。
以下の2つの内どちらかで対応します。
- 正規表現置換をしてマネジメントコンソールから貼り付ける
- AWS CLIを用いて値を書き込む
SECRET_ID="${コンタクトセンターAPI参照名}-salesforce-secret" AUTH_PRIVATE_KEY_NAME="${コンタクトセンターAPI参照名}-salesforce-rest-api-auth-private-key" PRIVATE_KEY=$(readlink -f server.key) aws secretsmanager get-secret-value --secret-id ${SECRET_ID} \ --query SecretString \ --output text > current_secret.json jq --rawfile keyfile ${PRIVATE_KEY} \ --arg key "$AUTH_PRIVATE_KEY_NAME" \ '.[$key] = $keyfile' current_secret.json > updated_secret.json aws secretsmanager put-secret-value --secret-id ${SECRET_ID} \ --secret-string file://updated_secret.json
疎通確認-Lambda関数
ここまでのセットアップが完了しており、エラーないことを確認します。
- AWSのマネジメントコンソールにログイン
- サービスの検索から [Lambda] と入力し、Lambdaのリンクを押下し、Lambdaの管理画面に移動します
- 関数によるフィルターの入力欄に
InvokeSalesforceRestApiFunctionと入力し、Enter(return)でフィルターします -
${コンタクトセンター名}-InvokeSalesforceRestApiFunctionのLambda関数を選択します - [テスト]タブを選択します
- [イベント JSON]の欄に以下のようなクエリを実行するJSONを記述します
{ "Details": { "Parameters": { "methodName": "queryRecord", "soql": "SELECT Name FROM Account Where Id='000000000000000'" } } } - [テスト]ボタンを実行
- 実行結果でエラーがない、空の結果(
{})が帰ることを確認します
失敗時の応答例
アクセスキーの消し忘れによる、不正なヘッダーになっている
{
"success": false,
"status": 500
}
接続アプリケーションにアクセスするユーザーと同じプロファイル、または権限セットなどの付与漏れ
{
"success": false,
"status": 400,
"statusText": "Bad Request",
"errorCode": "invalid_app_access",
"errorMessage": "user is not admin approved to access this app"
}
コンタクトフローからの利用
詳細の使い方は、InvokeSalesforceRestApiFunctionのリファレンスを参照してください。
ここでは、サンプルの取引先責任者が入っている内容を次のクエリで問い合わせます SELECT Name FROM Account。
実行結果
{
"Name": "Sample Account for Entitlements"
}
複数のフィールドを指定した場合の実行結果の例
{
"Id": "001Sv00000R4ONnIAN",
"Name": "Sample Account for Entitlements",
"Phone": null,
"Fax": null,
"Website": null,
"PhotoUrl": "/services/images/photo/001Sv00000R4ONnIAN",
"Industry": null,
"AnnualRevenue": null,
"NumberOfEmployees": null,
"Description": null,
"IsCustomerPortal": false,
"Jigsaw": null,
"JigsawCompanyId": null,
"AccountSource": null,
"SicDesc": null
}
期限切れの証明書の更新
自己署名証明書を作成で実施した、自己署名証明書( server.crt )の再生成を行います。
自己署名証明書を接続アプリケーションへアップロードし直します。
CAの期限が切れるまでは、秘密鍵と公開鍵の再生成は不要ですが、過去に利用したファイルは厳重に管理してください。
もし、紛失している場合自己署名証明書の再生成に加え、秘密鍵をパラメータストアへの登録する手順も実施し直す必要があります。
補足
この REST APIの機能は Service Cloud Voice固有の機能ではなく、通常のSalesforce のREST APIの機能であるため、APIコール数の制限があるため注意してください。
なお、内部でアクセストークンを再利用する仕組みがあるため、認可に関しては制限を受けにくいと考えられます。
-
現時点で証明書署名要求の期限が切れていても、認証することが可能なようです。 Trailblazer Community - Able to authenticate using JWT token for expired X509 certificate, StackExchange - Do expired certificates for salesforce connected applications block connections? ↩
-
割り当てるプロファイルについての引用
To choose which users have access to this connected app, select the appropriate profiles. We recommend including a System Administrator profile. ↩
















