Amazon Connect＋Salesforceで受付情報の登録をIVR（電話自動応答）だけで対応させる

# ◆作ったもの

* Amazon ConnectとAmazon Lexを組み合わせてIVRを作成できるので、電話受付の情報をIVRだけでSalesforceのケースに登録できないか試してみました。
    * [Amazon Connect＋Salesforce＋LINEで自動車修理の自動受付＆応対サービスを作ってみる](https://qiita.com/azuki2ice/items/cbbbed67707870ff4c18) のAmazon ConnectとSalesforceの連携部分を作るために試してみました。

## 1. AWS LambdaとSalesforceを連携させる

* Amazon Connect Salesforce lambda packageを導入
    * [Amazon Connect CTI Adapter V2 for SalesforceでAmazon Connect Salesforce Lambda packageをインストールして使ってみる](https://dev.classmethod.jp/cloud/aws/how-to-use-amazon-connect-salesforce-lambda-package-with-amazon-connect-cti-adapter-v2-for-salesforce/)[^1]を参考にさせていただきました。
    * コールフロー作成時に必要なので、インストールしたLambda関数の関数名はメモしておく！

## 2. Salesforceのケース設定
* Salesforceのオブジェクトマネージャから「取引先責任者」の項目にTehai_c(手配状況)、Mycar_c(車の情報)、LINE__c(LINEのID)を追加する。
![obj_3.png](https://qiita-image-store.s3.amazonaws.com/0/372054/d8a51c96-2054-7e29-3cf4-a7a007366030.png)
    * ※Developer環境でも可

## 3. Amazon Lexの設定
* ① 話者の入力「はい」を認識させるように、Amazon Lexで新しいBotを生成します。
    * アジアのリージョンは対応していないため、US East(N. Virginia)で登録。
    * 今回は英語で「はい」を認識させるため「Hi」をsample utteranceに「Hi」を追加します。
![lex_1.png](https://qiita-image-store.s3.amazonaws.com/0/372054/390716f8-0964-762d-a0a9-6892f920b543.png)

* ② Amazon Connectのインスタンスへのログイン前の問い合わせフロー画面で、生成したLexボットへのアクセス権限を追加します。
(生成したボットを選択し、「+Lexボットの追加」を押下)
![lex_2.png](https://qiita-image-store.s3.amazonaws.com/0/372054/55bcd22e-61e4-f91c-887b-f6a7894b3d0c.png)

## 4. Amazon Connectでコールフロー作成
![flow_1.png](https://qiita-image-store.s3.amazonaws.com/0/372054/f00405b4-dd4b-13ff-f6cc-25677cc91ffc.png)

### ①音声の設定
* 言語を日本語に設定し、音声を選択します。

### ②ログ記録動作の設定
* ログ記録動作を有効化します。

### ③通話記録動作の設定
* 顧客専用を選択します。

### ④プロンプトの再生
* テキスト読み上げ機能(アドホック)を選択
* テキストの入力
    * `お電話ありがとうございます。こちらは、マイカー保険です。`

### ⑤lambda関数を呼び出す
* 関数のARN名は[1. AWS LambdaとSalesforceを連携させる](#1-aws-lambdaとsalesforceを連携させる)でインストールされたLambda関数のものを使用する。

関数入力パラメータ：

| 　　　 | 宛先キー | タイプ  | 属性 | 値 |
| :--- | :--- | :--- | :--- | :--- |
| 属性を使用する | homephone | システム | お客様の電話番号 |-
| テキストの使用 |sf_object|-|-|Contact|
| 属性を使用する |sf_fields|-|Id,Name,Email,AssistantName,Mycar__c,Tehai__c|-
| テキストの使用 |sf_operation|-|-|lookup|

### ⑥Salesforceから取得した値をAmazon Connect上の問い合わせ属性として保存する

|  | 宛先キー | タイプ  | 属性 |値|
| :--- | :--- | :--- | :--- |:--- |
| 属性を使用する | SFDCContact_cst_id | 外部 | id |-
| 属性を使用する |SFDCContact_cst_tehai|外部|tehai_c|-
| 属性を使用する |SFDCContact_cst_Mycar|外部|Mycar__c|-

### ⑦保存したデータを用いて、「XXさま、お車の故障ですか？」と読み上げ、顧客の音声「はい」を認識させる
* 1. テキスト読み上げ機能(アドホック)を選択
* 2. テキストの入力
    * `$.Attributes.SFDCContact_cst_nameさま、お車の故障ですか？`
* 3. ブランチの設定でAmazon Lexを選択
* 4. Lexボット((3)で設定)を設定

### ⑧　⑦と同様に、「XXさんの車はXXXXXXXですね。」と読み上げ、顧客の「はい」を認識させる
* 1. テキスト読み上げ機能(アドホック)を選択
* 2. テキストの入力 
    * `<speak><amazon:effect phonation="soft">$.Attributes.SFDCContact_cst_nameさまのお車は、$.Attributes.SFDCContact_cst_Mycarですね。</amazon:effect></speak>`
* 3. ブランチの設定でAmazon Lexを選択
* 4. Lexボット((3)で設定)を設定

### ⑨プロンプトの再生
* テキスト読み上げ機能(アドホック)を選択
* テキストの入力
    * `<speak>お手元のスマートフォンのLINEアプリケーションで位置情報を送付ください。<break time="300ms"/>
修理事業者を手配致します。<break time="300ms"/>
後ほど担当者よりご連絡いたしますので、いったんお電話をお切りください。</speak>`

### ⑩問い合わせ属性の設定
* 顧客情報を更新します。

|  | 宛先キー | タイプ  | 属性 |値|
| :--- | :--- | :--- | :--- |:--- |
| テキストの使用 | SFDCContact_cst_tehai | ー | ー |未（電話受付）

### ⑪AWS Lambda関数を呼び出す
* ⑤と同様にインストールしたLambda関数を呼び出します。

関数入力パラメータ：

| 　　　 | 宛先キー | タイプ  | 属性 | 値 |
| :--- | :--- | :--- | :--- | :--- |
| テキストの使用 |sf_operation|ー|ー|update|
| テキストの使用 |sf_object|ー|ー|Contact|
| 属性を使用する  |sf_id|外部|SFDCContactid|ー|
| 属性を使用する |Tehai_c|外部|SFDCtehai|ー|
| 属性を使用する |SFlevel__c|外部|SFDCSFlevel|ー|

----
# ◆参考ページ
[^1]: [Amazon Connect CTI Adapter V2 for SalesforceでAmazon Connect Salesforce Lambda packageをインストールして使ってみる](https://dev.classmethod.jp/cloud/aws/how-to-use-amazon-connect-salesforce-lambda-package-with-amazon-connect-cti-adapter-v2-for-salesforce/)