服务 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;
}