신청 현황 플로우

어드민 10번 메뉴 (show(6)) · 모든 유입 경로 통합 뷰 · CRM 양방향 실시간 동기화
핵심 -- 모든 유입 경로 통합
신청 현황 = 플랫폼 발생 + 외부 발생 모든 신청을 하나의 화면에서 관리.
플랫폼(셀프신청/티켓/AI채팅) -> 어드민 -> CRM 동기화 / 외부(CRM등록) -> CRM -> 어드민 역동기화.
전화번호 = 핵심 키 (중복 방지 + 자동 매칭 + 회원/비회원 구분)
플랫폼 발생 (어드민->CRM)
셀프신청 / 티켓 / AI채팅
고객이 앱/웹에서 직접 신청
-> bongi_applications 저장 (중고폰 매입 제외 — 별도 bongi_used_phone_buyback)
-> CRM으로 자동 푸시
외부 발생 (CRM->어드민)
CRM 등록 (전화 인입 등)
상담사가 CRM에 직접 등록
-> 어드민으로 실시간 역동기화
-> 티켓번호 없음 (상담 시 확정)
양방향 동기화
상태 변경: CRM <-> 어드민 실시간
신청완료 -> 상담중 -> 계약완료/취소
어느 쪽에서든 변경 -> 양쪽 반영
동기화 방향 컬럼으로 추적
STEP 1 -- 유입 경로 3가지
신청이 만들어지는 3가지 경로
경로 1 셀프신청 (POST /api/applications)
고객
상품 탐색
->
셀프신청
이름+전화+상품
->
POST /applications
입력검증
->
bongi_applications
type: 'self'
channel: 'web'
->
CRM 동기화
(어드민->CRM)
server/routes/applications.js -- 전화번호 필수, 형식 검증 (/^01[016789]-?\d{3,4}-?\d{4}$/), 이름 50자/메시지 2000자 제한.
Supabase + 로컬 배열 양쪽 저장. Mock 고객 DB에도 추가 (어드민 CRM에서 즉시 표시).
경로 2 AI채팅 / 티켓 (createLead / requestCallback)
고객
AI 채팅
->
createLead()
or requestCallback()
->
bongi_applications
type: 'ai_chat' / 'callback'
channel: 'ai_chat'
->
Mock 고객 DB
source: 'kakao_chat'
->
CRM 동기화
(어드민->CRM)
server/services/chat-tools.js -- AI 채팅 도중 상담 신청(createLead) 또는 콜백 요청(requestCallback).
product_id(티켓번호) 포함 가능. form_data에 message/preferred_time 저장.
경로 3 CRM 등록 (외부 발생)
전화 인입
(콜센터)
->
상담사
CRM에 직접 등록
->
어드민 역동기화
(CRM->어드민)
->
bongi_applications
sync: 'CRM->어드민'
티켓번호: 없음
CRM 등록 건은 티켓번호 없음 (상담 진행 중 상품 확정 시 부여).
동기화 방향이 CRM->어드민으로 표시됨.
유입경로APItype 값channel 값동기화 방향티켓번호
셀프신청POST /api/applicationsself / callweb어드민->CRM있음 (product_ticket)
AI채팅createLead() / requestCallback()ai_chat / callbackai_chat어드민->CRM있을 수 있음
CRM등록CRM 직접 입력--CRM->어드민없음 (상담 시 확정)
STEP 2 -- 어드민 <-> CRM 양방향 동기화
동기화 방향에 따른 데이터 흐름
어드민 -> CRM (플랫폼 발생)
고객 신청
(셀프/AI채팅)
->
bongi_applications
저장
->
CRM에
자동 푸시
- Mock 고객 DB에도 동시 추가
- 상담사 배정은 CRM 영역
- 어드민에서는 동기화만 관리
CRM -> 어드민 (외부 발생)
전화 인입
CRM 등록
->
CRM에서
어드민 푸시
->
bongi_applications
역동기화
- 티켓번호 없음 (상담 시 확정)
- 상품명은 "인터넷+TV (미정)" 등
- 상태 변경도 실시간 동기화
핵심 원칙: 상담사 배정은 CRM 영역 -- 어드민에서는 동기화만 관리.
전화번호 = 매칭 키: 플랫폼 회원이면 "앱회원", 미가입이면 "비회원"으로 자동 분류.
STEP 3 -- 신청 상태 전이
bongi_applications.status 상태 전이도
정상 흐름
신청완료
->
상담중
->
계약완료
취소 흐름
신청완료
->
상담중
->
취소
상태의미전이 가능트리거
신청완료 고객 신청 접수됨 (상담사 미배정) 상담중 신청 API 호출 시 자동 (status: '신청완료')
상담중 상담사 배정, 상담 진행 중 계약완료 / 취소 CRM에서 상담사 배정 시
계약완료 계약 성사 (현금 페이백/포인트 후속 처리 시작) - (최종 상태) CRM에서 계약 체결 확인 시
취소 고객 또는 상담사에 의해 취소 - (최종 상태) 상담 불발 / 고객 거부
DB 허용값: 신청완료, 상담중, 계약완료, 취소 (전부 한글)
STEP 4 -- 어드민 신청현황 화면 (10번)
KPI 카드
1,204
신청완료
382
상담중
2,156
계약완료
98
취소
3,840
전체
필터 3줄
상태 전체 신청완료 상담중 계약완료 취소
경로 전체 셀프신청 티켓 CRM등록
유형 전체 앱회원 비회원 이름 / 전화번호 / 티켓번호 검색
테이블 컬럼 (11개)
신청일시고객명연락처유형유입경로동기화티켓번호상품현금 페이백상태관리
2026-04-06 14:23 홍길동 010-1234-5678 앱회원 셀프신청 어드민->CRM SK0188 SKT 500M+Btv이코노미+AI NUGU+WiFi6 43만 신청완료 상세
2026-04-06 12:40 박민수 010-4567-8901 비회원 CRM등록 CRM->어드민 - KT 인터넷+TV (미정) - 상담중 상세
2026-04-06 13:12 이영희 010-3456-7890 비회원 셀프신청 어드민->CRM LG0079 LG U+ 500M+프리미엄+UHD4+기가와이파이6 47만 계약완료 상세
200건 limit · 상태/경로/검색어 필터 · 고객명 클릭 -> 회원 상세 모달 (findAndOpenMember)
API
MethodPathQuery Params설명
GET/api/admin/platform/applicationsstatus, channel, search신청 목록 조회 (200건 limit, created_at DESC)
POST/api/applications-셀프 신청 접수 (name, phone, productTicket, message, channel)
admin-platform.js GET /applications: status/channel/search 쿼리 파라미터 지원.
search는 name.ilike / phone.ilike / ticket_no.ilike OR 조건 검색.
고객명 클릭: findAndOpenMember() 호출 -> 회원관리(08번) 상세 모달 열기.
STEP 5 -- 마이페이지 신청 내역 (고객 UI)
client/src/pages/my/Applications.jsx
필터: 전체 진행중 완료 취소
KT 인터넷+TV 500Mbps
상담중
신청일 2026.04.01 · 셀프 신청

담당: 김상담 현금 페이백 37만원
LG 정수기 렌탈
계약완료
신청일 2026.02.15 · AI 채팅

현금 페이백 15만원 지급완료
카드 필드데이터비고
상품명title상품 이름 (예: KT 인터넷+TV 500Mbps)
신청일dateYYYY.MM.DD 형식
유입경로type셀프 신청 / AI 채팅 / 티켓 K227
상태status상담중 / 계약완료 / 취소 / 검수중(중고폰)
담당자extra"담당: 김상담" (배정된 경우)
현금 페이백gift"현금 페이백 37만원" / "현금 페이백 15만원 지급완료"
중고폰buyback중고폰 매입 신청일 경우 매입가+진행 단계 표시
중고폰 매입 신청: 별도 진행 단계 표시 (신청완료 -> 검수중 -> 매입확정 -> 완료), 매입 예정가 표시.
취소 건: opacity: 0.6 으로 흐리게 표시.
STEP 6 -- 계약완료 후 흐름
계약완료 시 자동 트리거되는 3가지
1. 현금 페이백 자동 생성
계약완료 -> 현금 페이백 관리(13번)에
"지급 대기" 건 자동 생성

앱회원: 본인인증 + 계좌 등록 완료 시 즉시 지급
비회원: "비회원 대기" 상태 -> 앱 가입 유도
현금 페이백 = 전액 현금 지급
2. 포인트 자동 적립
앱회원만 적립 가능 (비회원 불가)

친구초대 계약 (추천인)인터넷15K / TV20K / 렌탈10K
친구초대 계약 (친구)인터넷10K / TV15K / 렌탈5K
후기 작성15,000P
3. 비회원 알림톡 자동 발송
3단계 자동 발송:

1차: 신청 완료 즉시
"앱 가입 + 계좌 등록 시 현금 페이백 즉시 지급"

2차: 계약 완료 시
"현금 페이백 OO만원 준비됨 -> 앱 가입 -> PASS 인증 -> 계좌 등록 -> 즉시 입금"

3차: D+7 (미가입 시)
"현금 페이백이 아직 대기 중이에요"
계약완료 전체 후속 처리 플로우
계약완료
->
현금 페이백 "지급 대기" 자동 생성 (13번)
포인트 자동 적립 (앱회원만, 14번)
비회원 알림톡 2차 발송
마이페이지 상태 반영
예외 케이스
예외상황처리
전화번호 중복 같은 번호로 여러 번 신청 bongi_applications에 복수 행 허용 (건별 관리).
Mock 고객 DB는 phone 기준 중복 체크 -> 기존 고객이면 추가하지 않음.
전화번호 형식 오류 01x-xxxx-xxxx 형식이 아닌 입력 400 에러 반환: "전화번호 형식이 올바르지 않습니다"
Supabase 연결 실패 DB 접속 불가 로컬 배열(localApplications)에 저장 후 정상 응답 (201).
조회 시도 로컬 배열 fallback.
비회원 현금 페이백 지급 계약완료 후 비회원이 앱 가입하지 않음 "비회원 대기" 상태 유지. 알림톡 3차(D+7)까지 자동 발송.
이후 수동 일괄 알림톡 발송 가능.
CRM등록 건 티켓 없음 외부 유입이라 상품 미확정 티켓번호 "-" 표시. 상품명은 "인터넷+TV (미정)" 등.
상담 진행 중 상품 확정 시 티켓번호 부여.
입력값 제한 초과 이름 50자 초과 / 메시지 2000자 초과 400 에러 반환 (server/routes/applications.js 검증)
Supabase 저장 실패 시 silent fallback: console.warn만 출력하고 로컬에 저장하여 서비스 중단 없음.
Mock 고객 DB 추가: 어드민 CRM 화면에서 즉시 확인 가능하도록 customers 배열에 unshift.
DB -- bongi_applications 테이블 구조
컬럼타입설명예시 값
iduuid PK자동 생성a1b2c3d4-...
typetext신청 유형self / ai_chat / callback / call
nametext고객명홍길동
phonetext연락처 (핵심 키)010-1234-5678
user_typetext고객 유형앱회원 / 비회원
channeltext유입 채널web / ai_chat
sync_directiontext동기화 방향어드민->CRM / CRM->어드민
product_tickettext티켓번호 (FK 참조)SK0188 / R015 / null
product_nametext상품명SKT 500M+Btv이코노미+AI NUGU+WiFi6
gift_amountinteger현금 페이백 금액 (원)430000
form_datajsonb추가 데이터{ message: "...", source: "chat_ai" }
statustext신청 상태신청완료 / 상담중 / 계약완료 / 취소 / new
created_attimestamptz생성일시2026-04-06T14:23:00Z
연관 테이블
bongi_applications
->
bongi_tickets (product_ticket -> ticket_number)
bongi_user_profiles (phone 매칭 -> 앱회원/비회원 판별)
bongi_gifts (계약완료 -> 지급대기 자동 생성)
bongi_points (앱회원 포인트 적립)
phone = 핵심 매칭 키: bongi_user_profiles.phone과 매칭하여 앱회원/비회원 자동 판별.
product_ticket: bongi_tickets.ticket_number 참조. CRM등록 건은 null.
form_data: 채팅 메시지, 콜백 희망 시간 등 자유 형식 JSON 저장.
관련 URL 및 소스 파일
구분경로설명
어드민https://bongi-mobile-production.up.railway.app/admin/10 신청현황
GitHubhttps://github.com/vinsenzo83/bongi-mobile소스코드
어드민 UIserver/public/admin/index.html (1600~1698줄)show(6) 신청현황 렌더
어드민 APIserver/routes/admin-platform.js (578~592줄)GET /applications
신청 APIserver/routes/applications.jsPOST /applications
AI 채팅server/services/chat-tools.js (814~907줄)createLead / requestCallback
마이페이지client/src/pages/my/Applications.jsx고객 신청 내역 UI
티켓 플로우docs/flow-ticket.html티켓 관리 (09번)
데이터 플로우docs/data-flow-diagram.html전체 데이터 흐름도
봉이모바일 · 신청 현황 플로우 · 2026-04-09
관련: 현금 페이백 관리(13번) / 포인트 관리(14번) / 티켓 관리(09번)