Beta DB · Behavioral Event Audit
Lead 행동 이벤트 분석
베타 DB 에서 추출 가능한 행동 이벤트를 5계층 / 약 30종 트리거로 정리. 워크플로우 빌더의 분기 트리거 enum 정의 근거 문서.
TL;DR
핵심 SSOT 는 email_events(1.5M, raw 로그) + emails(769K, 상태머신) + email_replies(2.8K, AI 분류) 3 테이블 join. 답장은 sentiment / intent / reply_category 3축으로 동시 라벨링되어 drift 위험 — 워크플로우 분기는 reply_category 단일 SSOT 권장. engagement_event 0건, unsubscribe_events 25건으로 사실상 미사용.
데이터 규모
분기 설계 시 인덱스 / 쿼리 전략 판단의 출발점.
1.51M
email_events
769K
emails
1.66M
sequence_step_executions
2,815
email_replies
25
unsubscribe_events
0
engagement_event
01발송 단계 — 부정 시그널
사람이 보기 전에 끝난 케이스. 시퀀스 즉시 제어가 필요한 분기.
| 트리거 | SSOT | 분기 예시 |
|---|---|---|
| bounce (hard) | email_events.event_type='bounce' + bounce_type, bounce_reason | suppression + 시퀀스 중단 |
| bounce (soft) | bounce_type='soft' | retry 1~2회 후 중단 |
| dropped | event_type='dropped' | 주소 정정 요청 / 다른 contact fallback |
| deferred | event_type='deferred' (30일 1.6K) | 도메인 throttle → 발송 간격 조정 |
| spam_report | event_type='spam_report' (30일 6건) | 영구 suppression + reputation 알림 |
| unsubscribe | emails.unsubscribed_at | 영구 suppression |
02도달 후 무행동 — Cold
메일은 들어갔지만 반응이 없는 상태. 카피 / 발송 시간 가설 검증 분기.
| 트리거 | 쿼리 패턴 | 분기 |
|---|---|---|
| delivered & !opened (N일) | delivered_at < now()-Nd AND opened_at IS NULL | 제목 / 첫문장 angle 변경 |
| 누적 미오픈 (시퀀스) | step N개 연속 opened_at IS NULL | 시퀀스 종료 / contact 교체 |
03약한 관여 — Open
관심은 있으나 행동 없음. Apple MPP 봇 오픈 필터링이 정확도 핵심.
| 트리거 | 필드 | 분기 |
|---|---|---|
| opened & !clicked | opened_at IS NOT NULL AND clicked_at IS NULL | CTA 강화 follow-up |
| 다중 open | open_count > 3 | "검토 중" 신호 → 가속 / personal note |
| 봇 오픈 제외 | email_events.possibly_bot=true 필터 | Apple MPP / Gmail proxy 제외 (필수) |
| open 후 N시간 무행동 | opened_at + 'Nh' < now() AND clicked_at IS NULL | 짧은 reminder |
| user_agent / 시간대 | email_events.user_agent, timestamp | 모바일·데스크탑 / 아침·저녁 발송 분기 |
주의 —
possibly_bot=false 를 open 트리거의 default WHERE 절에 박지 않으면 30~50% 오탐. Apple Mail Privacy Protection 이 발송 즉시 open 을 찍습니다.04강한 관여 — Click / Brochure
URL 별 분기가 가능하므로 가장 정밀한 의도 추출 가능.
| 트리거 | 필드 | 분기 |
|---|---|---|
| any click | clicked_at IS NOT NULL (30일 16K) | 즉시 follow-up |
| URL 별 click | email_events.url + event_type='click' | 가격 → 견적 / 데모 → 일정 제안 |
| 카탈로그 열람 | event_type='brochure_view' · brochure_view_count > 0 | 강한 구매 의도 → 영업 handoff |
| 다중 click | click_count > 1 | 비교 단계 → 차별점 어필 |
05답장 — AI 분류 3축 (핵심)
email_replies 가 같은 답장을 3개의 다른 분류 체계로 동시 라벨링합니다. drift 위험.
분류 축별 분포 (전체 2,815건)
| 축 | 값 · 분포 | 활용 |
|---|---|---|
sentiment enum |
neutral 1,759 · interested 478 · null 316 · positive 136 · not_interested 109 · negative 17 | 톤 기반 분기 |
intent string |
neutral 1,074 · out_of_office 690 · positive_interest 277 · question 195 · not_interested 121 · meeting_request 119 · objection 25 | 의도 기반 액션 |
reply_category 권장 SSOT |
POSITIVE / NEGATIVE / AUTO_REPLY / IRRELEVANT / INFO_REQUEST | 라우팅 |
is_auto_reply bool |
true 81 / false 2,734 | 자동응답 명시 flag |
nudge_step int |
시퀀스 몇번째에 답장 왔는지 | 후속 step 스킵 결정 |
customer_replied_at · cs_handoff_at |
timestamp 2종 | 응답 속도 / CS 인계 시점 |
ai_summary |
답장 1~2줄 요약 text | LLM 분기 + 사용자 노출 |
분기 매핑 추천
intent=meeting_request
일정 제안
캘린더 링크 자동 발송 + 시퀀스 정지.
intent=positive_interest · category=POSITIVE
긍정 — CS 인계
영업 handoff + 시퀀스 정지.
intent=question · category=INFO_REQUEST
질문
AI 답장 초안 자동 생성 후 검토 대기.
intent=out_of_office · is_auto_reply=true
자동응답 (부재중)
시퀀스 일시 정지. ai_summary 에서 복귀일 파싱 후 재개.
intent=objection
반박 / 우려
반박 전용 분기 (전담 메시지 템플릿).
intent=not_interested · sentiment=negative
거절
suppression + 시퀀스 종료.
category=IRRELEVANT
무관
회신처 오류 등 — 무시.
06시퀀스 컨텍스트 (분기 변수 결합)
| 필드 | 용도 |
|---|---|
sequence_step_executions.status (pending · sent · delivered · failed · skipped · deferred) | step 단위 분기 |
assigned_variant | A/B variant 분기 (다음 step 도 같은 variant 유지) |
scheduled_at vs executed_at | 발송 지연 감지 |
07정성적 한계 (분기 만들 때 주의)
- 분류 3축 drift —
sentiment·intent·reply_category가 같은 답장을 서로 다르게 라벨함. 워크플로우 빌더에는 1축만 노출하고 fallback 룰 정의 필수. engagement_event0 rows — warmup 전용으로 정의된 테이블이지만 사용 안 됨. 분기 트리거 불가.unsubscribe_events25 rows — 거의 미사용.emails.unsubscribed_at이 실제 SSOT.- OOO 복귀일 추출 —
intent=out_of_office690건 있지만 복귀 날짜는ai_summary텍스트에서 별도 파싱 필요. 워크플로우 노드에 LLM step 끼워야 함. - possibly_bot 필터링 강제 — Apple MPP 자동 open.
possibly_bot=false없으면 30~50% 오탐. - URL 별 click 분기는 인덱스 필요 —
email_events.url에 GIN/btree 인덱스 확인 후 사용. 수십만 rows scan 위험.
08추천 다음 액션
- 워크플로우 빌더 트리거 enum 을 5계층(발송실패 · cold · open · click · reply 5분류 · unsub)으로 1차 정의
reply_category를 분기용 SSOT 로 결정하고sentiment·intent는 보조 표시만 (drift 봉합)possibly_bot=false를 open 트리거 default WHERE 절에 박아두기- OOO 복귀일 파서를 별도 worker 로 분리해
email_replies에oof_return_at컬럼 추가 검토