Amazon Connect CTI Adapter V2 for SalesforceでAmazon Connect Salesforce Lambda packageをインストールして使ってみる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

事業開発部の酒匂です。この記事は内容としては独立しておりますが、下記の続きです。

Amazon Connect CTI Adapter V2 for Salesforceの自動ログイン/画面ポップ拡張/コンタクト属性値表示/ミュート/コールタスク登録機能について

Amazon Connectのコンタクトフロー上からLambda関数を呼び出してSalesforce(以下、SFDC)と連携させることが可能です。

SFDCのAPI経由でオブジェクトを検索したりするLambda関数をイチから作るのもいいと思いますが、Amazon Connect CTI Adapter for SalesforceのV2には、「Amazon Connect Salesforce Lambda package」というものがあります。

これを使えば関数をイチから作る必要がなさそうです。どんなものか試してみたいと思います。

Amazon Connect Salesforce Lambda packageのインストール

SFDC環境のインストール先を決定する

Production環境にインストールするかSandbox環境にインストールするか決めておきます。

前者にインストールする場合は、Production Enviromenttrue、後者の場合はfalseをセットしますので、控えておきます。

Salesforce REST APIのConsumer Key と Secretの発行

Amazon ConnectのコンタクトフローからLambda経由でSFDCにアクセスする際、SFDCのREST APIを使用しますので、KeyとSecretを発行しておきます。

  • SFDCの設定 > アプリケーション > アプリケーションマネージャをクリックします。表示された画面右上の新規接続アプリケーションをクリックします。

  • 接続アプリケーション名API参照名取引先責任者メールに任意の値を入力します。OAuth設定の有効化にチェックをつけます。コールバックURLhttps://www.salesforce.comと入力します。

  • 選択したOAuth範囲データへのアクセスと管理(api)基本情報へのアクセス(id,profile,email,address,phone)を選択します。

  • 画面下にある保存ボタンをクリックします。

  • 次へをクリックします。

  • 画面上のコンシューマー値を控えておきます。

  • コンシューマーの秘密にあるクリックして公開をクリックして、表示される値を控えておきます。

  • 画面の上の方にあるManageボタンをクリックします。

  • ポリシーを編集をクリックします。

  • OAuthポリシー許可されているユーザーの値を

すべてのユーザーは自己承認可能に変更します。

  • 変更する際に下記のような確認画面が出ます。OKをクリックします。

  • 引き続き、同じくOAuthポリシーIP制限の緩和の値を

IP制限の緩和に変更します。

  • 画面下の保存ボタンをクリックします。

ユーザー名(Username)、パスワード(Password)、セキュリティトークン(Security Token)を決定する

Lambda関数が使用するSFDCのAPIユーザーを作成します。

  • SFDCの設定 > ユーザ > プロファイルをクリックします。画面上の新規プロファイルをクリックします。

  • 既存のプロファイルシステム管理者を設定し、プロファイル名に任意の名前を入力します。保存ボタンをクリックします。

  • 画面上のパスワードポリシー欄の編集ボタンをクリックします。

  • パスワードポリシー欄のパスワードの有効期限無期限にします。

  • システム管理者権限欄のLightning Experience ユーザーのチェックを外しします。

  • 保存ボタンを押します。

  • 設定 > アプリケーション > 接続アプリケーション > 接続アプリケーションを管理するをクリックします。画面上に表示される先ほど作成したアプリケーションをクリックします。

  • プロファイル欄のプロファイルを管理するをクリックします。

  • Amazon Connect API Onlyを選択します。選択したら画面右下にある保存ボタンをクリックします。

  • 設定 > ユーザ > ユーザをクリックします。画面上の新規ユーザ```ボタンをクリックします。

  • 一般情報欄の必須項目に任意の値を入力します。右側のロール未設定のまま、ユーザーライセンスSalesforceを設定、プロファイルはさきほど作成したAmazon Connect API Onlyを設定します。設定したら保存ボタンをクリックします。

  • 保存すると、下記のようなメールが送信されますので、アカウントの確認をクリックします。

  • パスワードなどを設定し、パスワードの変更をクリックします。

  • ログイン状態になるので、ユーザー名を選択して、メニューの私の設定をクリックします。

  • 個人用 > 私のセキュリティトークンのリセットをクリックします。画面上のセキュリティトークンのリセットをクリックします。

  • 下記のような画面が表示されます。

  • メールを確認します。セキュリティトークンを控えておきます。

Amazon Connect Lambda Packageのインストール

SFDC側の設定が終わったので、今度はAmazon Connect側の作業を行います。

Browse all applicationsボタンをクリックします。

  • 検索ボックスにamazon connect salesforceと入力して検索します。検索結果に出てくるAmazonConnectSalesforceLambdaをクリックします。

  • Deployボタンをクリックします。

  • 下記の画面が表示されますので、下の方に移動します。

  • 下記の枠で囲った部分を入力します。入力したらDeployボタンをクリックします。

  • 下記のような画面が表示されますので、しばらく待ちます。

  • Deployが完了しました。

  • Lambda関数を確認すると、aws-serverless-repository-AmazonConnec-sfInvokeAPI-1HD61FLDVRSGOという関数が作成されていることが確認できます。

Lambda関数のテスト

電話番号をキーにSFDCの取引先責任者オブジェクトを検索

  • Lambda関数を選択して、event-phoneLookup.jsonを開きます。内容をクリップボードにコピーします。

  • テストイベントの設定を選択します。

  • テストイベントの設定内容にクリップボードの内容を貼り付けます。イベント名は任意の名前(phoneLookup)を入力して、保存します。sf_phoneの値は取引先責任者オブジェクトの電話番号ですので、お使いの環境に存在するものを指定してください。

  • 作成したテストを実行します。

  • テストで指定した電話番号にヒットする取引先責任者が存在しない場合は、結果は成功しますが、何もヒットしません。

  • 今度はヒットするように、テストパラメータの電話番号を変更してみます。すると、このように結果が返ってきます。

SFDCの取引先責任者オブジェクトに紐づくケースオブジェクトを作成

  • 今度は、event-create.jsonを開いて、内容をクリップボードにコピーします。

  • テストイベントの設定を行い、クリップボードの内容を貼り付けます。イベント名はは任意の名前(createCase)を入力して、保存します。ContactIdの値はケースを作成する取引先責任者のオブジェクトのIDですので、お使いの環境に存在するものを指定してください。

  • テストを実行します。成功すると下記のような結果になります。

  • ケースが作成されているはずなので、SFDC上で確認してみます。作成されておりました。

SFDCのケースオブジェクトを更新

さきほど作成したケースの状況をClosedに変えてみます。

  • 今度は、event-update.jsonを開いて、内容をクリップボードにコピーします。

  • テストイベントの設定を行い、クリップボードの内容を貼り付けます。イベント名はは任意の名前(updateCase)を入力して、保存します。ContactIdの値は更新するケースオブジェクトのIDですので、お使いの環境に存在するものを指定してください。

  • テストを実行します。成功すると下記のような結果になります。

  • ケースが更新されているはずなので、SFDC上で確認してみます。Closedに更新されておりました。

Amazon ConnectのコンタクトフローからAmazon Connect Salesforce Lambda関数を呼び出す

いよいよ、最後のところまできました。

SFDC側の設定が終わり、Lambda関数のインストールと動作確認が取れましたので、本来の目的であるAmazon Connectのコンタクトフロー上からLambda関数を呼び出してみます。

コンタクトフローからは下記のことができます。

  • 電話番号をキーにSFDCの取引先責任者オブジェクトの検索
    • event-phoneLookup.jsonで試した内容のことができます。
  • SFDCオブジェクト(例えばケース)の作成
    • event-create.jsonで試した内容のことができます。
  • SFDCオブジェクト(例えばケース)の更新
    • event-update.jsonで試した内容のことができます。
  • SFDCのオブジェクトの検索
    • event-lookup.jsonは上記では試していないですが、下記のようにsf_objectに検索対象のオブジェクトを指定し、phoneのように検索対象のフィールドを指定することで検索が可能になります。
{
  "Details": {
    "Parameters": {
      "sf_operation": "lookup",
      "phone": "+81-5012345678",
      "sf_object": "Account",
      "sf_fields": "Id, Name"
    }
  }
}

Lambda関数の実行権限の付与

Amazon Connectから先程インストールしたLambda関数を実行できるようにします。

aws lambda add-permission --region ap-southeast-2 --function-name function:(lambdaの関数名) --statement-id 1 --principal connect.amazonaws.com  --action lambda:InvokeFunction --source-account (AWSアカウントID) --source-arn (amazon connectインスタンスのARN)

検索処理を行う場合

コンタクトフローから先程インストールしたLambda関数のarnを指定してAWS Lambda関数を呼び出すブロックから下記パラメータを指定して呼び出します。

パラメータ名 内容 設定値
sf_operation 実行する処理内容を指定する lookupを指定する。
sf_object 処理対象のSFDCオブジェクト 取引責任者(Contact)、ケース(Case)などを指定する。
sf_fields 処理結果として受け取るSFDCオブジェクトのフィールド IdNameなどを指定する。

下記のようなフローを作成しました。

AWS Lambda関数を呼び出すブロックは下記のようにしております。

このようにコンタクトフロー上でSFDCのオブジェクト検索ができております。

{
    "ContactFlowId": "arn:aws:connect:ap-southeast-2:************:instance/************/contact-flow/e9f00976-9df3-4547-b06c-b41fd943a0d6",
    "Parameters": {
        "FunctionArn": "arn:aws:lambda:ap-southeast-2:************:function:aws-serverless-repository-AmazonConnec-sfInvokeAPI-1HD61FLDVRSGO",
        "Parameters": {
            "sf_operation": "lookup",
            "phone": "+81********",
            "sf_object": "Contact",
            "sf_fields": "Id,Name"
        },
        "TimeLimit": "3000"
    },
    "ExternalResults": {
        "Id": "0037F00000yy7DkQAI",
        "sf_count": "1",
        "Name": "テストいち"
    },
    "ContactId": "a3d66bdb-1c12-4ef0-881d-853906463467",
    "ContactFlowModuleType": "InvokeExternalResource",
    "Timestamp": "2018-10-14T20:51:20.570Z"
}

作成処理を行う場合

コンタクトフローから先程インストールしたLambda関数のarnを指定してAWS Lambda関数を呼び出すブロックから下記パラメータを指定して呼び出します。

パラメータ名 内容 設定値
sf_operation 実行する処理内容を指定する createを指定する。
sf_object 処理対象のSFDCオブジェクト ケース(Case)などを指定する。

この他に作成対象のオブジェクトの必須項目(例えばケースを紐付ける取引先責任者のオブジェクトIDなど)は、パラメータに全て指定する必要があります。

更新処理を行う場合

コンタクトフローから先程インストールしたLambda関数のarnを指定してAWS Lambda関数を呼び出すブロックから下記パラメータを指定して呼び出します。

パラメータ名 内容 設定値
sf_operation 実行する処理内容を指定する updateを指定する。
sf_object 処理対象のSFDCオブジェクト ケース(Case)などを指定する。

この他に更新対象のSFDCオブジェクトのID(sf_id)の指定と更新する値の指定が必要です。

電話番号による検索処理を行う場合

コンタクトフローから先程インストールしたLambda関数のarnを指定してAWS Lambda関数を呼び出すブロックから下記パラメータを指定して呼び出します。

パラメータ名 内容 設定値
sf_operation 実行する処理内容を指定する phoneLookupを指定する。
sf_phone 検索キーに使用する電話番号指定する 通常はコンタクトフロー上で取得できる発信者番号を指定する
sf_fields 処理結果として受け取るSFDCオブジェクトのフィールド IdNameなどを指定する。

さいごに

インストールと設定さえすれば、あとはパラメータを指定して使うだけ、という便利なものなのですが、そこに至るまでいろいろとやることがあるため、当ブログ記事が結構長くなってしまいました。

まだ他にも試していない機能があるため、今後も記事を書いていこうと思います。