해당 WIKI URL
Pinpoint를 활용한 마케팅 및 고객 행동 데이터 수집 및 분석 프로세스 v1.0
- 외부 솔루션에서 캠페인 메시지를 즉각 전송할 수 있도록 API를 CDK 기반으로 작성 (특정 서버에서만 호출 가능하도록 설정)
- 마케팅 메시지의 고객 응답을 분석하여 실사용자에게만 메시지를 보내도록 조정 (활성화된 고객으로 타겟팅, 예: Custom 필드에 실 사용자 플래그를 두어서 세그멘테이션으로 활용, App Push → Email → SMS로 App 사용 재유도)
- 누가/언제/무슨행동에 대한 의미있는 데이터를 별도로 수집하여 분석 (모든 메시지를 모아서 분석하는 방법보다 용이)
Pinpoint 구성 요소 및 등록 절차 설명
1. Pinpoint Campaign을 위한 REST API 만들기
Rest API를 통한 Campaign 진행을 위한 Lambda sample python source code (Test용)
import json import boto3 import os import datetime from botocore.exceptions import ClientError # Pinpoint Project Id application_id = "4fcac97e77254e918fa8f9d919afde1e" region = os.environ['AWS_REGION'] client = boto3.client('pinpoint',region_name=region) def get_segment_id(segment_name): try: response = client.get_segments( ApplicationId=application_id ) segment_list = response['SegmentsResponse']['Item'] for one in segment_list: if one['Name'] == segment_name: segment_id = one['Id'] except ClientError as e: print(e.response['Error']['Message']) else: print(segment_id) # print(json.dumps(response)) return segment_id def create_campaign(title, message, segment_id, icon_url, image_url): print(segment_id) try: response = client.create_campaign( ApplicationId=application_id, WriteCampaignRequest={ 'MessageConfiguration': { 'DefaultMessage': { 'Action': 'OPEN_APP', 'Body': message, 'Title': title, 'ImageIconUrl': icon_url, 'ImageUrl': image_url # 'ImageUrl': 'http://www.earlyadopter.co.kr/wp-content/uploads/2019/11/apple-airpods-pro-early-adopter-review-1.jpg' # 'MediaUrl': 'https://m.media-amazon.com/images/G/01/kindle/merch/2019/ONTHEGO/19951312/PUGE0013_Amazon_Puget_US_REV_2019_45_HD-forDP.mp4?_=1' }, }, 'Name': title, 'Description': "캠페인 메시지", 'SegmentId': segment_id, 'Schedule': { 'StartTime': "IMMEDIATE" # 'Frequency': 'ONCE', # 'StartTime': datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat() } } ) except ClientError as e: print(e.response['Error']['Message']) else: print (json.dumps(response)) def lambda_handler(event, context): if "body" in event: event = json.loads(event['body']) # Query parmeters title = event["title"] message = event["message"] segment = event["segment"] icon_url = event["icon"] image_url = event["image"] segment_id = get_segment_id(segment) response = create_campaign(title, message, segment_id, icon_url, image_url) return { 'statusCode': 200, 'body': json.dumps({'result': response}), 'headers': { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' } }
매개 변수중 Schedule에 있는 StartTime에 따라서 즉시 보낼 것인지, 특정 시간에 보낼 것인지 정해야 합니다.
Python boto3에서 제공하는 기능은 다음 문서에서 확인할 수 있습니다: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/pinpoint.html
Lambda test json template
{ "segment": "cart", "title": "안녕하세요 {{User.UserId}}님", "message": "신제품 Echo Bud를 소개 합니다.", "icon": "https://apprecs.org/ios/images/app-icons/256/6d/580990573.jpg", "image": "https://pplware.sapo.pt/wp-content/uploads/2019/09/Amazon_Echo_Buds_02.jpg" }
Lambda Policy
하단의 {account-id}는 본인 account-id(12자리 숫자)로 치환해야 하며, 아래는 테스트를 위해서 임의로 간단하게 구성한 예입니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:us-east-1:{account-id}:log-group:/aws/lambda/PinpointPushTest:*" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "mobiletargeting:*", "Resource": "*" }, { "Sid": "VisualEditor2", "Effect": "Allow", "Action": "logs:CreateLogGroup", "Resource": "arn:aws:logs:us-east-1:{account-id}:*" } ] }
2개 테스트 결과
1개는 시간대를 지정하여 발송하고, 하나는 즉시 발송하였습니다.
Amazon Pinpoint Mobile App push notification Analysis
2. Pinpoint 미접속 유저 차단 분석
작성중
3. 사용자 이벤트 분석
작성중
Pinpoint Journey 기능 출시
마케팅을 위한 워크플로우를 시각화 도구를 이용해서 쉽게 구성할 수 있습니다: https://aws.amazon.com/ko/pinpoint/features/engagement-management/journeys/
Pinpoint 비용
1. 캠페인 전송 비용
채널 | 트랜잭션 메시지 요금 | 캠페인 또는 Journey 기반 메시지 요금 (MTA 요금 별도 청구) |
---|---|---|
이메일 | $1 / 10,000개 | $1 / 10,000개 |
푸시 알림 | $1 / 1,000,000개 | $1 / 1,000,000개 |
SMS | 한국 국가별 상이, SMS 요금 도구를 참조. | 한국 |
그 외 채널로의 메시지 전송 방법은 Lambda를 이용합니다: https://docs.aws.amazon.com/pinpoint/latest/developerguide/channels-custom.html
MTA 요금 추가 적용: 캠페인 기반 메시지의 경우, 최초 MTA 5,000개 엔드포인트에 대해서는 $0, 이후 1,000개당 1.20 USD 과금 (하단 월 사용자 정보 관리 참고)
2. 커스텀 이벤트 수집
1,000개 기준 1.2원 (1,172.59원/$1 기준)
매월 수집하는 처음 100,000,000개의 이벤트에 대해 0 USD, 그 후 수집하는 이벤트에 대해 이벤트당 0.000001 USD를 지불합니다. → 1,172.59 = 0.0012원
AWS Mobile SDK를 사용하여 애플리케이션 사용 데이터를 수집하는 경우, 매월 수집하는 애플리케이션 이벤트 수에 따라 요금이 부과됩니다.
애플리케이션 이벤트는 캠페인 이벤트(푸시 알림의 링크 클릭 등)와 모바일 앱을 사용할 때 기록되는 이벤트(앱 열기 등)를 포함합니다.
3. 월 사용자 정보 관리 (MTA)
활성화된 타겟 Audience 1 기준 = 1.41원 (1,172.59원/$1 기준)
엔드포인트는 개별 고객의 메시징 대상으로, 이메일 주소, 휴대폰 번호 또는 디바이스 식별자를 예로 들 수 있습니다. (User.UserId 기준 최대 10개의 Endpoint를 등록 할 수 있습니다.)
30일 기간 동안 접촉한 엔드포인트 총수를 월별 목표 대상(MTA)이라고 합니다. 캠페인 메시지를 발송할 때는 다음 요금을 지불합니다.
- 매월 목표로 하는 처음 5,000개의 엔드포인트는 0 USD.
- 그 후에는 최대 10,000,000개의 엔드포인트까지 엔드포인트당 0.0012 USD.
천 만개 이상일 경우 프라이빗 요금 상의
모바일 이벤트 메시지에 대한 분석 처리 Lambda 코드
'use strict'; console.log('Loading function'); exports.handler = async (event, context) => { /* Process the list of records and transform them */ const output = event.records.map((record) => { const entry = (new Buffer.from(record.data, 'base64')).toString('utf8'); var json_data = JSON.parse(entry); json_data.event_timestamp = new Date(json_data.event_timestamp).toISOString(); json_data.arrival_timestamp = new Date(json_data.arrival_timestamp).toISOString(); console.log(json_data); const result = JSON.stringify(json_data) + '\n'; const payload = (new Buffer.from(result, 'utf8')).toString('base64'); /* Transformed event */ return { recordId: record.recordId, result: 'Ok', data: payload, }; }); console.log(`Processing completed. Successful records ${output.length}.`); console.log(output); return { records: output }; };
이벤트 발생한 시간을 UNIX 시간에서 ISO 포맷으로 변경하는 예
참고: https://aws.amazon.com/blogs/compute/amazon-kinesis-firehose-data-transformation-with-aws-lambda/
기타 솔루션 연계
G-Suite 연동
G-suite과 SAML 연동하는 방법 (추후 업데이트)
Login 하면 바로 AWS Pinpoint 메시지 보내는 화면으로 시작하기: 로그인 직후 시작 URL에 해당 캠페인으로 URL 구성
현대 백화점 예시
사례 소개: https://aws.amazon.com/ko/solutions/case-studies/hyundai-departmentstore/
640만 가입자, 일 App 사용자 10만, 월 기준 40만 (실제는 40만 + 인당 Device 개수(App이 설치된 경우)) - 2019년 4월 Summit 기준
관련 자료
PPT 자료: https://www.awsdemo.kr/pinpoint/amazonpinpointpr.pdf
AWS Digital User Engagement Architecture 소개 WIKI: https://cdk.awsdemo.kr/duedg
모바일을 위한 워크샵: https://cdk.awsdemo.kr/mobilehol
이메일을 위한 실습 및 분석: https://cdk.awsdemo.kr/pinpoint201
Pinpoint는 캠페인 툴이면서, 고객 행동 분석을 위한 시작점입니다.
따라서 아래와 같이 서버리스 개념과 데이터 분석 플랫폼을 만드는 방법을 같이 고객이 알고 있으면 도움이 됩니다.
자습 형태로는 아래와 같이 하나씩 순서대로 진행해 보시면 좋습니다.
1) REST API 로 Pinpoint를 호출하기 위하여 사전 학습해야 할 내용
서버리스 개념, 기초 실습, DevOps실습 이렇게 3가지로 나누어서 진행하면 1번째 부분에 대한 이해를 하실 수 있고 이후 추가로 직접 개발할 수 있습니다.
- 서버리스 개념 학습(40분): https://www.youtube.com/watch?v=6GmnBkHf1Xo
- 서버리스 기초 실습(60분): https://cdk.awsdemo.kr/serverless201
- 서버리스 DevOps를 적용한 실습(60분, 미션 1까지만 진행): https://cdk.awsdemo.kr/devops301lab2
2) Android 용 Push Notification 환경 만들기
App Push Notification로 메시지를 전송하기 위해서는 App을 개발하는 작업이 필요합니다.
Amplify 페이지에서 Push Notification을 사용하기 위한 설정 방법이 플랫폼 별로 설명되어져 있습니다.
위 모바일 워크샵(https://cdk.awsdemo.kr/mobilehol)을 참고해서 환경 설정을 할 수 있습니다.
3) Pinpoint 를 이용한 메시지 발송
AWS 관리 콘솔에서 Pinpoint를 이용해서 캠페인 메시지를 발송합니다.
Korea SA 팀 차원에서 도움 드릴 수 있는 부분
Oppty 기반 Solutions Architect 기반 1일차 교육 세션들
1) Standard Immersion Day: EC2, VPC, S3, RDS
2) Serverless Immersion Day: Lambda, API Gateway, DynamoDB, SNS
3) Big Data Immersion Day: Kinesis, Glue, S3, Athena, QuickSight, Redshift, EMR
4) Mobile Immersion Day: Amplify, Cognito, AppSync, Pinpoint (for Android)
카카오톡 알림톡 활용
Amazon Pinpoint SMS 대신 카카오톡 알림톡을 활용합니다. 중간에 파트너를 통해서 메시지를 전송합니다.
참고: AWS Lambda를 이용한 문자 SMS 발송 방법 (카카오톡 알림톡 등 역시 가능)
방법은 다음과 같이 구성할 수 있을 것으로 보입니다. (이 부분은 제 뇌피셜이며 가능할 것으로 보입니다. 제가 개인사업자 등록증이 없어서 테스트는 못해 보았습니다.)
- Amazon Pinpoint의 특정 Segment 정보를 Export 하여, S3에 SMS 발송을 위한 고객 정보(전화번호, 이름, 기타)를 저장합니다.
- API Gateway로 API를 호출하여 발송하고자 하는 메시지와 타겟이 되는 Export된 S3의 정보를 전달합니다. (이 부분은 아키텍처 적으로 변경 될 수 있습니다.)
- Lambda는 S3에 쌓여진 사용자 정보(전화 번호, 이름)를 뽑아서 SQS(전화번호, 사용자 정보, 메시지 id)와 DynamoDB(메시지id, 카카오톡 알림톡을 위한 메시지 템플릿)에 넣어 둡니다.
- Lambda가 시작할 때, SQS에서 전화번호와 메시지를 배치로 일정량씩만 가져오고, DynamoDB에 저장된 메시지를 가져와서 템플릿을 구성한 뒤, (보통의 경우) 카카오톡 알림톡 API를1,000개 단위(일괄 발송을 위한 Limit을 고려)로 발송하는 API를 동작 시킵니다.
“카카오톡 친구톡”은 특정 업체에 친구 맺기를 한 고객을 대상으로 일괄 캠페인 메시지를 보낼 수 있는 방식입니다. (방식의 차이이며 확장 가능합니다.)
이렇게 운용시 S3, SQS, Lambda, DynamoDB 비용은 서버리스 개념이므로 비용이 거의 낮게 발생하게 되며 카카오톡 알림톡 API를 사용하는 비용 정도가 크게 발생되는 구조를 가지게 됩니다.
- SMS 메시지 전송시 Hook 을 Lambda 를 통해 발송하는 방법은 ? – MTA 비용 확인 필요, 구현하기 편리함
- 구조는 Facebook 예제와 유사합니다. FB Messenger 부분에 파트너 ( 공급 채널 ) 가 제공하는 API 또는 SDK를 Lambda에 넣어서 발송 가능합니다.
SMS 발송 대신 옵션을 DELIVERY로 두고 Lambda에서 발송하는 방법도 있습니다. SMS로 돌아가서 메시지를 보내는게 아니라 Lambda에서 전송 로직(카카오톡 알림톡)을 구현하고 끝내버리는방식입니다.
기존 내용 백업
d
8 댓글
김현수
대량으로 세그먼트 정보를 업데이트 하는 방법
건별 업데이트 방법
김현수
AWS Lambda를 이용한 사용자 지정 채널 생성
SMS, E-mail, Push Notification 이외의 채널로 메시지를 발송하는 방법을 제공합니다.
Facebook Messenger와 같은 인스턴트 메시징 서비스에 메시지를 전송하거나 웹 애플리케이션 내에서 알림을 표시하려는 경우가 있습니다.
이 경우 AWS Lambda를 사용하여 Amazon Pinpoint 외부에서 메시지 전송을 수행하는 사용자 지정 채널을 만들 수 있습니다.
https://docs.aws.amazon.com/ko_kr/pinpoint/latest/developerguide/channels-custom.html
김현수
임시 테스트를 위한 정보
Test Site: https://apitester.com/
Rest API: https://pf07j15pzd.execute-api.us-east-1.amazonaws.com/Prod
datat
김현수
https://www.awsdemokr.com/pinpoint-images/icon_cjck.jpg
https://www.awsdemokr.com/pinpoint-images/icon_cjtmk.jpg
https://www.awsdemokr.com/pinpoint-images/cjtmk01.jpg
https://www.awsdemokr.com/pinpoint-images/cjck01.jpg
{
"segment"
:
"test"
,
"title"
:
"[신메뉴] 소고기듬뿍 버섯잡채 출시!"
,
"message"
:
"한입 가득 감동, 소고기, 버섯, 채소 모두 듬뿍!!"
,
"icon"
:
"https://www.awsdemokr.com/pinpoint-images/icon_cjck.jpg"
,
"image"
:
"https://www.awsdemokr.com/pinpoint-images/cjck01.jpg"
}
{
"segment"
:
"test"
,
"title"
:
"[베스트] 햇반 190gX27개 + 햇반 하트스티커X2개!"
,
"message"
:
"210g이 많아? 130g이 작아? 그럼 [190g]!"
,
"icon"
:
"https://www.awsdemokr.com/pinpoint-images/icon_cjtmk.jpg"
,
"image"
:
"https://www.awsdemokr.com/pinpoint-images/cjtmk01.jpg"
}
김현수
S3를 Datalake로 활용하는 AWS 기반의 분석 서비스 실습 소개 자료
201 레벨: https://s3.amazonaws.com/anhyobin-analytics/doc/Serverless+Real-Time+Data+Analytics.pdf
301 레벨: https://hyun-public-seoul.s3.ap-northeast-2.amazonaws.com/analytics-immersionday/Analytics_Hands-on_Guide.pdf
김현수
Amazon Pinpoint + Google Chrome Web push notification
Service Worker: https://w3c.github.io/ServiceWorker/
서비스 워커 설명: https://developers.google.com/web/fundamentals/primers/service-workers?hl=ko
서비스 워커를 통한 Push notification 예: https://developers.google.com/web/fundamentals/codelabs/push-notifications?hl=ko
https://caniuse.com/#search=service%20worker
Amazon Music 예: Amazon Music Pinpoint 예
김현수
모바일 Pinpoint Push 데이터를 Kinesis로 연결하는 방법 (Firehose 생성)
변경해줄 Lambda 생성
CloudWatch Logs에서 데이터 확인
데이터 Base64 디코딩
데이터 JSON 구조 정보
추가해야할 작업
클릭 스트림 이벤트 생성 및 분석
김현수
https://firebase.google.com/docs/cloud-messaging/manage-tokens