KintoneからLambdaを経由してAmazon PinpointでMAを実装①

## はじめに
KintoneでMA構築する上で、Lambdaを経由してAmazon Pinpointでメールの配信をする構築方法を説明します。
##### 1.Kintone(CRM)の顧客情報をLambdaで取得する
![kintone1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821360/5465a8af-b59d-d418-c630-1d037659ac2c.png)
##### 2.pinpointに対してendpointを登録する
![kintone2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821360/22e3df49-055b-d0f2-0fb3-c4aa0a8becaa.png)

##### 3.AWS コンソールで配信環境を設定する
* 3-1.セグメントを作成する
* 3-2.メールのテンプレートを作成する
* 3-3.キャンペーンを作成して配信設定する

配信グループで設定したユーザーに対して、キャンペーンで設定した配信日時にメール（SMS）を配信できます
![aws_pinpoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821360/bcee76e3-21ef-568e-fefe-e53a0ac2c575.png)

## Amazon Pinpointのメリット
kintoneで自動配信はプラグインを導入することで可能ですが、分析などを行う場合は様々なツールを使い開封率などを計測していく必要があります。
AWSのPinpointを使うことでメールの配信率や、開封率、メール内のリンククリック数も自動で出力できます。
また特定のメールを開封したユーザーのみ次のメールを配信するなどどいった複雑な処理もジャーニーを活用することでノーコードで簡単に設定できるようになります。

## 1.Kintone(CRM)の顧客情報をLambdaで取得する
![kintone1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821360/5465a8af-b59d-d418-c630-1d037659ac2c.png)
boto3のインポート
```python
import boto3
client = boto3.client('pinpoint')
```

kintone apiを叩きデータを取得
```python
URLS = "https://***.cybozu.com/k/v1/records.json"
API_TOKEN = "APIトークン"

def get_kintone(body, token):
    headers = {'X-Cybozu-API-Token': token, 'Content-Type': 'application/json'}
    resp = requests.get(URLS, data=json.dumps(body), headers=headers)
    return resp

def lambda_handler(event, context):
    get_data = {'app': 'アプリID', 'query': 'ここにクエリ'}
  
    RESP = get_kintone(get_data, API_TOKEN)
    data1 = json.loads(RESP.text)

```
※サブドメイン、APIトークン、アプリID、クエリを書き換えてください

* ユーザーの属性情報を取得

```python
 while i < len(data1["records"]):
    # user infomation
    name = data1["records"][i]["name"]["value"]
    tel = data1["records"][i]["tel"]["value"]
    mail = data1["records"][i]["mail"]["value"]
    zipcode = data1["records"][i]["zipcode"]["value"]
    address_1 = data1["records"][i]["address_1"]["value"]

    i += 1
```
## 2.pinpointに対してendpointを登録する
* endpointに追加するためのJSONに値を格納する

```python
    json_body = {
                    "ChannelType": "EMAIL",
                    "Address": mail,
                    "Attributes": {
                    },
                    "Metrics": {},
                    "Demographic": {},
                    "Location": {},
                    "User": {
                        "UserId": mail,
                        "UserAttributes": {
                            "user_name": [name],
                            "tel": [tel],
                            "zipcode": [zipcode],
                            "address_1": [address_1]
                        }
                    }
                }
```
endpointに登録する
```python
response = client.update_endpoint(
    ApplicationId='pinpointのアプリケーションIDを設定する',
    EndpointId=mail,
    EndpointRequest=json_body
)

```

##### 全体のプログラムは下記の通りです

```python
import boto3
client = boto3.client('pinpoint')

URLS = "https://***.cybozu.com/k/v1/records.json"
API_TOKEN = "APIトークン"

def get_kintone(body, token):
    headers = {'X-Cybozu-API-Token': token, 'Content-Type': 'application/json'}
    resp = requests.get(URLS, data=json.dumps(body), headers=headers)
    return resp

def lambda_handler(event, context):
    get_data = {'app': 'アプリID', 'query': 'ここにクエリ'}
  
    RESP = get_kintone(get_data, API_TOKEN)
    data1 = json.loads(RESP.text)
while i < len(data1["records"]):
    # user infomation
    name = data1["records"][i]["name"]["value"]
    tel = data1["records"][i]["tel"]["value"]
    mail = data1["records"][i]["mail"]["value"]
    zipcode = data1["records"][i]["zipcode"]["value"]
    address_1 = data1["records"][i]["address_1"]["value"]
    json_body = {
                    "ChannelType": "EMAIL",
                    "Address": mail,
                    "Attributes": {
                    },
                    "Metrics": {},
                    "Demographic": {},
                    "Location": {},
                    "User": {
                        "UserId": mail,
                        "UserAttributes": {
                            "user_name": [name],
                            "tel": [tel],
                            "zipcode": [zipcode],
                            "address_1": [address_1]
                        }
                    }
                }

    response = client.update_endpoint(
        ApplicationId='pinpointのアプリケーションIDを設定する',
        EndpointId=mail,
        EndpointRequest=json_body
    )
    
    i += 1
```

ここまでできればあとはコンソール側で配信設定を行うことで簡単に自動配信ができます。
今回はここまでの手順説明となります。
次回は「AWS コンソールで配信環境を設定する」を投稿してきます。