Appearance
플레이 이어하기 푸시 PRD
Status: Released created: March 24, 2026 9:01 PM 앱/웹/스튜디오: 서버
1. 목표 및 배경
- 기존 조건별 푸시 PRD에서 "에피소드 재방문" 푸시가 개인화 스케줄링의 복잡도로 인해 보류되었음
- 플레이 중이던 에피소드를 이탈한 유저에게 맞춤형 푸시를 발송하여 앱 재방문을 유도하는 것이 핵심 목표
- 관련 문서: 조건별 푸시 PRD (7번 항목)
기존 보류 사유 및 해소 방안
- 보류 사유: 개인별 마지막 플레이 시점을 추적하여 개인화 스케줄링해야 하므로 구현 난이도가 높았음
- 해소 방안: 개인별 트리거 대신 매일 19:00 (KST) 고정 배치로 단순화. 최근 72시간 내 플레이 이력이 있으나 당일 씬 생성 이력이 없는 유저를 대상으로 발송
2. 타깃 사용자
- 푸시 알림 수신에 동의한 유저
- 최근 72시간 이내 에피소드를 플레이한 이력이 있는 유저
- 당일 씬 생성 이력이 없는 유저
3. 핵심 기능 요구사항
공통 요구 사항
- Deep Link: 푸시 클릭 시 해당 에피소드 상세 페이지로 즉시 이동하는 딥링크를 포함해야 합니다.
- 변수 치환: 메시지 내 에피소드 명(
{episode_title}), 플레이어 이름({player_name}: 해당 에피소드 플레이 내에서 사용 중인 플레이어 이름)이 자동으로 치환되어야 합니다. - 한국어 조사 자동 치환: 변수 뒤에 오는 조사(이/가, 을/를, 로/으로, 은/는, 와/과)는 변수값의 마지막 글자 받침 유무에 따라 자동으로 올바른 형태로 치환되어야 합니다.
푸시 조건
| 항목 | 내용 |
|---|---|
| 푸시 명칭 | 플레이 이어하기 알림 |
| 발송 트리거 | 매일 19:00 (KST) 배치 처리 |
| 발송 대상 | 아래 조건을 모두 충족하는 유저: |
| ① 푸시 수신 동의 | |
| ② 최근 72시간 내 에피소드 플레이 이력 있음 | |
| ③ 당일(배치 실행일) 씬 생성 이력 없음 | |
| 에피소드 선택 | 유저가 최근 72시간 내 플레이한 에피소드 중 가장 마지막으로 플레이한 에피소드 1개 |
| 엔딩 도달 여부 | 무관 (엔딩 도달 에피소드도 포함) |
| 반복 발송 | 제한 없음. 유저가 동일 에피소드를 계속 플레이 중이면 연속으로 같은 에피소드 푸시 가능 (최대 3일 연속) |
| 발송 시간 | 매일 19:00 (KST) |
| 랜딩 페이지 | 해당 에피소드의 에피소드 상세 페이지 (/episode/:episodeId) |
| 마케팅 동의 | 불필요 (서비스성 알림) |
| label | continue_play |
배치 처리 플로우
매일 19:00 (KST) 배치 실행 시:
- 푸시 수신 동의 유저 필터
- 당일 씬 생성 유저 제외
- 최근 72시간 내 플레이 이력이 있는 유저 필터
- 가장 마지막으로 플레이한 에피소드 1개 선택
- 문구 5개 중 랜덤 1개 선택
- 푸시 발송
푸시 문구
플레이 이어하기 알림 매일 19:00 발송(마케팅 동의 필요 없음)
- 아래 5개 문구 세트 중 랜덤 1개를 선택하여 발송합니다.
- 랜딩: 해당 에피소드 상세 페이지 (/episode/:episodeId)
| # | 제목 | 본문 |
|---|---|---|
| 1 | 아직 끝나지 않은 이야기가 있어요 📖 | {episode_title}에서 이어가볼까요? |
| 2 | {episode_title}의 다음 이야기는? ✨ | {player_name} 님의 선택을 기다리고 있어요! |
| 3 | 어디까지 봤더라…? 👀 | {episode_title}를 이어서 플레이해보세요! |
| 4 | 잠깐, 그 선택 거기서 끝? 🤔 | {episode_title}, 아직 갈 길이 남았어요! |
| 5 | {player_name} 님 없인 이야기가 안 돌아가요 🥺 | {episode_title}이/가 당신의 다음 선택을 기다리는 중! |
담대한 제안: 마지막으로 만난 캐릭터 활용 문구 (Good to Have — 스코프 미확정, 백엔드 개발자 의견 후 결정)
{last_char_name}: 유저가 마지막으로 만난 캐릭터의 이름- 캐릭터 데이터가 없는 경우: 기본 문구 세트 중 랜덤 발송
- 캐릭터 데이터가 있는 경우: 아래 문구 세트 + 기본 문구 세트 중 랜덤 발송
| # | 제목 | 본문 |
|---|---|---|
| 1 | {last_char_name}이/가 기다리고 있어요. | 지금 바로 {episode_title}로/으로 만나러 갈까요? |
| 2 | 지금 바빠요? 👀 | {episode_title}에서 {last_char_name}이/가 기다리고 있어요! |
| 3 | {last_char_name}의 다음 반응이 궁금하다면? | {episode_title}로/으로 만나러가기 🏃🏻 |
4. 사용자 플로우
- 유저가 에피소드를 플레이하다 앱을 종료 (이탈)
- 다음날~72시간 이내, 유저가 씬 생성을 하지 않은 상태
- 19:00 (KST) 배치 실행 → 조건 충족 확인
- 푸시 발송: 5개 문구 세트 중 랜덤 1개 선택하여 발송
- 유저가 푸시 탭 → 해당 에피소드 상세 페이지로 이동
- 에피소드 상세에서 이어하기/플레이 액션 수행
5. 에러 처리 및 예외 상황
| 예외 상황 | 처리 방안 |
|---|---|
| 최근 72시간 내 플레이한 에피소드가 삭제/비공개 전환된 경우 | 해당 유저는 푸시 발송 대상에서 제외 |
| 최근 72시간 내 플레이 이력이 없는 유저 | 대상 아님 → 스킵 |
| 유저가 당일 앱에 접속해서 씬 생성한 경우 | 스킵 (이미 활성 유저) |
| 유저가 푸시 수신을 거부한 경우 | 대상 아님 → 스킵 |
| 같은 에피소드 푸시가 3일 연속 발송되는 경우 | 허용 (72시간 윈도우 내에서 자연스럽게 최대 3회로 제한됨) |
| 배치 실행 실패 또는 지연 | 재시도 정책 없음 |
| 배치 처리 중(시작~발송 완료 사이) 유저가 씬을 생성한 경우 | 그대로 발송 (실시간 체크 하지 않음) |
| 동일 시간대 다른 스케줄 푸시와 중복 | 현재 19:00 (KST) 스케줄 푸시는 본 건만 해당하여 충돌 없음. 즉시 발송 푸시와 겹치는 것은 허용 |
6. 데이터 분석
- 가설: 플레이 이어하기 푸시가 추가되면, 에피소드를 플레이하다 이탈한 유저의 D1~D3 재방문율이 증가할 것이다.
⇒ FCM 데이터 라벨로 확인
핵심 지표
- 발송 수: 일별 푸시 발송 건수
- 클릭률 (CTR): push_clicked / push_sent
- 재방문 전환율: 푸시 클릭 후 실제 씬 생성까지 이어진 비율
- D1~D3 리텐션 변화: 푸시 도입 전후 비교