통신 흐름도 · 유저 플로우차트 · 이벤트 속성 정의서 · 기술 스펙
| # | 🌐 웹 | ✖ 에어브릿지 | 📦 스토어 | 📱 앱 → Braze SDK | 🔔 Braze 인앱 | 📲 OS | 📊 구글시트 |
|---|---|---|---|---|---|---|---|
| PHASE 0 — 웹 · 앱 설치 판단 | |||||||
| 0 | CTA 클릭
이벤트 페이지에서 앱 설치 여부 확인미설치 → 앱 설치 모달 + 스토어 CTA 설치됨 → 딥링크 직접 진입 |
Deferred Deep Link
파라미터 저장설치 완료 시 딥링크 자동 실행 |
|||||
| PHASE 1 — 딥링크 수신 · SDK 전달 | |||||||
| 1 | 에어브릿지
딥링크 파싱 → 앱 오픈app://event/{event_id}?apply_event=truelink_type: deferred | direct
|
앱 → Braze SDK
① setCustomAttribute'push_authorization_status'= 'not_determined' | 'denied' | 'authorized'② logCustomEvent'deeplink_open_promotion'{link_type, term, event_id}① → ② 순서 보장 필수 (Canvas 트리거 전 attr 선행) |
|||||
| PHASE 2 — Braze Canvas 분기 | |||||||
| 2 | Canvas Audience Path
트리거: deeplink_open_promotionA. is_participated_{term}=true → 이미 참여 IAMB. 약관 미동의 → 약관 동의 IAM C. 약관 OK + push_authorization_status ≠ authorized → Push Primer IAMD. 모두 OK → 참여 완료 IAM |
||||||
| PHASE 3A — 약관 동의 모달 | |||||||
| 3A | 약관 동의 후 SDK
① setCustomAttribute'is_marketing_info_opted_in' = true'is_marketing_message_opted_in' = true② logCustomEvent 'terms_agreed'딥링크: app://braze/consent
|
약관 동의 IAM
미동의 항목만 동적 표시brazeBridge Liquid 변수 주입 |
|||||
| PHASE 3B — Push Primer IAM (push_authorization_status ≠ authorized) | |||||||
| 3B‑1 | Push Primer IAM
isPushOn() 함수로 상태 판단function isPushOn() { const b = getBridge(); const s = b.getUser() .getCustomAttribute( 'push_authorization_status'); return s === 'authorized'; } → true: 참여 완료 처리 / → false: push 안내 분기 |
OS 권한 프롬프트
not_determined 유저 전용iOS 시스템 팝업 / Android 13+ 바텀업 허용 → source: 'prompt'거부 → source: 'prompt', denied닫기 → 이벤트 없이 IAM_FAIL 직결 |
|||||
| 3B‑2 | 푸시 허용 후 SDK
① setCustomAttribute'push_authorization_status' = 'authorized'② logCustomEvent 'push_permission'{status: 'granted', source: 'prompt' | 'settings', event_name, event_id}
|
||||||
| PHASE 4 — 참여 완료 모달 | |||||||
| 4 | 참여 완료 IAM
Liquid: term, event_id 주입setCustomUserAttribute'is_participated_{term}' = truelogCustomEvent'view_participated_promotion_modal'{event_name, event_id}
|
||||||
| PHASE 5 — 구글시트 앱스크립트 · Canvas 퍼포먼스 자동 fetch | |||||||
| 5 | Braze REST API
GET /canvas/data_summaryCanvas Analytics 데이터 반환 |
Google Apps Script
mapping_input 시트 → Canvas_IdBigQuery UNNEST 배치 쿼리 1회 그로스챕터용 시트 자동 기입CRM 리포트 → 🚀 배치 실행 Status 빈 행 전체 → '완료'
|
|||||
deeplink_open_promotion
앱 SDK
Canvas 트리거 이벤트 — 딥링크 수신 직후 발송
| Property | Type | 값 | 설명 |
|---|---|---|---|
link_type | String | deferred / direct | 신규 설치(deferred) / 기설치 유저(direct) |
term | String | appinstall_2603 | 프로모션 식별자 (Canvas Audience Path 분기에 사용) |
event_id | String | 예: {event_id} | 이벤트 고유 ID |
setCustomAttribute('push_authorization_status', ...) 설정 후 이 이벤트를 발송해야 Canvas Audience Path에서 attribute 값을 정확히 읽을 수 있음terms_agreed
앱 SDK
약관 동의 완료 후 발송
| Property | Type | 값 | 설명 |
|---|---|---|---|
term | String | appinstall_2603 | 프로모션 식별자 |
event_id | String | 예: {event_id} | 이벤트 고유 ID |
app://braze/consent 호출로 앱에 동의 완료 신호 전달. 동시에 is_marketing_info_opted_in, is_marketing_message_opted_in attribute 세팅push_permission
앱 SDK
OS 권한 요청 결과 또는 설정 앱 복귀 후 발송
| Property | Type | 값 | 설명 |
|---|---|---|---|
status | String | granted / denied | 허용 / 거부 |
source | String | prompt / settings | OS 프롬프트에서 결정 / 설정 앱에서 변경 후 복귀 |
event_name | String | appinstall_2603 | 프로모션 식별자 |
event_id | String | 예: {event_id} | 이벤트 고유 ID |
push_authorization_status attribute도 업데이트 안 함.view_participated_promotion_modal
brazeBridge
참여 완료 IAM 조회 시 Custom HTML IAM 내부에서 발송
| Property | Type | 값 | 설명 |
|---|---|---|---|
event_name | String | appinstall_2603 | Liquid로 주입: {{canvas_entry_properties.${term}}} |
event_id | String | 예: {event_id} | Liquid로 주입: {{canvas_entry_properties.${event_id}}} |
setCustomUserAttribute('is_participated_{term}', true) 실행. 이후 재진입 시 "이미 참여 완료" 분기로 라우팅됨.| Attribute Key | Type | 값 | 세팅 주체 | 세팅 시점 |
|---|---|---|---|---|
push_authorization_status |
String | not_determined / denied / authorized |
앱 SDK | 딥링크 수신 직후 (deeplink_open_promotion 발송 전) |
is_participated_{term} |
Boolean | true |
brazeBridge | 참여 완료 IAM 조회 시 (impression) |
is_marketing_info_opted_in |
Boolean | true |
앱 SDK | 약관 동의 완료 후 |
is_marketing_message_opted_in |
Boolean | true |
앱 SDK | 약관 동의 완료 후 |
| 분기 | 세그먼트 조건 | 노출 IAM |
|---|---|---|
| A — 이미 참여 | is_participated_{term} = true |
이미 참여 완료 안내 IAM |
| B — 약관 미동의 | is_participated_{term} ≠ true+ is_marketing_info_opted_in ≠ true OR is_marketing_message_opted_in ≠ true |
약관 동의 IAM (미동의 항목 동적 표시) |
| C — Push 미허용 | is_participated_{term} ≠ true+ 약관 2개 모두 true+ push_authorization_status ≠ authorized |
Push Primer IAM |
| D — 모두 OK | is_participated_{term} ≠ true+ 약관 2개 모두 true+ push_authorization_status = authorized |
참여 완료 IAM |
| UI | 유형 | 트리거 |
|---|---|---|
| 📝 약관 동의 모달 | Braze Custom HTML IAM | Canvas 분기 B |
| 🔔 Push Primer IAM | Braze Custom HTML IAM | Canvas 분기 C — isPushOn() 내부 분기 |
| 🎉 참여 완료 | Braze Custom HTML IAM | Canvas 분기 D (또는 C → 허용 후) |
| ✅ 이미 참여 완료 | Braze Custom HTML IAM | Canvas 분기 A |
| 🔕 미완료 안내 (IAM_FAIL) | Braze Custom HTML IAM | Push Primer 닫기 → dismiss |
Custom HTML IAM 내부 JS — push_authorization_status attribute를 읽어 분기 판단
| 열 | 항목 | 설명 |
|---|---|---|
| A | Promotion_Name | 프로모션명 |
| B | Year_Month | 연월 (예: 2603) |
| C | User_Type | 유저 타입 |
| D | Canvas_Id | Braze Canvas ID |
| E | Primary_Conv | 주요 전환 이벤트명 |
| F | Secondary_Conv | 보조 전환 (쉼표 구분) |
| G | Event_Title | BigQuery 이벤트명 |
| H | Landing_URL | 랜딩 URL |
| I | Status | 완료 / 오류 자동 기입 |
| 실행 | 상단 메뉴 CRM 리포트 → 🚀 배치 실행 Status 빈 행 전체를 1회 쿼리로 처리 |
| 쿼리 방식 | BigQuery UNNEST 배치 쿼리 Canvas step별 지표 추출 |
| 결과 시트 | 그로스챕터용채널별 Recipient / Impression / Click / Conversion / CTR / CVR 자동 기입 |
| 완료 표시 | Status 열 → '완료' 자동 기입 |