ฟีดผลิตภัณฑ์เป็นช่องทางหลักในการส่งรายการสิ่งต่างๆ ให้ Google เพื่อแสดงผลิตภัณฑ์ที่จะแสดงบนแพลตฟอร์มต่างๆ ของ Google
ออบเจ็กต์ ProductFeed
ประกอบด้วยออบเจ็กต์ FeedMetadata
รายการเดียวและ
ออบเจ็กต์ 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 > 1.อิงตามศูนย์ ไม่จำเป็นต้องโอนชาร์ดตามลำดับ เริ่มการประมวลผล หลังจากอัปโหลดชาร์ดครบชุดแล้วเท่านั้น |
uint32 | total_shards_count | ต้องระบุ ต้องมีค่ามากกว่าหรือเท่ากับ 1 |
uint64 | ค่าที่ได้จากการสุ่ม | ต้องใช้เมื่อ total_shards_count > 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 | title | ต้องระบุ ความยาวที่แนะนำ<= 50 ความยาวสูงสุด 150 อักขระ ดูรายละเอียดเพิ่มเติมได้ที่หลักเกณฑ์สำหรับชื่อและคำอธิบาย |
LocalizedTextSet | คำอธิบาย | แนะนำ ความยาวที่แนะนำ <= 10000 ความยาวสูงสุด 16,000 อักขระ ดูรายละเอียดเพิ่มเติมได้ที่หลักเกณฑ์สำหรับชื่อและคำอธิบาย |
repeated TextFeature |
product_features | จำนวนฟีเจอร์ที่แนะนำ: 100 รายการ |
การจัดประเภท | การจัดประเภท | แนะนำ ขอแนะนำอย่างยิ่งให้ระบุการให้คะแนนเนื่องจากผลิตภัณฑ์ที่แสดงคะแนนจะส่งผลให้เกิดอัตราการคลิกผ่านสูงขึ้น |
repeated Media |
related_media | แนะนำ จำนวนสื่อสูงสุด: 30 เราขอแนะนำอย่างยิ่งให้ใส่รูปภาพมากกว่า 1 รูป โปรดดูคำแนะนำโดยละเอียดเกี่ยวกับรูปภาพในหลักเกณฑ์เกี่ยวกับรูปภาพ |
boolean | use_media_order | ไม่บังคับ บอก Google ว่าคุณควรคำนึงถึงลำดับการแสดงสื่อที่เกี่ยวข้องในฟีดเมื่อเลือกรูปภาพที่จะแสดง |
repeated Option |
ตัวเลือก | ต้องระบุ จำนวนตัวเลือกสูงสุด: 20 ผลิตภัณฑ์แต่ละรายการต้องมีตัวเลือกผลิตภัณฑ์อย่างน้อย 1 รายการ |
โอเปอเรเตอร์ | โอเปอเรเตอร์ | ไม่บังคับ |
enum | deprecated inventory_type |
ไม่บังคับ ตั้งค่า INVENTORY_TYPE_OFFICIAL ได้ในผลิตภัณฑ์ที่ลิงก์ไปยังเว็บไซต์ขายตั๋วอย่างเป็นทางการของจุดใดจุดหนึ่งเท่านั้น
ความสนใจ ระบบจะเปิดใช้ความสามารถในการตั้งค่านี้หลังจากตรวจสอบสิทธิ์แล้วเท่านั้น ช่องนี้เลิกใช้งานแล้วและแทนที่ด้วยช่องใหม่ที่ซ้ำ Inventory_types |
แสดงซ้ำ | inventory_types | ไม่บังคับ รายการประเภทพื้นที่โฆษณาที่ไม่ซ้ำกันซึ่งมีผลิตภัณฑ์นี้อยู่ ตั้งค่า INVENTORY_TYPE_OFFICIAL ได้ในผลิตภัณฑ์ที่ลิงก์ไปยังเว็บไซต์ขายตั๋วอย่างเป็นทางการของจุดใดจุดหนึ่งเท่านั้น
ความสนใจ ระบบจะเปิดใช้ความสามารถในการตั้งค่านี้หลังจากตรวจสอบสิทธิ์แล้วเท่านั้น ตั้งค่า INVENTORY_TYPE_OPERATOR_DIRECT ได้ในผลิตภัณฑ์ที่ลิงก์กับเว็บไซต์ของผู้จัดทัวร์เท่านั้น
ระบบจะเปิดใช้ความสามารถในการตั้งค่านี้หลังจากตรวจสอบสิทธิ์แล้วเท่านั้น |
enum | confirmation_type | ไม่บังคับ |
FulfillmentType | fulfillment_type | แนะนำ หากมีการตั้งค่า ช่องอย่างน้อย 1 ช่องใน fulfillment_rype ต้องเป็น "จริง"ตั้งค่าวิธีรับเอกสารเพื่อยืนยันการจอง ชุดค่าผสมคือ เช่น มือถือ + พิมพ์ หรือพิมพ์ที่บ้าน + รับสินค้าเอง พร้อมใช้งาน |
LocalizedTextSet | brand_name | ความยาวสูงสุด 100 อักขระ ชื่อแบรนด์ที่ผลิตภัณฑ์ควรแสดง ชื่อนี้ใช้แทนชื่อที่เลิกใช้งานแล้วในขณะนี้ "โอเปอเรเตอร์/ชื่อ" ตั้งค่าได้เพียงค่าใดค่าหนึ่งจาก 2 ค่า |
ตัวอย่าง
{
"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 | ต้องระบุ รหัสตัวเลือก ต้องไม่ซ้ำกันภายในผลิตภัณฑ์ |
LocalizedTextSet | title | ต้องระบุ ความยาวที่แนะนำ: 50 ความยาวสูงสุด: 150 อักขระ หากมีเพียงตัวเลือกเดียว ชื่อตัวเลือกอาจเหมือนกับชื่อผลิตภัณฑ์ หากหลาย ตัวเลือกผลิตภัณฑ์แสดงอยู่ ชื่อรายการต้องไม่ซ้ำกันสำหรับตัวเลือกนั้น ดูรายละเอียดเพิ่มเติมในหลักเกณฑ์สำหรับชื่อและคำอธิบาย |
LocalizedTextSet | คำอธิบาย | แนะนำ ความยาวที่แนะนำ: 10, 000 ความยาวสูงสุด: 16, 000 ดูรายละเอียดเพิ่มเติมได้ที่หลักเกณฑ์สำหรับชื่อและคำอธิบาย |
DeepLink | landing_page | ต้องระบุ ต้องมีปุ่มหรือลิงก์เพื่อจองผลิตภัณฑ์ ดูรายละเอียดเพิ่มเติมในหลักเกณฑ์ของหน้า Landing Page |
DeepLink | landing_page_list_view | แนะนำ ลิงก์ไปยังมุมมองรายการในระดับที่สูงกว่าตั๋วและทัวร์ที่มีอยู่ ทำให้เห็นตัวเลือกนี้อย่างชัดเจนและอาจมีตัวเลือกอื่นๆ ดูรายละเอียดเพิ่มเติมในหลักเกณฑ์ของหน้า Landing Page |
repeated TextFeature |
option_features | ไม่บังคับ จำนวนฟีเจอร์สูงสุด: 100 รายการ ไม่ควรทำซ้ำรายละเอียดจากระดับผลิตภัณฑ์ |
CancellationPolicy | cancellation_policy | แนะนำ |
repeated Category |
option_categories | จำนวนหมวดหมู่สูงสุดที่ไม่บังคับ: 100 หมวดหมู่ที่เกี่ยวข้อง สำหรับตัวเลือกนี้ โปรดตรวจสอบว่าได้ตั้งค่า self-guided สำหรับกิจกรรมที่ไม่ใช่ทัวร์ทั้งหมด และตั้งค่า guided-tour สำหรับกิจกรรมที่เป็นทัวร์แล้ว
ดูเอกสารประกอบของหมวดหมู่ผลิตภัณฑ์สำหรับคำแนะนำเพิ่มเติม
|
repeated RelatedLocation |
related_location | จำนวนสถานที่ตั้งสูงสุดที่แนะนำคือ 100 แห่ง การระบุรายการที่ถูกต้อง สถานที่ตั้งที่เกี่ยวข้องสำคัญอย่างยิ่งในการที่ผลิตภัณฑ์จะแสดงมากที่สุด แต่การติดแท็กมากเกินไปหรือ ให้ข้อมูลที่ถูกต้อง ผลิตภัณฑ์ที่กำลังนำออก ดูรายละเอียดเพิ่มเติมในคำแนะนำเกี่ยวกับสถานที่และจุดสนใจ |
บูลีน | 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 | value | ต้องระบุ ความยาวที่แนะนำ <= 1, 000 อักขระ ความยาวสูงสุด: 2, 000 อักขระ แท็กการจัดรูปแบบ HTML ที่รองรับ: br, strong, em, i รองรับเฉพาะแท็ก 4 รายการที่ระบุเท่านั้น br สามารถใช้เพื่อ
ตัวแบ่งในย่อหน้า และ strong /em /i
สามารถใช้เพื่อไฮไลต์ข้อความสำคัญ โดยจะไม่สนใจแท็กวลีอื่นๆแท็กและรูปแบบที่กำหนดเองอื่นๆ ทั้งหมดไม่ได้รับอนุญาตและจะถูกนำออก ช่วง URL, โฆษณา Anchor และลิงก์จะถูกตัดออก และจะไม่แสดงต่อ ผู้ใช้ปลายทาง |
ตัวอย่าง
{
"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>"
}
]
}
}
Rating
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 | ต้องระบุ มีความยาวสูงสุด: 2, 000 URL ของแหล่งที่มาของสื่อนี้ Google จะรวบรวมข้อมูลสื่อที่โฮสต์ที่ URL นี้ |
enum | ประเภท | ต้องระบุ ประเภทของแหล่งที่มาของสื่อนี้ ค่าที่เป็นไปได้: MEDIA_TYPE_PHOTO : ระบุว่าสื่อที่ระบุโดย URL เป็นรูปภาพ |
LocalizedTextSet | การระบุแหล่งที่มา | ไม่บังคับ ความยาวที่แนะนำ: 1, 000 ความยาวสูงสุด: 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;
}
หมายเหตุการใช้งาน
คำจำกัดความของ Deep Link สามารถรวมพารามิเตอร์ค่าซึ่งจะขยายเมื่อแสดงผล
ประเภท | ช่อง | หมายเหตุ |
---|---|---|
สตริง | URL | ไม่บังคับ ความยาวสูงสุด: 2, 000 เทมเพลต URL ของหน้า Landing Page สำหรับเดสก์ท็อป ต้องระบุ "url" หรือ "localized_url" |
สตริง | mobile_url | ไม่บังคับ ความยาวสูงสุด: 2, 000 เทมเพลต URL ของหน้า Landing Page สำหรับอุปกรณ์เคลื่อนที่ |
LocalizedTextSet | localized_url | ไม่บังคับ ความยาวสูงสุด: 2,000 จำนวนคนท้องถิ่นสูงสุด 50 คน เทมเพลต URL ของหน้า Landing Page ที่แปลแล้วสำหรับเดสก์ท็อป หากมีการระบุทั้ง url และ localized_url
อันแรกจะใช้เป็นรายการสำรองในกรณีที่ไม่มี URL ที่ตรงกับภาษาของผู้ใช้ หาก url ไม่พร้อมใช้งานและ
ไม่ได้ระบุภาษา ระบบจะใช้ URL ภาษาอังกฤษ |
LocalizedTextSet | localized_mobile_url | ไม่บังคับ ความยาวสูงสุด: 2,000 จำนวนคนท้องถิ่นสูงสุด 50 คน เทมเพลต URL ของหน้า mobile_Landing Page ที่แปลแล้วสำหรับอุปกรณ์เคลื่อนที่ |
ตัวอย่าง
// 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 Business Profile และปรากฏใน Google Maps ต้องระบุฟิลด์นี้เพื่อเข้าร่วมโมดูลการจองของผู้ให้บริการ |
สตริง | phone_number | ไม่บังคับ ความยาวสูงสุด: 64 หมายเลขโทรศัพท์ของผู้ให้บริการ ต้องการรูปแบบหมายเลขโทรศัพท์ระหว่างประเทศที่สมบูรณ์ |
repeated Location |
สถานที่ตั้ง | ไม่บังคับ จำนวนสูงสุดคือ 1. ที่อยู่ธุรกิจของผู้ดำเนินการ หากใช้สตริงที่อยู่ ให้ใส่ชื่อธุรกิจเป็นส่วนหนึ่งของ สตริงที่อยู่ ตัวอย่างเช่น "ชื่อธุรกิจ ที่อยู่" โอเปอเรเตอร์ ธุรกิจจะต้องค้นหาได้ใน Google Maps เพื่อให้ผู้ให้บริการจองได้ ในการทริกเกอร์ โอเปอเรเตอร์ควรลงทะเบียน Google Business Profile หากไม่พบธุรกิจของตนใน Google Maps |
ตัวอย่าง
// 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 | ต้องระบุ ความยาวสูงสุด: 255 รหัสที่ไม่ซ้ำกันภายในราคาที่กำหนด |
สตริง | title | ต้องระบุ ความยาวสูงสุด: 150 คำอธิบายตัวเลือกราคาสั้นๆ เช่น "วันธรรมดาสำหรับผู้ใหญ่" |
google.type.Money | ราคา | ต้องระบุเมื่อ is_free เป็นเท็จค่าของราคาต้องตรงกับ ราคาสุดท้ายในหน้าชำระเงิน รวมถึงภาษีและการเรียกเก็บเงินทั้งหมด โปรดดู นโยบายราคา ระบบจะแปลงสกุลเงินเป็นสกุลเงินของผู้ใช้เมื่อแสดงผล |
บูลีน | is_free | ไม่บังคับ ค่าเริ่มต้นคือ false ค่าเข้าชมหรือตั๋วฟรี ต้องตั้งค่าเป็น "จริง" สำหรับตัวเลือกราคา 0 |
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 | ต้องระบุ รหัสประเทศ 2 ตัวอักษรตามที่กำหนดไว้ใน ISO 3166-1 |
บูลีน | is_negative | ไม่บังคับ หากเป็น "จริง" เกณฑ์จะเป็นค่าลบ (ยกเว้นรหัสประเทศ) |
ตัวอย่าง
{
"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 | ไม่บังคับ ค่าธรรมเนียมการจองรวมอยู่ในราคาผลิตภัณฑ์สุดท้ายสำหรับตั๋วใบเดียว |
google.type.Money | per_ticket_tax | ไม่บังคับ ภาษีของรัฐรวมอยู่ในราคาผลิตภัณฑ์สุดท้ายสำหรับตั๋วใบเดียว |
ตัวอย่าง
{
"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 | สถานที่ | ไม่บังคับ ต้องมีสถานที่ตั้งหรือคำอธิบายอย่างน้อย 1 รายการ สถานที่ตั้งทางภูมิศาสตร์ |
LocalizedTextSet | คำอธิบาย | ไม่บังคับ ความยาวที่แนะนำ: 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 ตามที่กำหนดโดย Places API ระบุจุดที่น่าสนใจโดยไม่ซ้ำกันบน Google สามารถหาแหล่งที่มาโดยใช้ Places อุปกรณ์ปลายทาง API ตัวอย่างเช่น การค้นหาสถานที่หรือเติมข้อมูลอัตโนมัติของสถานที่ หรือ ใช้เครื่องมือค้นหาตำแหน่งที่ตรงกันใน Things to Do Center ด้วยตนเอง |
สตริง | ที่อยู่ | ไม่บังคับ หนึ่งใน 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 ต้องเป็น
ปัจจุบันรหัส Business Profile ตามที่เห็นในการตั้งค่า Google Business Profile ใช้ฟิลด์นี้เมื่อระบุแหล่งที่มาจากสถานที่นั้นโดยตรง ซึ่งมีสิทธิ์เข้าถึง Google Business Profile ของสถานที่นั้น และ สามารถระบุรหัสดังกล่าวได้ |
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 Business Profile ที่อ้างสิทธิ์แล้ว ให้ทำดังนี้ ควรตรงกับชื่อธุรกิจที่กำหนดค่าไว้ในธุรกิจ โปรไฟล์ |
สตริง | phone_number | ไม่บังคับ ความยาวสูงสุด: 30 หมายเลขโทรศัพท์ ซึ่งรวมถึง รหัสนำหน้าระหว่างประเทศ เพื่อให้การจับคู่แม่นยำมากขึ้น ตัวแปรนี้ควรเป็น เหมือนกับหมายเลขโทรศัพท์ที่แสดงใน Google สำหรับสถานที่นั้น ซึ่งอาจมี อักขระคั่นที่ใช้กันโดยทั่วไป ตัวอย่างเช่น "+1 212-363-3200", "+91 562 222 7261" |
สตริง | website_url | ไม่บังคับ ความยาวสูงสุด: 1,000 URL ของเว็บไซต์ที่แสดงใน Google สำหรับ ควรเป็น URL ที่ลิงก์จากรายชื่อธุรกิจใน Google Maps หรือค้นหาสถานที่ |
google.type.LatLng | พิกัด | ไม่บังคับ พิกัดทางภูมิศาสตร์ของสถานที่ หากเว้นว่างไว้ Google
จะอนุมานพิกัดจากที่อยู่ ไม่บังคับ แต่อย่างใดอย่างหนึ่ง
coordinates หรือ structured_address และ
ต้องระบุ unstructured_address |
StructuredAddress | structured_address | ไม่บังคับ หนึ่งใน structured_address หรือ
อาจมี unstructured_address อยู่ แต่ไม่ใช่ทั้งคู่ |
สตริง | unstructured_address | ไม่บังคับ หนึ่งใน 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 รหัสประเทศตามที่กำหนดโดย Unicode "CLDR" โดยอิงตามมาตรฐาน ISO 3166 alpha-2 โปรดดู เอกสาร Unicode |
ตัวอย่าง
{
"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 | ไม่บังคับ จำนวนเงื่อนไขการคืนเงินสูงสุด: 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
}]