예 약 관련 질문
‘예약 문의’ 기능을 통해 여행객에 대한 추가 정보를 손쉽게 수집할 수 있습니다.
얼리 액세스 미리보기
이 문서는 선별된 파트너만을 대상으로 하는 얼리 액세스 미리보기 프로그램의 일부입니다. 베타 프로그램은 2026년 3분기에 시작되며, 2027년에 정식 출시될 예정입니다.
베타 파트너가 되는 데 관심이 있으시면 담당 계정 관리자에게 문의해 주시기 바랍니다.
개요
예약 문의 기능을 통해 여행자 관련 추가 정보(e.g. 신장, 체중, 여행 서류 정보, 식단 제한 사항 등)를 유연하고 type-safe 방식으로 수집할 수 있습니다.
주요 장점
- 유연성: API 버전 관리 없이 새로운 데이터 유형 추가
- Type-safe: JSON 스키마는 올바른 구조를 보장합니다
- 검색 가능: 카탈로그 엔드포인트를 통해 사용 가능한 유형을 조회할 수 있는 기능
- 필터 적용: 후원할 수 있는 활동만 표시됩니다.
- 현지화: Questions는 여러 언어를 지원합니다
문서 용어집
- 솔루션 아키텍처
핵심 개념, 일반 데이터 유형 모델, 활동 요구사항, 파트너 역량 및 구조화된 답변 제출. - API 엔드포인트
예약 관련 질문을 제공하는 데이터 유형 카탈로그, 활동 필터링 및 가격 확인 엔드포인트입니다. - 조건부 질문
부모/자식 질문의 작동 방식과 표시/숨기기 논리를 제어하는 연산자. - 통합 흐름
End-to-end 는 잠재 고객 발굴부터 예약 제출에 이르는 단계별 과정을 안내합니다. - 데이터 유형 예시
스키마 정의와 답변 구조를 보여주는 데이터 유형 예시입니다. - 현지화
ID를 고정된 상태로 유지하면서 질문과 선택지를 여러 언어로 반환하는 방법. - 유 효성 검사
Client-side 및 server-side 유효성 검사 규칙과 오류 응답 형식.
솔루션 아키텍처
핵심 개념
일반 데이터 유형 모델
재사용 가능한 데이터 유형 모델은 정보의 범주를 나타내며(필요에 따라 더 추가할 수 있음), e.g. 측정값, 선택 항목, 주소 및 전화번호 등이 포함됩니다.
data-types 의 전체 카탈로그를 보시려면 다음 번호로 전화해 주십시오. GET /experiences/booking-questions/data-types
활동 요건
활동은 예약 질문을 통해 필요한 데이터 유형을 명시하며, 다음 사항을 지정합니다:
- 해당 문제에 대한 고유한 문자열 ID
- 질문 내용 (현지화됨)
- 질문 본문 설명 (현지화됨)
- 데이터 유형 참조
- per-traveler 를 적용하든, 아니면 per-booking
- 유효성 검사 제약 조건(최소/최대값, 길이 등)
- 어떤 티켓에 적용되는지
- 지정된 상위 질문에 대한 하위 질문을 정의합니다.
- 선택적 조건부 논리 (다른 답변에 따라 달라지는 질문)
파트너 역량
검색/콘텐츠 엔드포인트에서 supported_booking_data_types 필터 매개변수를 사용하여 지원하는 데이터 유형을 지정합니다. 이렇게 하면 처리할 수 있는 활동만 표시되도록 필터링됩니다.
- 를 처리하려면 유형을 동적으로 처리하려면
supported_booking_data_types=*를 전송하십시오. - 를 후원하시려면, 예약 관련 문의는
supported_booking_data_types=none으로 보내주십시오.
정형화된 답변 제출
답변이 적절하게 중첩되어 있습니다:
- Per-traveler 답변: — 각 여행자 객체의
booking_question_answers배열에 있습니다. - Per-booking 답변: — 예약 단위의
booking_question_answers배열에서 확인할 수 있습니다.
API 엔드포인트
데이터 유형 카탈로그 가져오기
종점: GET /experiences/booking-questions/data-types
쿼리 매개변수: ?date_updated_start
목적: 사용 가능한 모든 데이터 유형 모델에 대한 기술 참조 카탈로그를 반환합니다.
요청 예:
GET /experiences/booking-questions/data-types응답 예:
[
{
"date_added": "2026-07-14T11:30:08.104575+02:00",
"date_updated": "2026-07-14T11:30:08.104575+02:00",
"description": "Used for collecting any measurement with a numeric value and unit. Common examples include height (in/cm/foot/meter), weight (lb/kg/stone), shoe size (us_men/us_women/eu/uk/cm), helmet size (in/cm), waist size (in/cm), and chest size (in/cm). The allowed_units field specifies which units are valid for this measurement.",
"name": "Measurement",
"schema_definition": {
"properties": {
"unit": {
"description": "Unit of measurement - must be one of the allowed_options specified for the question",
"type": "string"
},
"value": {
"description": "Numeric value as string to preserve precision",
"pattern": "^[0-9]+(\\.[0-9]+)?$",
"type": "string"
}
},
"required": [
"value",
"unit"
],
"type": "object"
},
"type": "measurement"
},
]활동 필터링
쿼리 매개변수: supported_booking_data_types
적용 대상: /experiences/activities/content 및 /experiences/activities/availability엔드포인트
목적: 지정된 데이터 유형을 사용하는 필수 질문이 포함된 활동만 결과에 포함되도록 필터링합니다.
예시:
GET /experiences/activities/content
?activity_id=123&activity_id=456
&language=en-US
&supported_booking_data_types=measurement
&supported_booking_data_types=selection
&supported_booking_data_types=text- 모든 유형을 처리하고 모든 활동을 표시하려면
supported_booking_data_types=*를 사용하세요. 그 러면 귀하는 ‘가격 확인 및 예약’ 단계에서 모든 유형의 문의를 처리할 책임이 있습니다. - 예약과 관련 없는 문의 사항은
supported_booking_data_types=none을 이용해 주십시오. 이렇게 하면 예약 관련 질문이 없는 활동만 반환됩니다.
가격 확인 (예약 관련 질문 포함)
종점: GET /experiences/activities/{activity_id}/price-check
목적: 해당 활동에 대한 가격을 확인하고, 예약 관련 문의 사항(있는 경우)을 반환합니다.
요청 예:
GET /experiences/activities/12345/price-check?token=abc123&tickets=...응답 예:
{
"status": "available",
"offer_pricing": {
"total": {
"value": "150.00",
"currency": "USD"
}
},
"booking_questions": [
{
"id": "height_1",
"type": "measurement",
"question": "What is your height?",
"description": "Required for safety equipment fitting",
"applies_to": "per_traveler",
"ticket_ids": ["12346","12345"]
"allowed_options": [
{ "id": "in", "label": "in" },
{ "id": "cm", "label": "cm" }
]
},
{
"id": "weight_1",
"type": "measurement",
"question": "What is your weight?",
"description": "Required for zipline weight limits",
"applies_to": "per_traveler",
"ticket_ids": ["12346","12345"]
"allowed_options": [
{ "id": "lb", "label": "lb" },
{ "id": "kg", "label": "kg" }
]
}
],
"links": {
"create": {
"method": "POST",
"href": "/itineraries/activity"
}
}
}참고: 이전 검색/콘텐츠 호출에서 supported_booking_data_types를 사용하여 활동을 필터링한 경우, 반환된 모든 질문은 귀하가 지원하는 데이터 유형을 사용합니다.
조건문 질문
질문은 이전 질문에 대한 답변에 따라 조건부로 달라질 수 있습니다. 이는 사용자의 선택에 따라 다양한 정보를 수집하는 데 유용합니다.
작동 방식
- 상위 질문 — 그 답변에 따라 이후 내용이 결정되는 질문(일반적으로 ‘
selection’ 유형). - 자식 쿼리 — 부모를 참조하는 ‘
conditional’ 필드가 포함된 쿼리. - 양방향 관계 — 부모 노드는
children배열에 자식 노드 들을 나열하며, 자식 노드들은 완전한 조건부 논리를 통해 부모 노드를 참조합니다.
예시: 연락 방법 선택
부모님의 질문:
{
"id": "contact_method_1",
"type": "selection",
"question": "How would you prefer to be contacted?",
"applies_to": "per_traveler",
"ticket_ids": ["12346","12345"]
"children": ["contact_phone_1", "contact_whatsapp_1", "contact_email_1"],
"allow_multiple": false,
"allowed_options": [
{ "id": "phone", "label": "Phone Call" },
{ "id": "whatsapp", "label": "WhatsApp" },
{ "id": "email", "label": "Email" },
{ "id": "no_contact", "label": "No Contact" }
]
}조건부 하위 질문:
[
{
"id": "contact_phone_1",
"type": "phone",
"question": "What is your phone number?",
"applies_to": "per_traveler",
"conditional": {
"parent_question_id": "contact_method_1",
"show_when": {
"operator": "equals",
"field": "selected",
"values": ["phone"]
}
}
},
{
"id": "contact_whatsapp_1",
"type": "text",
"question": "What is your WhatsApp username?",
"applies_to": "per_traveler",
"conditional": {
"parent_question_id": "contact_method_1",
"show_when": {
"operator": "equals",
"field": "selected",
"values": ["whatsapp"]
}
}
},
{
"id": "contact_email_1",
"type": "email",
"question": "What is your email address?",
"applies_to": "per_traveler",
"conditional": {
"parent_question_id": "contact_method_1",
"show_when": {
"operator": "equals",
"field": "selected",
"values": ["email"]
}
}
}
]조건 연산자
| 운영자 | 의미 |
|---|---|
contains | 해당 필드에 지정된 값 중 하나가 포함되어 있습니다 |
equals | 해당 필드가 지정된 값 중 하나와 정확히 일치합니다. |
not_contains | 해당 필드에는 지정된 값이 하나도 포함되어 있지 않습니다. |
not_equals | 해당 필드가 지정된 값 중 어느 것과도 일치하지 않습니다. |