Part 1: 2026년 5월 기준 글로벌 sales engagement · 콜드 아웃리치 · AI SDR · CRM 내장 AI 35개 서비스 현황 매트릭스. Part 2: 린다세일즈 모노레포 (admin · elysia-server · workers) 의 현재 시퀀스 / 발송 워커 / 답장 로직 코드 분석. Part 3: 코드 기반 C2 / C4 구현 로드맵 (DB · 워커 · 라우트 · UI 단계별 작업 단위).
"메일을 열었지만 답장 안 함 → 후속 A", "링크 클릭함 → 후속 B", "자동응답(OOO) 옴 → 일정 미루기", "답장 옴 → 시퀀스 자동 중단" 처럼 행동 이벤트에 따라 다음 메일의 내용·타이밍이 조건부로 분기되는 기능. 35개 서비스를 5개 카테고리로 분류해 조사.
| 서비스 | Entry 가격 | 진짜 분기 | OOO 자동 감지 | Reply auto-stop | 시각 빌더 | 시간 조건 | AI 인텐트 |
|---|---|---|---|---|---|---|---|
| Outreach | ~$130~175/seat/mo | ○ | △ | ○ | △ | ○ | ○ |
| Salesloft | ~$125~165/seat/mo | △ | △ | ○ | △ | △ | ○ |
| Apollo.io | $49/seat/mo | △ | △ | ○ | △ | △ | △ |
| HubSpot Sequences | Sales Hub Pro $100/seat/mo | ✕ | ✕ | ○ | ✕ | ✕ | ✕ |
| HubSpot Workflows | Marketing Hub Pro $890/mo+ | ○ | △ | ○ | ○ | ○ | △ |
| Salesforce Sales Engagement | Contact sales | △ | △ | ○ | △ | △ | △ |
| 서비스 | Entry 가격 | 진짜 분기 | OOO 자동 감지 | Reply auto-stop | 시각 빌더 | 시간 조건 | AI 인텐트 |
|---|---|---|---|---|---|---|---|
| Smartlead | $39/mo | ○ | ○ | ○ | ○ | ○ | ○ |
| Instantly.ai | $47/mo | △ | ○ | ○ | △ | △ | ○ |
| Reply.io | $59/user/mo | ○ | ○ | ○ | ○ | ○ | ○ |
| Lemlist (Multichannel Expert) | $79/seat/mo | ○ | △ | ○ | ○ | ○ | △ |
| Mailshake | $29/mo | △ | △ | ○ | △ | △ | △ |
| Woodpecker | $24/mo | ○ (16 step 한도) | △ | ○ | △ | △ | △ |
| Hunter Campaigns | ~$34/mo | △ | ○ | ○ | ✕ | △ | △ |
| Saleshandy | $25/mo (연결제) | ○ | ○ | ○ | △ | ○ | ○ |
| QuickMail | $49/mo | ○ | △ | ○ | ○ | ○ | △ |
| GMass | $25/mo | △ | △ | ○ | ✕ | △ | ✕ |
| Mixmax | $29~89/user/mo | ○ | △ | ○ | ○ | ○ | △ |
| La Growth Machine | €60/seat/mo~ | ○ | △ | ○ | ○ | ○ | △ |
| 서비스 | Entry 가격 | 진짜 분기 | OOO 자동 감지 | Reply auto-stop | 시각 빌더 | 시간 조건 | AI 인텐트 |
|---|---|---|---|---|---|---|---|
| Artisan (Ava) | $600/mo (annual) | △ | ○ | ○ | ✕ | ○ | ○ |
| AiSDR | $900~2,500/mo | △ | ○ | ○ | ✕ | ○ | ○ |
| 11x (Alice + Jordan) | $5,000~10,000/mo | △ | ○ | ○ | △ | ○ | ○ |
| Regie.ai | Contact sales | △ | ○ | ○ | △ | ○ | ○ |
| Clay + Smartlead 조합 | $134 + $39/mo | ○ | ○ | ○ | ○ | ○ | ○ |
| Bardeen | $20/mo | △ | △ | △ | ○ | ○ | △ |
| Relevance AI | $19/mo~ | △ | △ | △ | ○ | ○ | ○ |
| 서비스 | Entry 가격 | 진짜 분기 | OOO 자동 감지 | Reply auto-stop | 시각 빌더 | 시간 조건 | AI 인텐트 |
|---|---|---|---|---|---|---|---|
| Customer.io | $100/mo (5K profiles) | ○ | ✕ | △ | ○ | ○ | △ |
| ActiveCampaign | $15~49/mo | ○ | ✕ | △ | ○ | ○ | △ |
| Klaviyo Flows | $20/mo (500 contacts) | ○ | ✕ | △ | ○ | ○ | △ |
| Iterable Studio | Enterprise | ○ | ✕ | △ | ○ | ○ | ○ |
| Braze Canvas | Enterprise | ○ | ✕ | △ | ○ | ○ | ○ |
| Mailchimp Journey | $13/mo | △ | ✕ | △ | ○ | △ | ✕ |
| 서비스 | Entry 가격 | 진짜 분기 | OOO 자동 감지 | Reply auto-stop | 시각 빌더 | 시간 조건 | AI 인텐트 |
|---|---|---|---|---|---|---|---|
| Pipedrive Campaigns | $14 + $13.33 애드온 | △ (3 step 한도) | ✕ | ○ | △ | △ | ✕ |
| Zoho Blueprint + SalesIQ | $14/seat/mo~ | ○ (Pro부터) | △ | ○ | ○ | ○ | △ |
| Freshsales Sequences | $9/seat/mo | △ | △ | ○ | △ | △ | △ |
$59~$166/user/mo · Drag-and-drop · Jason AI (Claude/Gemini/GPT 멀티)
조건 step (열림·클릭·연결요청 수락·bounce·valid email) + action step (다음 step·다른 sequence로 이동·중단) 조합으로 이메일·LinkedIn·SMS·콜·WhatsApp을 한 시퀀스에서 자유롭게 분기. 핵심 차별점은 "Monitor for" 윈도우 — "5일간 조용히 관찰하다가 열면 A, 안 열면 B" 식 시간 조건부 분기를 빌트인 지원. Jason AI 가 2026 에 50+ 언어로 reply triage · meeting booking 처리.
$39/mo~ · Unlimited mailboxes · AI Inbox
Subsequence 트리거 종류: engagement (opened·clicked·replied·bounced), time-based, prospect attribute, custom event. AI Inbox 가 답장을 interested/objection/referral/OOO/unsubscribe 5분류 → 카테고리별 라우팅. OOO 자동 처리는 시장 최강 — 메일 본문에서 복귀일을 LLM 으로 파싱해 그 날짜 + delay 만큼 발송 재개. Liquid Syntax 로 메일 본문 안에서도 인라인 조건문 가능.
$130~175/seat/mo + 구현 $1K~$8K
Sequence step (Auto/Manual Email·Phone·Generic·LinkedIn) + Trigger 위의 branching condition 으로 가장 정교한 if-then 룰. 다중 브랜치 동시 평가 (branch 1 truthy → branch 2 평가 안 함 식 명시적 short-circuit). 단, 비교 연산자 (first_name = 'John') 미지원 — 데이터 존재 유무만 체크. UI 는 ruleset 기반이라 visual 직관성은 Reply.io 보다 떨어짐.
$25/mo (Starter, 연결제)
Starter 부터 subsequence + OOO AI 감지 + auto-pause/resume 전부 포함. OOO 응답을 LLM 으로 파싱 → 복귀일 추출 → 지정한 delay 후 자동 재개. Subsequence 는 opens·clicks·replies 트리거 기반 conditional 분기. Inbox Placement Testing + Lead Finder 까지 묶으면 실효 $83/mo+. SyncGTM 2026 Reply manager TOP 4.
$87~109/seat/mo (Email Pro $63 은 분기 ✕)
조건 선택 후 Yes / No 양갈래 트리 가 시각적으로 펼쳐지고 각 가지에 다음 step (LinkedIn·콜·이메일) 자유 배치. 차별점은 타이밍 옵션 두 종: "Within" (조건 만족 즉시 진행) · "Wait Until" (특정 액션 발생 전까지 대기). 멀티채널 통합 인박스도 동급. 함정: Email Pro 사용자가 "분기 됐는줄 알고" 쓰는 경우 많음 (실제로는 미지원).
A/B/C/D 다른 메일 + 다른 타이밍
안 열면 보내고, 열면/답장하면 stop
LLM 파싱 + 복귀일 자동 추출 + auto-restart
사용자가 if-then UI 안 그림. AI 가 즉석 결정
"관심 없음" 답장 패턴을 자동 탐지 (NLP/AI) → 다음 캠페인 생성 시 회피 학습 → 매주 자동 다이제스트 (오픈 TOP / 회신 TOP / 거절 TOP) → 답장 sentiment 가 lead scoring 으로 환원되는 closed loop 학습 시스템. 30개 서비스 조사.
| 서비스 | 가격대 | Reply 분류 | 패턴 학습 | 다음 캠페인 회피 | 주간 다이제스트 | 회신율 TOP | sentiment → score |
|---|---|---|---|---|---|---|---|
| Smartlead | $39-379/mo | ○ (5+ 라벨, 90-97%) | △ (objection loop-back) | ○ (tone/timing 조정) | △ (수동 review) | ○ | △ |
| Instantly | $37-358/mo | ○ (Unibox V2, GPT-4) | ✕ | ✕ | ✕ | △ | △ |
| Reply.io (Jason AI) | $59-99/user/mo | ○ (4 라벨) | ✕ | △ (Autopilot 응답) | ✕ | △ | △ |
| Lemlist | $59-129/mo | ○ (Interested toggle) | ✕ | ✕ | ✕ | △ | ✕ |
| Outreach (Kaia) | $100-130/user/mo | ○ (Deal Agent) | △ | ○ (mid-flight rewrite) | ○ (monthly review) | ○ | ○ |
| Salesloft Rhythm | $125-165/user/mo | ○ (Conductor AI) | △ | ○ (priority re-rank) | ○ (Focus Zones) | ○ | ○ |
| Artisan Ava | $1,500-2,000/mo | ○ (4 라벨) | △ (memory) | △ (prospect 단위) | ✕ | △ | △ |
| 11x Alice | $1,500-3,000/mo | ○ (4 라벨) | ✕ | △ (send-time + tone) | ✕ | △ | △ |
| AiSDR | $750-1,650/mo | ○ (intent → 자동 대응) | △ | △ | ✕ | △ | △ |
| Regie.ai | $89-1,000+/mo | △ | ✕ | ✕ | ✕ | △ | ✕ |
| Klenty | $50-140/user/mo | △ (cadence 조정) | ✕ | ✕ | ✕ | △ | ✕ |
| HubSpot Breeze | $20-150/user/mo | ○ (Intelligence + memory) | ✕ | ✕ (suggest만) | △ | ○ | ○ |
| Salesforce Einstein | $50-330/user/mo | ○ (Sentiment/Intent) | ✕ | ✕ | △ (ECI) | ○ | ○ |
| Zoho Zia | $14-52/user/mo | ○ (sentiment + scoring) | ✕ | ✕ | △ | ○ | ○ |
| Pipedrive AI | $14-99/user/mo | ✕ | ✕ | ✕ | ✕ | ✕ | △ |
| ActiveCampaign AI | $15-145/mo | △ | ✕ | ✕ | ✕ | △ | △ |
| Customer.io | $100-1,000+/mo | ✕ | ✕ | ✕ | ✕ | △ | ✕ |
| Iterable | enterprise | ✕ | ✕ | ✕ | ✕ | △ | ✕ |
| Braze (Sage AI) | enterprise | ✕ (predictive engagement) | ✕ | ✕ | ✕ | △ | ✕ |
| Klaviyo (K:AI) | $20-1,700+/mo | ✕ (DTC focus) | ✕ | ✕ | △ | △ | △ |
| Gong | $1,600/user/yr~ | ○ (call+email) | △ (objection 탐지) | △ (코칭만) | ○ (deal risk) | ○ | △ |
| Chorus (ZoomInfo) | enterprise | ○ (sentiment+emotion) | ✕ | ✕ | ○ | △ | △ |
| Avoma | $19-129/user/mo | ○ (MEDDIC auto-score) | ✕ | ✕ | △ | △ | △ |
| Yesware | $19-65/user/mo | ✕ | ✕ | ✕ | △ | △ | ✕ |
| Boomerang Respondable | $5-50/user/mo | ✕ (writing 점수) | ✕ | ✕ | ✕ | △ | ✕ |
| Mailmodo | $39-249/mo | △ (triage) | ✕ | ✕ | ✕ | △ | ✕ |
| Clay | $149-800+/mo | ✕ (enrichment) | ✕ | ✕ | ✕ | ✕ | ✕ |
| Bardeen | free-$20/mo | ✕ (automation) | ✕ | ✕ | ✕ | ✕ | ✕ |
$100-130/user/mo · enterprise
Deal Agent 가 "positive/negative engagement" 를 surface, Kaia 가 call + email 통합 sentiment 분석. 2026 핵심 진전은 AI 가 sequence 를 mid-flight 에 rewrite — "millions of touchpoints" 데이터 기반으로 subject line + follow-up timing 자동 추천, 진행 중인 sequence 의 step content 까지 동적 조정. 한계는 "AI 제안 → SDR 1-click 적용" 형태가 많아 완전 자율은 아님. 그래도 "거절 패턴 → 다음 캠페인 회피" 에 가장 가까운 enterprise 솔루션.
$39-379/mo · mid-market 최강
AI Reply Agent 가 5+ 라벨 (interested/objection/referral/OOO/unsubscribe) 90-97% 정확도 분류. "agents optimize send times, classify replies and loop objections back into new outreach" 공식 블로그 명시 — objection 패턴 학습 → 다음 카피의 tone/timing/personalization 자동 조정. ChatGPT-4 API 키 본인 거 연결해 산업/브랜드 voice 로 fine-tune. 가격 대비 closed-loop 깊이 최고. 주간 다이제스트 UI 는 명시적 제품 기능 부재 → Master Inbox 기반 수동 review.
$125-165/user/mo
Reply rewrite 자체는 약하지만 "이미 들어온 신호로 다음 액션 우선순위를 실시간 재정렬" 하는 closed loop 강함. Conductor AI 가 email open/click/reply/forward + call sentiment 신호 흡수, Buyer Priority 모델이 "이 사람한테 다음에 뭘 보낼지" 자동 ranking. Focus Zones 가 일종의 다이제스트 역할. 한계: 카피 자체보다 timing/sequencing 학습 루프. 2026 업데이트로 OOO 자동 감지 후 cadence reschedule 추가.
$750-3,000/mo · AI SDR 군
세 곳 모두 "reply → 다음 step 자동 결정 → 응답 자동 생성". Artisan Ava 는 prospect-level 메모리 ("check back in 6 months" 기억). AiSDR 는 reply automation 이 main 차별점 (objection handling + qualification 까지 사람 없이). 11x Alice 는 send-time/tone 자동 조정. 한계: 개별 prospect 단위 학습은 강하지만, "전체 캠페인 카피를 거절 패턴 기반으로 재작성" 하는 메타 학습은 약함 — Karpathy 의 micro loop 는 있지만 macro loop 부재. 일부 리뷰는 "nuance 부족, hallucination, warm/cold 우선순위 못 가림" 한계 보고.
$1,600/user/yr~ · enterprise
Email + call 통합 sentiment + objection 자동 탐지. 2026 처리 속도 70% 개선, AI Agent Suite 월간 사용자 75% YoY 증가. Deal risk 다이제스트, sentiment trend, objection 분포는 industry-leading. 단점: "분석 → 자동 반영" 의 closed loop 가 아니라 "분석 → 사람 코칭 → 사람이 카피 수정" 의 human-in-the-loop. Marketing 측 closed-loop attribution 강하지만 outbound 카피 자동 rewrite 는 product 범주가 아님. lead score 환원은 deal score 형태.
reply 패턴 → 다음 카피 자동 수정 제안
다이제스트/대시보드 O, 사람이 수동 반영
학습 루프 없음
elysia-server + admin 모노레포에서 시퀀스 정의 · BullMQ 워커 ·
스케줄링 · UI 의 현재 구조를 코드 레벨로 정리. 모든 경로 + 라인 번호는 grep/Read 검증.
| 테이블 | 경로 | 핵심 컬럼 | 분기 관련 |
|---|---|---|---|
| sequences | elysia-server/src/db/schema/sequences.ts:91-154 |
personalizationMode · timezoneMode · replyAutomationConfig (jsonb) | replyAutomationConfig 만 |
| sequenceSteps | ...sequences.ts:156-190 |
stepOrder · delayDays · scheduledHour/Minute · emailSubject · emailBodyHtml | conditionType / config 컬럼 ✕ |
| sequenceEnrollments | ...sequences.ts:192-234 |
currentStepOrder · status · stopReason (12종 enum) | stop 시점만 추적 |
| sequenceStepExecutions | ...sequences.ts:236-289 |
stepOrder · status · scheduledAt · timezone · batchId · assignedVariant | A/B variant 만 |
| ReplyAutomationConfig (인터페이스) | ...sequences.ts:28-40 |
not_interested · meeting_request · positive_interest · out_of_office (pause/ignore) | jsonb 로 행동별 액션 |
workers/bullmq/sequence-email-loader.worker.ts
30초 tick → DB sequence_step_executions (status=pending, scheduled_at < NOW+5min) 을 BullMQ delayed 큐에 적재. 5분 lookahead · batch 5,000 · 계정당 500 limit. 큐 누적량 따라 backpressure. 현재 쿼리에 조건 분기 필터 없음.
workers/bullmq/sequence-email-worker/
개별 executionId 처리. MillionVerifier 이메일 검증 + AWS SES 발송 + 재시도. Rate limit 22 req/sec (SES MaxSendRate 25 의 88%). Stall recovery 5분 주기 + job_logs GC (30일). send 직후 다음 step 조건 평가 로직 없음.
workers/bullmq/sequence-activation.worker.ts
활성화 시 enrollment + step_execution 대량 생성 + delayed job 스케줄. Concurrency 2 (DB 부하 분산). jobId 멱등성 + ActivationLock 2차 방어.
workers/bullmq/sequence-lifecycle.worker.ts
pause/resume 시 BullMQ 잡 정리 + 미발송 executions 재enqueue. cancelSequenceJobs / rescheduleOverdueExecutions. Concurrency 5, Lock 10분.
utils/timezone.ts:68-122
fromDate → target timezone → delayDays (영업일/달력일) → 지정 시간 설정 → UTC 반환. Sender 모드 (skipWeekends=false): 달력일, 시간 지나면 +5분만. Buyer 모드 (skipWeekends=true): 영업일, 시간 지나면 +1일 강제.
lib/queue/sequence-email-scheduler.ts
Feature flag SEQ_EMAIL_PRODUCER_SCHEDULING (기본 on). enqueue 시점 계정별 next-slot atomic 예약 (Lua), provider별 throttle, delayed 큐 누적 5K+ 시 batch 자동 축소.
| 위치 | 역할 | 현재 상태 |
|---|---|---|
admin/src/lib/api/types/sequence.ts:91-96 |
StepConditionType enum: always / no_response / negative_response / positive_response / custom | 타입만 정의 |
...sequence.ts:194-195 |
SequenceStep.conditionType · conditionConfig 필드 | UI에 있으나 백엔드 미전송 |
admin/src/pages/sequences/SequenceForm.tsx |
시퀀스 폼 + ReplyAutomationSettings 컴포넌트 | replyAutomationConfig 정상 저장 |
답장 수신 (SendGrid Inbound + AWS SES fallback) · AI 분류 (Gemini) · 자동 태그 · 주간 다이제스트 · 인박스 UI 까지의 전체 파이프라인 코드 레벨 정리.
routes/webhook.routes.ts:23-33
POST /api/webhook/inbound → webhookService.handleInboundWebhook() → processInboundEmail(). RFC 822 파싱, In-Reply-To 헤더 기반 답장 감지, email_replies 테이블 upsert, enrollment 자동 중단.
workers/ses-inbound-consumer.worker.ts:1-250
S3 polling (30초). SES Receipt Rule → S3 raw MIME → mailparser simpleParser() → SendGridInboundPayload 어댑터 → 동일한 processInboundEmail() 재사용 (SPOF 회피).
| 테이블 | 경로 | 핵심 컬럼 |
|---|---|---|
| email_replies | db/schema/emails.ts:236-291 | sentiment (5enum) · intent · aiSummary · isAutoReply · tags · autoAppliedTags · suggestedTags · note |
| reply_tags | db/schema/reply-tags.ts:26-54 | 워크스페이스 단위 태그 사전 (max 50). autoClassifyEnabled (boolean) |
| emailReplyDrafts | db/schema/email-reply-drafts.ts:30-124 | AI 답장 초안 (스레드당 1개 활성). intent · priority · snoozedUntil · autoSendAt |
| emails.replyClassification | db/schema/emails.ts:162 | "human" / "auto_reply" / "bounce" |
| inboxThreads | db/schema/inbox-threads.ts:53-105 | 스레드 종료 추적. status · closedReason (6 enum) · source (manual/auto_intent/auto_enrollment) |
| leads.leadStatus | db/schema/leads.ts:20-48 | "replied" · "auto_replied" · "bounced" → BLOCKED_LEAD_STATUSES 발송 차단 |
services/ai-classification.service.ts:29-256 · Gemini 3.1 Flash Lite (temp 0.1)
Intent 7가지: meeting_request · question · objection · out_of_office · not_interested · positive_interest · neutral.
Sentiment 5가지: positive · interested · neutral · not_interested · negative.
입력: subject + body (+ 워크스페이스 태그 사전 optional). 출력: intent · sentiment · confidence · reasoning · suggestedTags (≤3).
workers/bullmq/reply-tags-auto-classify.worker.ts:92-178
Concurrency 5. 워크스페이스 active auto-tag 0개면 LLM 호출 skip. Gemini responseMimeType="application/json" 1회 호출. Hallucination 방어: 반환 태그명을 후보 set 으로 필터링. ARRAY UNION idempotent 업데이트.
webhook.service.ts:1051-1126)leads.lead_status = 'replied' (SSOT 갱신)emails.reply_classification = 'human'updateEnrollmentStatusWithSync(id, 'stopped', skipReason='Skipped due to reply received') → BullMQ job 취소 + enrollment_stopped 이벤트| 항목 | 상태 | 경로 |
|---|---|---|
| 6가지 감지 rule (RFC 3834 헤더, MS Exchange, noreply 패턴, DSN, <60s) | ○ | utils/auto-reply-detection.ts:1-121 |
| isAutoReply boolean + replyClassification 저장 | ○ | webhook.service.ts |
| 복귀일 LLM 파싱 | ✕ stub (null 반환) | 구현 필요 |
| OOO 시 enrollment 자동 일시정지 | ✕ Phase 2+ 계획 | 구현 필요 |
| 복귀일 도달 시 자동 재개 | ✕ enrollment-resume 큐 스텁만 | 구현 필요 |
workers/bullmq/weekly-digest.worker.ts:20-54 · concurrency 1
workspaceDigestSchedules 기반 요일+시간. weekly-digest-data.service.ts 가 7일 통계 (sent/opened/replied/clicked) + 열람 TOP 5 제목 추출. SendGrid 발송. 회신율 기반 sender ranking · "관심 없음" 패턴 추출 없음.
workers/bullmq/unreplied-reply-digest.worker.ts:14-91 · 매일 09:00 KST
intent IN (meeting_request, positive_interest, question) AND 시간 초과 미회신 답장 수집 → Slack ops 채널 + AI 세일즈 제안. 운영용으로 잘 동작 중.
| 컬럼 | 출처 | 답장 반영? |
|---|---|---|
leads.leadScore | manual / enrichment | ✕ |
leads.fitScore (0-100) | buyer discovery AI matching | ✕ |
leads.hotLeadScore | hot-lead-evaluation.ts | ✕ |
경로: admin/src/pages/email-replies/
EmailRepliesPage.tsx (51.8K) · ThreadDetailPanel.tsx (33.3K) · AiDraftReplyCard.tsx (18.2K) · InlineReplyComposer.tsx (22.8K)AppliedTagsBar.tsx — 수동/자동 태그 시각 구분 (✨ 마커)BulkActionsToolbar.tsx — 다중 선택 (bulk tag, close thread)IntentBadge.tsx · SentimentBadge.tsx — 분류 배지BuyerDetailDialog.tsx — 발신자 정보 팝업useReplyTags() · useAutoClassifyTag()현재 코드 구조 위에 행동 기반 후속 시퀀스를 단계별로 추가하는 구현안. Smartlead 의 Subsequence 패턴 + Reply.io 의 시각 분기를 절충, "메인 시퀀스 + 조건부 subsequence" 구조 추천 (시각 빌더 복잡도 회피).
migration · db/schema/sequences.ts
sequenceSteps 테이블에 컬럼 추가:
condition_type varchar(32) NULL — always / no_response / negative_response / positive_response / link_clicked / customcondition_config jsonb NULL — { waitDays:int, eventTypes:["open","click"], linkPattern?:string }branch_to_step_order int NULL — 조건 만족 시 jump 할 step (null=다음 step)parent_step_order int NULL — subsequence 구조 (메인 시퀀스 분기 추적용)주의: 새 enum value + 새 컬럼 동일 migration 분리 (CLAUDE.md 의 enum 인시던트 회피).
webhook.service.ts:1051-1126
이미 동작하는 reply auto-stop 로직에 replyAutomationConfig 의 액션 (pause/complete/branch) 분기 추가. 현재는 무조건 stopped 처리 — config 의 액션을 존중하도록 수정.
auto-reply-detection.ts + webhook.service.ts
현재 isAutoReply 만 저장. OOO 면 enrollment.status = 'paused' (replyAutomationConfig.out_of_office='pause' 일 때). C4 의 복귀일 파싱 (R0.1) 과 결합.
신규 services/sequence-branching.service.ts
evaluateCondition(execution, condition) — replied / opened / clicked / link_pattern 평가.
resolveNextStep(enrollment, conditionResult) — 다음 step ID 결정.
입력: stepExecution + sequenceSteps[] + email_event (opens/clicks). 출력: nextStepOrder | null (=종료).
workers/bullmq/sequence-email-worker/processor.ts
send 직후 (또는 별도 워커) 다음 step의 condition_type 확인.
- always → 다음 step scheduled_at 계산해 step_execution 생성
- no_response / opened / clicked → waitDays 만큼 delay 후 평가 워커 트리거 (QUEUE_NAMES.SEQUENCE_BRANCH_EVAL 신규)
신규 워커
delayed job 으로 N일 후 발동. evaluateCondition 호출 → 조건 충족 시 분기 step 생성. 미충족 시 기본 다음 step. jobId 멱등성 + lock.
sequence-email-loader.worker.ts:96-143
현재: pending 모두 로드.
변경: 분기 평가 완료 (eligible=true) step 만 로드. 또는 step_execution 에 eligible boolean 추가해 branch-eval-worker 가 토글.
routes/sequences.routes.ts
POST/PATCH 시 conditionType / conditionConfig / branchToStepOrder 필드 수신·검증·저장. validator (typebox) 추가.
admin/src/lib/api/services/sequences.ts · SequenceForm.tsx
이미 있는 StepConditionType UI 의 입력값을 백엔드로 실제 전송. 기존 step 폼에 condition select + waitDays input + linkPattern input 추가.
admin/src/pages/sequences/ 신규 컴포넌트
Smartlead 식 "메인 시퀀스 카드 + 조건 매칭시 subsequence 카드" 표시 (풀 시각 트리 회피).
각 step 우측에 "조건 분기" 아이콘 → 클릭 시 subsequence sheet 펼침.
{{#if lead.companySize > 100}}...{{/if}}. emailBodyHtml 렌더링에 Handlebars-like 엔진 추가.AI 분류 + 자동 태그 + 주간 다이제스트는 잘 갖춰져 있다. 빈 곳은 OOO 복귀일 파싱 · 자동 재개 · sentiment→leadScore 피드백 · 회신율 ranking · "관심 없음" 패턴 추출. O2 (회신율 TOP 다이제스트) + O3 (거절 패턴 회피) 가 시장 frontier.
utils/auto-reply-detection.ts 함수 추가
parseOOOReturnDate(body, sentAt, locale) → Date | null.
방식: regex (한국어 "X일 복귀", 영어 "back on Mon Jun 15") 시도 → 실패시 Gemini 3.1 Flash Lite one-shot (cost < $0.0001/req). 출력: ISO date. 사용자 timezone 반영.
migration · db/schema/emails.ts
email_replies.resume_at timestamp NULL — OOO 답장이면 복귀일 저장. Phase 0 의 enrollment auto-pause 와 연결.
신규 워커 · cron-style
1시간 마다 email_replies WHERE resume_at < NOW() AND processed=false 조회 → 해당 enrollment 의 status='paused' 면 'active' 로 전환 + 다음 step scheduled_at 재계산. SSOT: lead_status 도 동기화.
services/weekly-digest-data.service.ts
기존 7일 통계 + 열람 TOP 5 옆에 추가:
쿼리는 analyticsDb 사용 (COUNT(DISTINCT) 다수).
services/weekly-digest.service.ts:buildWeeklyDigestHtml()
회신율 TOP / 거절 TOP / Intent 분포 차트 (inline SVG) HTML 섹션 추가. 기존 worker concurrency 1 유지.
신규 워커 또는 webhook 후처리
email_replies 분류 완료 직후 leads.leadScore 갱신. 가중치 (보수적):
min/max clamp (0~100). 또는 별도 sentiment_score 컬럼 신규 (leadScore 와 분리).
신규 batch 워커 · 주 1회
지난 30일 email_replies WHERE intent IN ('not_interested','objection') → Gemini batch summarize → 공통 패턴 추출.
출력: objection_patterns 신규 테이블 — { pattern, frequency, example_replies[], suggested_avoidance }
sequence-ai-gen.service.ts 확장
새 시퀀스 AI 생성 시 objection_patterns 를 LLM prompt 의 "avoid these phrasings" 컨텍스트로 주입. 진짜 closed loop의 시작.
신규 admin/src/pages/insights/
objection_patterns 시각화 + "다음 캠페인 작성 시 회피" 토글. 매니저가 패턴 동의/거부 가능 (human-in-loop fallback).
services/sender-stats.service.ts 신규
sender (메일박스) 별 30일 reply_rate ranking. 낮은 sender 자동 알림 (warmup 부족? 도메인 reputation 저하?). 별도 admin 위젯.
| Phase | 기간 | 비용 | 시장 갭 충족 | 예상 효과 |
|---|---|---|---|---|
| C2 P0 (Baseline) | 1~2주 | S+M | OOO 감지 + ReplyAutomation 라우팅 | industry parity (Smartlead 수준) |
| C2 P1 (분기 엔진) | 2~3주 | L+M×3 | 진짜 행동 분기 (UI에 이미 있는 기능 살리기) | mid-market 진입 가능 |
| C2 P2 (UI 연결) | 1주 | S+M×2 | 사용자 노출 | P1 가시화 |
| C4 P0 (OOO 복귀일) | 1~2주 | M×3 | OOO LLM 파싱 표준 (Smartlead/Saleshandy 패턴) | OOO 누락 발송 차단 |
| C4 P1 (회신율 TOP) | 1~2주 | M+S | 시장 큰 공백 (O2) | 차별화 진입 — 가장 ROI 높음 |
| C4 P2 (sentiment → score) | 1주 | S | lead score 환원 | scoring 정합성 |
| C4 P3 (거절 패턴 학습) | 2~4주 | L+M×3 | 시장 frontier (O3) | 진짜 closed loop — Outreach 외 거의 없음 |
| P4 (AI SDR rewrite) | 4~8주 | L×2 | Outreach 수준 | enterprise 진입 |
조사 결과 도출된 명확한 시장 공백 4가지. 각각이 린다세일즈가 "남들이 안 하는 (또는 못 하는)" 영역으로 진입 가능한 기회.
이미 Smartlead · Instantly · Saleshandy · Hunter 4곳이 표준화. 빠르게 따라가야 할 baseline 기능. 차별점은 아니지만 없으면 mid-market 진입 자체가 어려움.
제품 기능으로 명시한 곳이 산업 전체에 거의 없음 (Salesloft Focus Zones, Gong deal risk 가 가장 가까움). 한국어 emailing 시장에서 명확한 first-mover 포지션 가능.
Outreach + Smartlead 만 명시. 진짜 closed-loop는 frontier. 거절 reply 의 공통 표현·주제·시간대를 NLP 로 추출 → 다음 캠페인 카피 생성 시 회피 제안 (또는 자동 rewrite).
Smartlead/Instantly/Saleshandy 가 검증한 패턴. 풀 분기 트리 (Reply.io/Lemlist 식) 는 5단계 이상에서 가독성 무너짐. 메인 시퀀스 + behavior 매칭시 별도 sub 로 분기하는 구조가 운영 효율적.