服务 Feed 示例和定义

服务 Feed 示例

{
  "metadata": {
    "processing_instruction": "PROCESS_AS_COMPLETE",
    "shard_number": 0,
    "total_shards": 1,
    "nonce": "11203880",
    "generation_timestamp": 1524606581
  },
  "service": [
    {
      "merchant_id": "dining-1",
      "localized_service_name": {
        "value": "Reservation",
        "localized_value": [
          {
            "locale": "en",
            "value": "Reservation"
          }
        ]
      },
      "service_id": "1000",
    },
    {
      "merchant_id": "dining-2",
       "localized_service_name": {
        "value": "Reservation",
        "localized_value": [
          {
            "locale": "en",
            "value": "Reservation"
          }
        ]
      },
      "service_id": "1000",
    }
  ]
}

定义

服务 Feed 规范以以下协议缓冲区格式定义。不过,我们建议您以 JSON 格式上传 Feed。如需了解详情,请参阅 JSON 示例 Feed

服务 Feed 定义

服务 Feed 包含 FeedMetadata 对象和服务数组。

message ServiceFeed {
  FeedMetadata metadata = 1;
  repeated Service service = 2;
}

服务定义

// The definition of a service provided by a merchant.
message Service {
  // An opaque string from an aggregator partner which uniquely identifies a
  // merchant. (required)
  string merchant_id = 1;

  // An opaque string from an aggregator partner which uniquely identifies the
  // service.
  // Dining Reservations only supports 1 service per merchant.
  // Do not use URIs (required)
  string service_id = 2;

  // The name of the service. Deprecated. Please use localized_service_name.
  string name = 3 [deprecated = true];

  // The name of the service, e.g. "Men's haircut". Possibly in several locales.
  // Do not include pricing details or experience
  // (required)
  Text localized_service_name = 26;

  // 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.
  // (optional)
  Text localized_description = 27;

  // Rules to book/cancel an appointment. (optional)
  SchedulingRules rules = 6;

  // Photos related to this service. Google will crawl these media to ensure
  // that they are displayed correctly to end-users. (optional)
  repeated RelatedMedia related_media = 17;

  // Service attribute values that apply to this service (optional).
  // Each Service may have zero or more values for each service attribute
  // defined in the corresponding Merchant.
  repeated ServiceAttributeValueId service_attribute_value_id = 18;

  // User rating for this service as an aggregate metric over all reviews.
  Rating rating = 30;

  }

Text 的定义

// A possibly-localized text payload. Some Text fields may contain marked-up
// content.
message Text {
  // Required. Text value in an unknown locale, which will be displayed if
  // `localized_value` for the user locale is empty or missing. The locale for
  // this value may depend on the partner or service provider, and it should not
  // be assumed to be any specific language.
  string value = 1;

  // Per-locale text values. Required.
  repeated LocalizedString localized_value = 2;
}

LocalizedString 定义

// Instance of a string in one locale.
message LocalizedString {
  // IETF BCP 47 language code, such as "en", "mas", "zh-Hant", "de-CH-1901".
  // See http://www.w3.org/International/articles/language-tags/.
  string locale = 1;

  // Message in the locale above (UTF-8).
  string value = 2;
}

SchedulingRules 定义

// The scheduling rules for a service.
message SchedulingRules {
  // The duration (in seconds) from when the last booking can be made to
  // when the availability slot starts or ends.
  //
  // If "min_advance_booking" is set, the last bookable time is calculated as
  // (<slot start time> - "min_advance_booking").
  // If "min_booking_buffer_before_end_time" is set, the last bookable time is
  // calculated as (<slot end time> - "min_booking_buffer_before_end_time").
  // Note that the value of "min_booking_buffer_before_end_time" must be
  // positive if set.
  // If both are unset, the slot is bookable until the slot begin time. If both
  // fields are set, only one value will be picked while the other value
  // ignored--we cannot reliably predict which value is chosen.
  //
  // Examples:
  //  * A haircut that needs to be booked at least 1 hour before the start time.
  //      'scheduling_rules{ min_advance_booking: 3600 ...}`
  //
  //  * A museum where the last ticket can be purchased 30 mins before closing:
  //     'scheduling_rules{ min_booking_buffer_before_end_time: 1800 ...}'
  //
  //  * A movie ticket that needs to be purchased before the start time.
  //        'scheduling_rules{ ...}' (leave this field empty)
  // (optional)
  oneof min_booking_buffer {
    // The duration (in seconds) from when the last booking can be made to
    // when the availability slot starts.
    int64 min_advance_booking = 1;

    // The duration (in seconds) from when the last booking can be made to
    // when the availability slot ends. If this field is set, the
    // "admission_policy" field must be set to TIME_FLEXIBLE to indicate that
    // users can use the purchased tickets after slots start.
    int64 min_booking_buffer_before_end_time = 6;
  }

  // The minimum advance notice in seconds required to cancel a booked
  // appointment online. (optional)
  int64 min_advance_online_canceling = 2;

  // The fee for cancelling within the minimum advance notice period.
  Price late_cancellation_fee = 3 [deprecated = true];

  // The fee for no-show without canceling.
  Price noshow_fee = 4 [deprecated = true];

  // The admission policy of this service.
  enum AdmissionPolicy {
    // Unused.
    ADMISSION_POLICY_UNSPECIFIED = 0;

    // Customers are required to be present at the start time of the
    // availability slot, and the service is expected to finish at the
    // end time of the slot.
    // Examples of TIME_STRICT use cases:
    //   * A tour that starts at 9am that requires all attendees to arrive
    //     at the start time, and returns at around 12pm.
    //   * A haircut reservation at 3pm on Saturday that will take approximately
    //   30 minutes.
    //   * A fitness class from 6pm to 8pm.
    TIME_STRICT = 1;

    // Customers can arrive at any time between the start and end time of the
    // availability slot to use this booking.
    //
    // Examples of TIME_FLEXIBLE use cases:
    //   * A museum ticket that can be used during any time on the purchase
    //     date.
    //   * An afternoon admission to an amusement park that can be used from
    //     12pm to 9pm.
    TIME_FLEXIBLE = 2;

    // Customers need to arrive at the merchant at the start time of the
    // availability slot but can leave any time they want.
    //
    // For example, in the museum admission scenario, a timed entry ticket
    // for 10am requires the user to be at the museum at 10am. The start time of
    // availability slots for this service represents the designated entry
    // time. The end time, however, is used solely as a key to identify the
    // availability slot for booking.
    TIMED_ENTRY_WITH_FLEXIBLE_DURATION = 3;
  }

  // The admission policy that applied to this service. If unset, defaults to
  // TIME_STRICT. (optional)
  AdmissionPolicy admission_policy = 5;

  // Scheduling rules cancellation policy (required for Things-to-do).
  // Defaults to non-refundable.
  CancellationPolicy cancellation_policy = 7;
}