0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon Connect からのパートナーテレフォニーを使用した Service Cloud Voiceの REST API連携 for v19.0

Last updated at Posted at 2025-11-04

本ドキュメントは、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} の部分は実際に使用するパスワードで置き換えてください。

  1. 作業用ディレクトリを作成

    mkdir certificate
    cd certificate  
    
  2. 秘密鍵 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
    
  3. 秘密鍵(server.key)から証明書署名要求(CSR:公開鍵)を生成
    いくつか入力が求められますが、全て空のままで決定します。必要に応じて任意で入力してください。ただし、"A challenge password" は何も入力せずEnter(return)してください。

    openssl req -new -key server.key -out server.csr
    
  4. 秘密鍵(key)と証明書署名要求(csr)から自己署名証明書(CRT:サーバー署名書)server.crtを生成

    -days 0 の部分は有効期限(日)です1。必要に応じて書き換えてください。

    openssl x509 -req -sha256 -days 0 -in server.csr -signkey server.key -out server.crt
    

接続アプリケーションにサーバー署名書をアップロード

  1. Salesforceの設定から [アプリケーション], [アプリケーションマネージャー]の順に移動します
  2. "Connected App for RestAPI OAuth" の名前が入っている接続アプリケーションを探し、右の[▼]ボタンを押下し、開かれたドロップダウンメニューから[編集]を押下します
    • 補足: この接続アプリケーションはパートナーテレフォニーコンタクトセンター作成時に作成されます
  3. コールバックURLに http://localhost:1717/OauthRedirect が入っていることを確認し、なければ追加します
  4. [デジタル署名を使用]にチェックを入れ、自己署名証明書ファイル(server.crt)をアップロードします
  5. [選択した OAuth 範囲]で以下のスコープが選択されていることを確認し、なければ追加します
    • APIを使用してユーザーデータを管理 (api)
    • いつでも要求を実行 (refresh_token, offline_access)
  6. [保存]ボタンを押下します
  7. 有効になるまで10分程度かかる旨の表示が出たら [次へ]を選択します

Connected App for RestAPI OAuthの編集
Connected App for RestAPI OAuthの編集

サーバー署名書をアップロード
サーバー署名書をアップロード

コンシューマー鍵を取得

接続アプリケーションに接続ユーザプロファイルを登録するの続きから作業します。

  1. [API (OAuth 設定の有効化)]セクションにある、[コンシューマーの詳細を管理]ボタンを押下します
  2. IDを検証 の画面に切り替わり確認コードのメールがシステム管理者のメールアドレスに送付されますので、確認コードを入れ [検証]ボタンを押下します
  3. コンシューマー鍵の [コピー]ボタンを押下し、メモをして値を控えます
    • 補足: コンシューマーの秘密を控える必要はありません

コンシューマーの詳細を管理を選択
コンシューマーの詳細を管理を選択

IDを検証、確認コードを入力する
IDを検証、確認コードを入力する

コンシューマー鍵をコピー
コンシューマー鍵をコピー

接続アプリケーションに接続ユーザプロファイルを登録する

  1. 上段の[Manage]ボタンを押下します
  2. [プロファイル]セクションにある[プロファイルを管理する]ボタンを押下します
  3. 接続アプリケーションにアクセスできるプロファイルを選択します。公式のドキュメントによると [システム管理者] を含めることがお勧めされているため、システム管理者を選択します2
  4. [保存]ボタンを押下します
  5. [OAuthポリシー]のセクションにスクロールし、[許可されているユーザー]の設定が "管理者が承認したユーザーは事前承認済み" になっていることを確認します

管理画面を開く
管理画面を開く

プロファイルを管理を選択
プロファイルを管理を選択

プロファイルの管理でシステム管理者を選択
プロファイルの管理でシステム管理者を選択

システム管理者のプロファイル追加
システム管理者のプロファイル追加

許可されているユーザーの設定が管理者が承認したユーザーになっているかチェック
許可されているユーザーの設定が管理者が承認したユーザーになっているかチェック

セットアップ-AWS側

Amazon Connectの問い合わせフローからLambda関数を介して、SalesforceのAPIをコールするための設定を行っていきます。

  1. サービスの検索から SecretsManager と入力して、[Secrets Manager]のリンクを押下しま
  2. 以下のパラメータの設定を行なっていきます
    1. ${コンタクトセンター名}-salesforce-secret の名前のリンクを押下します
    2. [シークレットの値を取得する]ボタンを押下します
    3. [編集する]ボタンを押下します
    4. 以下のパラメータを値を上書きします
      • ${コンタクトセンター名}-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/ に変更します
    5. パラメータの編集が終わったら、[保存]ボタンを押下します
  3. アクセストークンのパラメータを初期化します
    1. ${コンタクトセンター名}-salesforce-access-secret の名前のリンクを押下します
    2. [シークレットの値を取得する]ボタンを押下します
    3. [編集する]ボタンを押下します
    4. 以下のパラメータの値を削除します
      1. ${コンタクトセンター名}-salesforce-rest-api-access-token
    5. パラメータの編集が終わったら、[保存]ボタンを押下します

Secrets Managerのサービスを検索してコンソールへアクセス
Secrets Managerのサービスを検索してコンソールへアクセス

シークレット一覧
シークレット一覧

シークレットの値を取得する
シークレットの値を取得する

シークレットの値を編集する
シークレットの値を編集する

シークレットの値を編集して保存
シークレットの値を編集して保存

アクセストークンをクリア
アクセストークンをクリア

注釈1: 必要に応じて Salesforce Integrationライセンス(API Only)のプロファイルが付与されたユーザーなど使うなどを検討してください。ただし制限されたライセンスではケースの作成できない(追加でServiceCloudのライセンスが必要になるため競合する)など制約があります。ガバナンス、ライセンス数、要件などを踏まえて必要なプロファイル作成、接続アプリケーションへの登録、ユーザー作成を行なって設定してください。

秘密鍵は改行コードが含まれています。改行コードも含めて正確に貼り付ける必要があります。
以下の2つの内どちらかで対応します。

  1. 正規表現置換をしてマネジメントコンソールから貼り付ける
    1. server.key ファイルを正規表現置換するエディタで開く
    2. 改行コード\n\\n に置き換える
      改行コードを更新する
    3. [プレーンテキストタブ]を選択
    4. ${コンタクトセンター名}-salesforce-rest-api-auth-private-key に改行コードを置き換えた値を貼り付ける
      秘密鍵を書き込む
  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関数

ここまでのセットアップが完了しており、エラーないことを確認します。

  1. AWSのマネジメントコンソールにログイン
  2. サービスの検索から [Lambda] と入力し、Lambdaのリンクを押下し、Lambdaの管理画面に移動します
  3. 関数によるフィルターの入力欄に InvokeSalesforceRestApiFunction と入力し、Enter(return)でフィルターします
  4. ${コンタクトセンター名}-InvokeSalesforceRestApiFunction のLambda関数を選択します
  5. [テスト]タブを選択します
  6. [イベント JSON]の欄に以下のようなクエリを実行するJSONを記述します
     {
       "Details": {
         "Parameters": {
           "methodName": "queryRecord",
           "soql": "SELECT Name FROM Account Where Id='000000000000000'"
         }
       }
     }
    
  7. [テスト]ボタンを実行
  8. 実行結果でエラーがない、空の結果( {} )が帰ることを確認します

Lambda関数からの疎通確認結果
Lambda関数からの疎通確認結果

失敗時の応答例

アクセスキーの消し忘れによる、不正なヘッダーになっている

{
  "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コール数の制限があるため注意してください。
なお、内部でアクセストークンを再利用する仕組みがあるため、認可に関しては制限を受けにくいと考えられます。

  1. 現時点で証明書署名要求の期限が切れていても、認証することが可能なようです。 Trailblazer Community - Able to authenticate using JWT token for expired X509 certificate, StackExchange - Do expired certificates for salesforce connected applications block connections?

  2. 割り当てるプロファイルについての引用
    To choose which users have access to this connected app, select the appropriate profiles. We recommend including a System Administrator profile.

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?