Appearance
[앱·서버] 선톡 로직/프롬프트 개선 — 전송 제한·무응답 컷오프·응답 전략 PRD
Backlog grooming 산출물. 이미 운영 중인 나만의 선톡 발송 로직에 얹는 증분 개선의 제품 정책만 정의한다. 발송 파이프라인의 전체 구조(자격·pre-check·생성·예약·과금·push)는
draft/proactive-message-personalization/spec.md(DEE-414)가 정본이며, 본 PRD 는 그 위에 더하는 전송 빈도 제한·무응답 컷오프 강화 변경분만 소유한다. 선톡 프롬프트 본문(문장 길이·톤·이어말하기/주제 전환 전략)은 본 PRD 범위가 아니다 — DEE-532 에서 별도로 다룬다.
Status: draft Created: 2026-06-22 Last updated: 2026-06-22 Linear Issue: DEE-531 선톡 로직/프롬프트 개선 — 전송 제한·무응답 컷오프·응답 전략Linear Project: [앱] 선톡 로직/프롬프트 개선관련 프롬프트 기획: DEE-532 선톡 프롬프트 개선 기획 — 무응답 상황 길이·톤·주제 전환 전략Author: agent (momo) Surface: 서버(선톡 스캐너·생성·예약·발송 엔진)
0. 요약
나만의 선톡은 이미 운영 중이다 — Soul 이 무응답 유저에게 먼저 보내는 유료 개인화 메시지이고, 발송 여부·시각·과금은 backend 가 결정한다(정본: DEE-414 spec). 본 PRD 는 그 로직을 새로 만들지 않고, 유저가 답하지 않는 상황에서 선톡이 과도하게 반복되거나 너무 빠르게 이어지는 문제를 줄이는 증분 개선만 정의한다.
선톡은 "친근하지만 부담 없는 재접점"이어야 한다. 유저가 무응답인 동안에는 더 보수적으로, 더 일찍 멈춰야 한다. 이를 위해 두 가지를 더한다.
- 같은 채팅방 4시간 최소 발송 간격(cooldown). 최근 4시간 안에 그 Soul 에게서 선톡을 받았으면 새 선톡 후보에서 제외한다.
- 장기 무응답 컷오프 강화: 3일 → 1일(rolling 24시간). 마지막 유저 메시지 이후 rolling 24시간이 지나도록 답이 없으면 더 이상 선톡을 생성하지 않는다.
변경점 한눈에 (현재 baseline 대비)
| 항목 | 현재(DEE-414) | 본 PRD 변경 |
|---|---|---|
| 선톡 간 최소 간격 | 명시적 cooldown 없음(같은 (user, Soul) 동시 scheduled 1개 제한 + 일일 수신 2회 상한만 존재) | 같은 채팅방 기준 최근 4시간 내 수신 이력 있으면 후보 제외 (cooldown 추가) |
| 장기 무응답 컷오프 | 마지막 유저 메시지 이후 3일 이상이면 생성 중단 | 마지막 유저 메시지 이후 rolling 24시간 이상이면 생성 중단 (윈도우 상한 단축) |
| 생성 트리거 윈도우 하한 | 마지막 유저 메시지 이후 1시간 무응답 | 유지 (변경 없음) |
| 일일 수신 상한 | (user, Soul, 유저 tz 달력일) 하루 최대 2회 수신 | 유지 (변경 없음) |
| 선톡 프롬프트 본문/톤/길이 | — | 본 PRD 범위 아님 (DEE-532) |
1. 배경과 목표
1.1 문제
현재 운영 중인 선톡 로직 기준, 무응답 유저 대상으로 두 가지 리스크가 남아 있다.
- 과빈도 발송. 선톡과 선톡 사이의 최소 간격이 명시적으로 강제되지 않는다. 현재는 동시
scheduled1개 제한과 일일 수신 2회 상한이 있을 뿐이어서, 하루 안에 짧은 간격으로 두 번이 몰리면 유저가 스팸처럼 느낄 수 있다. - 무응답 장기 지속. 마지막 유저 메시지 이후 3일까지 선톡 생성이 계속된다. 유저가 답하지 않았는데도 며칠간 선톡만 누적되면 관계감보다 압박감이 커진다.
1.2 목표
- 무응답 상황에서 선톡이 과도하게 반복되거나 너무 빠르게 이어지지 않도록 발송 빈도를 보수적으로 제한한다.
- 답이 없는 관계를 며칠간 두드리는 대신 하루 안에 정리되도록 컷오프를 앞당긴다.
1.3 Non-goals
- 선톡 프롬프트 문안·톤·길이·이어말하기/새 주제 선택 기준 (→ DEE-532).
- 기본 채팅(즉답) 프롬프트 전체 재작성.
- 선톡 ON 넛지 UI/카피 변경.
- Chat Thread / Soul / User Relational Persona 등 도메인 구조 변경.
- 일일/주간 선톡 cap 의 전면 재설계 — 본 PRD 는 기존 일일 2회 상한을 유지한 채 4시간 cooldown 만 추가한다.
2. 제품 정책 (PRD 가 닫는 결정)
본 절은 기술 설계 전에 합의되어야 하는 제품 정책만 다룬다. DB/큐/락/스케줄러 구현, 정확한 판정 위치·쿼리는 spec/기술 설계 소유다.
2.1 선톡 간 최소 발송 간격 (4시간 cooldown)
| 항목 | 정책 |
|---|---|
| 단위 | 같은 (user, Soul/Chat Thread) — 한 채팅방 기준 |
| 기준 | 그 채팅방에 최근 선톡 수신(발송 성공) 이력이 4시간 이내면 새 선톡 후보에서 제외 |
| 기준 시각 | 선톡 생성 시각이 아니라 실제 유저에게 발송/수신된 시각(received 시점)을 기준으로 한다 |
| 중복 예약 | 같은 채팅방에 이미 scheduled(pending) 선톡이 있으면 새 선톡을 중복 생성·예약하지 않는다(기존 duplicate_pending 게이트 유지·강화) |
| 일일 상한과의 관계 | 기존 일일 수신 2회 상한은 그대로 둔다. 4시간 cooldown 은 그 위에 얹는 최소 간격 제약이다 |
cooldown 은 "하루 몇 번"이 아니라 "직전 선톡으로부터 얼마나 지났나"를 본다. 일일 상한(2회)과 cooldown(4시간)이 함께 적용되므로, 실질적으로 한 채팅방의 선톡은 하루 2회 이하이면서 서로 최소 4시간 떨어진다.
2.2 장기 무응답 컷오프 (3일 → 24시간)
| 항목 | 정책 |
|---|---|
| 컷오프 기준 시각 | 그 채팅방의 마지막 유저 메시지 시각 |
| 컷오프 임계값 | 마지막 유저 메시지 이후 rolling 24시간 이상 무응답이면 선톡 후보에서 제외(생성 중단) |
| 판정 방식 | rolling 24시간 확정 (calendar day 아님) |
| 누적 무응답 처리 | 마지막 유저 메시지 이후 선톡만 누적되고 유저 응답이 없는 채팅방은, 마지막 유저 메시지로부터 rolling 24시간이 지나면 더 이상 후보가 아니다. 그 사이 발송된 선톡은 컷오프 기준 시각을 갱신하지 않는다(기준은 어디까지나 마지막 유저 메시지) |
| 자격 회복 | 유저가 다시 답장하면 마지막 유저 메시지 시각이 갱신되고, 해당 채팅방은 이후 조건(생성 윈도우·cooldown·일일 상한)에 따라 다시 후보 자격을 평가받는다 |
생성 트리거 윈도우의 하한(마지막 유저 메시지 +1시간)은 그대로 유지하고, 상한만 3일에서 rolling 24시간으로 단축한다. 결과적으로 선톡 생성 윈도우는 마지막 유저 메시지 +1시간 ~ +24시간(rolling)이 된다.
3. Backend-facing 제품 요구사항
구현(DB 스키마·쿼리·스케줄러 주기·락)은 정의하지 않는다. 기존 DEE-414 파이프라인의 어느 단계에 어떤 판정이 추가되는지의 제품 요구만 명시한다.
3.1 후보 스캔 (candidate scan)
스캐너는 후보를 생성하기 전, (user, Soul/Chat Thread) 단위로 기존 게이트에 더해 아래를 확인한다.
- 선톡 opt-in / 기존 eligibility 조건 (DEE-414 기존 정책).
- 최근 발송된 선톡 수신 시각이 4시간 이내인지 (4시간 cooldown — §2.1).
- 마지막 유저 메시지 이후 rolling 24시간 이상 무응답인지 (강화된 컷오프 — §2.2).
- 이미 pending/scheduled 선톡이 존재하는지 (중복 예약 방지 — §2.1).
하나라도 제외 조건에 걸리면 생성 큐에 넣지 않는다.
3.2 생성 / 스케줄링 / 발송 유지 조건
- 생성 단계는 프롬프트 상세(문장 길이·톤·주제)를 결정하지 않는다(→ DEE-532).
- 첫 선톡 발송 시각, 심야 가드, pre-check/final check, 과금, push suppress 등 기존 DEE-414 발송 파이프라인 정책은 유지한다.
- 4시간 cooldown 의 기준 시각은 실제 수신 성공(received) 시각이며, 취소·미발송된 선톡은 cooldown 기준 시각을 만들지 않는다.
4. 기대 동작 (User-facing Behavior)
- 유저가 최근 4시간 이내 그 Soul 에게서 선톡을 받았다면, 같은 Soul 에게서 추가 선톡을 받지 않는다.
- 유저가 그 Soul 에게 rolling 24시간 이상 답하지 않았다면, 새 선톡을 받지 않는다(선톡이 며칠씩 이어지지 않는다).
- 유저가 다시 채팅에 응답하면, 이후 조건(생성 윈도우·cooldown·일일 상한)에 따라 다시 선톡 대상이 될 수 있다.
5. 데이터 분석 / 모니터링
본 PRD 의 메인 제품 분석 지표(수신 후 24h 내 그 Soul Chat room 진입율 등)는 DEE-414 정의를 그대로 따른다. 여기서는 cooldown/cutoff 변경이 선톡 발송량과 무응답 누적에 미치는 영향만 확인한다.
- 전후 비교. 4시간 cooldown 과 rolling 24시간 cutoff 적용 전후로 선톡 생성·수신 건수, 채팅방당 일일 선톡 수, 무응답 채팅방의 선톡 누적량이 줄어드는지 확인한다.
- 가드레일. 수신 후 24h 내 같은 Soul Chat room 진입율이 과도하게 하락하지 않는지 모니터링한다.
6. 닫힌 결정
- 4시간 cooldown 범위: 유저 전체 global cap 은 두지 않는다. 본 PRD 의 cooldown 은 동일
(user, Soul/Chat Thread)기준만 본다. - "1일 무응답" 판정: calendar day 가 아니라 마지막 유저 메시지 기준 rolling 24시간으로 판정한다.
7. Acceptance Criteria
- [ ] 최근 4시간 이내 선톡 수신(발송 성공) 이력이 있는
(user, Soul/Chat Thread)는 새 선톡 후보에서 제외된다. 기준 시각은 생성 시각이 아니라 실제 수신 시각이다. - [ ] 마지막 유저 메시지 이후 rolling 24시간 이상 유저 응답이 없으면 새 선톡 후보에서 제외된다(기존 3일 컷오프를 rolling 24시간으로 대체).
- [ ] 생성 트리거 윈도우 하한(마지막 유저 메시지 +1시간)은 그대로 유지된다.
- [ ] 기존 일일 수신 상한(하루 최대 2회)은 그대로 유지되며, 4시간 cooldown 이 그 위에 추가로 적용된다.
- [ ] 같은 채팅방에 pending/scheduled 선톡이 이미 있으면 중복 생성·예약하지 않는다.
- [ ] 유저가 다시 답장하면 마지막 유저 메시지 시각이 갱신되어, 해당 채팅방이 이후 조건에 따라 다시 선톡 후보가 될 수 있다.
- [ ] 선톡 프롬프트 문안·톤·길이 상세 개선은 본 PRD 범위에 섞이지 않으며 DEE-532 에서 별도로 진행된다.
8. 본 PRD 가 닫는 것 vs 후속
8.1 본 PRD 가 소유(증분 정책)
4시간 cooldown(채팅방 단위, 수신 시각 기준) · 장기 무응답 컷오프 rolling 24시간 단축 · global cap 없음.
8.2 Spec / 기술 설계 후속
- cooldown·cutoff 판정의 정확한 쿼리/스캐너 주기/타임존 처리.
- 기존 DEE-414 발송 파이프라인에 4시간 cooldown 과 rolling 24시간 cutoff 를 어느 단계에서 적용할지의 구현.
8.3 Prompt 후속 (DEE-532)
- 무응답 상황에서의 선톡 문장 길이·톤·이어말하기/새 주제 전환 전략, 프롬프트 본문·few-shot.
부록: 메타 정보
Size & Risks
- Size: M / Confidence: medium.
- 근거: 기존 발송 파이프라인 위의 증분 변경 — 후보 스캔 게이트 2종 추가(cooldown·컷오프 단축). 신규 엔진 구축은 없으나 기존 스캐너/예약 파이프라인의 판정 순서와 맞물린다.
| 위험 | 영향 | 대응 |
|---|---|---|
| 컷오프 단축으로 선톡 총량·재진입 지표 하락 | BM·engagement 저하 | 전후 비교 모니터링 |
| cooldown 기준을 생성 시각으로 잘못 잡음 | 실제 수신 간격이 4시간 미만으로 붙음 | 기준 시각을 received 시각으로 고정(§2.1·AC) |
의존성
- DEE-414 나만의 선톡 개인화 spec — 발송 파이프라인 정본(자격·pre-check·생성·예약·과금·push·기존 취소 hook). 본 PRD 는 그 위의 증분.
- DEE-532 선톡 프롬프트 개선 기획 — 무응답 상황 길이·톤·주제 전환. 본 PRD 와 범위 분리.
References
- Linear: DEE-531(본 PRD) · DEE-532(프롬프트 기획) · DEE-414(선톡 spec) · DEE-301(선톡 parent PRD).
- Source 메모: Slack thread
C0B1X5Y3466 / 1781880028.099379. - sprint-artifacts:
draft/proactive-message-personalization/spec.md(발송 로직 정본) ·draft/proactive-message-personalization/PRD.md.
Reversal Risk Summary
| Layer | R-level | Review focus |
|---|---|---|
| Policy / Rule | R2 | 4시간 cooldown·rolling 24시간 컷오프 수치는 현재 결정값. 적용 후 지표 모니터링 |
| Data / Backend | R2 | 후보 스캔 게이트 추가. 정책 변경 시 재집계 가능 |