protos.open.OpenReserveCommandV2
여러 예약 일정으로 새로운 예약을 생성합니다. (신규 내원객 정보 기반)
내원객 중복 검색 정책
요청에 포함된 내원객 정보로 기존 내원객을 검색하여, 일치하는 내원객이 있으면 해당 내원객으로 예약을 생성합니다. 일치하는 내원객이 없으면 새로운 내원객을 생성한 후 예약을 생성합니다.
중복 검색은 다음 조건들을 우선순위 순서대로 확인하며, 먼저 일치하는 조건이 있으면 해당 내원객을 사용합니다:
| 우선순위 | 검색 조건 |
|---|---|
| 1 | visitorName + visitorPhone |
| 2 | visitorPassportNumber |
| 3 | visitorSnsInfo |
| 4 | visitorEmail |
| 5 | visitorName + visitorBirthDayUtc |
참고: 각 조건은 독립적으로 검색되며, 모든 필드가 AND로 결합되지 않습니다.
내원객 이름
visitorPhone object
내원객 전화번호
국제전화 국가 번호 예: 82, 81, 1, 44 ... 참고
전화번호 예: 10123456789
내원객 이메일
내원객 국적 (ISO 3166-1 alpha-2)
내원객 언어 지원 목록: ko, ja, en, zh-CN, zh-yue, es, th, ru, id, ms, vi, mn, uz, nl, de, pt, etc
내원객 생년월일
visitorSnsInfo object
내원객 SNS 정보
Possible values: [etc, kakaotalk, line, instagram, whatsapp, wechat]
내원객 여권번호
내원객 여권 영문 성
내원객 여권 영문 이름
접수 구역 ID (내원객이 방문할 구역)
occupiedResources object[]required
예약 일정 목록
점유 시작 시각 (UTC ISO 8601)
점유 종료 시각 (UTC ISO 8601)
reservationGroup object
예약 그룹 기반 리소스 점유 설정
예약 그룹 ID
점유할 구역 ID
doctor object
리소스 담당 의사
계정 ID
계정 이름
상담 필요 여부
수면 마취 필요 여부
상세 유입 경로
requestedProcedures object[]
희망 시술 목록
요청 시술 유형 (OPTION: 상품 옵션, TICKET: 시술권)
Possible values: [RESERVATION_REQUESTED_PROCEDURE_TYPE_UNSPECIFIED, OPTION, TICKET]
optionConfiguration object
상품 옵션 설정 (type이 OPTION인 경우)
상품 옵션 ID
상품 옵션 이름
상품 이름
프로모션 이름
price objectrequired
가격 정보
reason object
Possible values: [RESERVATION_REQUESTED_OPTION_PRICE_REASON_TYPE_UNSPECIFIED, GENERAL, PROMOTION, VISITOR_TYPE]
medicalService object
진료 항목
translsMap object
다국어 지원대상 필드
- title
property name* protos.Transls
translation object
Possible values: [MedicalServiceStatus_UNKNOWN, DRAFT, PUBLISHED]
configuration object
procedure object
백엔드 내부에서 검색을 위해 존재하는 필드
machines object[]
백엔드 내부에서 검색을 위해 존재하는 필드
medicines object[]
백엔드 내부에서 검색을 위해 존재하는 필드
unit object
Possible values: [UnitType_UNKNOWN, UNIT, CC, VIAL, PEN, STRING, SHOT, PAD, MINUTE, KJ, QUANTITY, DOT, J, MG, G, PULSE, BOTTLE, SYRINGE, PASS, IU, KHZ, MHZ]
Possible values: [HealthcareReimbursement_UNKNOWN, REIMBURSABLE, NON_REIMBURSABLE]
Possible values: [Taxation_UNKNOWN, TAXABLE, TAX_FREE, MIXED]
priceAmount object
ticketConfiguration object
시술권 설정 (type이 TICKET인 경우)
시술권 ID
시술권 이름
옵션 이름
medicalService object
진료 항목
translsMap object
다국어 지원대상 필드
- title
property name* protos.Transls
translation object
Possible values: [MedicalServiceStatus_UNKNOWN, DRAFT, PUBLISHED]
configuration object
procedure object
백엔드 내부에서 검색을 위해 존재하는 필드
machines object[]
백엔드 내부에서 검색을 위해 존재하는 필드
medicines object[]
백엔드 내부에서 검색을 위해 존재하는 필드
unit object
Possible values: [UnitType_UNKNOWN, UNIT, CC, VIAL, PEN, STRING, SHOT, PAD, MINUTE, KJ, QUANTITY, DOT, J, MG, G, PULSE, BOTTLE, SYRINGE, PASS, IU, KHZ, MHZ]
Possible values: [HealthcareReimbursement_UNKNOWN, REIMBURSABLE, NON_REIMBURSABLE]
Possible values: [Taxation_UNKNOWN, TAXABLE, TAX_FREE, MIXED]
priceAmount object
예약 메모
{
"visitorName": "string",
"visitorPhone": {
"countryCode": "string",
"phoneNumber": "string"
},
"visitorEmail": "user@example.com",
"visitorNationality": "string",
"visitorLanguage": "string",
"visitorBirthDayUtc": "2024-07-29T15:51:28.071Z",
"visitorSnsInfo": {
"snsType": "etc",
"accountId": "string"
},
"visitorPassportNumber": "string",
"visitorPassportSurname": "string",
"visitorPassportGivenNames": "string",
"zoneId": "string",
"occupiedResources": [
{
"startDateTimeUtc": "2024-07-29T15:51:28.071Z",
"endDateTimeUtc": "2024-07-29T15:51:28.071Z",
"reservationGroup": {
"reservationGroupId": "string",
"zoneId": "string",
"doctor": {
"id": "string",
"name": "string"
}
}
}
],
"consultationRequired": true,
"sedationRequired": true,
"funnelDetail": "string",
"requestedProcedures": [
{
"type": "RESERVATION_REQUESTED_PROCEDURE_TYPE_UNSPECIFIED",
"optionConfiguration": {
"optionId": "string",
"optionTitle": "string",
"productTitle": "string",
"promotionTitle": "string",
"price": {
"amount": 0,
"currency": "string",
"reason": {
"type": "RESERVATION_REQUESTED_OPTION_PRICE_REASON_TYPE_UNSPECIFIED",
"promotionId": "string",
"visitorTypeId": "string"
}
},
"medicalService": {
"id": "string",
"title": "string",
"translsMap": {},
"status": "MedicalServiceStatus_UNKNOWN",
"deleted": true,
"configuration": {
"code": "string",
"procedure": {
"id": "string",
"name": "string",
"searchPhoneticName": "string"
},
"machines": [
{
"id": "string",
"name": "string",
"searchPhoneticName": "string"
}
],
"medicines": [
{
"id": "string",
"name": "string",
"searchPhoneticName": "string"
}
],
"unit": {
"type": "UnitType_UNKNOWN",
"value": 0
},
"healthcareReimbursement": "HealthcareReimbursement_UNKNOWN",
"taxation": "Taxation_UNKNOWN"
},
"draftedDateTimeUtc": "string",
"updatedDateTimeUtc": "string",
"priceAmount": {
"value": 0,
"currency": "string"
},
"description": "string",
"caution": "string",
"recommendedInterval": 0,
"contributionConstant": 0,
"durationTime": 0
}
},
"ticketConfiguration": {
"ticketId": "string",
"ticketTitle": "string",
"optionTitle": "string",
"medicalService": {
"id": "string",
"title": "string",
"translsMap": {},
"status": "MedicalServiceStatus_UNKNOWN",
"deleted": true,
"configuration": {
"code": "string",
"procedure": {
"id": "string",
"name": "string",
"searchPhoneticName": "string"
},
"machines": [
{
"id": "string",
"name": "string",
"searchPhoneticName": "string"
}
],
"medicines": [
{
"id": "string",
"name": "string",
"searchPhoneticName": "string"
}
],
"unit": {
"type": "UnitType_UNKNOWN",
"value": 0
},
"healthcareReimbursement": "HealthcareReimbursement_UNKNOWN",
"taxation": "Taxation_UNKNOWN"
},
"draftedDateTimeUtc": "string",
"updatedDateTimeUtc": "string",
"priceAmount": {
"value": 0,
"currency": "string"
},
"description": "string",
"caution": "string",
"recommendedInterval": 0,
"contributionConstant": 0,
"durationTime": 0
}
}
}
],
"reservationMemo": "string"
}