예약 규칙과 커스텀 필드
레이니에서 예약은 두 가지 질문에 답하는 구조로 설계되어 있습니다. "이 예약에서 어떤 정보를 받아야 하는가" 그리고 "이 예약을 언제, 어떤 조건에서 받을 것인가" 입니다. 앞쪽은 커스텀 필드가 담당하고, 뒤쪽은 예약 규칙(Availability Rules)이 담당합니다.
고객이 "내일 오후 보톡스 예약 가능한가요?"라고 물었을 때 AI가 정확한 시간대를 안내하고, 증상이나 담당 의료진 같은 세부 정보까지 받아 예약을 완성할 수 있는 이유가 이 두 가지 축이 맞물려 있기 때문입니다. 이 문서에서는 정보를 수집하는 쪽(커스텀 필드)을 먼저 보고, 그 다음 시간과 조건을 관리하는 쪽(예약 규칙)을 이어서 살펴봅니다.
예약에서 무엇을 받을지: 커스텀 필드
커스텀 필드는 예약 폼에 추가로 붙이는 맞춤 입력 항목입니다. 이름·연락처·날짜 같은 기본 필드 외에 병원에 필요한 정보를 자유롭게 설계할 수 있습니다. 시술 분야가 여러 개인 병원이라면 "원하시는 시술을 골라주세요"가 필요하고, 상담 중심 병원이라면 "어떤 고민으로 방문하시나요?" 같은 긴 텍스트가 필요합니다. 이런 항목을 미리 정의해 두면 고객이 한 번에 필요한 정보를 입력할 수 있고, 예약이 도착했을 때 AI와 직원이 맥락을 빠르게 파악할 수 있습니다.
9가지 입력 타입
| 타입 | 설명 | 설정 옵션 | 활용 예시 |
|---|---|---|---|
| 텍스트 | 한 줄 텍스트 입력 | 플레이스홀더 | 소개 경로, 메모 |
| 긴 텍스트 | 여러 줄 텍스트 입력 | 플레이스홀더 | 증상 메모, 요청사항 |
| 숫자 | 숫자 입력 | 최솟값·최댓값 | 방문 횟수, 인원수 |
| 셀렉트 | 드롭다운 단일 선택 | 선택지 목록 | 시술 분야, 고객 등급 |
| 엔티티 셀렉트 | 등록된 엔티티에서 선택 | 연결할 엔티티 유형 | 담당 의료진, 상품 |
| 이메일 | 이메일 주소 입력 | 플레이스홀더 | 고객 이메일 |
| 전화번호 | 전화번호 입력 | 플레이스홀더 | 비상 연락처 |
| 날짜+시간 | 날짜와 시간 선택 | 플레이스홀더 | 생년월일, 마지막 방문일 |
| 토글 | 예/아니오 스위치 | — | 마케팅 수신 동의, VIP 여부 |
저장 위치에 따른 세 종류
같은 "커스텀 필드"라도 어디에 저장되느냐에 따라 쓰임새가 다릅니다.
| 종류 | 누가 입력하나 | 어디에 저장되나 | 예시 |
|---|---|---|---|
| 예약 필드 (랜딩 표시) | 고객이 예약 시 직접 | 예약 건별 | 시술 분야, 희망 시간대, 증상 메모 |
| 예약 필드 (내부용) | 관리자가 내부에서 | 예약 건별 | 담당자 메모, 내부 분류, 우선순위 |
| 고객 필드 | 관리자 또는 기존 EMR/CRM 연동 | 고객별 누적 | 생년월일, 고객 등급, 소개 경로 |
예약 필드는 예약 건마다 새로 받는 정보입니다. "이번 방문에서 어떤 시술을 원하시나요?"가 여기에 해당합니다. 고객 필드는 한 번 기록하면 고객 프로필에 계속 남는 정보입니다. "이 고객의 생년월일"이나 "VIP 여부"가 고객 필드입니다.


조건부 표시와 필수 설정
필드끼리 연동해 표시 여부나 필수 여부를 바꿀 수 있습니다.
- "시술 분야"에서 "피부"를 고르면 "피부 타입" 필드가 나타남
- "인원수"가 4명 이상이면 "단체 예약 메모" 필드가 필수로 변경
이 조건부 로직으로 고객에게는 지금 상황에 필요한 필드만 보이고, 불필요한 입력이 줄어듭니다.
커스텀 필드가 자동 메시지로 이어진다
커스텀 필드에 저장된 값은 기록으로 끝나지 않고 워크플로우의 조건과 메시지 템플릿의 변수로 사용됩니다. 시술 종류 필드가 있으면, 시술 완료 후 자동으로 해당 시술의 사후 안내 메시지를 보낼 수 있습니다. 워크플로우는 하나지만 필드 값에 따라 다른 메시지가 나갑니다.
| 커스텀 필드 | 트리거 조건 | 자동 발송 메시지 |
|---|---|---|
| 생년월일 | 생일 당일 | 생일 축하 메시지 / 생일 쿠폰 |
| 마지막 방문일 | 6개월 경과 | 재방문 안내 |
| 시술 종류 | 시술 완료 후 | 시술별 사후 관리 안내 |
| 고객 등급 | VIP로 변경 | VIP 전용 프로모션 안내 |
| 기념일 | 기념일 당일 | 기념일 맞춤 할인·안내 메시지 |
보톡스를 시술한 고객에게 보톡스 후 주의사항이, 필러를 시술한 고객에게 필러 후 주의사항이 자동으로 나가는 것은 시술 종류가 커스텀 필드로 남아 있기 때문입니다.
예약을 언제·어떻게 받을지: 예약 규칙
어떤 정보를 받을지 정했다면, 다음 질문은 "그 예약을 언제 받을 것인가"입니다. "김 원장님은 월수금 오전만 진료하고, 하루 10명까지만 받아요"라는 머릿속 기준을 시스템이 이해할 수 있는 형태로 옮기는 역할을 예약 규칙(Availability Rules)이 합니다. 규칙이 등록되면 AI 챗봇, 홈페이지 예약 폼, 관리자 대시보드가 모두 같은 기준으로 예약 가능 시간을 계산합니다.
규칙의 구성
예약 규칙은 세 가지 요소의 조합입니다.
예약 규칙 = 규칙 종류 + 대상(누구에게 적용할지) + 조건(언제 적용할지)규칙 5종
1. allow_time: 예약 가능 시간 정의
특정 시간대만 예약을 받겠다는 규칙입니다. 가장 기본이 되는 규칙으로, 이 규칙이 없으면 시스템은 기본 영업시간(08:00~20:00)을 사용합니다.
| 설정 항목 | 설명 |
|---|---|
| 요일 | 이 시간이 허용되는 요일 |
| 시작·종료 시간 | 예약 가능 구간 (HH:MM) |
| 슬롯 간격 | 예약 단위 시간 (예: 30분) |
예시: 월수금 09:00-13:00 오전 진료, 화목 14:00-18:00 오후 진료.
2. block_time: 특정 시간 차단
원래 가능한 시간 중에서 특정 시간만 막겠다는 규칙입니다.
| 설정 항목 | 설명 |
|---|---|
| 요일 | 차단할 요일 |
| 시작·종료 시간 | 차단 구간 (없으면 하루 전체 차단) |
| 유효 기간 | 이 차단이 적용되는 날짜 범위 |
예시: 매주 화요일 12:00~13:00 점심시간 차단, 2025-03-01 하루 전체 차단(학회), 매월 셋째 주 금요일 오후 차단(정기 회의).
3. limit_capacity: 동시 예약 인원 제한
같은 시간에 받을 수 있는 예약 수를 제한합니다.
| 설정 항목 | 설명 |
|---|---|
| 최대 인원 (max_capacity) | 슬롯당 최대 예약 수 |
예시: 하루 최대 10명, 시간대별 최대 2명(진료실 2개 운영).
4. require_advance: 사전 예약 기간 제한
너무 급하게 예약하거나 너무 멀리 잡는 것을 방지합니다.
| 설정 항목 | 설명 |
|---|---|
| 최소 사전 예약 시간 (min_hours) | 최소 N시간 전에만 예약 가능 |
| 최대 사전 예약 일수 (max_days) | 최대 N일 이내만 예약 가능 |
예시: 최소 2시간 전 예약(당일 즉시 예약 방지), 최대 30일 이내 예약만 허용.
5. require_duration: 예약 시간 길이 제한
예약 단위 시간(시술 소요 시간)을 제한합니다.
| 설정 항목 | 설명 |
|---|---|
| 최소 시간 (min_minutes) | 최소 N분 이상의 예약만 허용 |
| 최대 시간 (max_minutes) | 최대 N분 이하의 예약만 허용 |
예시: 레이저 시술은 최소 30분, 최대 90분. 상담은 최소 15분, 최대 60분.
대상 범위: 누구에게 적용할지
규칙이 적용되는 범위를 4단계로 설정할 수 있습니다.
| 대상 타입 | 적용 범위 | 예시 |
|---|---|---|
all | 병원 전체 | "전체 진료는 09:00~18:00" |
entity_type | 특정 엔티티 유형 전체 | "모든 의사" |
entity | 특정 엔티티 하나 | "김 원장님만" |
field | 특정 커스텀 필드 값 | "시술 종류가 레이저인 경우만" |
여기서 field를 보면 커스텀 필드가 예약 규칙과 자연스럽게 맞물립니다. 고객이 "시술 종류"를 레이저로 고른 경우에만 적용되는 규칙을 만들 수 있고, "담당 의료진" 필드에서 특정 의사를 지정한 예약에만 특정 시간 제약을 걸 수도 있습니다.
우선순위 시스템
같은 시간에 여러 규칙이 충돌할 때, 우선순위(priority) 숫자가 낮을수록 먼저 적용됩니다.
우선순위 0 > 우선순위 10 > 우선순위 50 > 우선순위 100예시: 전체 병원에 09:00-18:00 규칙이 있고(priority: 50), 김 원장 개인 규칙이 09:00-13:00(priority: 10)이라면, 김 원장 예약에는 개인 규칙이 전체 규칙보다 우선합니다.
시간·요일·기간 조건
규칙에는 "언제" 적용할지를 추가로 설정할 수 있습니다.
| 조건 | 설명 |
|---|---|
days_of_week | 요일 배열 (0=일요일, 1=월요일 … 6=토요일) |
start_time / end_time | HH:MM 형식의 시간 범위 |
valid_from / valid_until | 이 규칙이 유효한 날짜 범위 |
예약 요청이 처리되는 흐름
커스텀 필드가 "무엇을 받을지"를 준비하고, 예약 규칙이 "언제 받을지"를 준비했다면, 실제 예약 요청이 들어왔을 때는 두 축이 함께 동작합니다.
field 대상 체크가 있기 때문에, 고객이 예약 폼에서 선택한 커스텀 필드 값이 그대로 규칙 판정에 들어옵니다. "레이저를 고른 예약은 30분 슬롯만"처럼 정보와 규칙을 동시에 묶는 예약도 자연스럽게 처리됩니다.
병원 예시: "김 원장 월수금 오전, 하루 10명"
이 한 문장을 규칙 3개로 구현합니다.
규칙 1: 김 원장 진료 가능 시간 (allow_time)
| 항목 | 설정값 |
|---|---|
| 효과 | allow_time |
| 대상 | entity → 김 원장 |
| 요일 | 월(1), 수(3), 금(5) |
| 시간 | 09:00 ~ 13:00 |
| 우선순위 | 10 |
결과: 김 원장은 월수금 오전만 예약 가능. 화·목·금 오후는 자동으로 예약 불가.
규칙 2: 하루 최대 10명 제한 (limit_capacity)
| 항목 | 설정값 |
|---|---|
| 효과 | limit_capacity |
| 대상 | entity → 김 원장 |
| 최대 인원 | 10 |
| 우선순위 | 20 |
결과: 당일 예약이 이미 10건이면 모든 시간대가 "마감"으로 표시됨.
규칙 3: 당일 즉시 예약 방지 (require_advance)
| 항목 | 설정값 |
|---|---|
| 효과 | require_advance |
| 대상 | all (병원 전체) |
| 최소 사전 예약 | 2시간 |
| 우선순위 | 50 |
결과: 지금 시각 기준 2시간 이내 슬롯은 예약 불가.
규칙 조합 결과
화요일에 김 원장 예약 시도
→ 규칙 1: 월수금만 허용 → 화요일은 예약 불가
→ 결과: 시간표 전체가 비활성
월요일 오전 11:00에 김 원장 예약 시도 (이미 10건 예약됨)
→ 규칙 1: 월요일 09:00~13:00 범위 안 → 가능 시간대
→ 규칙 2: 현재 10건 = 최대치 → 마감
→ 결과: "마감" 표시
월요일 오전 10:00 예약 시도 (현재 시각 기준 1시간 후)
→ 규칙 1, 2: 통과
→ 규칙 3: 2시간 전 예약 필요 → 차단
→ 결과: 해당 슬롯 예약 불가멀티 의료진 교차 예약
여러 의료진이 동시에 필요한 시술(예: 의사 + 간호사)은 여러 엔티티를 동시에 지정하면 두 의료진 모두 가능한 시간의 교집합만 예약 가능합니다.
entityIds: ["김원장_id", "박간호사_id"]
→ 김 원장 가능 시간 ∩ 박 간호사 가능 시간 = 예약 가능 슬롯다음 단계
- 고객 커스텀 필드: 커스텀 필드 설정 방법
- 예약 규칙 세팅: 실제 예약 규칙 세팅 방법
- 기존 EMR/CRM 연동: EMR·CRM 데이터 연동 구조