【AWS】CloudWatch・S3にLexのログを出力する

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民こと、
新藏（にいくら）と申します♪
(/・ω・)/

前回はLexボットの作成方法について色々とまとめてみました。

https://qiita.com/Aichi_Lover/items/6942a65b69db04ebe278

**そこで今回はLexのログをCloudWatchやS3に保存する方法について記事にしたいと思います！**
Lexについて勉強中の方の参考になれば幸いです。
(*^^)v

ちなみに、12月は**ARIのアドベントカレンダ**もやっていますので、
もしよろしければ、こちらも応援お願いします♪

https://qiita.com/advent-calendar/2022/ari-group

https://qiita.com/advent-calendar/2022/aichi_lover_yomoyama

# 2.前提条件
前提条件は以下となります。

* Lexボットが作成済であること
* 「児童オンラインプライバシー保護法 (COPPA) は適用されますか?」を「いいえ」と設定していること

:::note info
「児童オンラインプライバシー保護法 (COPPA) は適用されますか?」の設定項目は
ボットのバージョンから確認できます。

|![010_ボットのバージョン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/f02ec85f-eacc-7da9-ba46-4d958f9464d7.png)|
|:--|
:::

# 3.テキストファイルでのログ出力

## 3.1.CloudWatchのロググループの作成
テキストログの出力先となる、ロググループを作成します。

3.1.1.CloudWatchの管理画面を開き、「ロググループ」を選択します。

|![010_ロググループを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/203e104a-3baf-4032-0070-050785028dbd.png)|
|:--|

3.1.2「.ロググループを作成」を選択します。

|![020_ロググループを作成を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/8808887f-df74-c80e-7a22-0f3d337d1aa5.png)|
|:--|

3.1.3.ロググループ名とログの保持期間を設定し、ロググループを作成します。

|![030_ロググループの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/af054ef1-8158-783f-4a2d-900bcf1d1eae.png)|
|:--|

## 3.2.Lexにて、ログの出力設定

3.2.1.Lexの管理画面にて、作成したボット名を選択します。

3.2.2.「エイリアス」を選択します。

|![070_エイリアスを選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/58cb7ebb-847e-f6be-b42d-7a3f36abd3f5.png)|
|:--|

3.2.3.エイリアス名を選択します。

|![080_エイリアス名を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/b15236bd-105b-bb1b-d1b5-df841052c6d0.png)|
|:--|

3.2.4.「会話ログを管理」を選択します。

|![090_会話ログを管理を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/191f5448-5ed2-919d-6fca-38bb708cf8b0.png)|
|:--|

3.2.5.テキストログの項目にて、「有効」を選択し、2.1節で作成したロググループを選択し、設定を保存します。

|![101_会話ログの設定_テキストログ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/850440ee-4aec-c18e-24ca-422d791e784d.png)|
|:--|

3.2.6.以上で設定は完了です。

ログの「inputTranscript」には顧客の発声が、「content」には顧客の発声を受けた後のLexの応答が出力されます。
また、後述のS3へ音声ファイルを出力する設定をすると「s3Path」に対応する音声ファイルのパスが出力されます。

**CloudWatchに出力されるログ（一部抜粋）**

```
{
    "messages": [
        {
            "contentType": "PlainText",
            "content": "どちらの都市に滞在しますか?"
        }
    ],
    "inputTranscript": "ホテル を 予約 し たい",
    "audioProperties": {
        "s3Path": "★S3内の音声ファイルのパス★"
    }
}

{
    "messages": [
        {
            "contentType": "PlainText",
            "content": "何日にチェックインしますか?"
        }
    ],
    "inputTranscript": "東京",
    "audioProperties": {
        "s3Path": "★S3内の音声ファイルのパス★"
    }
}
```

# 4.音声ファイルでのログ出力

## 4.1.S3バケットの作成
音声ファイルの出力先となる、S3バケットを作成します。

4.1.1.S3の管理画面を開き、「バケットを作成する」を選択します。

|![040_バケットを作成を選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/9d9270ff-547e-2a0f-4f2a-ee66a4ee0be5.png)|
|:--|

4.1.2.バケット名とリージョンを設定し、バケットを作成します。

|![050_バケットを作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/ab28fde3-e81b-8e6c-af65-1339c48a92b3.png)|
|:--|

## 4.2.Lexにて、ログの出力設定

4.2.1.手順3.2.1~3.2.4と同様にして、会話ログの設定画面を開きます。

4.2.2.オーディオログの項目にて、「有効」を選択し、3.1節で作成したS3バケットを選択し、設定を保存します。

|![102_会話ログの設定_音声ログ .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/cd0acaf5-f416-c4dd-5daa-0f76872d81ce.png)|
|:--|

4.2.3.以上で設定は完了です。
音声ファイルは以下の画像の様に通し番号が振られ、配置されます。

:::note info
Lexと顧客のやりとり1回につき1つのwavファイルが作成されます。
:::

|![120_S3ログイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372071/9a48c21c-cdee-571e-d0e6-9c20bb3a3bdf.png)|
|:--|

# 5.おわりに
ここまで読んで下さり、ありがとうございます！！！
(^^)

実は自分が最初やった時は何となく
「児童オンラインプライバシー保護法 (COPPA) は適用されますか?」
を「はい」としていたのでログが出力されずに困りました・・・

その後、設定を変え無事にログが出力できるようになったので、
Lexと顧客のやり取りがうまくいっていない点を確認することができました！
次回もAWSに関する記事を書く・・・かもしれません♪
(:3_ヽ)_