고객관리¶
라우트:
/crm/customer-management매일 09:00 배치가 환자별 매칭 결과를 자동 처리합니다.
한 줄 요약¶
- SMS/알림톡 = 자동 발송 (운영자는 결과만 모니터링, 실패 시 재발송)
- 해피콜 = 직원이 직접 통화 (큐 → 통화 → 결과 입력 → 완료/대기 분기)
- 다가오는 해피콜 = 휴일/휴무 대비 미리처리 가능
화면 구성 (3컬럼)¶
[고객관리] [전체 / 내 담당] [새로고침]
┌─ 오늘 문자발송 ─────┬─ 오늘 해피콜 ──┬─ 다가오는 해피콜 ──┐
│ ✓ 발송 N │ 대기 │ 완료 │ 내일/모레 +N건 │
│ ⚠️ 실패 M [재발송] │ 환자 [처리] │ 환자 [미리처리] │
│ ⏳ 수동 대기 K ▾ │ 부재 N회 │ │
└─────────────────────┴────────────────┴──────────────────────┘
권한 / 담당자 매칭¶
| 레벨 | 보이는 범위 |
|---|---|
| admin / level 1~3 | 전체 환자 (행마다 담당 실장 칩 표시) |
| level 4 (실장) | 본인 담당 환자만 자동 필터 |
한 환자 = 한 실장 매핑 우선순위:
1. inhouse_consult.assigned_counselor_name (인하우스 배정 상담사)
2. patient_reservations.assigned_staff (예약카드 실장)
3. progress_notes.staff (최신 차트 staff)
운영자(admin)는 헤더 우측 [전체 | 내 담당] 토글로 본인 담당만 볼 수도 있음.
수신거부 자동 차단 (정보통신망법)¶
SMS/알림톡 채널은 자동으로 수신거부 환자 제외:
| 컬럼 | 거부 시 |
|---|---|
patients.sms_consent |
❌ 발송 차단 |
patients.ad_consent |
❌ 발송 차단 (광고/마케팅) |
해피콜(call)은 직원 통화라 무관. 수신거부 설정은 환자관리 페이지에서 변경 가능.
좌측 — 오늘 문자발송¶
정책 (2026-05-13)¶
- SMS/알림톡은 자동 발송 (
auto_send=1이면 매일 09:00 배치가 즉시 발송) - 화면은 발송 결과 모니터링 전용 — 일반 발송 버튼 없음
- 실패 행에만 [재발송] 버튼 노출
헤더 카운트¶
✓ N발송 성공⚠️ M실패 (aligo 일시 오류 등)⏳ 수동 대기 K ▾— auto_send=0 룰이 매칭한 큐 (있을 때만 토글 노출)
⏳ 수동 대기 토글¶
운영자가 룰을 대기큐 모드로 운영하는 경우 매칭된 큐가 여기 쌓입니다.
- 토글 클릭 → 노란 영역에 큐 펼침
- 행 [발송] 버튼 클릭 → 미리보기 모달 출현 (Phase 10) → 본문/수신자 확인 → [확정] → 즉시 발송
- 발송 완료 후 위 발송 영역으로 이동 + 큐 행 자동 정리 (Phase 11)
시드 룰 5종 (SMS)¶
| 룰 | 조건 |
|---|---|
| R1 한약 해독 D+1 | 해독 키워드 결제 다음날 |
| R2 한약 일반 D+1 | 약침/맞춤처방/다이어트 등 한약 결제 다음날 |
| R3 재내원 안내 | 결제 후 25/55/85/115/145/175일 |
| R4 피코/브이레이저 D+7 | 피부 시술 7일 후 |
| R5 슈링크/리프팅 D+30 | 리프팅 시술 30일 후 |
중앙 — 오늘 해피콜¶
정책¶
- 직원이 직접 전화하는 작업 — 자동 발송 불가
- [대기] 탭과 [완료] 탭으로 구분
- 부재중/재시도는 큐에 그대로 남음 (다음 날 다시 시도)
대기 / 완료 탭¶
| 탭 | 표시 |
|---|---|
| 대기 | 미처리 + 부재중/재시도로 재시도 필요 (7일 누적, 휴일 이월) |
| 완료 | 오늘 [성공]/[거절]로 끝난 항목 + 메모 |
대기 행 구성¶
- [담당자] 칩: admin 화면에만 표시
- 📞: 클릭 시 전화 앱 연동
- 어제 / N일 전: 큐에 들어온 후 경과 일수 (4일+ 빨강)
- 📵 N회: 부재중/재시도 누적 시도 횟수
- 📝: 가장 최근 시도 메모 (전체는 모달에서)
[상세보기] → 고객관리 상세 팝업¶
WI#100 Phase 1 통합 (2026-05-19)
이전에는 [처리] 버튼이 즉시 통화 결과 모달을 띄웠지만, 이제는 [상세보기] 버튼으로 전체 화면 팝업이 열려서 큐 카드 + 차트 이력 + 문자 이력을 한 번에 보면서 처리합니다.
팝업 진입 후 큐 카드 4영역에서 직접 처리: 1. 해피콜 처리 (좌측 320px 고정) — 통화 결과 입력 2. 진행사항 — 부재중/재시도 누적 메모 3. 상담내용/증상경과 — 환자 차트의 Progress Notes 인라인 표시 4. 남은 해피콜/문자 대기 — 같은 환자의 다른 큐 (클릭 시 환자 전환)
자세한 화면 동작: 고객관리 상세
결과별 분기¶
| 결과 | 처리 | 큐 |
|---|---|---|
| 성공 / 거절 | completed 처리 + patient_calls 자동 INSERT |
완료 탭으로 이동 |
| 부재중 / 재시도 | queued 유지 |
대기 탭에 그대로 남음 + 📵 N회 라벨 증가, 메모 누적 |
완료 [↻] 되돌리기¶
완료 탭의 행에서 [↻] 클릭 → 대기로 복귀 (실수로 누른 경우)
우측 — 다가오는 해피콜¶
용도¶
휴일·주말·담당자 휴무 전 미리 통화하기 위해 +1/+2일 매칭 환자를 미리 표시.
- 결제 데이터 기반 실시간 시뮬레이션 (DB row 없음)
- 처리 즉시 오늘 큐로 이동 (다가오는에서 사라짐)
행 구성¶
[상세보기] 흐름 (구 [미리처리])¶
WI#100 Phase 8.1 + Phase 9 (2026-05-19)
- 버튼 라벨: [미리처리] → [상세보기] 로 통일 (오늘 큐와 동일 UX)
- confirm 팝업 제거 — 즉시 고객관리 상세 팝업 진입 (Phase 9)
- 같은 환자에게 7일 이내 중복 발송 방지 (
crm_task_logslookback)
- 클릭 → 즉시 고객관리 상세 팝업 전체 화면 진입
- 큐 카드 4영역에서 통화 결과 입력
- 성공/거절 → 오늘 완료 리스트로 이동
- 부재중/재시도 → 오늘 대기 리스트로 이동
- 다가오는 카드에서 사라짐 (다음 새로고침에서)
중복 방지¶
- DB
UNIQUE(rule_id, patient_id, performed_date)제약 (마이그레이션 071) - 두 운영자가 동시에 상세보기 클릭해도 한 row만 살아남음
- 7일 lookback 중복 차단 (Phase 9 — 같은 환자에게 같은 룰이 7일 내 재발송 방지)
템플릿 / 룰 관리¶
템플릿 관리 (/crm/customer-management/templates)¶
- 시드 6종(T1~T6) + 운영자 추가
- 채널: SMS / 알림톡 / 해피콜(call)
- 본문 변수:
{{환자명}}— 발송 시 자동 치환 - 시드 보호: 삭제 불가 (enabled 토글로만 비활성)
룰 관리 (/crm/customer-management/rules)¶
표 컬럼 의미¶
| 컬럼 | 의미 |
|---|---|
| 자동발송 | 🟢 자동 = 매칭 즉시 발송 / ⏸ 대기큐 = 큐만 INSERT, 수동 검토 |
| 활성 | ON = 룰 매칭 사용 / OFF = 룰 자체 무시 (큐도 안 만듦) |
| 시드 | 🔒 = 시스템 기본 룰 (삭제 불가, 수정/끄기만 가능) |
자동발송 vs 활성 조합¶
| 활성 | 자동발송 | 동작 |
|---|---|---|
| ON | 🟢 자동 | 매일 09:00 매칭 → 즉시 SMS 발송 |
| ON | ⏸ 대기큐 | 매일 09:00 매칭 → SMS 카드 ⏳ 수동 대기에 쌓임 |
| OFF | (무관) | 매칭 자체 안 함 (룰 비활성) |
자동발송 켜는 법¶
- 룰 표 행의 ⏸ 대기큐 버튼 클릭 → 편집 모달 열림 (auto_send=1로 미리 셋팅됨)
- [저장] → ⚠️ 2단계 확인 모달:
"R1_한약_해독_D+1" 룰을 [자동 발송]으로 설정합니다. 이후 매일 09:00 배치가 매칭 환자에게 SMS를 자동 발송합니다.
- [확인] → 자동발송 ON
해피콜(channel=call) 룰을 자동발송으로 변경하려고 하면 거부됩니다 (직원 통화 필요).
룰 편집 모달 필드¶
| 필드 | 설명 |
|---|---|
| 트리거 | 결제 / 접수 / 시술 / 수동 |
| 오프셋 (D+N) | 트리거 후 N일 |
| 반복일 (recurrence_days) | JSON 배열 — 재내원: [25,55,85,...] / 해피콜: [14,28,42,...,168] |
| 키워드 | progress_note_orders.order_name LIKE 매칭 — JSON: ["해독","약침"] |
| 해독필터 (is_detox) | 추가 필터 — 공란(무관) / 0(해독 아님) / 1(해독) — patient_packages.is_detox 컬럼 기준 |
| 자동발송 | 0 (대기큐) / 1 (자동) |
| 활성 | 0 / 1 |
해독필터 주의: 현재
patient_packages.is_detox컬럼은 존재하지만 모든 값이 0이라 사실상 비활성. 키워드 매칭만 사용. 추후 해독 패키지를 별도 마킹하면 정밀도 향상에 사용.
자주 묻는 질문 / FAQ¶
Q. SMS 화면에 발송 버튼이 없어요
SMS/알림톡은 자동 발송이라 사람이 누를 버튼이 없습니다. 실패한 행에만 [재발송] 버튼이 나옵니다. 만약 룰을 대기큐 모드로 운영한다면 헤더의 ⏳ 수동 대기 N ▾ 토글에 큐가 쌓이고 거기서 [발송] 가능.
Q. 어제 부재중 처리한 환자가 어디 갔어요?
부재중/재시도는 큐에 그대로 남습니다 — 대기 탭에 📵 N회 라벨과 함께 표시. 다음 날 다시 [처리] 클릭하면 모달에 이전 시도 이력이 노란 박스로 누적되어 보입니다.
Q. 같은 환자에게 같은 메시지가 두 번 가나요?
DB에 UNIQUE 제약 (rule_id + patient_id + 일자) — 같은 날 중복 INSERT 불가. 다음 날 룰의 recurrence 조건이 또 매칭되면 다시 발송 (정상).
Q. 해피콜 완료했는데 잘못 누른 것 같아요
완료 탭에서 [↻] 클릭 → 다시 대기로 복귀. 정정 후 재완료.
Q. 다가오는 해피콜 카드에 환자가 있는데 왜 [내 담당] 모드에선 안 보여요?
[전체 | 내 담당] 토글이 내 담당이면 본인이 담당 실장(또는 admin 본인이름)으로 매핑된 환자만 표시. 관리자 계정은 보통 환자 담당이 아니라 0건. 토글을 전체로 바꾸세요.
Q. 미리처리는 언제 쓰나요?
내일 휴무이거나 담당 실장이 휴가일 때, 또는 환자가 미리 연락해서 해피콜을 미리 처리하고 싶을 때. [미리처리] → 통화 → 결과 입력하면 오늘 완료/대기로 이동하고 다가오는에서 빠짐.
Q. 실패한 SMS는 자동 재시도 되나요?
아니요. [재발송] 버튼을 눌러야 합니다. aligo 일시 오류면 즉시 복구되고, 수신거부면 차단됩니다.
Q. 자동발송을 안전하게 시작하려면?
처음에는 모든 시드 룰을 대기큐 상태로 두고 (⏸ 대기큐) 일주일 정도 매칭 정확성을 검증한 뒤, 룰 관리 페이지에서 하나씩 🟢 자동으로 켜는 것을 권장. 자동발송 ON 시 2단계 확인 모달이 뜹니다.
관련 페이지¶
- 고객관리 상세 (팝업) — 환자별 문자 이력 + 통화 기록 (WI#94)
- 고객관리 리스트 — 이전 "숙제 리스트" (
/crm/tasks, 흡수 예정) - 리콜대상
- 통화내역
- 정합성 검증 — #19 콜내역 중복 차단 / #21 4일+ 미처리 큐 알람