【クラウド初心者向け】留守番電話1（kinesis Video Streamsデータ取得用情報の作成環境の準備）

# 概要
- Amazon Connectには留守番電話機能は無いため個別に作成する。
- 基本の考え方等は『[[Amazon Connect]営業時間外に着信したビジネスチャンスを失わないように留守番電話機能をつけてみた](https://dev.classmethod.jp/cloud/aws/amazon-connect-voice-mail-from-kinesis-video-stream/)』をもとにしています。

## 使用ユーザー
-  IAMユーザー

## 手順

### kinesis Video Streamsデータ取得用情報を保存するS3の作成

1. AWSにサインインします。
    1. アカウント、ユーザー名、パスワードを入力してサインインします。  
     [アカウント内（IAM）で作成したユーザーを使用してコンソールにサインインする](https://qiita.com/echolimitless/items/129495c920217916a14f#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E5%86%85iam%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%81%99%E3%82%8B)

1. 『AWSマネジメントコンソール』画面の右上にある《リージョン名》をクリックし、ドロップダウンます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/02487090-54eb-e851-6d7a-674e88da61c9.png)

1. 『AWSマネジメントコンソール』画面にある「サービスを検索」にS3と入力し、検索結果から《S3》をクリックし、Amazon S3 コンソール[（https://console.aws.amazon.com/s3/）](https://console.aws.amazon.com/s3/)を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/495a24a5-5eee-529b-fec8-65d369b2e9d6.png)

1. S3のバケット一覧が表示されるので、[営業時間の判断](https://qiita.com/echolimitless/items/a8d8d9221a05c64de150)で作成したバケットをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/14cbcbfb-688a-8b26-0365-0f57b33c8022.png)

1. 《フォルダの作成》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/56b723e7-0ba7-ebc7-1e2b-98329e802750.png)

1. 以下の項目を選択、入力して《保存》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/657c0d05-7a2a-376e-a99c-6edc0e7c2100.png)
    1. フォルダ名：フォルダの名前
    1. 暗号化：適宜必要な暗号化設定を選択

1. 作成したフォルダをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/31a3caf9-a78e-202a-4a7f-56ad4b6eda00.png)

1. 《フォルダの作成》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/15b789a2-e554-bcb6-6dd9-1722ca963a23.png)

1. 以下の項目を選択、入力して《保存》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/bc5b1169-fe3a-7800-81e0-21b761e8360d.png)
    1. フォルダ名：フォルダの名前
    1. 暗号化：適宜必要な暗号化設定を選択

### kinesis Video Streamsデータ取得用情報を作成するLambdaの作成

- 以下のコードで各自で変える部分
    - region変数：バケットを作成したリージョン名
    - bucketName変数：作成したバケット名
    - key変数：作成したフォルダ名（終わりに『/』を入れる）

```javascript:voice-message-infomation

const AWS = require("aws-sdk");
const region = 'XXXXXXXXX';
const bucketName = 'my-baseXXXXXXXXX';
const key = 'my-voicemessageXXXXXXXXX/infomation/';
 
exports.handler = async (event) => {
    
    console.log(JSON.stringify(event));
     
    // リクエストから必要データを取得する
    let streamInformation = {};
     
    const contactData = event.Details.ContactData;
    streamInformation.contactId = contactData.ContactId; // コンタクトID
    streamInformation.customerEndpoint = contactData.CustomerEndpoint.Address; // 発信者番号
    streamInformation.systemEndpoint = contactData.SystemEndpoint.Address; // 着信番号
 
    const audio = contactData.MediaStreams.Customer.Audio;
    streamInformation.startFragmentNumber = audio.StartFragmentNumber; // 録音データの開始フラグメント番号
    streamInformation.startTimestamp = audio.StartTimestamp; // 録音データの開始時間
    streamInformation.stopFragmentNumber = audio.StopFragmentNumber;// 録音データの終了フラグメント番号
    streamInformation.stopTimestamp = audio.StopTimestamp;// 録音データの終了時間
    streamInformation.streamARN = audio.StreamARN; // ストリームのARN
     
    // S3に日付文字列をキーとして保存する
    const s3 = new AWS.S3({region:region});
 
    const createKey = key + createKeyName();
    const body = JSON.stringify(streamInformation);
    const params = {
        Bucket: bucketName,
        Key: createKey,
        Body: body
    };
    
    await s3.putObject(params).promise();
    return {};
};
 
function createKeyName() {
 
    const date = new Date();    
    const year = date.getFullYear();
    const mon = (date.getMonth() + 1);
    const day = date.getDate();
    const hour = date.getHours();
    const min = date.getMinutes();
    const sec = date.getSeconds();
 
    const space = (n) => {
        console.log(n);
        return ('0' + (n)).slice(-2);
    };
     
    let result = year + '_';
    result += space(mon) + '_';
    result += space(day) + '_';
    result += space(hour) + '_';
    result += space(min) + '_';
    result += space(sec);
    return result;
};

```

1. AWSにサインインします。
    1. アカウント、ユーザー名、パスワードを入力してサインインします。  
     [アカウント内（IAM）で作成したユーザーを使用してコンソールにサインインする](https://qiita.com/echolimitless/items/129495c920217916a14f#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E5%86%85iam%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%81%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%81%99%E3%82%8B)

1. 『AWSマネジメントコンソール』画面の右上にある《リージョン名》をクリックし、ドロップダウンます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/02487090-54eb-e851-6d7a-674e88da61c9.png)

1. 『AWSマネジメントコンソール』画面にある「サービスを検索」にLambdaと入力し、検索結果から《Lambda》をクリックし、Amazon Lambda コンソール[（https://console.aws.amazon.com/lambda/）](https://console.aws.amazon.com/lambda/)を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/32593de3-75e1-39b7-cb8c-cac6dd09b77a.png)

1. Lambdaの関数一覧画面が表示されるので《関数の作成》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/7e37f2e4-693a-7863-29e4-abb21eae89b5.png)

1. 「関数名」を入力して《関数の作成》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/e47f8e19-afe1-b5c8-eb8a-cf3ed26ca0a1.png)
    1. 関数名：voice-message-infomation

1. 関数のベースが作成されました。関数コードを入力するため下にスクロールして「関数コード」を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/0115648d-e49a-2801-8dd0-76f3b0015d5d.png)

1. 「関数コード」に初期で登録されているコードを削除して、上記voice-message-infomationをコピー＆ペーストします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/6d5649cb-96d3-21a8-0203-634dc23c6e9e.png)

1. 日本時間に対応させるため、画面を下にスクロールして「環境変数」に以下の値を入力し《保存》ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/1090a493-21a0-a175-0a37-b0917f9fe04e.png)
    1. キー：TZ、値：Asia/Tokyo

1. LambdaにS3へのアクセス権を設定するため下にスクロールして「実行ロール」を表示し、《XXXXXXXXロールを表示》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/42b0e3de-bc7d-0c16-ed8f-667c2b710879.png)

    1. Lambdaを作成する毎に自動的にLambda名の付いたロールが一つ作成されます。
    1. Lambdaで利用しているAPIのアクセス権を付与します。
        1. 今回は、kinesis Video Streamsデータ取得用情報をS3に保存するための権限を付与します。  

1. 選択したロールの概要が表示されるのでポリシー名の「▶」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/87ef5d0b-f929-2421-26ed-a0e74fb4fb59.png)

1. 《ポリシーの編集》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/af19bf00-ae5c-3fe1-579a-3d21e8181b9f.png)

1. ビジュアルエディタが表示されるので《さらにアクセス許可を追加する》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/31445449-acff-528d-c267-5ef6b541702f.png)
    1. Lambdaの実行ログを記録するため、デフォルトでCloudWatch Logsの権限が付与されます。

1. 《サービスの選択》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/60468343-a854-5191-5c62-850ab4c88838.png)

1. 「サービス」にS3と入力し、検索結果から《S3》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/294fdf5a-55e2-1347-3632-f6ab152a1999.png)

1. 「アクション」に今回利用するPutObjectを入力し、《PutObject》をクリックし、選択状態にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/c5277fc2-7d70-b5c4-3f16-baf6f4cdb776.png)

1. 《リソース》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/ad2733bc-a07b-97a7-7cdd-406c01ecec3f.png)

1. 《ARNの追加》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/eef05fed-473f-b98d-6a24-49d24e58edac.png)

1. 以下の項目を選択、入力して《追加》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/ea74843a-549c-3177-0d3b-c182cd5e2041.png)
    1. Bucket name：kinesis Video Streamsデータ取得用情報を保存するS3のバケット名＋フォルダ名（バケット名とフォルダ名やフォルダ名とフォルダ名の間は『/』で連結する）
        1. Bucket name：my-baseXXXXXXXXX/my-voicemessageXXXXXXX/infomation
    1. Object name：すべてにチェックを付ける（テキストボックスには*が入力される）

1. 《ポリシーの確認》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/ab67e4cd-917d-1cb4-6bcf-5e7002279edf.png)

1. 内容を確認して、《変更の保存》をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520689/28187626-53bd-62b5-244f-377bdc4841c2.png)

# 参考サイト
- [[Amazon Connect]営業時間外に着信したビジネスチャンスを失わないように留守番電話機能をつけてみた](https://dev.classmethod.jp/cloud/aws/amazon-connect-voice-mail-from-kinesis-video-stream/)

# 目次に戻る
- [【クラウド初心者向け】Amazon Connectでコールセンターを作る](https://qiita.com/echolimitless/items/e5044c73656f8ae29f93#%E7%9B%AE%E6%AC%A1)