제품 피드는 Google에 사물 목록을 제공하는 기본적인 방법입니다. 제품을 개발하고 있습니다.
ProductFeed
객체는 단일 FeedMetadata
객체로 구성됩니다.
0개 이상의 Product
객체 모든 샤드에 Product
가 제공되지 않으면
모든 제품이 삭제됩니다
ProductFeed
Proto
message ProductFeed {
// Metadata for this feed.
// Required.
FeedMetadata feed_metadata = 1;
// List of the products.
// Optional. When unset in all shards, all products will be deleted.
repeated Product products = 2;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
FeedMetadata | feed_metadata | 필수사항입니다. 이 피드의 메타데이터입니다. |
반복 제품 |
제품 | 선택사항. 모든 샤드에서 설정하지 않으면 제품이 삭제됩니다 feed_metadata/max_removal_share
다수의 제품이 삭제될 때 를 설정해야 할 수 있습니다. |
예
// Example 1: Basic structure
{
"feed_metadata": {
...
},
"products": [
...
]
}
// Example 2: Wipe all products
{
"feed_metadata": {
"shard_id": 0,
"total_shards_count": 1,
"processing_instruction": "PROCESS_AS_SNAPSHOT",
"nonce": 202113041501,
"max_removal_share": 1.0
},
"products": []
}
FeedMetadata
Proto
message FeedMetadata {
// The current shard ID, zero-based. Shards do not need to be transferred in
// order. Processing will start only after a full set of shards was uploaded.
// Required when total_shards_count > 1.
uint32 shard_id = 1;
// Total number of shards in this transfer.
// Required. Must be >= 1.
uint32 total_shards_count = 2;
// An arbitrary number used to link multiple shards to the same transfer.
// Required when total_shards_count > 1.
// Must be the same for all shards within the transfer.
uint64 nonce = 3;
enum ProcessingInstruction {
// For compatibility, don't use.
PROCESS_AS_UNSPECIFIED = 0;
// This Feed upload should be processed as a complete snapshot replacing any
// previously uploaded data of this type.
// Supported feed types: product.
PROCESS_AS_SNAPSHOT = 1;
// This Feed upload should be processed as an upsert, updating or adding
// data to the previous uploads. Supported feed types: reviews,
// availability.
PROCESS_AS_UPSERT = 2;
}
// Processing instruction for this upload.
// Required.
ProcessingInstruction processing_instruction = 4;
// Maximal share of currently active products that are allowed to be removed
// by an upload. If more products will be removed by this transfer, the whole
// transfer will be rejected.
// This is a safeguard against unintentional take down of a significant part
// of the inventory. Can be set to 1.0 to allow complete inventory take down.
// Optional.
double max_removal_share = 5;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
uint32 | shard_id | total_shards_count 인 경우 필수사항입니다(REQUIRED). 1.0 기반. 샤드는 순서대로 전송할 필요가 없습니다. 처리 시작 전체 샤드 세트가 업로드된 후에만 |
uint32 | total_shards_count | 필수사항이며 1 이상이어야 합니다. |
uint64 | nonce | total_shards_count 인 경우 필수사항입니다(REQUIRED). 1.전송 내의 모든 샤드에 대해 동일해야 합니다. |
enum | processing_instruction | 필수 항목입니다.PROCESS_AS_SNAPSHOT 이 유일한 값입니다.
지원됩니다.
|
double | max_removal_share | 선택사항. 다음과 같은 활성 제품의 최대 점유율입니다. 있습니다. 더 많은 제품이 삭제되는 경우 전체 전송이 거부됩니다. 이것은 상당량의 콘텐츠가 의도치 않게 게시 중단되는 것을 있습니다. 전체 인벤토리 게시 중단을 허용하도록 1.0으로 설정할 수 있습니다. |
예
// Example 1: metadata single JSON file
{
"shard_id": 0,
"total_shards_count": 1,
"processing_instruction": "PROCESS_AS_SNAPSHOT",
"nonce": 202113041501
}
// Example 2a: two JSON files (1st file)
{
"shard_id": 0,
"total_shards_count": 2,
"processing_instruction": "PROCESS_AS_SNAPSHOT",
"nonce": 202213041502
}
// Example 2b: two JSON files (2nd file)
{
"shard_id": 1,
"total_shards_count": 2,
"processing_instruction": "PROCESS_AS_SNAPSHOT",
"nonce": 202213041502
}
제품
Proto
message Product {
// An opaque string from the partner which uniquely identifies the product.
// Allowed characters are alphanumeric, _, and -. Max length: 255.
// Required.
string id = 1;
// The title of the product in plain text, e.g. "Horseback riding on the
// moon". See definition of "LocalizedTextSet" message for the details on the
// localization.
// Recommended to not exceed length of 50 in any language. Max length: 150.
// Required.
LocalizedTextSet title = 2;
// The description of the product. Limited formatting options are allowed in
// the HTML format. Supported tags:
// * h1-h5
// * ul, ol, li
// * strong, italic, em
// * p, br
// Other tags are not supported and will be removed. CSS, tables, style
// property, `a` links are not supported. Images are not allowed, use the
// related_media field instead.
// Important notes:
// * Try not to use other tags except for the supported ones mentioned
// above, because the contents within unsupported tags will be stripped,
// and may lead to an undesirable user experience.
// * Try avoid deep nested structures like more than 3 different heading
// levels or nested lists. Keeping the structure flat, simple, and
// straightforward, helps to create a better user experience.
// * Do not duplicate info from the product_features field below in the
// description as both would normally be shown side by side.
// Recommended to not exceed length of 10000 in any language. Max length:
// 16000.
// Recommended.
LocalizedTextSet description = 3;
// Structured details about the product features.
// Max number of features: 100.
// Recommended.
repeated TextFeature product_features = 4;
// Aggregated product rating.
// Recommended.
Rating rating = 5;
// Related media such as photos or videos.
// Max number of media: 30.
// Recommended.
repeated Media related_media = 6;
// Whether Google should make use of the order in which related media are
// listed in the feed or not. The media order would be used to influence
// the final image order for the product in the UI.
// Optional, default is false.
bool use_media_order = 13;
// Options available for this product.
// Max number of options: 20.
// At least one is required.
repeated Option options = 7;
// Operator details.
// Optional.
Operator operator = 8;
// Inventory type of this product.
enum InventoryType {
// Default inventory type.
INVENTORY_TYPE_DEFAULT = 0;
// Product is an official ticket to a point of interest. To learn what
// qualifies as official inventory, refer to the policy doc.
INVENTORY_TYPE_OFFICIAL = 1;
// Product is coming directly from the operator or their official
// Connectivity Provider / ResTech.
INVENTORY_TYPE_OPERATOR_DIRECT = 2;
}
// Optional.
InventoryType inventory_type = 9;
// Should contain only distinct values of InventoryType.
// Max number of inventory types: 2.
// Optional.
repeated InventoryType inventory_types = 12;
// Confirmation type of this product.
enum ConfirmationType {
// Type of confirmation is unknown.
CONFIRMATION_TYPE_UNKNOWN = 0;
// Booking is confirmed to the end user immediately.
CONFIRMATION_TYPE_INSTANT = 1;
// Booking is confirmed to the end user within 24 hours.
CONFIRMATION_TYPE_24HRS = 2;
// Booking is confirmed to the end user within 48 hours.
CONFIRMATION_TYPE_48HRS = 3;
}
// Optional.
ConfirmationType confirmation_type = 10;
// Possible fulfillment types -- ways to obtain a document to confirm the
// booking. Combinations are possible, e.g. mobile + printed, or
// printed at home + in-person pickup is available.
// At least one field must be true.
message FulfillmentType {
// Confirmation on a mobile phone, e.g. with a QR code.
bool mobile = 1;
// Printable confirmation.
bool print_at_home = 2;
// Admission documents to be picked up in person.
bool pickup = 3;
}
// Recommended.
FulfillmentType fulfillment_type = 11;
// Provider brand name.
// Recommended to not exceed length of 50 in any language.
// Max length: 100.
// Optional.
LocalizedTextSet brand_name = 14;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | id | 필수사항입니다(영문 기준), 최대 길이 255자(영문 기준) 있습니다. 허용되는 문자는 영숫자, _, -입니다. |
LocalizedTextSet | 제목 | 필수사항(REQUIRED), 권장 길이 <= 50, 최대 길이 150자(영문 기준) 자세한 내용은 제목 및 설명 가이드라인을 참고하세요. |
LocalizedTextSet | 설명 | 권장(권장), 길이 <= 10,000, 최대 길이 16,000자(영문 기준) 자세한 내용은 제목 및 설명 가이드라인을 참고하세요. |
repeated TextFeature |
product_features | 권장, 최대 기능 수: 100개. |
평점 | 평가 | 권장사항입니다. 평점을 표시하는 제품은 클릭률이 높아지므로 평점을 제공하는 것이 좋습니다. |
repeated Media |
related_media | 권장, 최대 미디어 수: 30 이미지를 2개 이상 제공하는 것이 좋습니다. 이미지에 관한 자세한 가이드는 이미지 가이드라인을 참고하세요. |
부울 | use_media_order | 선택사항 표시할 이미지를 선택할 때 피드에 관련 미디어가 나열되는 순서를 고려해야 함을 Google에 알립니다. |
repeated Option |
옵션 | 필수, 최대 옵션 수: 20개 각 제품에는 제품 옵션이 하나 이상 있어야 합니다. |
연산자 | 연산자 | 선택사항입니다. |
enum | deprecated inventory_type |
선택사항입니다.INVENTORY_TYPE_OFFICIAL 은(는) 해당 장소의 공식 티켓 사이트로 연결되는 제품에만 설정할 수 있습니다.
있습니다. 이 값을 설정하는 기능은 자격요건 검토가 완료된 후에만 사용 설정됩니다. 이 필드는 지원 중단되었으며 새로운 반복 필드 Inventory_types로 대체되었습니다. |
repeated | inventory_types | 선택사항입니다. 이 제품이 속한 고유한 인벤토리 유형의 반복되는 목록입니다. INVENTORY_TYPE_OFFICIAL 은(는) 해당 장소의 공식 티켓 사이트로 연결되는 제품에만 설정할 수 있습니다.
있습니다. 이 값을 설정하는 기능은 자격요건 검토가 완료된 후에만 사용 설정됩니다. INVENTORY_TYPE_OPERATOR_DIRECT 는 관광업체 사이트로 연결되는 제품에만 설정할 수 있습니다.
이 값을 설정하는 기능은 자격요건 검토가 완료된 후에만 사용 설정됩니다. |
enum | confirmation_type | 선택사항입니다. |
FulfillmentType | fulfillment_type | 권장사항입니다. 설정할 경우 fulfillment_rype 의 필드 중 하나 이상이 true여야 합니다.예약을 확인하기 위한 문서를 가져오는 방법을 설정합니다. 조합은 가능(예: 모바일 + 인쇄, 집에서 인쇄 + 방문 수령) 을(를) 사용할 수 있습니다. |
LocalizedTextSet | brand_name | 최대 길이는 100자(영문 기준)입니다. 제품에 표시되어야 하는 브랜드 이름으로, 현재 지원 중단된 제품을 대체합니다. `operator/name` 두 값 중 하나만 설정할 수 있습니다. |
예
{
"id": "product-1",
"title": {
"localized_texts": [
{
"language_code": "en",
"text": "Dans bike tour"
},
{
"language_code": "es",
"text": "Tour en bicicleta por Dans"
},
{
"language_code": "zh-HK",
"text": "丹斯自行車之旅"
}
]
},
"description": {
"localized_texts": [
{
"language_code": "en",
"text": "<p>A very fun bike tour<p>"
},
{
"language_code": "es",
"text": "<p>Un recorrido en bicicleta muy divertido.</p>"
},
{
"language_code": "zh-HK",
"text": "<p>一個非常有趣的自行車之旅.</p>"
}
]
},
"brand_name": {
"localized_texts": [
{
"language_code": "en",
"text": "Dans Bikes"
}
]
},
"rating": {
"average_value": 4.6,
"rating_count": 192
},
"product_features": [{
"feature_type": "TEXT_FEATURE_INCLUSION",
"value": {
"localized_texts": [
{
"language_code": "en",
"text": "<p>A very fun bike tour<p>"
},
{
"language_code": "es",
"text": "<p>Un recorrido en bicicleta muy divertido.</p>"
},
{
"language_code": "zh-HK",
"text": "<p>一個非常有趣的自行車之旅.</p>"
}
]
}
},{
"feature_type": "TEXT_FEATURE_HIGHLIGHT",
"value": {
"localized_texts": [
{
"language_code": "en",
"text": "<p>A very fun bike tour<p>"
},
{
"language_code": "es",
"text": "<p>Un recorrido en bicicleta muy divertido.</p>"
},
{
"language_code": "zh-HK",
"text": "<p>一個非常有趣的自行車之旅.</p>"
}
]
}
},{
"feature_type": "TEXT_FEATURE_MUST_KNOW",
"value": {
"localized_texts": [
{
"language_code": "en",
"text": "<p>A very fun bike tour<p>"
},
{
"language_code": "es",
"text": "<p>Un recorrido en bicicleta muy divertido.</p>"
},
{
"language_code": "zh-HK",
"text": "<p>一個非常有趣的自行車之旅.</p>"
}
]
}
}],
"options": [{
"id": "option-1",
"title": {
"localized_texts": [
{
"language_code": "en",
"text": "Sunset tour"
},
{
"language_code": "es",
"text": "Tour al atardecer"
},
{
"language_code": "zh-HK",
"text": "日落之旅"
}
]
},
"landing_page": {
"url": "https://www.danstour.com/sunset?language={lang}¤cy={currency}"
},
"cancellation_policy": {
"refund_conditions": [
{
"min_duration_before_start_time_sec": 86400,
"refund_percent": 100
}
]
},
"option_categories": [
{
"label": "sports"
},
{
"label": "bike-tours"
}
],
"related_locations": [
{
"location": {
"location": {
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
}
},
"relation_type": "RELATION_TYPE_RELATED_NO_ADMISSION"
},
{
"location": {
"location": {
"lat_lng": {
"latitude": 53.339688,
"longitude": 6.236688
}
}
},
"relation_type": "RELATION_TYPE_RELATED_NO_ADMISSION"
}
],
"price_options": [
{
"id": "option-1-adult",
"title": "Adult (14+)",
"price": {
"currency_code": "EUR",
"units": 20
},
"fees_and_taxes": {
"per_ticket_fee": {
"currency_code": "EUR",
"units": 1
},
"per_ticket_tax": {
"currency_code": "EUR",
"units": 1
}
}
}
]},{
"id": "option-2",
"title": {
"localized_texts": [
{
"language_code": "en",
"text": "Sunrise tour"
},
{
"language_code": "es",
"text": "Tour al amanecer"
},
{
"language_code": "zh-HK",
"text": "日出之旅"
}
]
},
"landing_page": {
"url": "https://www.danstour.com/sunrise?language={lang}¤cy={currency}"
},
"cancellation_policy": {
"refund_conditions": [
{
"min_duration_before_start_time_sec": 86400,
"refund_percent": 100
}
]
},
"option_categories": [
{
"label": "sports"
},
{
"label": "bike-tours"
}
],
"related_locations": [
{
"location": {
"location": {
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
}
},
"relation_type": "RELATION_TYPE_RELATED_NO_ADMISSION"
}
],
"price_options": [
{
"id": "option-2-adult",
"title": "Adult (14+)",
"price": {
"currency_code": "EUR",
"units": 20,
"nanos": 0
}
}
],
"meeting_point": {
"location": {
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
},
"description": {
"localized_texts": [
{
"language_code": "en",
"text": "Sunrise tour"
},
{
"language_code": "es",
"text": "Tour al amanecer"
},
{
"language_code": "zh-HK",
"text": "日出之旅"
}
]
}
}
}
],
"related_media": [
{
"url": "http://www.danstour.com/photo1.jpg",
"type": "MEDIA_TYPE_PHOTO"
},
{
"url": "http://www.danstour.com/photo2.jpg",
"type": "MEDIA_TYPE_PHOTO",
"attribution": {
"localized_texts": [
{
"language_code": "en",
"text": "Dans Photos"
}
]
}
}
],
"operator": {
"name": {
"localized_texts": [
{
"language_code": "en",
"text": "Dans Bikes"
}
]
},
"phone_number": "01234567",
"locations": [{
"location": {
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
}
}]
},
"inventory_types": ["INVENTORY_TYPE_OPERATOR_DIRECT"]
}
옵션
Proto
message Option {
// Option ID. Must be unique within a product.
// Required.
string id = 1;
// The title of the option in plain text, e.g. "Sunset tour".
//
// If there is only a single option, the option title may be the same as the
// product title. If multiple product options are presented, the title must be
// unique to the option.
// Recommended to not exceed length of 50 in any language.
// Max length: 150.
// Required.
LocalizedTextSet title = 2;
// The description of the option. Limited formatting options are allowed in
// the HTML format, see product description field for more details.
// Recommended to not exceed length of 10000 in any language.
// Max length: 16000.
// Recommended.
LocalizedTextSet description = 3;
// Landing page URL for this option. The page should include a button to start
// the booking/checkout flow.
// Required.
DeepLink landing_page = 5;
// Link to a list view at a higher level of available tickets and tours,
// prominently showing this option possibly among other options.
// Recommended.
DeepLink landing_page_list_view = 6;
// Additional structured details about the option features. Should not
// duplicate the details from the product level.
// Max number of features: 100.
// Optional.
repeated TextFeature option_features = 7;
// Cancellation policy for this option.
// Recommended.
CancellationPolicy cancellation_policy = 8;
// Relevant categories for this Option. Refer to the documentation for valid
// and mutually exclusive values.
// Max number of categories: 100.
// Optional.
repeated Category option_categories = 9;
// List of locations related to this option.
// Max number of locations: 100.
// Recommended.
repeated RelatedLocation related_locations = 10;
// If true, the option is a *typical ticket* that a user would expect to buy
// to participate in the experience, whether it's an attraction admission or
// a slot in a tour.
// Optional, default is false.
bool base_ticket = 11;
// All possible prices for this option.
// Note: With Feed Spec v1 only single Adult price is supported. If multiple
// price options were provided, the lowest price, possibly with notion
// "from ..." would be displayed.
// At least one is required.
repeated PriceOption price_options = 12;
// Duration of the option in seconds, where applicable, e.g. for guided tours,
// boat trips etc. This should reflect the duration of experience (not
// validity time).
// Optional.
uint32 duration_sec = 16;
// Languages of the option. Only where relevant -- when it's important for
// the end user to understand and/or read in the language to enjoy the
// experience. E.g. relevant for a guided tour, but not for a mini-golf pass.
// Max number of languages: 100.
// Recommended.
repeated Language languages = 14;
// Meeting point -- the start location. Only add where relevant and
// beneficial, e.g. the place where participant will meet the tour guide to
// start a walking tour, the place where participant will be picked up for a
// city tour, the dock where a cruise trip will start.
// Optional.
Location meeting_point = 15;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | id | 필수사항입니다. 옵션 ID. 제품 내에서 고유해야 합니다. |
LocalizedTextSet | 제목 | 필수, 권장 길이: 50자, 최대 길이: 150자(영문 기준) 옵션이 하나뿐인 경우 옵션 제목은 제품명과 동일할 수 있습니다. 여러 개의 제품 옵션이 표시되는 경우 제목은 옵션별로 고유해야 합니다. 자세한 내용은 제목 및 설명 가이드라인을 참고하세요. |
LocalizedTextSet | 설명 | 권장, 권장 길이: 10,000자(영문 기준), 최대 길이: 16,000자(영문 기준) 자세한 내용은 제목 및 설명 가이드라인을 참고하세요. |
DeepLink | landing_page | 필수사항입니다. 제품을 예약할 수 있는 버튼이나 링크를 포함해야 합니다. 자세한 내용은 방문 페이지 가이드라인을 참고하세요. |
DeepLink | landing_page_list_view | 권장사항입니다. 더 높은 수준의 구매 가능한 티켓 및 투어 목록 보기로 연결하여 이 옵션을 다른 옵션 중에서 눈에 띄게 표시할 수 있습니다. 자세한 내용은 방문 페이지 가이드라인을 참고하세요. |
repeated TextFeature |
option_features | 선택사항, 최대 특성 수: 100 제품 수준의 세부정보를 중복해서는 안 됩니다. |
CancellationPolicy | cancellation_policy | 권장사항입니다. |
repeated Category |
option_categories | 선택사항, 최대 카테고리 수: 100개 관련 카테고리 이 옵션에 적용됩니다. 특히 중요한 점은 투어가 아닌 모든 활동에 self-guided 가 설정되어 있고 투어 기반 활동에 guided-tour 가 설정되어 있는지 확인하세요.
자세한 권장사항은 제품 카테고리 문서를 참고하세요.
값으로 사용됩니다.
|
repeated RelatedLocation |
related_location | 권장됨, 최대 위치 수: 100개 정확한 목록의 제품이 가장 많은 위치에 나타나려면 관련 위치가 매우 중요합니다. 그러나 과도한 태그를 지정하거나 정확한 데이터를 제공하면 삭제할 제품 자세한 내용은 위치 및 관심 장소 가이드를 참고하세요. |
bool | base_ticket | 선택사항. 제품 옵션이 기본 입장권인지 여부를 나타내는 데 사용됩니다. |
repeated PriceOption |
price_options | 필수사항(최소 1개) 이 옵션에 사용할 수 있는 모든 가격입니다. 참고: 성인 가격만 지원됩니다. 가격 옵션이 여러 개인 경우 지역 제한 검사를 통과한 첫 번째 가격이 제공되었습니다. 사용됩니다. 단체 티켓의 경우 대신 전체 그룹을 사용해야 합니다. |
uint32 | duration_sec | 선택사항입니다. 옵션의 지속 시간(초)입니다. 해당하는 경우(예: 가이드 투어, 보트 여행) 이렇게 하면 체험 기간 (유효 기간이 아님)입니다. |
repeated Language |
언어 | 권장됨, 최대 언어 수: 100개 옵션을 사용할 수 있습니다. 최종 사용자가 언어를 이해하고 읽을 수 있어야 경험을 즐길 수 있습니다. 예: 가이드 투어가 제공됩니다. |
위치 | meeting_point | 선택사항입니다. 다음과 같이 관련성 있고 유용한 경우에만 추가하세요. 참가자가 투어 가이드를 만나 걷기를 시작하는 장소 참가자가 시티 투어에 태워지도록 하는 장소 크루즈 여행이 시작되는 부두에 위치합니다. |
예
{
"id": "option-1",
"title": {
"localized_texts": [
{
"language_code": "en",
"text": "Sunset tour"
},
{
"language_code": "es",
"text": "Tour al atardecer"
},
{
"language_code": "zh-HK",
"text": "日落之旅"
}
]
},
"landing_page": {
"url": "https://www.danstour.com/sunset?language={lang}¤cy={currency}"
},
"cancellation_policy": {
"refund_conditions": [
{
"min_duration_before_start_time_sec": 86400,
"refund_percent": 100
}
]
},
"option_categories": [
{
"label": "sports"
},
{
"label": "bike-tours"
}
],
"related_locations": [
{
"location": {
"location": {
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
}
},
"relation_type": "RELATION_TYPE_RELATED_NO_ADMISSION"
},
{
"location": {
"location": {
"lat_lng": {
"latitude": 53.339688,
"longitude": 6.236688
}
}
},
"relation_type": "RELATION_TYPE_RELATED_NO_ADMISSION"
}
],
"price_options": [
{
"id": "option-1-adult",
"title": "Adult (14+)",
"price": {
"currency_code": "EUR",
"units": 20
},
"fees_and_taxes": {
"per_ticket_fee": {
"currency_code": "EUR",
"units": 1
},
"per_ticket_tax": {
"currency_code": "EUR",
"units": 1
}
}
}
]
}
TextFeature
Proto
message TextFeature {
enum TextFeatureType {
// Don't use, for backwards compatibility only.
TEXT_FEATURE_UNKNOWN = 0;
// Feature is an inclusion.
TEXT_FEATURE_INCLUSION = 1;
// Feature is an exclusion.
TEXT_FEATURE_EXCLUSION = 2;
// Feature is a highlight.
TEXT_FEATURE_HIGHLIGHT = 3;
// Feature is a "must know".
TEXT_FEATURE_MUST_KNOW = 4;
// Feature represents information about safety measures.
TEXT_FEATURE_SAFETY_INFORMATION = 5;
}
// Feature type.
// Required.
TextFeatureType feature_type = 1;
// LocalizedTextSet content of the feature. Values support both plain-text
// and HTML-like text for basic formatting. Supported HTML formatting tags:
//
// Phrase tags: <br>, <strong>, <em>, <i>:
// Only the four tags mentioned above are supported. <br> can be used to
// break lines in paragraphs, and <strong>/<em>/<i> can be used to highlight
// important text. Any other phrase tags will be ignored.
//
// All other tags and custom styles are not allowed and will be removed. Any
// URLs, anchors, and links will be stripped, and will never be displayed to
// end-users.
// Recommended to not exceed length of 1000 in any language. Max length: 2000.
// Required.
LocalizedTextSet value = 2;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
enum | feature_type | 필수사항입니다. 특성 유형, 가능한 값: TEXT_FEATURE_INCLUSION : 특성이 포함입니다.TEXT_FEATURE_EXCLUSION : 특성이 제외되었습니다.TEXT_FEATURE_HIGHLIGHT : 특징입니다.TEXT_FEATURE_MUST_KNOW : 특성은 '필수'입니다.TEXT_FEATURE_SAFETY_INFORMATION : 지형지물은 안전 조치에 관한 정보를 나타냅니다. |
LocalizedTextSet | 값 | 필수, 권장 길이 <= 1,000자, 최대 길이: 2,000 지원되는 HTML 형식 태그: br, strong, em, i 언급된 4개의 태그만 지원됩니다. br 을(를) 사용하여 다음 작업을 할 수 있습니다.
단락의 줄바꿈 및 strong /em /i
중요한 텍스트를 강조 표시하는 데 사용할 수 있습니다. 다른 구문 태그는 모두 무시됩니다.다른 모든 태그와 맞춤 스타일은 허용되지 않으며 삭제됩니다. 모든 문자 URL, 앵커, 링크는 제거되어 다음 사용자에게 표시되지 않습니다. 최종 사용자 |
예
{
"feature_type": "TEXT_FEATURE_HIGHLIGHT",
"value": {
"localized_texts": [
{
"language_code": "en",
"text": "<p>A very fun bike tour<p>"
},
{
"language_code": "es",
"text": "<p>Un recorrido en bicicleta muy divertido.</p>"
},
{
"language_code": "zh-HK",
"text": "<p>一個非常有趣的自行車之旅.</p>"
}
]
}
}
등급
Proto
message Rating {
// Average rating value.
// The value must be in the range of [1, 5] and can be omitted if and only if
// the rating_count is zero.
double average_value = 1;
// Number of ratings used in calculating the value.
// Required.
uint64 rating_count = 2;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
double | average_value | 선택사항입니다. 평균 평점입니다. 값은 다음 범위 내에 있어야 합니다. [1, 5] 이며 rating_count 가 0인 경우에만 생략할 수 있습니다. |
uint64 | rating_count | 필수사항입니다. 가치 계산에 사용된 평점 수입니다. |
예
// Example 1
{
"average_value": 4.6,
"rating_count": 192
}
// Example 2: No ratings data
{
"rating_count": 0
}
미디어
Proto
message Media {
// URL of this media source. Google will crawl the media hosted at this URL.
// Max length: 2000.
// Required.
string url = 1;
enum MediaType {
// Don't use, for backwards compatibility only.
MEDIA_TYPE_UNSPECIFIED = 0;
// Indicates the media provided by the url is a photo.
MEDIA_TYPE_PHOTO = 1;
}
// Type of this media source.
// Required.
MediaType type = 2;
// Attribution information about the source of the media. Note that if
// the attribution is required to display with the media to give credit to
// photographer or agency, this field must be set.
// Recommended to not exceed length of 1000 in any language.
// Max length: 2000.
// Optional.
LocalizedTextSet attribution = 3;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | URL | 필수사항(REQUIRED), 최대 길이: 2,000자(영문 기준) 이 미디어 소스의 URL입니다. Google 은 이 URL에 호스팅된 미디어를 크롤링합니다. |
enum | 유형 | 필수 항목입니다. 이 미디어 소스의 유형입니다. 가능한 값: MEDIA_TYPE_PHOTO : URL에서 제공하는 미디어가 사진임을 나타냅니다. |
LocalizedTextSet | 기여 | 선택사항, 권장 길이: 1000, 최대 길이: 2,000 기여 분석 미디어 소스에 관한 정보입니다. 속성이 사진가 또는 대행사의 이름을 밝히기 위해 미디어에 표시해야 함 이 필드를 설정해야 합니다. |
예
{
"url": "http://www.danstour.com/photo2.jpg",
"type": "MEDIA_TYPE_PHOTO",
"attribution": {
"localized_texts": [
{
"language_code": "en",
"text": "Dans Photos"
}
]
}
}
카테고리
Proto
message Category {
// Refer to the documentation for the valid values list.
// Required.
string label = 1;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | 라벨 | 필수사항입니다. 유효한 값 목록은 제품 카테고리 문서를 참고하세요. |
예
{
"label": "sports"
}
RelatedLocation
Proto
// Defines relation between an option and a location.
message RelatedLocation {
// Location related to an option. Can be a POI (e.g. Eiffel tower),
// neighbourhood (e.g. Old Town) or an address / arbitrary map point.
// Required.
Location location = 1;
enum RelationType {
// Location is related but relation does not allow admission or admission is
// irrelevant, e.g. location is a square highlighted in a city tour.
RELATION_TYPE_RELATED_NO_ADMISSION = 0;
// Relation grants admission to this related location.
RELATION_TYPE_ADMISSION_TICKET = 1;
// Relation declares an additional service which doesn't get the user into
// the related location, e.g. a parking ticket, a temporary exhibition, etc.
RELATION_TYPE_SUPPLEMENTARY_ADDON = 2;
}
// Relation type of an option for the given location.
// Required.
RelationType relation_type = 2;
}
구현 참고사항
옵션과 위치 간의 관계를 정의합니다.
유형 | 필드 | 참고 |
---|---|---|
위치 | 위치 | 필수. 옵션과 관련된 위치입니다. 관심 장소 (예: 에펠탑), 주변 지역 (예: 구시가지) 또는 주소 / 임의의 지도 지점일 수 있습니다. |
enum | relation_type | 필수사항입니다. 지정된 위치에 대한 옵션의 관계 유형입니다. 가능한 값: RELATION_TYPE_RELATED_NO_ADMISSION : 위치는 관련이 있지만 관계도 있습니다.
입장권이 허용되지 않거나 입장이 관련이 없는 경우(예:
시티 투어에서 강조 표시된 정사각형입니다.RELATION_TYPE_ADMISSION_TICKET : 관계가 참가 허가
관련 위치RELATION_TYPE_SUPPLEMENTARY_ADDON : 관계가 추가
사용자를 관련 위치로 이동시키지 않는 서비스도
특별 전시회가 열립니다. |
예
// Example of place ID POI with no admissions
{
"location": {
"location": {
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
}
},
"relation_type": "RELATION_TYPE_RELATED_NO_ADMISSION"
}
// Example of Address POI with admissions
{
"location": {
"location": {
"address": "Madame Tussauds Berlin, Unter den Linden 74, 10117 Berlin, Germany"
}
},
"relation_type": "RELATION_TYPE_ADMISSION_TICKET"
}
DeepLink
Proto
// Deep link definition. Can include value parameters that will be expanded on
// serve time.
message DeepLink {
// Landing page URL template for desktop. If both `url` and `localized_url`
// are provided, the former is used as a fallback in case
// no URL matches the user’s locale.
// Max length: 2000.
// Either `url` or `localized_url` is required.
string url = 1;
// Landing page URL template for mobile. If omitted, it defaults to the `url`
// value.
// Max length: 2000.
// Optional.
string mobile_url = 2;
// Localized landing page URL template for desktop. If both `url` and
// `localized_url` are provided, the former is used as a fallback in case
// no URL matches the user’s locale.
// Max length: 2000.
// Max number of locales: 50.
// Either `url` or `localized_url` is required.
LocalizedTextSet localized_url = 3;
// Localized landing page URL template for mobile.
// Max length: 2000.
// Max number of locales: 50.
// Optional.
LocalizedTextSet localized_mobile_url = 4;
}
구현 참고사항
딥 링크 정의 게재 시 확장될 값 매개변수를 포함할 수 있습니다.
유형 | 필드 | 참고 |
---|---|---|
문자열 | URL | 선택사항, 최대 길이: 2,000자. 데스크톱용 방문 페이지 URL 템플릿입니다. `url` 또는 `localized_url` 이 필요합니다. |
문자열 | mobile_url | 선택사항, 최대 길이: 2,000자 모바일용 방문 페이지 URL 템플릿입니다. |
LocalizedTextSet | localized_url | 선택사항, 최대 길이: 2,000, 최대 지역 수 50 데스크톱용 현지화된 방문 페이지 URL 템플릿 url 와 localized_url 가 모두 제공되는 경우
사용자의 언어와 일치하는 URL이 없는 경우 대체 URL로 사용됩니다. url 를 사용할 수 없고
언어가 제공되지 않으면 영어 URL이 사용됩니다. |
LocalizedTextSet | localized_mobile_url | 선택사항, 최대 길이: 2,000, 최대 지역 수: 50. 모바일용 현지화된 모바일_방문 페이지 URL 템플릿입니다. |
예
// Example 1: single landing page URL.
{
"url": "https://www.danstour.com/bike-tours/?language={lang}¤cy={currency}"
}
// Example 2: localized landing page url with fallback
{
"url": "https://www.danstour.com/bike-tours/?currency={currency}",
"localized_url": {
"localized_texts": [{
"language_code": "de",
"text": "https://www.danstour.com.de/bike-tours/?currency={currency}"
}, {
"language_code": "es-MX",
"text": "https://mx.danstour.com/bike-tours/?currency={currency}"
}, {
"language_code": "zh-HK",
"text": "https://hk.danstour.com.es/bike-tours/?currency={currency}"
}]
}
}
연산자
Proto
message Operator {
// Operator name.
// Recommended to not exceed length of 50 in any language. Max length: 100.
// Required.
LocalizedTextSet name = 1;
// Operator business name as it is registered in Google Business Profile and
// appearing on Google Maps.
// Recommended to not exceed length of 50 in any language.
// Max length: 100.
// Required.
LocalizedTextSet google_business_profile_name = 4;
// Operator phone number. Prefer full international phone number format.
// Max length: 64.
// Optional.
string phone_number = 2;
// List of operator locations.
// Max number of locations: 1.
// Optional.
repeated Location locations = 3;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
LocalizedTextSet | 이름[지원 중단됨] | 선택사항, 권장 길이: 50자, 최대 길이: 100자 이 제품 판매자의 브랜드 이름입니다. OTA는 OTA 브랜드로 지정합니다. 이 필드는 이제 지원 중단되었으며 제품의 brand_name으로 대체됩니다. |
LocalizedTextSet | google_business_profile_name | 필수사항입니다(영문 기준), 최대 길이: 100자(영문 기준) Google 비즈니스 프로필에 등록되어 Google 지도에 표시되는 사업자 비즈니스 이름입니다. 운영자 예약 모듈에 참여하려면 이 필드가 필요합니다. |
문자열 | phone_number | 선택 사항, 최대 길이: 64자. 운영자 전화번호. 완전한 국제 전화번호 형식을 선호합니다. |
repeated Location |
위치 | 선택사항, 최대 개수: 1. 운영자의 비즈니스 주소입니다. 주소 문자열이 사용되는 경우 주소 문자열을 반환합니다. 예: '업체 이름, 상세 주소' 연산자 운영자를 예약하려면 Google 지도에서 업체를 찾을 수 있어야 합니다. 모듈을 트리거하려면 운영자가 Google 비즈니스 프로필을 등록해야 합니다. 비즈니스를 Google 지도에서 찾을 수 없는 경우 |
예
// Example 1: Sending operator information for operator booking module:
operator: {
"google_business_profile_name": {
"localized_texts": [{
"language_code": "en",
"text": "Dans Bikes"}]
},
"locations": [{
"location": { //Operator business address
"address": "Dans Bikes, 123 NYC st…"
}}]
}
언어
Proto
message Language {
// A BCP 47 compliant language code such as "en" or "de-CH".
string code = 1;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | 코드 | BCP-47 준수 언어 코드(예: 'en') 또는 'de-CH'입니다. |
예
{
"code": "de-CH"
}
PriceOption
Proto
message PriceOption {
// Unique ID within the price set.
// Max length: 255.
// Required.
string id = 1;
// Short description of the price option, e.g. "Adult weekday".
// Max length: 150.
// Required.
string title = 2;
// Price value, must match the final price on the checkout page, including all
// taxes and charges, see price policy. Currency will be converted to the user
// currency on rendering.
// Required when is_free is false.
google.type.Money price = 3;
// Admission or ticket is free. Must be set to true for zero-price options.
// Optional, default is false.
bool is_free = 4;
// List of geographical regions this price is applicable to. If empty,
// applicable to all locations.
// Optional.
repeated GeoCriterion geo_criteria = 5;
// Break down of fees and taxes included in the price above.
// Optional.
PriceFeesAndTaxes fees_and_taxes = 6;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | id | 필수사항(REQUIRED), 최대 길이: 255자(영문 기준) 가격 집합 내의 고유 ID |
문자열 | 제목 | 필수사항(REQUIRED), 최대 길이: 150자(영문 기준) 가격 옵션에 대한 간단한 설명입니다(예: '성인 평일'). |
google.type.Money | 가격 | is_free 가 false인 경우 필수사항입니다.가격 값으로, 자세한 내용은 결제 페이지에서 모든 세금 및 요금을 포함한 최종 가격을 확인하세요. 가격 정책 통화는 렌더링 시 사용자 통화로 변환됩니다. |
bool | is_free | 선택사항, 기본값은 false입니다. 입장료 또는 티켓은 무료입니다. 가격이 0인 옵션의 경우 true로 설정해야 합니다. |
repeated GeoCriterion |
geo_criteria | 선택사항. 이 가격이 적용되는 지역의 목록입니다. 비어 있는 경우 모든 위치에 적용됩니다. |
repeated PriceFeesAndTaxes |
fees_and_taxes | 선택사항. 가격에 포함된 수수료 및 세금의 세부정보입니다. |
예
{
"id": "option-1-adult",
"title": "Adult (14+)",
"price": {
"currency_code": "EUR",
"units": 20
},
"fees_and_taxes": {
"per_ticket_fee": {
"currency_code": "EUR",
"units": 1
},
"per_ticket_tax": {
"currency_code": "EUR",
"units": 1
}
}
}
GeoCriterion
Proto
message GeoCriterion {
// 2-letter country code as defined in ISO 3166-1.
// Required.
string country_code = 1;
// If true, criterion is negative (the country code is excluded).
bool is_negative = 2;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | country_code | 필수사항입니다. ISO 3166-1에 정의된 2자리 국가 코드입니다. |
bool | is_negative | 선택사항. true인 경우 기준이 음수입니다 (국가 코드 제외). |
예
{
"country_code": "US",
"is_negative": "true"
}
PriceFeesAndTaxes
Proto
message PriceFeesAndTaxes {
// Booking fees included in the final product price for a single ticket.
// Optional.
google.type.Money per_ticket_fee = 1;
// State taxes included in the final product price for a single ticket.
// Optional.
google.type.Money per_ticket_tax = 2;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
google.type.Money | per_ticket_fee | 선택사항. 예약 수수료는 티켓 1장의 최종 제품 가격에 포함됩니다. |
google.type.Money | per_ticket_tax | 선택사항. 주세는 티켓 1장의 최종 제품 가격에 포함됩니다. |
예
{
"per_ticket_fee": {
"currency_code": "EUR",
"units": 1
},
"per_ticket_tax": {
"currency_code": "EUR",
"units": 1
}
}
위치
Proto
message Location {
// At least one of (location, description) must be set, and we highly
// recommend populating location wherever possible.
//
// To emphasize, both fields can be populated together, e.g. you can set
// Central Park New York for the location and "In front of the 72 Street
// Station" for the description.
GeoLocation location = 1;
// Additional description in human-readable form, e.g.
// "On the left side of the fountain on the Palace square".
// At least one of (location, description) must be set.
// Recommended to not exceed length of 1000 in any language. Max length: 2000.
LocalizedTextSet description = 2;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
GeoLocation | 위치 | 선택사항, 위치 또는 설명이 하나 이상 있어야 합니다. 지리적 위치입니다. |
LocalizedTextSet | 설명 | OPTIONAL, 권장 길이: 1,000, 최대 길이: 2,000, 최소 1개
반드시 위치 또는 설명이 있어야 합니다. 추가 설명 사람이 읽을 수 있는 형식으로 '궁전 광장 분수 왼쪽' |
예
{
"location": {
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
}
}
GeoLocation
를 참조하세요. 사용 가이드라인을 참고하세요.
Proto
message GeoLocation {
// Required (exactly one variant from oneof).
// See
// https://developers.google.com/travel/things-to-do/guides/partner-integration/location
// for detailed guidelines.
oneof value {
// Place ID as defined by the Places API:
// https://developers.google.com/places/web-service/place-id
//
// Uniquely identifies a POI on Google.
// It can be sourced using the Places API endpoints, for instance Place
// Search or Place Autocomplete, or manually using the Find Location Matches
// tool in Things to Do Center.
string place_id = 1;
// Legacy single-line address.
// Components are expected to be comma-separated, with the first component
// being the place name as it is displayed on Google.
// For higher matching accuracy, use the street address shown on Google for
// the place.
//
// Examples:
// - "Colosseum, Piazza del Colosseo, 1, 00184 Roma RM, Italy"
// - "The British Museum, Great Russell St, London WC1B 3DG, United Kingdom"
//
// Max length: 200.
//
// Deprecated: use `place_info` for higher matching accuracy, which provides
// a separate field for the place name and supports both structured and
// unstructured address formats.
string address = 3 [deprecated = true];
// Structured place information.
PlaceInfo place_info = 4;
// Business Profile ID, as found in the Google Business Profile settings
// page. Use this field when sourcing locations directly from the place
// owner, who has access to the Google Business Profile for the place and
// can provide such ID.
uint64 business_profile_id = 5;
// Geographic coordinates.
// This field can only be used to determine a city or geographical region,
// as it is too ambiguous to identify a specific place or businesses.
// Use `place_info` instead to match to a specific place by name and
// coordinates.
google.type.LatLng lat_lng = 2;
}
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | place_id | 선택사항, 정확히 place_id 개 중 하나
address , place_info
business_profile_id 또는 lat_lng 는 다음과 같아야 합니다.
있습니다.다음으로 정의된 PlaceId: <ph type="x-smartling-placeholder"></ph> Places API. Google에서 관심 장소를 고유하게 식별합니다. 지역 정보를 사용하여 가져올 수 있습니다. API 엔드포인트(예: Place Search 또는 Place Autocomplete) 또는 할 일 센터의 일치하는 위치 찾기 도구를 사용하여 직접 등록 |
문자열 | 주소 | 선택사항, 정확히 place_id 개 중 하나
address , place_info
business_profile_id 또는 lat_lng 는 다음과 같아야 합니다.
있습니다.지원 중단되었습니다. 기존 단선형 주소입니다. 최대 길이: 200자(영문 기준) 구성요소는 첫 번째 구성요소와 함께 쉼표로 구분되어야 합니다. Google에 표시되는 장소 이름입니다. 높은 일치 수준 장소에 대해 Google에 표시된 상세 주소를 사용하세요. |
PlaceInfo | place_info | 선택사항, 정확히 place_id 개 중 하나
address , place_info
business_profile_id 또는 lat_lng 는 다음과 같아야 합니다.
있습니다.구조화된 장소 정보입니다. |
uint64 | business_profile_id | 선택사항, 정확히 place_id 개 중 하나
address , place_info
business_profile_id 또는 lat_lng 는 다음과 같아야 합니다.
있습니다.Google 비즈니스 프로필 설정에 있는 비즈니스 프로필 ID 있습니다. 장소에서 위치를 직접 가져올 때 이 입력란을 사용합니다. 해당 장소의 Google 비즈니스 프로필에 액세스할 수 있는 소유자 제공할 수 있습니다. |
google.type.LatLng | lat_lng | 선택사항, 정확히 place_id 개 중 하나
address , place_info
business_profile_id 또는 lat_lng 는 다음과 같아야 합니다.
있습니다.지리 좌표입니다. 이 필드는 도시를 결정하는 데만 사용할 수 있습니다. 특정 지역을 식별하기가 너무 모호하기 때문에 정보를 얻을 수 있습니다. 대신 place_info 을 사용하여
특정 장소를 이름과 좌표로
지정할 수 있습니다 |
예
"place_id": "ChIJ3S-JXmauEmsRUcIaWtf4MzE"
"address": "Eiffel Tower, 5 Av. Anatole France, 75007 Paris, France"
"place_info": {
"name": "Eiffel Tower",
"unstructured_address": "5 Av. Anatole France, 75007 Paris, France"
}
"business_profile_id": 11458995034835395294
"lat_lng": {
"latitude": -25.3511774,
"longitude": 131.0326859
}
PlaceInfo
Proto
message PlaceInfo {
// Place or business name.
// For higher matching accuracy, this should be the same as the name shown on
// Google for the place. For places with a claimed Google Business Profile,
// this should be the same as the business name configured in the business
// profile.
// Max length: 100.
// Required.
string name = 1;
// Phone number, including the international prefix.
// For higher matching accuracy, this should be the same as the phone number
// shown on Google for the place.
// It can include commonly used separator characters.
// Examples: "+1 212-363-3200", "+91 562 222 7261".
// Max length: 30.
// Optional.
string phone_number = 2;
// Website URL shown on Google for the place, preferably the URL linked from
// the business listing in Google Maps or Search for the place.
// Max length: 1000.
// Optional.
string website_url = 3;
// Geographic coordinates of the place.
// If left empty, Google will infer the coordinates from the address.
// Optional, but either `coordinates` or one of `address_type` must be
// provided.
google.type.LatLng coordinates = 4;
// Optional, but either `coordinates` or one of `address_type` must be
// provided.
oneof address_type {
// Structured address.
// Prefer this format whenever possible for higher matching accuracy.
StructuredAddress structured_address = 5;
// Unstructured address.
// It should not include the place or business name, which must instead be
// provided separately using the `name` field.
//
// Examples:
// - `name`: "Colosseum", `unstructured_address`: "Piazza del Colosseo, 1,
// 00184 Roma RM, Italy".
// - `name`: "The British Museum", `unstructured_address`: "Great Russell
// St, London WC1B 3DG, United Kingdom".
//
// Max length: 400.
string unstructured_address = 6;
}
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | 이름 | 필수사항입니다. 최대 길이: 300자(영문 기준) 장소 또는 업체 이름. 높은 Google에 표시된 이름과 동일해야 합니다. 검색하지 않습니다. 소유권이 주장된 Google 비즈니스 프로필이 있는 장소의 경우 비즈니스에 구성된 비즈니스 이름과 동일해야 합니다. 확인할 수 있습니다. |
문자열 | phone_number | 선택사항입니다. 최대 길이는 30자(영문 기준)입니다. 다음을 포함한 전화번호 국제 접두사로 대체합니다. 일치 정확도를 높이려면 Google에 표시된 전화번호와 동일해야 합니다. 여기에는 다음이 포함될 수 있습니다. 구분자 문자가 포함되어 있습니다. 예: "+1 212-363-3200", '+91 562 222 7261'. |
문자열 | website_url | 선택사항입니다. 최대 길이: 1,000 에 대해 Google에 표시되는 웹사이트 URL 가능하면 Google의 업체 목록에서 링크된 URL을 사용하는 것이 좋습니다. 지도 또는 검색을 탭합니다. |
google.type.LatLng | 좌표 | 선택사항입니다. 장소의 지리적 좌표입니다. 비워 두면 Google에서
는 주소에서 좌표를 유추합니다. 선택사항이지만 다음 중 한 가지 조건 충족 시
coordinates 또는 structured_address 중 하나 및
unstructured_address 를 입력해야 합니다. |
StructuredAddress | structured_address | OPTIONAL, structured_address 중 정확히 하나 또는
unstructured_address 가 있을 수 있으며 둘 다 있을 수는 없습니다. |
문자열 | unstructured_address | OPTIONAL, structured_address 중 정확히 하나 또는
unstructured_address 가 있을 수 있으며 둘 다 있을 수는 없습니다. |
예
"place_info": {
"name": "Colosseum",
"phone_number": "+39 063 99 67 700",
"website_url": "https://colosseo.it/",
"coordinates": {
"latitude": 41.8902102,
"longitude": 12.4922309
},
"structured_address" {
"street_address": "Piazza del Colosseo, 1",
"locality": "Roma",
"administrative_area": "RM",
"postal_code": "00184",
"country_code": "IT"
}
}
"place_info": {
"name": "Eiffel Tower",
"unstructured_address": "5 Av. Anatole France, 75007 Paris, France"
}
"place_info": {
"name": "Mutitjulu Waterhole",
"coordinates": {
"latitude": -25.3511774,
"longitude": 131.0326859
}
}
StructuredAddress
Proto
message StructuredAddress {
// Street address, including house number and any other component that cannot
// be provided using the more specific fields defined below. It should not
// include the place or business name, which must instead be provided
// separately using the `name` field under `PlaceInfo`. It should also not
// include postal code, locality or country as those should be provided using
// the corresponding fields below.
//
// Examples:
// - "Piazza del Colosseo, 1" for the Colosseum.
// - "Great Russell St" for The British Museum.
// - "Champ de Mars, 5 Av. Anatole France" for the Eiffel Tower.
//
// Max length: 200.
// Required.
string street_address = 1;
// Locality, generally referring to the city/town portion of an address.
// Examples: "New York", "Rome", "London", "Tokyo".
// In regions of the world where localities are not well defined or do not fit
// into this structure well, leave empty.
// Max length: 80.
// Optional.
string locality = 2;
// Highest administrative subdivision used for postal addresses of the
// specific country or region. This can be a state, a region, a province, an
// oblast, a prefecture, etc.
// It can be an abbreviation or a full name, depending on how the region is
// usually represented in the postal addresses of the specific country. For
// example, "CA" or "California" for US addresses, "RM" for Rome province in
// Italy.
// Many countries don't use an administrative area in postal addresses. For
// instance, this field should not be used for addresses in Switzerland.
// Max length: 80.
// Optional.
string administrative_area = 3;
// The postal code or zip code.
// Examples: "75007", "WC1B 3DG", etc.
// Required if the country supports postal codes, otherwise it should be left
// empty.
// Max length: 30.
// Optional.
string postal_code = 4;
// Country code, as defined by Unicode's "CLDR", itself based on the ISO 3166
// alpha-2 standard. See
// https://unicode.org/cldr/charts/latest/supplemental/territory_containment_un_m_49.html.
//
// Examples: "US" for the United States, "FR" for France, "GB" for the United
// Kingdom, etc.
// Max length: 2.
// Required.
string country_code = 5;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
문자열 | street_address | 필수사항입니다. 최대 길이: 200자(영문 기준) 번지를 포함한 상세 주소
더 구체적인
있습니다. 장소 또는 업체 이름은 포함하면 안 됩니다.
대신 name 를 사용하여 별도로 제공해야 합니다.
필드(PlaceInfo 아래) 또한
또한 우편번호, 지역 또는 국가는 포함하지 않습니다.
모두 제공됩니다. |
문자열 | 지역 | 선택사항입니다. 최대 길이: 80자(영문 기준) 지역(일반적으로 도시를 지칭함) 또는 주소의 도시 부분입니다. 지역들이 서비스를 제공하는 지역 잘 정의되어 있지 않거나 이 구조에 잘 맞지 않는 경우 비어 있습니다. |
문자열 | administrative_area | 선택사항입니다. 최대 길이: 80자(영문 기준) 사용된 최상위 행정 구역 단위 특정 국가 또는 지역의 우편 주소 이는 주, 지역, 도, 주, 현으로 구성됩니다. 그것은 '약어' 또는 '성명'을 입력합니다. 특정 국가의 우편 주소로 표시됩니다. |
문자열 | postal_code | 선택사항입니다. 최대 길이는 30자(영문 기준)입니다. 우편번호입니다. 필요한 경우 해당 국가는 우편번호를 지원합니다. 그렇지 않으면 비워 두어야 합니다. |
문자열 | country_code | 선택사항입니다. 최대 길이는 2자(영문 기준)입니다. 유니코드 "CLDR"으로 정의된 국가 코드 자체적으로 생성할 수 있습니다. 를 참조하세요. 유니코드 문서 |
예
{
"structured_address" {
"street_address": "Piazza del Colosseo, 1",
"locality": "Roma",
"administrative_area": "RM",
"postal_code": "00184",
"country_code": "IT"
}
}
LocalizedTextSet
Proto
// Values of the localized fields.
message LocalizedTextSet {
// Per-locale LocalizedText values.
// Maximum repeatedness: 50
repeated google.type.LocalizedText localized_texts = 1;
}
구현 참고사항
유형 | 필드 | 참고 |
---|---|---|
repeated google.type.LocalizedText |
localized_texts | 언어별 현지화된 텍스트 값입니다. |
예
{
"language_code": "en",
"text": "Sunrise tour"
}
CancellationPolicy
Proto
// Cancellation policy for a product.
message CancellationPolicy {
// Defines a single refund condition. Multiple refund conditions could be
// used together to describe "refund steps" as various durations before the
// service start time.
message RefundCondition {
// Duration in seconds before the start time, until when the customer can
// receive a refund for part of the service's cost specified in
// `refund_percent`.
// When unset or set to 0 the service can be cancelled at any time.
// Optional.
uint32 min_duration_before_start_time_sec = 1;
// The percent that can be refunded, as long as the service booking is
// cancelled at least `min_duration_before_start_time` before the service
// start time, in the range of [0, 100].
// When unset or set to 0, the service is not refundable. When set to 100
// this service is fully refundable.
// Optional.
uint32 refund_percent = 2;
// A flat fee deducted on refund. Could be used separately, or in
// combination with the refund_percent above. In the latter case, refund
// percent applies first, then the fee is deducted.
// Optional.
google.type.Money refund_fee = 3;
}
// Zero or more refund conditions applicable to the policy.
// Max number of refund conditions: 10.
repeated RefundCondition refund_conditions = 1;
}
구현 참고사항
단일 환불 조건을 정의합니다. 여러 환불 조건을 사용할 수 있습니다. 함께 '환불 단계'를 설명합니다. 서비스 시작 전 다양한 기간 동안 시작합니다.
유형 | 필드 | 참고 |
---|---|---|
RefundCondition | refund_conditions | OPTIONAL, 최대 환불 조건 수: 10. |
RefundCondition
유형 | 필드 | 참고 |
---|---|---|
uint32 | min_duration_before_start_time_sec | 선택사항 시작 시간 전부터 시점까지의 시간(초)입니다. 고객은 refund_percent 입니다. 설정하지 않거나 0으로 설정하면 서비스를 언제든지 취소할 수 있습니다. |
uint32 | refund_percent | 선택사항. 환불할 수 있는 비율입니다. 서비스 예약이 min_duration_before_start_time 이상 취소됩니다.
[0, 100] 범위에서 선택합니다. 설정하지 않거나
0으로 설정하면 서비스는 환불되지 않습니다. 100으로 설정하면 이 서비스는
전액 환불 가능 |
google.type.Money | refund_fee | 선택사항. 환불 시 정액 수수료가 공제됩니다. 사용 가능 개별적으로 또는 refund_percent 와 조합하여 사용할 수 있습니다.
후자의 경우 환불 비율이 먼저 적용된 후에 수수료가 공제됩니다. |
예
"refund_conditions": [
{
"min_duration_before_start_time_sec": 86400,
"refund_percent": 100
}]