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. (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.
// (required)
Text localized_service_name = 26;
// The description of the service.
// Deprecated. Please use localized_description.
string description = 4 [deprecated = true];
// 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;
// The price of the service. (optional, overridden when payment options or
// ticket types present)
Price price = 5;
// Describes how the price is interpreted and displayed to the user. Can be
// used by any vertical except Dining and Things To Do to configure display of
// the service price. (optional)
PriceInterpretation price_interpretation = 23;
// Rules to book/cancel an appointment. (optional)
SchedulingRules rules = 6;
// Enum to indicate the prepayment type.
enum PrepaymentType {
// By default we will assume that the prepayment is NOT_SUPPORTED.
PREPAYMENT_TYPE_UNSPECIFIED = 0;
// The user has to pay this service at the booking time.
REQUIRED = 1;
// The user can choose to pre-pay this service at the booking time or later,
// but it is not required in order to book.
OPTIONAL = 2;
// The prepayment is not supported for this service.
NOT_SUPPORTED = 3;
}
// Whether a prepayment is required, optional or not supported. (optional)
PrepaymentType prepayment_type = 8;
// Specific information around when prepayment is completed.
message PrepaymentTerms {
// Enum to specify when the charge will occur relative to the purchase
// time.
enum ChargeTiming {
CHARGE_TIMING_UNSPECIFIED = 0;
CHARGE_NOW = 1;
CHARGE_LATER = 2;
}
ChargeTiming charge_timing = 1;
}
PrepaymentTerms prepayment_terms = 34;
// The service's tax rate. If present this field overrides any tax_rate set at
// the merchant level. An empty message (i.e. tax_rate { }) will reset the
// applied tax rate to zero. (optional)
TaxRate tax_rate = 9;
// A list of ids referencing the payment options which can be used to pay
// for this service. The actual payment options are defined at the Merchant
// level, and can also be shared among multiple Merchants. (optional)
repeated string payment_option_id = 10;
// Defines how a deposit may be charged to the user. Can be overridden at the
// availability level. (optional)
Deposit deposit = 11;
// Defines a no show fee that may be charged to the user. Can be overridden
// at the availability level. (optional)
NoShowFee no_show_fee = 12;
// Indicates whether the user must provide a credit card in order to book this
// service.
// This value can be overridden at the availability level. (optional)
RequireCreditCard require_credit_card = 13;
// Additional information which needs to be added if the service requires the
// user to pay directly to the merchant. IMPORTANT NOTE: RwG would not be
// involved in this transaction. (Optional. Required if virtual_session is
// defined and prepayment_type is NOT set to REQUIRED).
DirectMerchantPayment direct_merchant_payment = 36;
// An action link related to this service. If action link exists, type (see
// below) must be set in the Service.
repeated ActionLink action_link = 14;
enum ServiceType {
SERVICE_TYPE_UNSPECIFIED = 0;
// Service that provides dining reservation.
SERVICE_TYPE_DINING_RESERVATION = 1;
// Service that provides food ordering in general, could be either takeout
// or delivery or both.
SERVICE_TYPE_FOOD_ORDERING = 2;
// Service that only provides food delivery.
SERVICE_TYPE_FOOD_DELIVERY = 6;
// Service that only provides food takeout.
SERVICE_TYPE_FOOD_TAKEOUT = 7;
// Services that provide event based ticketing (e.g. concerts, sporting
// events, shows). Do not use for Reserve with Google integrations.
SERVICE_TYPE_EVENT_TICKET = 3;
SERVICE_TYPE_TRIP_TOUR = 4;
// Service that provides appointments or classes. Recommended for (1) health
// and fitness, (2) spa and beauty, and (3) financial consults and
// evaluations services. Please see the supported service types:
// https://developers.google.com/maps-booking/guides/end-to-end-integration/overview
SERVICE_TYPE_APPOINTMENT = 5;
// Service that provides appointment for an online class or session which
// will be fully virtual. Must be set if enabling virtual service bookings.
SERVICE_TYPE_ONLINE_APPOINTMENT = 8;
// Service that allows users to shop from the given merchant. It could
// either be delivery or pickup.
SERVICE_TYPE_SHOPPING = 9;
}
// The predefined type of this service. (optional)
ServiceType type = 15;
// Types of tickets that can be booked/purchased for this service. Only
// supported in order based booking API, see
// https://developers.google.com/maps-booking/guides/partner-implementing-booking-server-1a
// (optional)
repeated TicketType ticket_type = 16;
// 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;
// Rules related to joining the waitlist. Should be populated if the service
// and merchant support waitlist functionality. Should not be populated
// otherwise.
WaitlistRules waitlist_rules = 19;
// Additional information unique to the event ticketing vertical. (optional)
TicketingVerticalSpecificData ticketing_vertical_specific_data = 22;
// User rating for this service as an aggregate metric over all reviews.
Rating rating = 30;
// Additional information unique to home service vertical. (optional)
HomeServiceData home_service_data = 31;
// Information about virtual session. (Optional. Required if enabling
// virtual services)
VirtualSession virtual_session = 35;
// Ranking hint for this service. Optional.
ServiceRankingHint ranking_hint = 37;
// A template specifying how Google should generate URLs to external site.
// Used for Dining Reservations Payment Redirect Partners only.
UriTemplate uri_template = 38;
}
Определение цены
// The price of a service or a fee.
message Price {
// The price in micro-units of the currency.
// For example: 1.95 USD is 1950000 in micro-units.
// If your price contains fractions of the smallest currency unit, then it
// will be rounded using nearest even rounding (e.g. 2.5 cents rounded
// to 2 cents, 3.5 cents rounded to 4 cents, 0.5 cents rounded to 0 cents,
// 2.51 cents rounded to 3 cents). (required)
int64 price_micros = 1;
// The currency of the price that is defined in ISO 4217. (required)
string currency_code = 2;
// An optional and opaque string that identifies the pricing option that is
// associated with the extended price. (optional)
string pricing_option_tag = 3;
}
Определение цены. Интерпретация.
// Describes how a Price should be interpreted and displayed to the user.
enum PriceInterpretation {
// Price interpretation unspecified, defaults to EXACT_AMOUNT.
PRICE_INTERPRETATION_UNSPECIFIED = 0;
// When the price should be interpreted as a specific value.
//
// Examples:
// $20 for a yoga class; $15 for a child haircut
EXACT_AMOUNT = 1;
// When the price of a service is variable but a minimum price is known and
// displayed to consumers. Consumers may make choices which increase the
// price.
//
// Note that any service that uses this PriceInterpretation must use
// PrepaymentType NOT_SUPPORTED.
//
// Examples:
// $30 for dog grooming, but additional consumer choices may increase the
// price
STARTS_AT = 2;
}
Определение текста
// 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;
}
Определение локализованной строки
// 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;
}
Определение правил планирования
// 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 canceling 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;
}
Определение налоговой ставки
// A tax rate applied when charging the user for a service, and which can be set
// on either a per merchant, or per service basis.
message TaxRate {
// A tax rate in millionths of one percent, effectively giving 6 decimals of
// precision. For example, if the tax rate is 7.253%, this field should be set
// to 7253000.
//
// If this field is left unset or set to 0, the total price charged to a user
// for any service provided by this merchant is the exact price specified by
// Service.price. The service price is assumed to be exempt from or already
// inclusive of applicable taxes. Taxes will not be shown to the user as a
// separate line item.
//
// If this field is set to any nonzero value, the total price charged to a
// user for any service provided by this merchant will include the service
// price plus the tax assessed using the tax rate provided here. Fractions of
// the smallest currency unit (for example, fractions of one cent) will be
// rounded using nearest even rounding. Taxes will be shown to the user as a
// separate line item. (required)
int32 micro_percent = 1;
}
Определение поля ServiceIntakeFormField
// Defines a field that is included in a ServiceIntakeForm.
message ServiceIntakeFormField {
// A string from an aggregator partner which uniquely identifies a form field.
// This id should be the same as the id in the corresponding form field
// answer and must be unique across both the service level and per ticket
// intake forms. (required)
string id = 5;
// Enum to indicate the type of field.
enum FieldType {
// Fields of unspecified or unknown type will be ignored.
FIELD_TYPE_UNSPECIFIED = 0;
// A one-line input field for text.
SHORT_ANSWER = 1;
// A multi-line input field for text.
PARAGRAPH = 2;
// A set of radio buttons that requires one choice from many options.
MULTIPLE_CHOICE = 3;
// One or more enumerated items with checkboxes.
CHECKBOXES = 4;
// A selection from a dropdown.
DROPDOWN = 5;
// A yes/no button.
BOOLEAN = 6;
// A search widget that supports finding matched location given user input
// from provided location list.
LOCATION_SEARCH = 7;
}
// The type of this field. (required)
FieldType type = 1;
// The text shown to the user for this field. Deprecated, please use
// `localized_label` instead.
string label = 2 [deprecated = true];
// The text shown to the user for this field. The field can be supplied in
// multiple locales. (required)
Text localized_label = 7;
// Set if and only if the field type is LOCATION_SEARCH. Please use the
// "location_id" in the "location" field to specify the location value.
repeated string value = 3;
// Set if and only if the field type is MULTIPLE_CHOICE, CHECKBOXES, or
// DROPDOWN. Used to enumerate possible choices.
repeated Text choice_text = 8;
// Indicates whether an answer to this field is required by a user. (optional)
bool is_required = 4;
// Indicates whether a custom value is allowed in additional to predefined
// answers. This is only applicable when the field type is LOCATION_SEARCH.
// (optional)
bool allow_custom_answer = 9;
// Additional options provided in addition to the provided values. Only
// applicable when the field type is LOCATION_SEARCH.
// E.g. in addition to the provided location list, another available option
// can be "I will contact supplier later". (optional)
repeated Text additional_option = 10;
// If this question should only be shown when the user books certain ticket
// types, this field should be set as the set of applicable ticket type ids.
// Leave the field empty if the question is always applicable.
// (optional)
repeated string ticket_type_restrict = 6;
// The hint text for input, which shows up as a text placeholder. This is only
// applicable when the field type is SHORT_ANSWER or PARAGRAPH.
// (optional)
Text hint = 11;
}
Определение формы ServiceIntakeForm
// Defines an intake form that customizes the service provided by a merchant.
message ServiceIntakeForm {
// Fields that will be displayed to the user. (required)
repeated ServiceIntakeFormField field = 1;
// If true, this form will be shown to first time customers.
// Deprecated. This functionality is not supported for intake forms.
bool first_time_customers = 2 [deprecated = true];
// If true, this form will be shown to repeat customers.
// Deprecated. This functionality is not supported for intake forms.
bool returning_customers = 3 [deprecated = true];
}
Определение депозита
// A deposit that the user may be charged or have a hold on their credit card
// for.
message Deposit {
// Deposit amount.
Price deposit = 1;
// Minimum advance cancellation for the deposit.
int64 min_advance_cancellation_sec = 2;
// Defines how the deposit is determined from the availability.
PriceType deposit_type = 3;
}
Определение NoShowFee
// A fee that a user may be charged if they have made a booking but do not
// show up.
message NoShowFee {
// The amount the user may be charged if they do not show up for their
// reservation.
Price fee = 1;
// Defines how the fee is determined from the availability.
PriceType fee_type = 3;
}
Определение типа цены
// Defines how a total price is determined from an availability.
enum PriceType {
// The price is for a fixed amount. This is the default value if the field is
// not set.
//
// Examples:
// $50 deposit to reserve a table; $20 no show fee for a yoga class
FIXED_RATE_DEFAULT = 0;
// The price specified is per person, and the total price is calculated
// according to the party size specified in Resources as price_micros *
// party_size. A PER_PERSON price must be accompanied by a party size in the
// availability resources. If it is not, a party size of one is used.
//
// Examples:
// $10 each for tickets to a museum
PER_PERSON = 1;
}
Определение RequireCreditCard
// Defines whether a credit card is required in order to book an appointment.
enum RequireCreditCard {
// The credit card requirement is not explicitly specified and the
// behaviour is identical to the one specified for CONDITIONAL.
REQUIRE_CREDIT_CARD_UNSPECIFIED = 0;
// Google will require a credit card for the booking if any of the following
// conditions are met:
// * the availability has a price and the prepayment_type is REQUIRED
// * the no_show_fee is set
// * the deposit field is set.
REQUIRE_CREDIT_CARD_CONDITIONAL = 1;
// A credit card is always required in order to book this availability
// regardless of other field values.
REQUIRE_CREDIT_CARD_ALWAYS = 2;
}
Определение PerTicketFee
// Fees that must be paid for each ticket the user purchases. These fields
// must add up to the total per ticket fee.
message PerTicketFee {
// An extra charge assessed for a service.
Price service_charge = 1;
// A fee that goes to the venue/facility.
Price facility_fee = 2;
// Per ticket taxes.
Price taxes = 3;
}
Определение комиссии за предварительный заказ
// Fees that must be paid once per order, regardless of number of tickets. These
// fields must add up to the total per order fee.
message PerOrderFee {
// A fee that can vary by delivery method.
Price delivery_fee = 1;
// A fee to process the user's payment method.
Price processing_fee = 2;
}
Определение ActionLink
// An action URL with associated language, list of countries restricted to, and
// optional platform that indicates which platform this action should be
// performed on.
message ActionLink {
// The entry point URL for this action link.
string url = 1;
// The BCP-47 language tag identifying the language in which the content
// from this URI is available.
string language = 2;
// An unordered list of ISO 3166-1 alpha-2 country codes. Leave empty for
// unrestricted visibility.
repeated string restricted_country = 3;
// The platform that this action should be performed on. If this field is
// unset, ACTION_PLATFORM_WEB_APPLICATION will be used as fallback.
ActionPlatform platform = 4;
// Predetermined type of action associated with an action link.
enum ActionLinkType {
// The action link type is unspecified.
ACTION_LINK_TYPE_UNSPECIFIED = 0;
// The action link type is booking an appointment.
ACTION_LINK_TYPE_BOOK_APPOINTMENT = 1;
// The action link type is booking an online appointment.
ACTION_LINK_TYPE_BOOK_ONLINE_APPOINTMENT = 2;
// The action link type is ordering food for delivery or takeout or both.
ACTION_LINK_TYPE_ORDER_FOOD = 3;
// The action link type is ordering food for delivery.
ACTION_LINK_TYPE_ORDER_FOOD_DELIVERY = 4;
// The action link type is ordering food for takeout.
ACTION_LINK_TYPE_ORDER_FOOD_TAKEOUT = 5;
// The action link type is making a dining reservation.
ACTION_LINK_TYPE_MAKE_DINING_RESERVATION = 6;
// The action link type allows users to shop from the given merchant. It
// could either be delivery or pickup.
ACTION_LINK_TYPE_SHOP_ONLINE = 7;
}
// Predetermined type of action associated with an action link.
ActionLinkType action_link_type = 5;
// Metadata for the order online link.
// Supports action with ActionLinkType of ACTION_LINK_TYPE_SHOP_ONLINE.
OrderOnlineMetadata order_online_metadata = 6;
// Metadata for Food Ordering links.
// Supports action type:
// * `ACTION_LINK_TYPE_ORDER_FOOD_DELIVERY`
// * `ACTION_LINK_TYPE_ORDER_FOOD_TAKEOUT`
// Does NOT support `ACTION_LINK_TYPE_ORDER_FOOD`
FoodOrderingMetadata food_ordering_metadata = 7
;
// Additional information about action link which is unique to the events
// vertical.
message EventMetadata {
// Predetermined event surface associated with an action link. This is only
// used for Events vertical.
enum Surface {
// The surface is unspecified.
SURFACE_UNSPECIFIED = 0;
// The action link is booking a event ticket in Search.
SURFACE_SEARCH = 1;
// The action link is booking a event ticket in YouTube.
SURFACE_YOUTUBE = 2;
// The action link is clicking on an Ad for the event.
SURFACE_ADS = 3;
}
// Predetermined event surface associated with an action link. This is only
// used for Events vertical.
Surface surface = 1;
}
EventMetadata event_metadata = 9;
reserved 8;
}
Определение ActionPlatform
// The platform that the action is performed on. Web application is the general
// fallback. It is recommended to have at least one ActionLink with
// ACTION_PLATFORM_WEB_APPLICATION. Links with Android and iOS as platform are
// only used on the respective system.
enum ActionPlatform {
// The platform is unspecified.
ACTION_PLATFORM_UNSPECIFIED = 0;
// The action platform is web in general.
ACTION_PLATFORM_WEB_APPLICATION = 1;
// The action platform is web on mobile devices.
ACTION_PLATFORM_MOBILE_WEB = 2;
// The action platform is Android OS.
ACTION_PLATFORM_ANDROID = 3;
// The action platform is iOS.
ACTION_PLATFORM_IOS = 4;
}
Определение метаданных OnlineOrderMetadata
// Metadata for an order online action link.
message OrderOnlineMetadata {
// Available fulfillment options for an order online action link.
repeated FulfillmentOption fulfillment_option = 1;
}
Определение параметра выполнения
// The fulfillment option for an order online action link.
message FulfillmentOption {
// The fulfillment type associated with an action link.
enum FulfillmentType {
// The fulfillment type is unspecified.
FULFILLMENT_TYPE_UNSPECIFIED = 0;
// The fulfillment type is delivery.
FULFILLMENT_TYPE_DELIVERY = 1;
// The fulfillment type is pickup.
FULFILLMENT_TYPE_PICKUP = 2;
}
// Required. The fulfillment type.
FulfillmentType fulfillment_type = 1;
// Day level availability.
message AvailableDay {
// Required. An available date for a fulfillment method. Assumed to be in
// merchant's timezone.
google.type.Date fulfillment_date = 1;
// Required. Unix timestamp. The last time a user could order, and receive
// items by `fulfillment_date`. In other words, after last_ordering_time,
// fulfillment_date will no longer be shown as available.
//
// For example, if the fulfillment_date is 2020-08-10:
// - a last_ordering_time value of 2020-08-10 18:00 means that, in order to
// receive their order on 2020-08-10, a customer must make that order by 6pm
// that same day.
// - a last_ordering_time value of 2020-08-08 20:00 means that, in order to
// receive their order on 2020-08-10, a customer must make that order by 8pm
// two days prior.
google.protobuf.Timestamp last_ordering_time = 2;
}
// Required. A list of days on which there is availability for this
// fulfillment method (preferably at least 2).
repeated AvailableDay available_day = 2;
// No fee required for the fulfillment method associated with the action link.
message NoFee {}
// The minimum fee required for the fulfillment method associated with the
// action link.
message MinimumFee {
// Required. The base fee amount for the fulfillment method.
Price base_fee_amount = 1;
}
// The fixed fee required for the fulfillment method associated with the
// action link.
message FixedFee {
// Required. The amount of the fixed fee for the fulfillment method.
Price amount = 1;
}
// Fee details for the fulfillment method associated with the action link.
message FeeDetails {
// Fee model for the fulfillment method.
oneof fee_details {
// No fee for the fulfillment method.
NoFee no_fee = 1;
// The base fee associated with the fulfillment method.
MinimumFee base_fee = 2;
// The fixed fee associated with the fulfillment method.
FixedFee fixed_fee = 3;
}
}
// Required. Fee details for the fulfillment method.
FeeDetails fee_details = 3;
// Required. Minimum order for the fulfillment method associated with the
// action link.
Price minimum_order = 4;
}
Определение типа билета
// TicketType is used to differentiate among tickets (where a ticket can be a
// spot on a raft trip, an admission to a museum, etc.) with different prices
// and/or availabilities due to different user types or different service
// attributes.
// Only add new ticket types when at least one of the following differs:
// (1) short_description (2) option_description (3) price
message TicketType {
// The ticket id is used to differentiate among different ticket types of the
// same service, and is only expected to be unique within a service.
string ticket_type_id = 1;
// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
// Deprecated, use `localized_short_description` instead.
string short_description = 2 [deprecated = true];
// This can be user visible, e.g., “adult”, "child", “veteran”, “Row J”, etc.
// The field can be supplied in multiple locales.
Text localized_short_description = 6;
// The price of a single ticket of this type.
Price price = 3;
// Additional fees for purchasing this ticket. (optional)
PerTicketFee per_ticket_fee = 5;
// Indicates the price format displayed on the landing page.
//
// This field is ignored for non-link-out inventory.
//
// This field allows Google surfaces to show the same price format as used by
// the landing page. Consistent price formats improve conversion rate and
// reduce confusion.
enum PriceDisplayType {
// The price display type is unspecified. Google will determine which
// format to show.
PRICE_DISPLAY_TYPE_UNSPECIFIED = 0;
// The price shown on the landing page is the base price.
PRICE_DISPLAY_TYPE_BASE = 1;
// The price shown on the landing page includes all fees and taxes.
PRICE_DISPLAY_TYPE_ALL_IN = 2;
}
// Predetermined price display type of a single ticket of this type.
PriceDisplayType price_display_type = 9;
// Description of any additional option which this ticket type represents, if
// any. Deprecated, use `localized_option_description` instead.
string option_description = 4 [deprecated = true];
// Description of any additional option which this ticket type represents, if
// any. The field can be supplied in multiple locales.
//
// This is useful when the ticket type represents multiple dimensions.
//
// Example: an admission ticket with different types 'adult', 'child' and
// language as an additional option, the expected TicketType list would be:
// - { ticket_type_id: "ticket_type_1"
// localized_short_description { value: "adult" }
// localized_option_description { value: "english" }
// }
// - { ticket_type_id: "ticket_type_2"
// localized_short_description { value: "adult" }
// localized_option_description { value: "spanish" }
// }
// - { ticket_type_id: "ticket_type_3"
// localized_short_description { value: "child" }
// localized_option_description { value: "english" }
// }
// - { ticket_type_id: "ticket_type_4"
// localized_short_description { value: "child" }
// localized_option_description { value: "spanish" }
// }
//
// Optional, but if any ticket type within the service has this field set, we
// expect all other ticket types to have this field set as well (a default
// option_description could be used). E.g.
// [{ticket_type_1, adult, english}, {ticket_type_1, adult, ''}] is not a
// valid list.
//
// Only two HTML formatting tags are supported: <em> and <br>. They are
// intended to be used for specifying options with both a title and
// detailed description, for example: "<em>Premium Seating</em><br>This option
// offers seating at the private boxes including fully cushioned seats,
// private TVs, in-seat food and beverage service. These seats provide
// picturesque views of the field."
Text localized_option_description = 7;
// Predetermined inventory type of a single ticket of this type.
enum InventoryType {
// The inventory type is unspecified.
INVENTORY_TYPE_UNSPECIFIED = 0;
// Primary inventory.
INVENTORY_TYPE_PRIMARY = 1;
// Verified resale inventory.
INVENTORY_TYPE_VERIFIED_RESALE = 2;
// Resale inventory.
INVENTORY_TYPE_RESALE = 3;
// Aggregator inventory.
INVENTORY_TYPE_AGGREGATOR = 4;
}
// Predetermined inventory type of a single ticket of this type.
InventoryType inventory_type = 8;
}
Определение местоположения
// Geographic information about a location.
message Location {
// The Place ID for a place in the Google Places database and on Google Maps.
// See https://developers.google.com/places/place-id for more about Place IDs.
// If this is provided, Google will match the location to this place.
// (optional)
string place_id = 1;
// The location's name, telephone, url and geo are used to support matching
// the location with places already present on Google Maps.
//
// This field is optional, but may be required in some contexts. For example,
// a Service.location without a name will not be matched to a business entity,
// even if they are located at the same address. (optional)
string name = 2;
// The public telephone number of the location including its country and area
// codes, e.g. +14567891234. (optional)
string telephone = 3;
// The url of the location's public website. (optional)
string url = 4;
// The Geo info of the location, including latitude, longitude, and address.
// (optional)
GeoCoordinates geo = 5;
// Optional text to provide more precise description of the location, or
// instructions assisting locating the place. E.g. "Front entrance of the
// library", "meet at the intersect of Road A and Street B". (optional)
Text description = 6;
// The type of the location. Note that this field may be required when
// attached to a Service, see comments in Service.location for more details.
// (optional)
LocationType location_type = 7;
// Unique reference of the location within the service. This id can be used to
// refer to this location in other service fields. E.g. in the custom intake
// form, a set of location ids can be used to specify pick up location
// options. If set, this id should be unique within the same service.
// Note this is only applicable for Service.
// (optional)
string location_id = 8;
}
Определение рейтинга
// Defines Rating for an entity.
message Rating {
// Average rating value (required when number_of_ratings > 0).
// The value must be in the range of [1, 5] and can be omitted if and only if
// the number_of_ratings is zero.
double value = 1;
// Number of ratings used in calculating the value (required).
uint64 number_of_ratings = 2;
}
Определение типа местоположения
enum LocationType {
// Location type unspecified.
LOCATION_TYPE_UNSPECIFIED = 0;
// The location where this service visits.
VISITED_LOCATION = 1;
// The location where this service starts, also serves as MEETING_LOCATION
// or START_LOCATION.
START_LOCATION = 2;
// The location where this service ends.
END_LOCATION = 3;
}
Определение политики отмены
// Cancellation policy for a service.
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 set to 0 (default), the service can be cancelled at any time.
int64 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 set to 0 (default), the
// service is not refundable. When set to 100 this service is fully
// refundable.
uint32 refund_percent = 2;
}
// Zero or more refund conditions applicable to the policy.
repeated RefundCondition refund_condition = 1;
}
Определение связанных медиа
// Photos related to this service. Google will crawl these media to ensure
// that they are displayed correctly to end-users. (optional)
message RelatedMedia {
// URL of this media source. Google will crawl the media hosted at this URL.
string url = 1;
// Type of this media source.
MediaType type = 2;
// Enum to indicate the type of this media source. Only photos are supported.
// Please reach out to the Reserve with Google team if other media beyond
// photos need to be supported.
enum MediaType {
// Unused.
TYPE_UNSPECIFIED = 0;
// Indicates the media provided by the url is a photo.
PHOTO = 1;
}
// Caption of the media that supports i18n, only plain text is supported. Any
// HTML components will be stripped. (optional)
Text localized_caption = 5;
// 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. (optional)
Attribution attribution = 4;
// Attribution information for this media.
message Attribution {
// The text to give credit to the photographer or agency supporting i18n.
// This text will be displayed together with the source media. Note that
// only plain text is supported for this field, any HTML components will be
// stripped (hyperlink based attribution is not supported).
Text localized_text = 2;
// Deprecated, prefer to use localized_text.
string text = 1 [deprecated = true];
}
// Deprecated, prefer to use localized_caption.
string caption = 3 [deprecated = true];
}
Определение ServiceAttributeValueId
// Identifies a particular value of a service attribute to be applied to a
// Service.
message ServiceAttributeValueId {
// ID of an attribute as defined in Merchant.service_attribute, e.g.
// "service-type".
string attribute_id = 1;
// ID of the value for this attribute, e.g. "haircut". Must match a value_id
// in the service attribute definition.
string value_id = 2;
}
Определение правил списка ожидания
// Rules related to joining the waitlist.
message WaitlistRules {
// Required. Must be a positive integer for services providing waitlist
// functionality. If the service or merchant does not provide waitlist
// functionality, this must not be populated.
int32 min_party_size = 1;
// Required. Must be a positive integer for services providing waitlist
// functionality. If the service or merchant does not provide waitlist
// functionality, this must not be populated.
int32 max_party_size = 2;
// If true, the user will be able to send a free-form additional text request
// when joining the waitlist for this service.
bool supports_additional_request = 3;
// Set options for parties larger than the set max_party_size.
// Leave empty if larger parties should not be given alternative options
// for joining a waitlist.
repeated UnsupportedPartySizeOption above_max_party_size_options = 4;
}
Определение UnsupportedPartySizeOption
// Options for parties that are out of range.
message UnsupportedPartySizeOption {
// Available options for parties that are out of range.
oneof kind {
// Party sizes that are out of range can call the business.
// A predefined message will be displayed to the user.
// Sample text to be displayed: "For parties larger than
// {waitlist_rules.max_party_size} please call the restaurant at
// {restaurant phone number in Google maps}." CallMerchant must be
// set, but will be empty.
CallMerchant call_merchant = 1;
}
}
Определение продавца
// Empty message to be used in UnsupportedPartySizeOption, setting this will
// display a pre-defined message to users to call the business for a booking.
message CallMerchant {}
Определение вертикальных конкретных данных>
// Additional information unique to the event ticketing vertical.
message TicketingVerticalSpecificData {
// A subset of event categories for which we customize the product experience.
// Note: not intended to be a universal ontology of events.
enum EventCategory {
// Not specified. Do not use.
EVENT_CATEGORY_UNSPECIFIED = 0;
// Concerts.
EVENT_CATEGORY_CONCERT = 1;
// Sports events.
EVENT_CATEGORY_SPORTS = 2;
// Theatre events.
EVENT_CATEGORY_THEATRE = 3;
// Exhibits.
EVENT_CATEGORY_EXHIBITS = 4;
// Workshops and Classes.
EVENT_CATEGORY_WORKSHOPS_AND_CLASSES = 5;
}
// The category of the event. Set only when event falls into one of the
// predefined categories. (optional)
EventCategory event_category = 1;
// The URL of the event on the partner's website. (optional)
string event_url = 2;
// Identifiers, webpages, or any other public sources that reference an
// entity.
message PublicIdentificationData {
// Public URL of any webpage that is dedicated to only the topic. This could
// include official websites, discogs, social media platforms, wikipedia or
// imdb pages, e.g. https://www.discogs.com/artist/1124645-Taylor-Swift,
// https://www.wikidata.org/wiki/Q19320959, https://twitter.com/acmilan.
// (optional)
repeated string relevant_url = 1;
// The 36-character musicbrainz identifier of the artist or other music
// entities, if applicable. See
// https://musicbrainz.org/doc/MusicBrainz_Identifier.
// (optional)
string musicbrainz_id = 2;
}
// Represents an entity related to the event.
message Entity {
// Unique identifier of the entity in the partner's database. (optional)
string id = 1;
// Name of the entity. (required)
string name = 2;
// Url of the webpage that unambiguously describes the entity.
// This is the webpage on the partner's website for the entity if any; for
// other public URLs of the entity, use relevant_url in
// public_identification_data. (optional)
string url = 3;
// The type of the entity. Note: not intended to be a universal ontology.
enum EntityType {
// Not specified. Do not use.
ENTITY_TYPE_UNSPECIFIED = 0;
// The entity represents the artist or group performing at a
// concert or a show. Only applicable when event category is CONCERT or
// THEATRE.
ENTITY_TYPE_PERFORMER = 1;
// The entity represents the sports team or player at the event. Only
// applicable when event category is SPORTS.
ENTITY_TYPE_PLAYER = 2;
// The entity represents the tour that this event belongs to. Only
// applicable when event category is CONCERT.
ENTITY_TYPE_CONCERT_TOUR = 3;
// The entity represents a sports tournament that this event
// belongs to. Only applicable when event category is SPORTS.
ENTITY_TYPE_SPORTS_SERIES = 4;
// The entity represents the type of play (e.g., musical, comedy, ballet,
// etc.) performed at the event. Only applicable when event category is
// THEATRE.
ENTITY_TYPE_PLAY = 5;
}
// The type of the entity. (optional)
EntityType entity_type = 4;
// The role of the entity in the event.
enum EntityRole {
// Not specified.
ENTITY_ROLE_UNSPECIFIED = 0;
// The entity represents a headliner or leading performer at the event.
ENTITY_ROLE_HEADLINER = 1;
// The entity represents a supporting performer at the event.
ENTITY_ROLE_SUPPORTER = 2;
// The entity represents the home team at the (sports) event.
ENTITY_ROLE_HOME_TEAM = 3;
// The entity represents the away team at the (sports) event.
ENTITY_ROLE_AWAY_TEAM = 4;
}
// The role of the entity in the event. (optional)
EntityRole entity_role = 5;
// Public references of the entity. (optional)
PublicIdentificationData public_identification_data = 6;
}
// A list of entities related to the event. (optional)
repeated Entity entity = 3;
// The type of the event attendance.
enum AttendanceMode {
// Not specified.
ATTENDANCE_MODE_UNSPECIFIED = 0;
// For virtual events.
ONLINE = 1;
// For physical events.
PHYSICAL = 2;
// For events that are both physical and virtual.
PHYSICAL_ONLINE_MIXED = 3;
}
// Required. The type of the event attendance.
AttendanceMode event_attendance_mode = 4;
// Optional. URL where the event can be watched.
repeated string event_virtual_location_url = 5;
// Optional. Organizer who hosts the event.
Text event_organizer = 6;
// Optional. URL of the organizer who hosts the event.
string event_organizer_url = 7;
// The type of the organizer.
enum OrganizerType {
// Not specified.
ORGANIZER_TYPE_UNSPECIFIED = 0;
// For organizer who is a person.
PERSON = 1;
// For organizer who is an organization.
ORGANIZATION = 2;
}
// Optional. The type of the organizer.
OrganizerType event_organizer_type = 8;
// URL of the pages where the event information or descriptions can be found.
// Required for virtual events as virtual events may not have a ticketing
// page and this url contains the basic information of the event.
repeated string event_source_url = 9;
// State of the event.
enum EventState {
// Not specified.
EVENT_STATE_UNSPECIFIED = 0;
// The event is scheduled.
SCHEDULED = 1;
// The event is rescheduled.
RESCHEDULED = 2;
// The event is cancelled.
CANCELLED = 3;
// The event is postponed.
POSTPONED = 4;
}
// Optional. State of the event.
EventState event_state = 10;
// The localized brand name. (optional)
Text brand_name = 11;
// Information about the creator of the event. Only relevant for platforms
// that include user-generated content events.
message EventCreator {
// Name of the event creator. No character restriction.
string name = 1 [features.field_presence = EXPLICIT];
}
// Information about the creator of the event.
EventCreator event_creator = 12;
}
Определение типа интеграции
// Depth of integration supported.
enum IntegrationType {
// Defaults to END_TO_END.
INTEGRATION_TYPE_UNSPECIFIED = 0;
// Complete integration that allows end to end booking through Google.
INTEGRATION_TYPE_END_TO_END = 1;
// Feed integration that does not allow end to end booking through Google.
// Only merchants, services, and (optionally) availability data need
// to be sent.
INTEGRATION_TYPE_INVENTORY_ONLY = 2;
}
ToursAndActivitiesОпределение содержания
// Content fields specific to Tours and Activities. Each element in the repeated
// field should be independent to allow separate rendering (e.g. as a bullet
// point).
//
// Populating ToursAndActivitiesContent is strongly recommended for tours and
// activities, but not strictly required. All fields support both plain-text
// and HTML-like text for basic formatting. Supported HTML-like 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> 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.
//
// Important notes:
// * Don't duplicate data already supplied in `highlights`, `exclusion` and
// other, more specific, fields in service description.
// * Avoid using 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.
message ToursAndActivitiesContent {
// The user-visible list of highlights.
repeated Text highlights = 1;
// The user-visible list of inclusions.
repeated Text inclusions = 2;
// The user-visible list of exclusions.
repeated Text exclusions = 3;
// The user-visible list of important notes, use for details such as age
// restrictions or other conditions that make this service unsuitable.
repeated Text must_know = 4;
}
ГлавнаяСервисОпределение данных
// Additional information required to be provided for home service vertical.
message HomeServiceData {
// The high level category to which this home service belongs to. E.g.
// plumber, electrician etc.
string category_type = 1;
// The job type under the category to which the given home service belongs to.
// E.g. unclog_drain, install_faucet are the job types under plumber
// category.
string job_type = 2;
}
Определение виртуальной сессии
// Information about virtual/online session. E.g. Online yoga class, virtual
// cooking class etc.
message VirtualSession {
// Instructions on how this virtual class is set up. If the partner does not
// include the video URL with the booking, then this text must include when
// the video URL will be shared with the user. Eg. “Zoom url will be mailed
// 30 minutes prior to the class”. (Recommended)
// Only the folloiwng four tags are supported: <br>, <strong>, <em>, <i>.
Text session_instructions = 1;
// Requirements for the given virtual session. Eg. yoga mat,
// cooking utensils etc. (Recommended)
// Only the folloiwng four tags are supported: <br>, <strong>, <em>, <i>.
Text session_requirements = 2;
// Information about the virtual platform used in this session. (Required to
// enable virtual services)
message VirtualPlatformInfo {
// Enum to indicate which virtual platform would be used by the merchant.
enum Platform {
PLATFORM_UNSPECIFIED = 0;
// The merchant is flexible in which video platform they use.
FLEXIBLE = 1;
GOOGLE_HANGOUTS = 2;
GOOGLE_MEET = 3;
ZOOM = 4;
SKYPE = 5;
YOUTUBE = 6;
// Should be set if the video platform used is different from the ones
// mentioned here.
OTHER = 7;
}
Platform platform = 1;
// The name of the platform if the platform is set to OTHER. (Required if
// platform is set to OTHER)
Text other_platform_name = 2;
}
VirtualPlatformInfo virtual_platform_info = 3;
// Set this as true if the virtual session is not live and is pre-recorded.
// (Optional)
bool is_session_prerecorded = 4;
}
Определение DirectMerchantPayment
// Information about how the user can pay directly to the merchant instead of
// pre-paying for the service via RwG.
message DirectMerchantPayment {
// Users would be advised to pay only via the payment methods mentioned below.
repeated Text payment_methods = 1;
}
Определение ServiceRankingHint
// Ranking hints for a service.
message ServiceRankingHint {
// Arbitrary partner or merchant assigned rank for this service.
//
// Services with a higher score will be shown more prominently (e.g. shown
// higher in lists). Note that other factors may also influence ranking, such
// as price, availability, user history, etc.
//
// Optional. Must be non-negative if set.
float score = 1 [features.field_presence = EXPLICIT];
}
[null,null,["Последнее обновление: 2024-10-29 UTC."],[[["Service Feeds, ideally in JSON, contain service metadata and a list of services offered by a merchant."],["Services include details like name, description, pricing, booking rules, payment options, and service-specific attributes."],["Pricing is defined with value, currency, and optional pricing options, while price interpretation clarifies if it's an exact or starting price."],["Text elements are localizable using a default value and locale-specific strings for various languages."],["Scheduling Rules outline booking constraints such as minimum advance booking time and buffer before the service end time."]]],[]]