ฟีดผลิตภัณฑ์

ฟีดผลิตภัณฑ์เป็นช่องทางหลักในการส่งรายการผลิตภัณฑ์ในกิจกรรมน่าสนใจให้แก่ Google เพื่อแสดงบนแพลตฟอร์มต่างๆ ของ Google

ออบเจ็กต์ ProductFeed ประกอบด้วยออบเจ็กต์ FeedMetadata รายการเดียวและออบเจ็กต์ Product ตั้งแต่ 0 รายการขึ้นไป หากไม่มี 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;
}

หมายเหตุการใช้งาน

ประเภท ฟิลด์ Notes
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;
}

หมายเหตุการใช้งาน

ประเภท ฟิลด์ Notes
uint32 shard_id ต้องระบุเมื่อ total_shards_count > 1
แบบ 0 คุณไม่ต้องโอนชาร์ดตามลำดับ การประมวลผลจะเริ่มขึ้นหลังจากอัปโหลดชาร์ดทั้งชุดแล้วเท่านั้น
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;
}

หมายเหตุการใช้งาน

ประเภท ฟิลด์ Notes
string id ต้องระบุ ความยาวสูงสุด 255
สตริงที่ไม่ซ้ำกันซึ่งระบุผลิตภัณฑ์ อักขระที่อนุญาตคือตัวอักษรและตัวเลขคละกัน, _ และ -
LocalizedTextSet ตำแหน่ง ต้องระบุ ความยาวที่แนะนำ<= 50 อักขระ ความยาวสูงสุด 150 อักขระ
ดูรายละเอียดเพิ่มเติมได้ในหลักเกณฑ์เกี่ยวกับชื่อและคำอธิบาย
LocalizedTextSet คำอธิบาย แนะนำ, ความยาวที่แนะนำ <= 10,000, ความยาวสูงสุด 16,000 อักขระ
ดูรายละเอียดเพิ่มเติมได้ในหลักเกณฑ์เกี่ยวกับชื่อและคำอธิบาย
ซ้ำ
TextFeature
product_features แนะนำ จำนวนฟีเจอร์สูงสุดคือ 100 รายการ
การจัดประเภท การจัดประเภท แนะนำ
เราขอแนะนำอย่างยิ่งให้ให้คะแนนเนื่องจากผลิตภัณฑ์ที่แสดงคะแนนจะส่งผลให้มีอัตราการคลิกผ่านสูงขึ้น
วนซ้ำ
สื่อ
related_media แนะนำ จำนวนสื่อสูงสุดคือ 30
ขอแนะนำอย่างยิ่งให้ระบุรูปภาพมากกว่า 1 รูป ดูคําแนะนําเกี่ยวกับรูปภาพโดยละเอียดได้ในหลักเกณฑ์เกี่ยวกับรูปภาพ
boolean use_media_order ไม่บังคับ
บอกกับ Google ว่าควรคำนึงถึงลำดับการแสดงสื่อที่เกี่ยวข้องในฟีดเมื่อเลือกรูปภาพที่จะแสดง
ที่ซ้ำ
ตัวเลือก
ตัวเลือก ต้องระบุ จำนวนตัวเลือกสูงสุด: 20
แต่ละผลิตภัณฑ์ต้องมีตัวเลือกผลิตภัณฑ์อย่างน้อย 1 รายการ
โอเปอเรเตอร์ โอเปอเรเตอร์ ไม่บังคับ
enum เลิกใช้งาน
ประเภทสินค้าคงคลังแล้ว
ไม่บังคับ
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
ชื่อแบรนด์ที่ผลิตภัณฑ์ควรแสดง ซึ่งมาแทนที่ "ผู้ดำเนินการ/ชื่อ" ที่เลิกใช้งานแล้วในปัจจุบัน คุณตั้งค่าได้เพียง 1 ใน 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?source={src}&language={lang}&currency={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?source={src}&language={lang}&currency={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;
}

หมายเหตุการใช้งาน

ประเภท ฟิลด์ Notes
string id ต้องระบุ
รหัสตัวเลือก ต้องไม่ซ้ำกันภายในผลิตภัณฑ์
LocalizedTextSet ตำแหน่ง ต้องระบุ ความยาวที่แนะนำ: 50 อักขระ ความยาวสูงสุด: 150 อักขระ
หากมีเพียงตัวเลือกเดียว ชื่อตัวเลือกอาจเหมือนกับชื่อผลิตภัณฑ์ หากมีตัวเลือกผลิตภัณฑ์หลายรายการ ชื่อต้องไม่ซ้ำกับตัวเลือกนั้น ดูรายละเอียดเพิ่มเติมในหลักเกณฑ์เกี่ยวกับชื่อและคำอธิบาย
LocalizedTextSet คำอธิบาย แนะนำ ความยาวที่แนะนำ: 10, 000 ความยาวสูงสุด: 16, 000
ดูรายละเอียดเพิ่มเติมได้ในหลักเกณฑ์เกี่ยวกับชื่อและคำอธิบาย
DeepLink landing_page ต้องระบุ
ต้องมีปุ่มหรือลิงก์เพื่อจองผลิตภัณฑ์ ดูรายละเอียดเพิ่มเติมได้ที่หลักเกณฑ์ของหน้า Landing Page
DeepLink landing_page_list_view แนะนำ
ลิงก์ไปยังมุมมองรายการของตั๋วและทัวร์ที่มีอยู่ในระดับที่สูงกว่า ทำให้ตัวเลือกนี้แสดงอย่างเด่นชัด พร้อมกับตัวเลือกอื่นๆ ดูรายละเอียดเพิ่มเติมได้ที่หลักเกณฑ์ของหน้า Landing Page
ซ้ำ
TextFeature
option_features ไม่บังคับ จำนวนฟีเจอร์สูงสุด: 100 รายการ
ไม่ควรมีรายละเอียดที่ซ้ำกันจากระดับผลิตภัณฑ์
CancellationPolicy cancellation_policy แนะนำ
หมวดหมู่
ซ้ำ
option_categories ไม่บังคับ จำนวนหมวดหมู่สูงสุด: 100
หมวดหมู่ที่เกี่ยวข้องสำหรับตัวเลือกนี้ โปรดตรวจสอบว่าได้ตั้งค่า self-guided สำหรับกิจกรรมที่ไม่ใช่ทัวร์ทั้งหมด และตั้งค่า guided-tour สำหรับกิจกรรมที่อิงตามการทัวร์ชม ดูค่าที่แนะนำเพิ่มเติมได้ในเอกสารหมวดหมู่ผลิตภัณฑ์
เกิดซ้ำ
RelatedLocation
related_location แนะนำ จำนวนสถานที่สูงสุด: 100 แห่ง
การระบุรายการตำแหน่งที่เกี่ยวข้องที่ถูกต้องเป็นความสำคัญอย่างยิ่งที่ทำให้ผลิตภัณฑ์ปรากฏในตำแหน่งที่เกี่ยวข้องมากที่สุด แต่การติดแท็กมากเกินไปหรือการให้ข้อมูลที่ถูกต้องจะทำให้ผลิตภัณฑ์ถูกนำออก ดูรายละเอียดเพิ่มเติมได้ในคู่มือตำแหน่งและจุดสนใจ
bool base_ticket ไม่บังคับ
ใช้เพื่อระบุว่าตัวเลือกผลิตภัณฑ์เป็นตั๋วเข้าชมพื้นฐานหรือไม่
ซ้ำ
PriceOption
price_options ต้องระบุ อย่างน้อย 1
ราคาที่เป็นไปได้ทั้งหมดสำหรับตัวเลือกนี้ หมายเหตุ: รองรับเฉพาะราคาสำหรับผู้ใหญ่เท่านั้น หากระบุตัวเลือกราคาหลายรายการ ระบบจะใช้ราคาแรกที่ผ่านการตรวจสอบข้อจำกัดทางภูมิศาสตร์ สำหรับตั๋วแบบกลุ่ม ต้องใช้ราคาเต็มของทั้งกลุ่มแทน
uint32 duration_sec ไม่บังคับ
ระยะเวลาของตัวเลือกเป็นวินาที (หากมี) เช่น ทัวร์ชมพร้อมคำแนะนำ การล่องเรือ เป็นต้น ข้อมูลนี้ควรแสดงถึงระยะเวลาของประสบการณ์ (ไม่ใช่ระยะเวลาที่ใช้ได้)
ภาษา
ซ้ำ
ภาษา แนะนำ จำนวนภาษาสูงสุด: 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?source={src}&language={lang}&currency={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;
}

หมายเหตุการใช้งาน

ประเภท ฟิลด์ Notes
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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    string url ต้องระบุ ความยาวสูงสุด: 2, 000
    URL ของแหล่งที่มาของสื่อนี้ Google จะทำการ Crawl สื่อที่โฮสต์ที่ 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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    string ป้ายกำกับ ต้องระบุ โปรดดูรายการค่าที่ถูกต้องในเอกสารหมวดหมู่ผลิตภัณฑ์

    ตัวอย่าง

    {
        "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;
    }
    

    หมายเหตุการใช้งาน

    กำหนดความสัมพันธ์ระหว่างตัวเลือกและสถานที่ตั้ง

    ประเภท ฟิลด์ Notes
    ตำแหน่ง สถานที่ตั้ง ต้องระบุ
    สถานที่ตั้งที่เกี่ยวข้องกับตัวเลือก สามารถเป็นจุดที่น่าสนใจ (เช่น หอไอเฟล) ย่านใกล้เคียง (เช่น เมืองเก่า) หรือที่อยู่ / จุดบนแผนที่ที่กำหนดเอง
    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"
    }
    
    

    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 สามารถใส่พารามิเตอร์ค่าที่จะขยายเมื่อแสดง

    ประเภท ฟิลด์ Notes
    string url ความยาวสูงสุด (ไม่บังคับ)
    เทมเพลต URL ของหน้า Landing Page สำหรับเดสก์ท็อป ต้องระบุ "url" หรือ "localized_url"
    string mobile_url ความยาวสูงสุด (ไม่บังคับ)
    เทมเพลต URL ของหน้า Landing Page สำหรับอุปกรณ์เคลื่อนที่
    LocalizedTextSet localized_url ไม่บังคับ ความยาวสูงสุด: 2, 000, จำนวนคนในพื้นที่สูงสุด 50 คน
    เทมเพลต URL ของหน้า Landing Page ที่แปลแล้วสำหรับเดสก์ท็อป หากมีการระบุทั้ง url และ localized_url ระบบจะใช้ URL เก่าเป็น URL สำรองในกรณีที่ไม่มี URL ที่ตรงกับภาษาของผู้ใช้ หาก url ไม่พร้อมใช้งานและไม่ได้ระบุภาษา ระบบจะใช้ URL ภาษาอังกฤษ
    LocalizedTextSet localized_mobile_url ความยาวสูงสุด: 2, 000, จำนวนสูงสุดของคนในพื้นที่ 50 คน
    เทมเพลต URL ของหน้า Landing Page เวอร์ชันแปลสำหรับอุปกรณ์เคลื่อนที่ [mobile_landing page] สำหรับอุปกรณ์เคลื่อนที่

    ตัวอย่าง

    // Example 1: single landing page url.
    {
      "url": "https://www.danstour.com/bike-tours/?source={src}&language={lang}&currency={currency}"
    }
    
    // Example 2: localized landing page url with fallback
    {
      "url": "https://www.danstour.com/bike-tours/?source={src}&currency={currency}",
      "localized_url": {
        "localized_texts": [{
              "language_code": "de",
              "text": "https://www.danstour.com.de/bike-tours/?source={src}&currency={currency}"
        }, {
              "language_code": "es-MX",
              "text": "https://mx.danstour.com/bike-tours/?source={src}&currency={currency}"
        }, {
              "language_code": "zh-HK",
              "text": "https://hk.danstour.com.es/bike-tours/?source={src}&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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    LocalizedTextSet ชื่อ [เลิกใช้งานแล้ว] ความยาวที่แนะนำ (ไม่บังคับ): 50 ความยาวสูงสุด: 100
    ชื่อแบรนด์ของผู้ขายผลิตภัณฑ์นี้ OTA ควรตั้งค่านี้เป็นแบรนด์ OTA ช่องนี้เลิกใช้งานแล้วและแทนที่ด้วย brand_name ในส่วนผลิตภัณฑ์
    LocalizedTextSet google_business_profile_name ต้องระบุ ความยาวสูงสุด: 100
    ชื่อธุรกิจของผู้ให้บริการตามที่จดทะเบียนใน Google Business Profile และปรากฏใน Google Maps ต้องระบุข้อมูลในช่องนี้เพื่อเข้าร่วมในโมดูลการจองของผู้ให้บริการ
    string phone_number (ไม่บังคับ) โดยความยาวสูงสุดคือ 64
    หมายเลขโทรศัพท์ของผู้ให้บริการ ต้องการรูปแบบหมายเลขโทรศัพท์ระหว่างประเทศแบบเต็ม
    ซ้ำ
    ตำแหน่ง
    สถานที่ตั้ง จำนวนสูงสุด (ไม่บังคับ): 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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    string รหัส รหัสภาษาที่เป็นไปตาม 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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    string id ต้องระบุ ความยาวสูงสุด: 255
    รหัสที่ไม่ซ้ำกันภายในราคาที่ตั้งไว้
    string ตำแหน่ง ต้องระบุ ความยาวสูงสุด: 150
    คำอธิบายสั้นๆ ของตัวเลือกราคา เช่น "วันธรรมดาสำหรับผู้ใหญ่"
    google.type.Money ราคา ต้องระบุเมื่อ is_free เป็น false
    ค่าราคาต้องตรงกับราคาสุดท้ายในหน้าชำระเงิน โดยรวมภาษีและการเรียกเก็บเงินทั้งหมด โปรดดูนโยบายราคา ระบบจะแปลงสกุลเงินของผู้ใช้เมื่อแสดงผล
    bool is_free ไม่บังคับ โดยค่าเริ่มต้นคือ "เท็จ"
    ค่าเข้าชมหรือตั๋วไม่มีค่าใช้จ่าย ต้องตั้งค่าเป็น "จริง" สำหรับตัวเลือกราคา 0
    ที่ซ้ำ
    GeoCriterion
    geo_criteria ไม่บังคับ
    รายชื่อภูมิภาคทางภูมิศาสตร์ที่ใช้ราคานี้ได้ หากเว้นว่างไว้ จะใช้ได้กับทุกสถานที่
    ซ้ำ
    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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    string country_code ต้องระบุ
    รหัสประเทศ 2 ตัวอักษรตามที่กำหนดไว้ใน ISO 3166-1
    bool is_negative OPTIONAL
    หากเป็น "จริง" ค่า "criterion" จะเป็นลบ (ยกเว้นรหัสประเทศ)

    ตัวอย่าง

    {
        "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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    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;
      }
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    string place_id ไม่บังคับ ต้องมี place_id, address, place_info, business_profile_id หรือ lat_lng อย่างน้อย 1 รายการ
    PlaceId ตามที่กำหนดโดย Places API ระบุจุดที่น่าสนใจบน Google แบบไม่ซ้ำ ซึ่งดึงข้อมูลได้โดยใช้ปลายทาง API ของ Places เช่น การค้นหาสถานที่หรือการเติมข้อความอัตโนมัติ หรือด้วยตนเองโดยใช้เครื่องมือค้นหาตำแหน่งที่ตรงกันใน Things to Do Center
    string จัดการ ไม่บังคับ ต้องมี place_id, address, place_info, business_profile_id หรือ lat_lng อย่างน้อย 1 รายการ
    เลิกใช้งานแล้ว ที่อยู่บรรทัดเดียวเดิม ความยาวสูงสุด: 200 คอมโพเนนต์ควรคั่นด้วยคอมมา โดยคอมโพเนนต์แรกเป็นชื่อสถานที่ตามที่แสดงใน Google โปรดใช้ที่อยู่ที่แสดงใน Google สำหรับสถานที่นั้นเพื่อให้จับคู่ได้แม่นยำมากขึ้น
    PlaceInfo place_info ไม่บังคับ ต้องมี place_id, address, place_info, business_profile_id หรือ lat_lng อย่างน้อย 1 รายการ
    ข้อมูลสถานที่ที่มีโครงสร้าง
    uint64 business_profile_id ไม่บังคับ ต้องมี place_id, address, place_info, business_profile_id หรือ lat_lng อย่างน้อย 1 รายการ
    รหัส Business Profile ตามที่พบในหน้าการตั้งค่า Google Business Profile ใช้ช่องนี้เมื่อจัดหาสถานที่โดยตรงจากเจ้าของสถานที่ซึ่งมีสิทธิ์เข้าถึง Google Business Profile ของสถานที่และ ระบุรหัสดังกล่าวได้
    google.type.LatLng lat_lng ไม่บังคับ ต้องมี place_id, address, place_info, business_profile_id หรือ lat_lng อย่างน้อย 1 รายการ
    พิกัดทางภูมิศาสตร์ ช่องนี้ใช้เพื่อระบุเมืองหรือภูมิภาคทางภูมิศาสตร์ได้เท่านั้น เนื่องจากไม่ชัดเจนเพียงพอที่จะระบุสถานที่หรือธุรกิจที่เฉพาะเจาะจง ใช้ 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: 300.
      // 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;
      }
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    string ชื่อ ต้องระบุ ความยาวสูงสุด: 300 ชื่อสถานที่หรือธุรกิจ ชื่อนี้ควรตรงกับชื่อที่แสดงใน Google สำหรับสถานที่นั้นเพื่อให้จับคู่ได้แม่นยำมากขึ้น สำหรับสถานที่ซึ่งมี Google Business Profile ที่อ้างสิทธิ์แล้ว ชื่อดังกล่าวควรเหมือนกับชื่อธุรกิจที่กําหนดค่าไว้ใน Business Profile
    string phone_number ไม่บังคับ ความยาวสูงสุด: 30 หมายเลขโทรศัพท์ รวมถึงหมายเลขนำหน้าระหว่างประเทศ หมายเลขนี้ควรเป็นหมายเลขเดียวกับหมายเลขโทรศัพท์ที่แสดงบน Google ของสถานที่นั้นเพื่อให้จับคู่ได้แม่นยำมากขึ้น โดยอาจมีอักขระตัวแบ่งที่ใช้กันทั่วไป ตัวอย่างเช่น "+1 212-363-3200", "+91 562 222 7261"
    string website_url ไม่บังคับ ความยาวสูงสุด: 1,000 URL ของเว็บไซต์ที่แสดงใน Google สำหรับสถานที่นั้น ควรเป็น URL ที่ลิงก์จากข้อมูลธุรกิจใน Google Maps หรือ Search สำหรับสถานที่นั้น
    google.type.LatLng พิกัด ไม่บังคับ พิกัดทางภูมิศาสตร์ของสถานที่ หากเว้นว่างไว้ Google จะอนุมานพิกัดจากที่อยู่ ไม่บังคับ แต่ต้องระบุ coordinates หรือ structured_address และ unstructured_address อย่างใดอย่างหนึ่ง
    StructuredAddress structured_address ไม่บังคับ อาจมี structured_address หรือ unstructured_address อย่างใดอย่างหนึ่งเท่านั้น ไม่ใช่ทั้ง 2 อย่าง
    string unstructured_address ไม่บังคับ อาจมี structured_address หรือ unstructured_address อย่างใดอย่างหนึ่งเท่านั้น ไม่ใช่ทั้ง 2 อย่าง

    ตัวอย่าง

    "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;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    string street_address ต้องระบุ ความยาวสูงสุด: 200 ที่อยู่ รวมถึงบ้านเลขที่และองค์ประกอบอื่นๆ ที่ไม่สามารถระบุโดยใช้ฟิลด์ที่เจาะจงยิ่งขึ้นตามที่กำหนดไว้ด้านล่าง ซึ่งไม่ควรมีชื่อสถานที่หรือธุรกิจ ซึ่งต้องระบุแยกต่างหากโดยใช้ช่อง name ภายใต้ PlaceInfo และไม่ควรระบุรหัสไปรษณีย์ ย่าน หรือประเทศ เนื่องจากควรระบุโดยใช้ช่องที่เกี่ยวข้องด้านล่าง
    string ย่าน ไม่บังคับ ความยาวสูงสุด: 80 ย่าน โดยทั่วไปจะหมายถึงเมืองหรือส่วนของที่อยู่ ในภูมิภาคของโลกซึ่งมีย่านที่ไม่มีการระบุไว้อย่างดีหรือไม่เหมาะกับโครงสร้างนี้ ให้เว้นว่างไว้
    string administrative_area ไม่บังคับ ความยาวสูงสุด: 80 เขตปกครองสูงสุดที่ใช้สำหรับที่อยู่ไปรษณีย์ของประเทศหรือภูมิภาคที่เจาะจง ซึ่งอาจเป็นรัฐ ภูมิภาค จังหวัด แคว้น จังหวัด หรืออาจเป็นตัวย่อหรือชื่อเต็มก็ได้ ขึ้นอยู่กับว่าปกติแล้วแสดงภูมิภาคนั้นในที่อยู่ไปรษณีย์ของประเทศนั้นๆ อย่างไร
    string postal_code ไม่บังคับ ความยาวสูงสุด: 30 รหัสไปรษณีย์ ต้องระบุหากประเทศรองรับรหัสไปรษณีย์ มิเช่นนั้นควรเว้นว่างไว้
    string country_code ไม่บังคับ ความยาวสูงสุด: 2 รหัสประเทศตาม Unicode "CLDR" ของตัวเองตามมาตรฐาน alpha-2 ของ ISO 3166 ดูเอกสารประกอบเกี่ยวกับ 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.
      repeated google.type.LocalizedText localized_texts = 1;
    }
    

    หมายเหตุการใช้งาน

    ประเภท ฟิลด์ Notes
    ซ้ำ
    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;
    }
    

    หมายเหตุการใช้งาน

    กำหนดเงื่อนไขการคืนเงินรายการเดียว คุณใช้เงื่อนไขการคืนเงินหลายเงื่อนไขร่วมกันได้เพื่ออธิบาย "ขั้นตอนการขอเงินคืน" เป็นระยะเวลาต่างๆ ก่อนเวลาเริ่มต้นบริการ

    ประเภท ฟิลด์ Notes
    RefundCondition refund_conditions (ไม่บังคับ) จำนวนเงื่อนไขการคืนเงินสูงสุดคือ 10

    RefundCondition

    ประเภท ฟิลด์ Notes
    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
      }]