SalesforceのケースをAmazon Connectコンタクトフローから作成！！

# 本記事の内容

- Amazon ConnectコンタクトフローからSalesforceのケースを作成する方法
- Salesforceレコードタイプ指定方法

## はじめに

　Amazon Connectでは、顧客が番号をプッシュして入力することが可能です。
　番号プッシュでの入力を[DTMF](https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/get-customer-input.html)といいます。
　DTMFを用いて、どのような入力を行ったかをコンタクトフローからSalesforceケースに登録できます。
　オペレータ接続前にケースへ入力内容を保存することで、接続後すぐに確認でき、対応効率を上げる助けになります。
　本記事では、Amazon ConnectのコンタクトフローからSalesforceのケースを作成する方法を[公式ドキュメント](https://amazon-connect.github.io/amazon-connect-salesforce-cti/docs/lightning/salesforce-lambdas/01-contact-flow-salesforce-lambdas)を一部抜粋して解説します。

## 前提条件

- Amazon Connectインスタンス作成済み
- Amazon ConnectインスタンスにAmazonConnectSalesForceLambda導入済み<br>[(Salesforce Lambda Packageセットアップガイド)](https://amazon-connect.github.io/amazon-connect-salesforce-cti/docs/lightning/installation/01-installation#amazon-connect-salesforce-lambda-package)
    - sfinvokeAPI(Lambda Package導入の際に追加されるLambda関数)がAmazonConnectのLambda関数に登録済み
![lambda関数導入方法.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/cf6314ab-2ddb-a8b8-842f-9834476881f4.png)

- Amazon Connect [CTI アダプター導入済み](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000EJH4yUAH&tab=d)
- SalesforceのケースにSalesforceのケースの項目を作成済み

## Amazon ConnectコンタクトフローからSalesforceのケースを作成する方法

今回は例として、Amazon Connectで取得したお客様に入力してもらった要件番号をコンタクト属性に設定し、Salesforceのケースの項目に記録します

1. お客様に入力してもらった要件番号をコンタクト属性に設定
    1. ブロックライブラリの「設定」セクションから「顧客の入力を保存する」ブロックを選択します
    1. 音声プロンプトはBeep.wav、顧客の入力は最大桁数4桁で設定します。(任意に変更してください)
    ![顧客の入力を保存する.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/f9059d04-bc62-5dc8-44fc-91c2cfb05eb1.png)

    1. ブロックライブラリの「設定」セクションから「コンタクト属性の設定」ブロックを選択します
    1. 属性の設定は「最新のコンタクト」で設定します
    1. 名前空間を「ユーザー定義済み」、キーに任意の値を入力します
    1. 値には「動的に設定」の「名前空間のシステム」を選択します。キーは「保存済みの顧客の入力」を選択します
![コンタクト属性の設定inputnumber.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/26a70662-9c34-46ad-b6e5-50637069523b.png)

2. Salesforce連携用のAWS Lambda関数を設定
    1. ブロックライブラリの「統合」セクションから「AWS Lambda関数を呼び出す」ブロックを選択します
    1. 「AWS Lambda関数を呼び出す」ブロックで Lambda関数のARN を選択します
    1. 手動で設定のセクションでSalesforce連携先の「sfInvokeAPI」を選択します

    1. 「パラメータの追加」を押して、以下のキーと値を手動で設定します
        - 宛先キー： `sf_operation`
        　　　値： `create`
        - 宛先キー： `sf_object`
        　　　値： `Case`

        ![ケース作成sfパラメータ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/66884707-a9f6-e88b-8652-7f53dff1d3cd.png)

3. お客様に入力してもらった要件番号をSalesforceのケース項目に埋め込む
    1. 「AWS Lambda関数を呼び出す」ブロックの「パラメータの追加」を押します
    1. 宛先キーに Salesforceの項目のAPI参照名 を記載します
    1. 値には「動的」の「ユーザー定義済み」を選択し、キーには設定したお客様に入力してもらった要件番号のコンタクト属性を記載します
![ケースに渡す値.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/82cbdf67-2760-4c76-bbfc-37ea7a9ed109.png)

## 動作確認

- 動作確認として、以下画像のようなコンタクトフローを使用します
![コンタクトフローV2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/9d505a56-ddbc-4c7f-b183-412d4108f747.png)
1. フローに紐づいている電話番号に架電します
1. ビープ音の後、任意の値4桁を入力します(今回の動作テストでは「1234」とします)
1. 通話を終了しSalesforceのケースの項目を確認します
![入力した項目Salesforce.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/fae749ba-0591-4300-8790-a465a2c51047.png)
*もしSalesforceのケースの項目にお客様が入力した値が記載されていなければ sfinvokeAPI Lambda関数のCloudWatchを確認します

## 【補足】Salesforceレコードタイプ指定方法

- 今回、私が実際に経験したのは、Salesforceのレコードタイプを指定してデータを登録する方法です
この際、SalesforceのレコードIDを直接指定することで対応しました
- 以下内容では、Amazon Connectのコンタクトフローを使って、レコードタイプごとにケースを作成する方法を解説します
- Salesforceのレコードタイプを指定しケース作成する方法をご存じの方がいれば、ぜひ教えてください

1. SalesforceのRecordTypeIdを取得
    1. Salesforceのオブジェクトマネージャーを開きます
    1. 「ケース」を検索し、レコードタイプのセクションを選択します
    1. 対象のレコードタイプを選択し、URLの末尾に `recordTypes/xxxxxxxxx/view` と表示されるので、 `xxxxxxxxx` の部分をメモします
![RecordTypeId取得URL編集後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/eafabfdd-b20e-e9a2-7f27-e92a807468ba.png)

2. AWS Lambda関数のパラメータを追加
    1. 「パラメータの追加」を押し、以下の設定を追加します
        - 宛先キー： `RecordTypeId`
        　　　値： 取得した`RecordTypeId`
![awsRecordTypeId.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3840822/9466135b-156d-1961-3493-868622a8e45a.png)

<!-- ## 注意点

- Salesforceのデータ型との適合
    - Salesforceの「Case」オブジェクトの項目型に適合したデータを渡しているか
        - 例：
            - 日付型→ `"YYYY-MM-DD"` の形式
            - テキスト型・選択リスト型→文字列形式
            - チェックボックス型→`true`/`false`
    - Salesforceの必須項目に値をセットする
        - Case オブジェクトには 必須項目があるため、必須項目に空のデータを渡すとエラーになる

- 正しいRecordTypeIdを取得できているか
    - RecodeTypeIdはSandbox環境と本番環境で別のIDとなるので気をつける
        - 本番環境からSandBoxにリフレッシュ作業する際気をつける -->