message ServiceFeed {
FeedMetadata metadata = 1;
repeated Service service = 2;
}
Service 的定义
//Thedefinitionofaserviceprovidedbyamerchant.messageService{//Anopaquestringfromanaggregatorpartnerwhichuniquelyidentifiesa//merchant.(required)stringmerchant_id=1;//Anopaquestringfromanaggregatorpartnerwhichuniquelyidentifiesthe//service.(required)stringservice_id=2;//Thenameoftheservice.Deprecated.Pleaseuselocalized_service_name.stringname=3[deprecated=true];//Thenameoftheservice,e.g."Men's haircut".Possiblyinseverallocales.//(required)Textlocalized_service_name=26;//Thedescriptionoftheservice.//Deprecated.Pleaseuselocalized_description.stringdescription=4[deprecated=true];//Thedescriptionoftheproduct.Limitedformattingoptionsareallowedin//theHTMLformat.Supportedtags://*h1-h5//*ul,ol,li//*strong,italic,em//*p,br//Othertagsarenotsupportedandwillberemoved.CSS,tables,style//property,`a`linksarenotsupported.Imagesarenotallowed,usethe//related_mediafieldinstead.//Importantnotes://*Trynottouseothertagsexceptforthesupportedonesmentioned//above,becausethecontentswithinunsupportedtagswillbestripped,//andmayleadtoanundesirableuserexperience.//*Tryavoiddeepnestedstructureslikemorethan3differentheading//levelsornestedlists.Keepingthestructureflat,simple,and//straightforward,helpstocreateabetteruserexperience.//*Donotduplicateinfofromtheproduct_featuresfieldbelowinthe//descriptionasbothwouldnormallybeshownsidebyside.//Recommendedtonotexceedlengthof10000inanylanguage.Maxlength://16000.//Recommended.//(optional)Textlocalized_description=27;//Thepriceoftheservice.(optional,overriddenwhenpaymentoptionsor//tickettypespresent)Priceprice=5;//Describeshowthepriceisinterpretedanddisplayedtotheuser.Canbe//usedbyanyverticalexceptDiningandThingsToDotoconfiguredisplayof//theserviceprice.(optional)PriceInterpretationprice_interpretation=23;//Rulestobook/cancelanappointment.(optional)SchedulingRulesrules=6;//Enumtoindicatetheprepaymenttype.enumPrepaymentType{//BydefaultwewillassumethattheprepaymentisNOT_SUPPORTED.PREPAYMENT_TYPE_UNSPECIFIED=0;//Theuserhastopaythisserviceatthebookingtime.REQUIRED=1;//Theusercanchoosetopre-paythisserviceatthebookingtimeorlater,//butitisnotrequiredinordertobook.OPTIONAL=2;//Theprepaymentisnotsupportedforthisservice.NOT_SUPPORTED=3;}//Whetheraprepaymentisrequired,optionalornotsupported.(optional)PrepaymentTypeprepayment_type=8;//Specificinformationaroundwhenprepaymentiscompleted.messagePrepaymentTerms{//Enumtospecifywhenthechargewilloccurrelativetothepurchase//time.enumChargeTiming{CHARGE_TIMING_UNSPECIFIED=0;CHARGE_NOW=1;CHARGE_LATER=2;}ChargeTimingcharge_timing=1;}PrepaymentTermsprepayment_terms=34;//Theservice'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;}
Price 的定义
// The price of a service or a fee.messagePrice{// 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)int64price_micros=1;// The currency of the price that is defined in ISO 4217. (required)stringcurrency_code=2;// An optional and opaque string that identifies the pricing option that is// associated with the extended price. (optional)stringpricing_option_tag=3;}
// Instance of a string in one locale.messageLocalizedString{// IETF BCP 47 language code, such as "en", "mas", "zh-Hant", "de-CH-1901".// See http://www.w3.org/International/articles/language-tags/.stringlocale=1;// Message in the locale above (UTF-8).stringvalue=2;}
// 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.messageTaxRate{// 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)int32micro_percent=1;}
ServiceIntakeFormField 的定义
//DefinesafieldthatisincludedinaServiceIntakeForm.messageServiceIntakeFormField{//Astringfromanaggregatorpartnerwhichuniquelyidentifiesaformfield.//Thisidshouldbethesameastheidinthecorrespondingformfield//answerandmustbeuniqueacrossboththeservicelevelandperticket//intakeforms.(required)stringid=5;//Enumtoindicatethetypeoffield.enumFieldType{//Fieldsofunspecifiedorunknowntypewillbeignored.FIELD_TYPE_UNSPECIFIED=0;//Aone-lineinputfieldfortext.SHORT_ANSWER=1;//Amulti-lineinputfieldfortext.PARAGRAPH=2;//Asetofradiobuttonsthatrequiresonechoicefrommanyoptions.MULTIPLE_CHOICE=3;//Oneormoreenumerateditemswithcheckboxes.CHECKBOXES=4;//Aselectionfromadropdown.DROPDOWN=5;//Ayes/nobutton.BOOLEAN=6;//Asearchwidgetthatsupportsfindingmatchedlocationgivenuserinput//fromprovidedlocationlist.LOCATION_SEARCH=7;}//Thetypeofthisfield.(required)FieldTypetype=1;//Thetextshowntotheuserforthisfield.Deprecated,pleaseuse//`localized_label`instead.stringlabel=2[deprecated=true];//Thetextshowntotheuserforthisfield.Thefieldcanbesuppliedin//multiplelocales.(required)Textlocalized_label=7;//SetifandonlyifthefieldtypeisLOCATION_SEARCH.Pleaseusethe//"location_id"inthe"location"fieldtospecifythelocationvalue.repeatedstringvalue=3;//SetifandonlyifthefieldtypeisMULTIPLE_CHOICE,CHECKBOXES,or//DROPDOWN.Usedtoenumeratepossiblechoices.repeatedTextchoice_text=8;//Indicateswhetherananswertothisfieldisrequiredbyauser.(optional)boolis_required=4;//Indicateswhetheracustomvalueisallowedinadditionaltopredefined//answers.ThisisonlyapplicablewhenthefieldtypeisLOCATION_SEARCH.//(optional)boolallow_custom_answer=9;//Additionaloptionsprovidedinadditiontotheprovidedvalues.Only//applicablewhenthefieldtypeisLOCATION_SEARCH.//E.g.inadditiontotheprovidedlocationlist,anotheravailableoption//canbe"I will contact supplier later".(optional)repeatedTextadditional_option=10;//Ifthisquestionshouldonlybeshownwhentheuserbookscertainticket//types,thisfieldshouldbesetasthesetofapplicabletickettypeids.//Leavethefieldemptyifthequestionisalwaysapplicable.//(optional)repeatedstringticket_type_restrict=6;//Thehinttextforinput,whichshowsupasatextplaceholder.Thisisonly//applicablewhenthefieldtypeisSHORT_ANSWERorPARAGRAPH.//(optional)Texthint=11;}
ServiceIntakeForm 的定义
// Defines an intake form that customizes the service provided by a merchant.messageServiceIntakeForm{// Fields that will be displayed to the user. (required)repeatedServiceIntakeFormFieldfield=1;// If true, this form will be shown to first time customers.// Deprecated. This functionality is not supported for intake forms.boolfirst_time_customers=2[deprecated=true];// If true, this form will be shown to repeat customers.// Deprecated. This functionality is not supported for intake forms.boolreturning_customers=3[deprecated=true];}
Deposit 的定义
// A deposit that the user may be charged or have a hold on their credit card// for.messageDeposit{// Deposit amount.Pricedeposit=1;// Minimum advance cancellation for the deposit.int64min_advance_cancellation_sec=2;// Defines how the deposit is determined from the availability.PriceTypedeposit_type=3;}
NoShowFee 的定义
// A fee that a user may be charged if they have made a booking but do not// show up.messageNoShowFee{// The amount the user may be charged if they do not show up for their// reservation.Pricefee=1;// Defines how the fee is determined from the availability.PriceTypefee_type=3;}
// Fees that must be paid for each ticket the user purchases. These fields// must add up to the total per ticket fee.messagePerTicketFee{// An extra charge assessed for a service.Priceservice_charge=1;// A fee that goes to the venue/facility.Pricefacility_fee=2;// Per ticket taxes.Pricetaxes=3;}
// Metadata for an order online action link.messageOrderOnlineMetadata{// Available fulfillment options for an order online action link.repeatedFulfillmentOptionfulfillment_option=1;}
FulfillmentOption 的定义
//Thefulfillmentoptionforanorderonlineactionlink.messageFulfillmentOption{//Thefulfillmenttypeassociatedwithanactionlink.enumFulfillmentType{//Thefulfillmenttypeisunspecified.FULFILLMENT_TYPE_UNSPECIFIED=0;//Thefulfillmenttypeisdelivery.FULFILLMENT_TYPE_DELIVERY=1;//Thefulfillmenttypeispickup.FULFILLMENT_TYPE_PICKUP=2;}//Required.Thefulfillmenttype.FulfillmentTypefulfillment_type=1;//Daylevelavailability.messageAvailableDay{//Required.Anavailabledateforafulfillmentmethod.Assumedtobein//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 的定义
//TicketTypeisusedtodifferentiateamongtickets(whereaticketcanbea//spotonarafttrip,anadmissiontoamuseum,etc.)withdifferentprices//and/oravailabilitiesduetodifferentusertypesordifferentservice//attributes.//Onlyaddnewtickettypeswhenatleastoneofthefollowingdiffers://(1)short_description(2)option_description(3)pricemessageTicketType{//Theticketidisusedtodifferentiateamongdifferenttickettypesofthe//sameservice,andisonlyexpectedtobeuniquewithinaservice.stringticket_type_id=1;//Thiscanbeuservisible,e.g.,“adult”,"child",“veteran”,“RowJ”,etc.//Deprecated,use`localized_short_description`instead.stringshort_description=2[deprecated=true];//Thiscanbeuservisible,e.g.,“adult”,"child",“veteran”,“RowJ”,etc.//Thefieldcanbesuppliedinmultiplelocales.Textlocalized_short_description=6;//Thepriceofasingleticketofthistype.Priceprice=3;//Additionalfeesforpurchasingthisticket.(optional)PerTicketFeeper_ticket_fee=5;//Indicatesthepriceformatdisplayedonthelandingpage.////Thisfieldisignoredfornon-link-outinventory.////ThisfieldallowsGooglesurfacestoshowthesamepriceformatasusedby//thelandingpage.Consistentpriceformatsimproveconversionrateand//reduceconfusion.enumPriceDisplayType{//Thepricedisplaytypeisunspecified.Googlewilldeterminewhich//formattoshow.PRICE_DISPLAY_TYPE_UNSPECIFIED=0;//Thepriceshownonthelandingpageisthebaseprice.PRICE_DISPLAY_TYPE_BASE=1;//Thepriceshownonthelandingpageincludesallfeesandtaxes.PRICE_DISPLAY_TYPE_ALL_IN=2;}//Predeterminedpricedisplaytypeofasingleticketofthistype.PriceDisplayTypeprice_display_type=9;//Descriptionofanyadditionaloptionwhichthistickettyperepresents,if//any.Deprecated,use`localized_option_description`instead.stringoption_description=4[deprecated=true];//Descriptionofanyadditionaloptionwhichthistickettyperepresents,if//any.Thefieldcanbesuppliedinmultiplelocales.////Thisisusefulwhenthetickettyperepresentsmultipledimensions.////Example:anadmissionticketwithdifferenttypes'adult','child'and//languageasanadditionaloption,theexpectedTicketTypelistwouldbe://-{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,butifanytickettypewithintheservicehasthisfieldset,we//expectallothertickettypestohavethisfieldsetaswell(adefault//option_descriptioncouldbeused).E.g.//[{ticket_type_1,adult,english},{ticket_type_1,adult,''}]isnota//validlist.////OnlytwoHTMLformattingtagsaresupported:<em>and<br>.Theyare//intendedtobeusedforspecifyingoptionswithbothatitleand//detaileddescription,forexample:"<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."Textlocalized_option_description=7;//Predeterminedinventorytypeofasingleticketofthistype.enumInventoryType{//Theinventorytypeisunspecified.INVENTORY_TYPE_UNSPECIFIED=0;//Primaryinventory.INVENTORY_TYPE_PRIMARY=1;//Verifiedresaleinventory.INVENTORY_TYPE_VERIFIED_RESALE=2;//Resaleinventory.INVENTORY_TYPE_RESALE=3;//Aggregatorinventory.INVENTORY_TYPE_AGGREGATOR=4;}//Predeterminedinventorytypeofasingleticketofthistype.InventoryTypeinventory_type=8;}
Location 的定义
// Geographic information about a location.messageLocation{// 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)stringplace_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)stringname=2;// The public telephone number of the location including its country and area// codes, e.g. +14567891234. (optional)stringtelephone=3;// The url of the location's public website. (optional)stringurl=4;// The Geo info of the location, including latitude, longitude, and address.// (optional)GeoCoordinatesgeo=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)Textdescription=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)LocationTypelocation_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)stringlocation_id=8;}
Rating 的定义
// Defines Rating for an entity.messageRating{// 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.doublevalue=1;// Number of ratings used in calculating the value (required).uint64number_of_ratings=2;}
//Cancellationpolicyforaservice.messageCancellationPolicy{//Definesasinglerefundcondition.Multiplerefundconditionscouldbe//usedtogethertodescribe"refund steps"asvariousdurationsbeforethe//servicestarttime.messageRefundCondition{//Durationinsecondsbeforethestarttime,untilwhenthecustomercan//receivearefundforpartoftheservice'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;}
// Identifies a particular value of a service attribute to be applied to a// Service.messageServiceAttributeValueId{// ID of an attribute as defined in Merchant.service_attribute, e.g.// "service-type".stringattribute_id=1;// ID of the value for this attribute, e.g. "haircut". Must match a value_id// in the service attribute definition.stringvalue_id=2;}
WaitlistRules 的定义
// Rules related to joining the waitlist.messageWaitlistRules{// 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.int32min_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.int32max_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.boolsupports_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.repeatedUnsupportedPartySizeOptionabove_max_party_size_options=4;}
UnsupportedPartySizeOption 的定义
// Options for parties that are out of range.messageUnsupportedPartySizeOption{// Available options for parties that are out of range.oneofkind{// 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.CallMerchantcall_merchant=1;}}
CallMerchant 定义
// Empty message to be used in UnsupportedPartySizeOption, setting this will// display a pre-defined message to users to call the business for a booking.messageCallMerchant{}
TicketingVerticalSpecificData 的定义>
//Additionalinformationuniquetotheeventticketingvertical.messageTicketingVerticalSpecificData{//Asubsetofeventcategoriesforwhichwecustomizetheproductexperience.//Note:notintendedtobeauniversalontologyofevents.enumEventCategory{//Notspecified.Donotuse.EVENT_CATEGORY_UNSPECIFIED=0;//Concerts.EVENT_CATEGORY_CONCERT=1;//Sportsevents.EVENT_CATEGORY_SPORTS=2;//Theatreevents.EVENT_CATEGORY_THEATRE=3;//Exhibits.EVENT_CATEGORY_EXHIBITS=4;//WorkshopsandClasses.EVENT_CATEGORY_WORKSHOPS_AND_CLASSES=5;}//Thecategoryoftheevent.Setonlywheneventfallsintooneofthe//predefinedcategories.(optional)EventCategoryevent_category=1;//TheURLoftheeventonthepartner's website. (optional)stringevent_url=2;//Identifiers,webpages,oranyotherpublicsourcesthatreferencean//entity.messagePublicIdentificationData{//PublicURLofanywebpagethatisdedicatedtoonlythetopic.Thiscould//includeofficialwebsites,discogs,socialmediaplatforms,wikipediaor//imdbpages,e.g.https://www.discogs.com/artist/1124645-Taylor-Swift,//https://www.wikidata.org/wiki/Q19320959,https://twitter.com/acmilan.//(optional)repeatedstringrelevant_url=1;//The36-charactermusicbrainzidentifieroftheartistorothermusic//entities,ifapplicable.See//https://musicbrainz.org/doc/MusicBrainz_Identifier.//(optional)stringmusicbrainz_id=2;}//Representsanentityrelatedtotheevent.messageEntity{//Uniqueidentifieroftheentityinthepartner's database. (optional)stringid=1;//Nameoftheentity.(required)stringname=2;//Urlofthewebpagethatunambiguouslydescribestheentity.//Thisisthewebpageonthepartner's website for the entity if any; for//otherpublicURLsoftheentity,userelevant_urlin//public_identification_data.(optional)stringurl=3;//Thetypeoftheentity.Note:notintendedtobeauniversalontology.enumEntityType{//Notspecified.Donotuse.ENTITY_TYPE_UNSPECIFIED=0;//Theentityrepresentstheartistorgroupperformingata//concertorashow.OnlyapplicablewheneventcategoryisCONCERTor//THEATRE.ENTITY_TYPE_PERFORMER=1;//Theentityrepresentsthesportsteamorplayerattheevent.Only//applicablewheneventcategoryisSPORTS.ENTITY_TYPE_PLAYER=2;//Theentityrepresentsthetourthatthiseventbelongsto.Only//applicablewheneventcategoryisCONCERT.ENTITY_TYPE_CONCERT_TOUR=3;//Theentityrepresentsasportstournamentthatthisevent//belongsto.OnlyapplicablewheneventcategoryisSPORTS.ENTITY_TYPE_SPORTS_SERIES=4;//Theentityrepresentsthetypeofplay(e.g.,musical,comedy,ballet,//etc.)performedattheevent.Onlyapplicablewheneventcategoryis//THEATRE.ENTITY_TYPE_PLAY=5;}//Thetypeoftheentity.(optional)EntityTypeentity_type=4;//Theroleoftheentityintheevent.enumEntityRole{//Notspecified.ENTITY_ROLE_UNSPECIFIED=0;//Theentityrepresentsaheadlinerorleadingperformerattheevent.ENTITY_ROLE_HEADLINER=1;//Theentityrepresentsasupportingperformerattheevent.ENTITY_ROLE_SUPPORTER=2;//Theentityrepresentsthehometeamatthe(sports)event.ENTITY_ROLE_HOME_TEAM=3;//Theentityrepresentstheawayteamatthe(sports)event.ENTITY_ROLE_AWAY_TEAM=4;}//Theroleoftheentityintheevent.(optional)EntityRoleentity_role=5;//Publicreferencesoftheentity.(optional)PublicIdentificationDatapublic_identification_data=6;}//Alistofentitiesrelatedtotheevent.(optional)repeatedEntityentity=3;//Thetypeoftheeventattendance.enumAttendanceMode{//Notspecified.ATTENDANCE_MODE_UNSPECIFIED=0;//Forvirtualevents.ONLINE=1;//Forphysicalevents.PHYSICAL=2;//Foreventsthatarebothphysicalandvirtual.PHYSICAL_ONLINE_MIXED=3;}//Required.Thetypeoftheeventattendance.AttendanceModeevent_attendance_mode=4;//Optional.URLwheretheeventcanbewatched.repeatedstringevent_virtual_location_url=5;//Optional.Organizerwhohoststheevent.Textevent_organizer=6;//Optional.URLoftheorganizerwhohoststheevent.stringevent_organizer_url=7;//Thetypeoftheorganizer.enumOrganizerType{//Notspecified.ORGANIZER_TYPE_UNSPECIFIED=0;//Fororganizerwhoisaperson.PERSON=1;//Fororganizerwhoisanorganization.ORGANIZATION=2;}//Optional.Thetypeoftheorganizer.OrganizerTypeevent_organizer_type=8;//URLofthepageswheretheeventinformationordescriptionscanbefound.//Requiredforvirtualeventsasvirtualeventsmaynothaveaticketing//pageandthisurlcontainsthebasicinformationoftheevent.repeatedstringevent_source_url=9;//Stateoftheevent.enumEventState{//Notspecified.EVENT_STATE_UNSPECIFIED=0;//Theeventisscheduled.SCHEDULED=1;//Theeventisrescheduled.RESCHEDULED=2;//Theeventiscancelled.CANCELLED=3;//Theeventispostponed.POSTPONED=4;}//Optional.Stateoftheevent.EventStateevent_state=10;//Thelocalizedbrandname.(optional)Textbrand_name=11;//Informationaboutthecreatoroftheevent.Onlyrelevantforplatforms//thatincludeuser-generatedcontentevents.messageEventCreator{//Nameoftheeventcreator.Nocharacterrestriction.stringname=1[features.field_presence=EXPLICIT];}//Informationaboutthecreatoroftheevent.EventCreatorevent_creator=12;}
//ContentfieldsspecifictoToursandActivities.Eachelementintherepeated//fieldshouldbeindependenttoallowseparaterendering(e.g.asabullet//point).////PopulatingToursAndActivitiesContentisstronglyrecommendedfortoursand//activities,butnotstrictlyrequired.Allfieldssupportbothplain-text//andHTML-liketextforbasicformatting.SupportedHTML-likeformattingtags:////Phrasetags:<br>,<strong>,<em>,<i>://Onlythefourtagsmentionedabovearesupported.<br>canbeusedto//breaklinesinparagraphs,and<strong>/<em>canbeusedtohighlight//importanttext.Anyotherphrasetagswillbeignored.////Allothertagsandcustomstylesarenotallowedandwillberemoved.Any//URLs,anchors,andlinkswillbestripped,andwillneverbedisplayedto//end-users.////Importantnotes://*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;}
HomeServiceData 的定义
// Additional information required to be provided for home service vertical.messageHomeServiceData{// The high level category to which this home service belongs to. E.g.// plumber, electrician etc.stringcategory_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.stringjob_type=2;}
// Information about how the user can pay directly to the merchant instead of// pre-paying for the service via RwG.messageDirectMerchantPayment{// Users would be advised to pay only via the payment methods mentioned below.repeatedTextpayment_methods=1;}
ServiceRankingHint 的定义
// Ranking hints for a service.messageServiceRankingHint{// 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.floatscore=1[features.field_presence=EXPLICIT];}
[null,null,["最后更新时间 (UTC):2024-11-26。"],[[["Service Feeds contain service metadata and are recommended to be uploaded in JSON format."],["Services are uniquely identified by `merchant_id` and `service_id`, and various fields define their pricing, booking policies, payment methods, and other attributes."],["`Availability` structures outline service booking windows, including duration, slots, resources, and associated rules."],["`ActionLink` structures represent interactive elements for booking, ordering, or other user actions, including platform and type specifics."],["Media, attributes, waitlists, and vertical-specific data provide supplementary information to enrich service details and cater to diverse industries."]]],[]]