New · 2026.05.28
Deep Dive 추가 — LLM Structured Output 설계 + 6사 역기획 + 린다 통합 구현 계획
Deep Dive 열기 →
Research · 2026.05

이메일 캠페인 SaaS 2026
행동 분기(C2) & 답장 학습(C4) — 시장 조사 + 린다 코드 분석

Part 1: 2026년 5월 기준 글로벌 sales engagement · 콜드 아웃리치 · AI SDR · CRM 내장 AI 35개 서비스 현황 매트릭스. Part 2: 린다세일즈 모노레포 (admin · elysia-server · workers) 의 현재 시퀀스 / 발송 워커 / 답장 로직 코드 분석. Part 3: 코드 기반 C2 / C4 구현 로드맵 (DB · 워커 · 라우트 · UI 단계별 작업 단위).

조사 시점 2026-05-28 대상 35개 서비스 출처 공식 docs · changelog · G2 · 2025-2026 리뷰 ~70건

00전체 TL;DR

핵심 발견

  • C2 (행동 분기) — Reply.io · Smartlead · Saleshandy · Lemlist Multichannel · Outreach 5개가 시장 강자. OOO LLM 파싱 + 복귀일 자동 재개는 Smartlead · Instantly · Saleshandy · Hunter 4곳이 사실상 표준화.
  • C4 (답장 학습) — 분류는 standard, 진짜 closed-loop 는 frontier. Outreach + Smartlead 만 "objection 패턴 → 다음 캠페인 카피 자동 조정" 을 명시. AI SDR (Artisan · 11x · AiSDR) 은 prospect-level micro loop 만 존재.
  • 린다 차별화 기회 — "회신율 기준 잘 받는 메일 TOP N + 거절 패턴 자동 회피" 를 제품 기능으로 명시한 곳이 산업 전체에 거의 없음. 빈 frontier 가 명확.
  • HubSpot Sequences ≠ HubSpot Workflows — Sequences 는 2026년에도 linear-only. 분기는 Workflows ($890/mo+) 로 가야 함. 시장에 인식 격차 큼.
  • AI SDR 카테고리 분리 — Artisan · 11x · AiSDR · Regie 는 분기 UI 없이 모델에 위임. 가격 $600~10,000/mo 로 SaaS 대비 한 자릿수 다름.

C2행동 기반 후속 시퀀스

"메일을 열었지만 답장 안 함 → 후속 A", "링크 클릭함 → 후속 B", "자동응답(OOO) 옴 → 일정 미루기", "답장 옴 → 시퀀스 자동 중단" 처럼 행동 이벤트에 따라 다음 메일의 내용·타이밍이 조건부로 분기되는 기능. 35개 서비스를 5개 카테고리로 분류해 조사.

요약 매트릭스

강함 · 명시적 제공 부분 · 제한적 없음

A. Sales Engagement 전통 강자

서비스 Entry 가격 진짜 분기 OOO 자동 감지 Reply auto-stop 시각 빌더 시간 조건 AI 인텐트
Outreach~$130~175/seat/mo
Salesloft~$125~165/seat/mo
Apollo.io$49/seat/mo
HubSpot SequencesSales Hub Pro $100/seat/mo
HubSpot WorkflowsMarketing Hub Pro $890/mo+
Salesforce Sales EngagementContact sales

B. 콜드 아웃리치 SaaS

서비스 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~

C. AI-Native 2025-2026 신규

서비스 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.aiContact sales
Clay + Smartlead 조합$134 + $39/mo
Bardeen$20/mo
Relevance AI$19/mo~

D. 마케팅 자동화 (B2C journey)

서비스 Entry 가격 진짜 분기 OOO 자동 감지 Reply auto-stop 시각 빌더 시간 조건 AI 인텐트
Customer.io$100/mo (5K profiles)
ActiveCampaign$15~49/mo
Klaviyo Flows$20/mo (500 contacts)
Iterable StudioEnterprise
Braze CanvasEnterprise
Mailchimp Journey$13/mo

E. CRM 내장

서비스 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

분기 강자 TOP 5

#1 Reply.io

Choose-Your-Own-Adventure 멀티채널 분기

$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 처리.

진짜 분기 OOO 감지 시간 조건 LinkedIn 별도 결제
#2 Smartlead

Subsequence 엔진 + AI 5분류 라우팅

$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 로 메일 본문 안에서도 인라인 조건문 가능.

OOO LLM 파싱 5분류 AI 가격 최강 메인 시각 분기 약함
#3 Outreach

Enterprise multi-branch ruleset

$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 보다 떨어짐.

enterprise 최강 AI Smart Account Plan $$$$ UI 직관성 ↓
#4 Saleshandy

가격 대비 균형 잡힌 분기 + OOO

$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.

가성비 최강 OOO LLM 파싱 시각 빌더 약함
#5 Lemlist (Multichannel Expert)

Yes/No 분기 + Within/Wait Until 타이밍

$87~109/seat/mo (Email Pro $63 은 분기 ✕)

조건 선택 후 Yes / No 양갈래 트리 가 시각적으로 펼쳐지고 각 가지에 다음 step (LinkedIn·콜·이메일) 자유 배치. 차별점은 타이밍 옵션 두 종: "Within" (조건 만족 즉시 진행) · "Wait Until" (특정 액션 발생 전까지 대기). 멀티채널 통합 인박스도 동급. 함정: Email Pro 사용자가 "분기 됐는줄 알고" 쓰는 경우 많음 (실제로는 미지원).

시각 트리 멀티채널 Email Pro는 ✕

카테고리별 분류

A. 진짜 다중 분기

A/B/C/D 다른 메일 + 다른 타이밍

  • Reply.io · Smartlead · Saleshandy
  • Lemlist Multichannel · Outreach
  • La Growth Machine · Mixmax
  • Woodpecker (16 step 한도) · QuickMail
  • Customer.io · ActiveCampaign · Klaviyo
  • Iterable · Braze · Zoho Blueprint
  • HubSpot Workflows (Sequences 아님)

B. 조건부 발송

안 열면 보내고, 열면/답장하면 stop

  • HubSpot Sequences · Salesloft Cadences
  • Apollo Sequences · Mailshake · GMass
  • Hunter Campaigns · Instantly (얕은 분기)
  • Pipedrive (3 step) · Freshsales
  • Mailchimp Customer Journey

C. AI 자동응답 처리 (OOO)

LLM 파싱 + 복귀일 자동 추출 + auto-restart

  • 시장 표준: Smartlead · Instantly · Saleshandy · Hunter
  • 감지만: Outreach · Salesloft · Apollo · Reply.io · Artisan · AiSDR · 11x
  • 없음: HubSpot Seq · Mailshake · Lemlist · GMass · B2C 자동화

D. AI SDR (분기 위임)

사용자가 if-then UI 안 그림. AI 가 즉석 결정

  • Artisan Ava · AiSDR · 11x Alice/Jordan
  • Regie.ai Auto-Pilot
  • 가격 $600~10,000/mo (SaaS의 10~50배)
  • UI 시각 분기 약함, 결과는 정교

C4답장 패턴 학습 루프

"관심 없음" 답장 패턴을 자동 탐지 (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
Iterableenterprise
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)
Bardeenfree-$20/mo✕ (automation)

학습 루프 강자 TOP 5

#1 Outreach + Kaia

Sequence mid-flight rewrite

$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 솔루션.

진짜 closed loop mid-flight rewrite enterprise only
#2 Smartlead

Objection loop-back into new outreach

$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.

objection loop-back GPT-4 fine-tune 다이제스트 UI 약함
#3 Salesloft Rhythm (Conductor AI)

실시간 우선순위 재정렬 closed loop

$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 추가.

workflow closed loop Focus Zones 다이제스트 텍스트 rewrite 약함
#4 Artisan Ava · AiSDR · 11x Alice

Prospect-level micro loop

$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 우선순위 못 가림" 한계 보고.

prospect 메모리 macro loop 부재 $$$
#5 Gong

분석 최강, 자동 반영은 약함

$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 형태.

분석/다이제스트 최강 human-in-loop $$$$

카테고리별 분류

A. 진짜 closed loop

reply 패턴 → 다음 카피 자동 수정 제안

  • Outreach (Kaia + sequence AI) — mid-flight rewrite
  • Smartlead AI Reply Agent — objection loop-back (명시)
  • Salesloft Rhythm — workflow 우선순위 (텍스트 rewrite 약함)
  • Artisan / AiSDR / 11x — prospect-level micro loop만

B. 분석만

다이제스트/대시보드 O, 사람이 수동 반영

  • Reply.io Jason AI · Lemlist · Instantly Unibox V2
  • HubSpot Breeze (20+ agents, GPT-5)
  • Salesforce Einstein · Zoho Zia
  • Gong · Chorus · Avoma
  • Klaviyo K:AI · Iterable · Braze Sage · Customer.io

C. 단순 분류 / 인접

학습 루프 없음

  • Yesware · Boomerang · Mailmodo · Mailtrap
  • Pipedrive AI · ActiveCampaign AI
  • Clay · Relevance AI · Bardeen · Useartemis
  • Aircall AI · Regie.ai · Klenty

P2현재 린다 코드 — 시퀀스 + 발송 워커

elysia-server + admin 모노레포에서 시퀀스 정의 · BullMQ 워커 · 스케줄링 · UI 의 현재 구조를 코드 레벨로 정리. 모든 경로 + 라인 번호는 grep/Read 검증.

한 줄 요약

  • 시간 기반 선형 시퀀스는 견고하게 완성 — 4개 워커 (loader · email · activation · lifecycle), timezone-aware 스케줄링, atomic dedup, backpressure.
  • StepConditionType enum 은 프론트 타입 정의에만 존재 — DB 컬럼·워커 로직 0%. UI에서 입력해도 저장 안 됨 (조사 가설 확인됨).
  • ReplyAutomationConfig (jsonb) 는 DB에 있고 답장 시 enrollment auto-stop 은 잘 동작 — 다음 step "조건"으로는 미사용.

DB 스키마

테이블경로핵심 컬럼분기 관련
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 로 행동별 액션

BullMQ 워커 파이프라인

sequence-email-loader.worker

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. 현재 쿼리에 조건 분기 필터 없음.

producer backpressure 조건 분기 미적용

sequence-email.worker

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 조건 평가 로직 없음.

SES 발송 22 rps post-send 조건 ✕

sequence-activation.worker

workers/bullmq/sequence-activation.worker.ts

활성화 시 enrollment + step_execution 대량 생성 + delayed job 스케줄. Concurrency 2 (DB 부하 분산). jobId 멱등성 + ActivationLock 2차 방어.

멱등성 확보

sequence-lifecycle.worker

workers/bullmq/sequence-lifecycle.worker.ts

pause/resume 시 BullMQ 잡 정리 + 미발송 executions 재enqueue. cancelSequenceJobs / rescheduleOverdueExecutions. Concurrency 5, Lock 10분.

resume 회복

타이밍 / 스케줄링

calculateScheduledTime()

utils/timezone.ts:68-122

fromDate → target timezone → delayDays (영업일/달력일) → 지정 시간 설정 → UTC 반환. Sender 모드 (skipWeekends=false): 달력일, 시간 지나면 +5분만. Buyer 모드 (skipWeekends=true): 영업일, 시간 지나면 +1일 강제.

Producer-side scheduling

lib/queue/sequence-email-scheduler.ts

Feature flag SEQ_EMAIL_PRODUCER_SCHEDULING (기본 on). enqueue 시점 계정별 next-slot atomic 예약 (Lua), provider별 throttle, delayed 큐 누적 5K+ 시 batch 자동 축소.

프론트엔드 (admin)

위치역할현재 상태
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 정상 저장

현재 분기 / 조건 처리 상태

✓ 동작함

  • 시간 기반 선형 발송 (delayDays + scheduledHour/Minute)
  • Timezone-aware (sender/buyer 모드)
  • A/B variant (assignedVariant)
  • Reply auto-stop (active + paused 모두)
  • OOO 감지 utility (6가지 rule)

✕ 없음 (UI 만 있고 비동작)

  • StepConditionType DB 컬럼
  • 워커의 post-send 조건 평가
  • 다음 step 동적 결정 로직
  • 분기 step 간선(edge) 정의
  • conditionConfig 직렬화 / 파싱

△ 부분 동작

  • ReplyAutomationConfig: 액션 매핑 있으나 "다음 step" 조건으로 사용 안 함
  • enrollment-resume 큐: OOO 후 자동 재개 스텁만

P2현재 린다 코드 — 답장 로직

답장 수신 (SendGrid Inbound + AWS SES fallback) · AI 분류 (Gemini) · 자동 태그 · 주간 다이제스트 · 인박스 UI 까지의 전체 파이프라인 코드 레벨 정리.

한 줄 요약

  • 답장 수신 + AI 분류 + 자동 태그 + 주간 다이제스트 + 미회신 고의도 다이제스트는 잘 완성. SendGrid Inbound Parse (primary) + AWS SES inbound consumer (SPOF 회피) 이중화.
  • 없음: OOO 복귀일 LLM 파싱 · 자동 일시정지·재개 · sentiment→leadScore 피드백 · 회신율 기준 sender ranking · "관심 없음" 패턴 추출.

답장 수신 파이프라인

SendGrid Inbound Parse (primary)

routes/webhook.routes.ts:23-33

POST /api/webhook/inboundwebhookService.handleInboundWebhook()processInboundEmail(). RFC 822 파싱, In-Reply-To 헤더 기반 답장 감지, email_replies 테이블 upsert, enrollment 자동 중단.

AWS SES Inbound Consumer (fallback)

workers/ses-inbound-consumer.worker.ts:1-250

S3 polling (30초). SES Receipt Rule → S3 raw MIME → mailparser simpleParser() → SendGridInboundPayload 어댑터 → 동일한 processInboundEmail() 재사용 (SPOF 회피).

DB 스키마 (답장 관련)

테이블경로핵심 컬럼
email_repliesdb/schema/emails.ts:236-291sentiment (5enum) · intent · aiSummary · isAutoReply · tags · autoAppliedTags · suggestedTags · note
reply_tagsdb/schema/reply-tags.ts:26-54워크스페이스 단위 태그 사전 (max 50). autoClassifyEnabled (boolean)
emailReplyDraftsdb/schema/email-reply-drafts.ts:30-124AI 답장 초안 (스레드당 1개 활성). intent · priority · snoozedUntil · autoSendAt
emails.replyClassificationdb/schema/emails.ts:162"human" / "auto_reply" / "bounce"
inboxThreadsdb/schema/inbox-threads.ts:53-105스레드 종료 추적. status · closedReason (6 enum) · source (manual/auto_intent/auto_enrollment)
leads.leadStatusdb/schema/leads.ts:20-48"replied" · "auto_replied" · "bounced" → BLOCKED_LEAD_STATUSES 발송 차단

AI 분류 엔진

ai-classification.service

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).

reply-tags-auto-classify.worker

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 업데이트.

Reply auto-stop 트리거

정확한 로직 (webhook.service.ts:1051-1126)

  • 1. leads.lead_status = 'replied' (SSOT 갱신)
  • 2. emails.reply_classification = 'human'
  • 3. SELECT sequenceEnrollments WHERE leadId=? AND status IN ('active','paused')
  • 4. FOR EACH: updateEnrollmentStatusWithSync(id, 'stopped', skipReason='Skipped due to reply received') → BullMQ job 취소 + enrollment_stopped 이벤트
  • paused 포함이 필수: resume 시 발송 race 차단 (실데이터 25건 검출). cross-seq 987건, same-seq 616건 검증 완료.

OOO 감지 (현재 상태)

항목상태경로
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 큐 스텁만구현 필요

주간 다이제스트 / 통계

weekly-digest.worker

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 · "관심 없음" 패턴 추출 없음.

unreplied-reply-digest.worker

workers/bullmq/unreplied-reply-digest.worker.ts:14-91 · 매일 09:00 KST

intent IN (meeting_request, positive_interest, question) AND 시간 초과 미회신 답장 수집 → Slack ops 채널 + AI 세일즈 제안. 운영용으로 잘 동작 중.

Lead Scoring (현재 답장과 무관)

컬럼출처답장 반영?
leads.leadScoremanual / enrichment
leads.fitScore (0-100)buyer discovery AI matching
leads.hotLeadScorehot-lead-evaluation.ts

프론트엔드 답장 UI

경로: admin/src/pages/email-replies/

P3C2 행동 분기 — 적용 로드맵

현재 코드 구조 위에 행동 기반 후속 시퀀스를 단계별로 추가하는 구현안. Smartlead 의 Subsequence 패턴 + Reply.io 의 시각 분기를 절충, "메인 시퀀스 + 조건부 subsequence" 구조 추천 (시각 빌더 복잡도 회피).

Phase 0 — Baseline (1~2주, 우선순위 최상)

S0.1 [M] DB 스키마 확장

migration · db/schema/sequences.ts

sequenceSteps 테이블에 컬럼 추가:

  • condition_type varchar(32) NULL — always / no_response / negative_response / positive_response / link_clicked / custom
  • condition_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 인시던트 회피).

S0.2 [S] 기존 ReplyAutomationConfig 라우팅

webhook.service.ts:1051-1126

이미 동작하는 reply auto-stop 로직에 replyAutomationConfig 의 액션 (pause/complete/branch) 분기 추가. 현재는 무조건 stopped 처리 — config 의 액션을 존중하도록 수정.

S0.3 [S] OOO 감지 → enrollment paused

auto-reply-detection.ts + webhook.service.ts

현재 isAutoReply 만 저장. OOO 면 enrollment.status = 'paused' (replyAutomationConfig.out_of_office='pause' 일 때). C4 의 복귀일 파싱 (R0.1) 과 결합.

Phase 1 — 분기 평가 엔진 (2~3주, 우선순위 상)

S1.1 [L] sequence-branching.service.ts 신규

신규 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 (=종료).

S1.2 [M] sequence-email-worker post-send 후처리

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 신규)

S1.3 [M] sequence-branch-eval.worker 신규

신규 워커

delayed job 으로 N일 후 발동. evaluateCondition 호출 → 조건 충족 시 분기 step 생성. 미충족 시 기본 다음 step. jobId 멱등성 + lock.

S1.4 [M] sequence-email-loader 쿼리 수정

sequence-email-loader.worker.ts:96-143

현재: pending 모두 로드.
변경: 분기 평가 완료 (eligible=true) step 만 로드. 또는 step_execution 에 eligible boolean 추가해 branch-eval-worker 가 토글.

Phase 2 — UI + API 연결 (1주, 우선순위 중)

S2.1 [S] 라우트 conditionType 수용

routes/sequences.routes.ts

POST/PATCH 시 conditionType / conditionConfig / branchToStepOrder 필드 수신·검증·저장. validator (typebox) 추가.

S2.2 [M] admin SequenceForm 백엔드 전송

admin/src/lib/api/services/sequences.ts · SequenceForm.tsx

이미 있는 StepConditionType UI 의 입력값을 백엔드로 실제 전송. 기존 step 폼에 condition select + waitDays input + linkPattern input 추가.

S2.3 [M] subsequence 시각화

admin/src/pages/sequences/ 신규 컴포넌트

Smartlead 식 "메인 시퀀스 카드 + 조건 매칭시 subsequence 카드" 표시 (풀 시각 트리 회피).
각 step 우측에 "조건 분기" 아이콘 → 클릭 시 subsequence sheet 펼침.

Phase 3 — AI SDR 패턴 (선택, 2~4주)

위험 / 운영 노트

P3C4 답장 학습 — 적용 로드맵

AI 분류 + 자동 태그 + 주간 다이제스트는 잘 갖춰져 있다. 빈 곳은 OOO 복귀일 파싱 · 자동 재개 · sentiment→leadScore 피드백 · 회신율 ranking · "관심 없음" 패턴 추출. O2 (회신율 TOP 다이제스트) + O3 (거절 패턴 회피) 가 시장 frontier.

Phase 0 — OOO 복귀일 자동 처리 (1~2주, 우선순위 최상)

R0.1 [M] 복귀일 LLM 파싱

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 반영.

R0.2 [M] email_replies.resume_at 컬럼

migration · db/schema/emails.ts

email_replies.resume_at timestamp NULL — OOO 답장이면 복귀일 저장. Phase 0 의 enrollment auto-pause 와 연결.

R0.3 [M] enrollment-auto-resume.worker

신규 워커 · cron-style

1시간 마다 email_replies WHERE resume_at < NOW() AND processed=false 조회 → 해당 enrollment 의 status='paused' 면 'active' 로 전환 + 다음 step scheduled_at 재계산. SSOT: lead_status 도 동기화.

Phase 1 — 회신율 다이제스트 강화 (1~2주, 우선순위 상)

R1.1 [M] weekly-digest 회신율 TOP 섹션

services/weekly-digest-data.service.ts

기존 7일 통계 + 열람 TOP 5 옆에 추가:

  • 회신율 기준 잘 받는 메일 TOP 10 — sequence_step 별 (sent_count, replied_count, reply_rate). 분모 ≥10 만 표시.
  • 거절(not_interested) 답장 TOP 5 — email_replies WHERE intent='not_interested' 의 원본 메일 subject + 발송 시간대.
  • Intent 분포 — 7일 답장 카테고리 차트.

쿼리는 analyticsDb 사용 (COUNT(DISTINCT) 다수).

R1.2 [S] HTML 템플릿 업데이트

services/weekly-digest.service.ts:buildWeeklyDigestHtml()

회신율 TOP / 거절 TOP / Intent 분포 차트 (inline SVG) HTML 섹션 추가. 기존 worker concurrency 1 유지.

Phase 2 — Sentiment → Lead Score 피드백 (1주, 우선순위 중)

R2.1 [S] sentiment-score-sync.worker

신규 워커 또는 webhook 후처리

email_replies 분류 완료 직후 leads.leadScore 갱신. 가중치 (보수적):

  • positive_interest → +15 · meeting_request → +25
  • question → +5 · neutral → 0
  • objection → -5 · not_interested → -20

min/max clamp (0~100). 또는 별도 sentiment_score 컬럼 신규 (leadScore 와 분리).

Phase 3 — "관심 없음" 패턴 학습 (2~4주, 우선순위 frontier)

R3.1 [L] objection-pattern-extractor.worker

신규 batch 워커 · 주 1회

지난 30일 email_replies WHERE intent IN ('not_interested','objection') → Gemini batch summarize → 공통 패턴 추출.
출력: objection_patterns 신규 테이블 — { pattern, frequency, example_replies[], suggested_avoidance }

R3.2 [M] 캠페인 생성 시 회피 추천

sequence-ai-gen.service.ts 확장

새 시퀀스 AI 생성 시 objection_patterns 를 LLM prompt 의 "avoid these phrasings" 컨텍스트로 주입. 진짜 closed loop의 시작.

R3.3 [M] admin UI — Pattern Insights 페이지

신규 admin/src/pages/insights/

objection_patterns 시각화 + "다음 캠페인 작성 시 회피" 토글. 매니저가 패턴 동의/거부 가능 (human-in-loop fallback).

R3.4 [M] 회신율 기반 sender ranking

services/sender-stats.service.ts 신규

sender (메일박스) 별 30일 reply_rate ranking. 낮은 sender 자동 알림 (warmup 부족? 도메인 reputation 저하?). 별도 admin 위젯.

Phase 4 — AI SDR 패턴 (선택, 4~8주)

전체 우선순위 요약

Phase기간비용시장 갭 충족예상 효과
C2 P0 (Baseline)1~2주S+MOOO 감지 + 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×3OOO LLM 파싱 표준 (Smartlead/Saleshandy 패턴)OOO 누락 발송 차단
C4 P1 (회신율 TOP)1~2주M+S시장 큰 공백 (O2)차별화 진입 — 가장 ROI 높음
C4 P2 (sentiment → score)1주Slead score 환원scoring 정합성
C4 P3 (거절 패턴 학습)2~4주L+M×3시장 frontier (O3)진짜 closed loop — Outreach 외 거의 없음
P4 (AI SDR rewrite)4~8주L×2Outreach 수준enterprise 진입

린다세일즈 차별화 포인트 — 빈 frontier

조사 결과 도출된 명확한 시장 공백 4가지. 각각이 린다세일즈가 "남들이 안 하는 (또는 못 하는)" 영역으로 진입 가능한 기회.

O1

OOO LLM 파싱 + 복귀일 자동 재개

이미 Smartlead · Instantly · Saleshandy · Hunter 4곳이 표준화. 빠르게 따라가야 할 baseline 기능. 차별점은 아니지만 없으면 mid-market 진입 자체가 어려움.

O2

회신율 기준 잘 받는 메일 TOP N 자동 다이제스트

제품 기능으로 명시한 곳이 산업 전체에 거의 없음 (Salesloft Focus Zones, Gong deal risk 가 가장 가까움). 한국어 emailing 시장에서 명확한 first-mover 포지션 가능.

O3

"관심 없음" 패턴 자동 회피 추천

Outreach + Smartlead 만 명시. 진짜 closed-loop는 frontier. 거절 reply 의 공통 표현·주제·시간대를 NLP 로 추출 → 다음 캠페인 카피 생성 시 회피 제안 (또는 자동 rewrite).

O4

Subsequence 패턴 채택 (시각 빌더 복잡도 회피)

Smartlead/Instantly/Saleshandy 가 검증한 패턴. 풀 분기 트리 (Reply.io/Lemlist 식) 는 5단계 이상에서 가독성 무너짐. 메인 시퀀스 + behavior 매칭시 별도 sub 로 분기하는 구조가 운영 효율적.

구현 우선순위 제안 (코드 분석 결과 반영)

  1. 1순위 (Quick Win — 데이터 이미 있음)C4 P1 회신율 TOP + 거절 TOP 다이제스트. weekly-digest-data.service.ts 확장 + buildWeeklyDigestHtml() 섹션 추가. 1~2주, M+S. 시장 큰 공백 (O2). 가장 ROI 높음.
  2. 2순위 (baseline parity)C4 P0 OOO 복귀일 파싱 + 자동 재개. auto-reply-detection.ts 함수 추가 + email_replies.resume_at 컬럼 + enrollment-auto-resume.worker. 1~2주, M×3. Smartlead/Saleshandy 수준 OOO 처리.
  3. 3순위 (UI 자산 살리기)C2 P0+P1+P2 행동 분기 엔진. StepConditionType 이 admin 에 이미 enum/UI 로 있으나 DB/워커 미구현. sequenceSteps 컬럼 추가 + sequence-branching.service + branch-eval.worker + 라우트 수용 + UI 백엔드 전송. 4~6주, L+M×6.
  4. 4순위 (frontier 진입)C4 P3 "관심 없음" 패턴 학습 → 다음 캠페인 회피. objection-pattern-extractor.worker + objection_patterns 테이블 + sequence-ai-gen.service.ts prompt 주입. 2~4주, L+M×3. 진짜 closed loop — Outreach 외 거의 없음.
  5. 5순위 (scoring 정합성) — C4 P2 sentiment → leadScore 피드백. 1주, S.
  6. 아키텍처 — 풀 시각 분기 트리 대신 "메인 시퀀스 + 조건부 subsequence" 패턴 (Smartlead 검증). UI 복잡도 ↓, 운영 한도 ↑. 초기 분기 깊이 1 단계만 허용.