// Feeds declarationsyntax="proto3";import"google/protobuf/duration.proto";import"google/protobuf/timestamp.proto";import"google/type/timeofday.proto";import"google/type/dayofweek.proto";import"google/type/money.proto";import"google/type/latlng.proto";packagemadden.ingestion;// Merchant feed startsmessageEntityFeed{repeatedEntitydata=1;}//// Information about an Entity that is on the partner's platform. For example,// an Entity could be a retail store, a hospital, an online business etc.messageEntity{// An opaque string generated by the partner that identifies an Entity.// Must be unique across all entities.// Strongly recommended to only include URL-safe characters. (required)stringentity_id=1;// If present, the name, telephone, url and location are used to support// matching partner inventory with entities already present on Google. This// information will not be displayed.// The name of the Entity. (required)stringname=2;// The contact telephone number of the Entity including its country and area// codes, e.g. +14567891234. Highly recommended. (optional)stringtelephone=3;// The url of the Entity's public website. Highly recommended. (optional)stringurl=4;// The location of the Entity (required)madden.ingestion.GeoCoordinateslocation=5;}// The Geo data of a location, including latitude, longitude, and address.// At least one of [lat/lng or address] should be provided (or both).messageGeoCoordinates{// [-90, +90] degrees (inclusive). (optional)doublelatitude=1;// [-180, +180] degrees (inclusive). (optional)doublelongitude=2;// Address for a location, could either be structured or unstructured.oneofaddresses{// Postal address of the location, preferred.PostalAddressaddress=3;// An unstructured address could also be provided as a fallback.// E.g. "1600 amphitheatre parkway mountain view, ca 94043"stringunstructured_address=4;}}// The postal address for a merchant.messagePostalAddress{// The country, using ISO 3166-1 alpha-2 country code, e.g. "US" (required)stringcountry=1;// The locality/city, e.g. "Mountain View". (required)stringlocality=2;// The region/state/province, e.g. "CA". This field is only required in// countries where region is commonly a part of the address. (optional)stringregion=3;// The postal code, e.g. "94043". (required)stringpostal_code=4;// The street address, e.g. "1600 Amphitheatre Pkwy". (required)stringstreet_address=5;}// Merchant feed ends// Actions feed startsmessageActionFeed{repeatedActionDetaildata=1;}messageActionDetail{stringentity_id=2;stringlink_id=3;// Deep link for action detailstringurl=4;repeatedActionactions=1;}// Information about an Action which could be performed.messageAction{// Deprecated fields not to be reused.reserved1;oneofaction_info{FoodOrderingInfofood_ordering_info=3;}}messageFoodOrderingInfo{// Service type for food ordering action.enumServiceType{UNKNOWN=0;DELIVERY=1;TAKEOUT=2;}ServiceTypeservice_type=1[features.field_presence=IMPLICIT];}// Actions feed ends// Service feed starts// Food Ordering Team's EPA Service Feeds Spec.messageFoodServiceFeed{// Service feed entity data.repeatedServiceDatadata=1;}// Service feed entity data.messageServiceData{oneoftype{FoodOrderingServiceservice=1;ServiceHoursservice_hours=2;ServiceAreaservice_area=3;Feefee=4;}}messageFoodOrderingService{// Unique identifier of the provided service.// Required.stringservice_id=1;enumServiceType{SERVICE_TYPE_UNKNOWN=0;DELIVERY=1;TAKEOUT=2;}// The type of the service.// Required and cannot be SERVICE_TYPE_UNKNOWN.ServiceTypeservice_type=2;// The parent entity’s ID.// Required.stringparent_entity_id=3;// Indicates if the entity is disabled.// Optional.booldisabled=4[features.field_presence=EXPLICIT];// The lead time given in the service entity will apply to all// the service hours unless an overridden property is set in the// service hours entity.// Required.ETAlead_time=5;// Parent action detail's link ID.// Required.stringaction_link_id=6;}// Lead time range [min, max). At least one of min or max needs to be provided.// A fixed value can be provided by setting both min and max to the same value.messageETA{// Indicates a range of ETA duration.google.protobuf.Durationmin_lead_time_duration=1;google.protobuf.Durationmax_lead_time_duration=2;}messageFee{// Unique identifier to the Fee entity.// Required.stringfee_id=1;enumFeeType{FEE_TYPE_UNKNOWN=0;DELIVERY=1;SERVICE=2;}// Indicates the nature of the service, e.g. delivery fee/service fee.// Required.FeeTypefee_type=2;oneofamount{// A fixed amount of fees to be collected.google.type.Moneyfixed_amount=3;// A range of fees that could be collected. Will mirror// madden.ingestion.MoneyRange for the starting point.MoneyRangerange_amount=4;// Fees in terms of amount percentage. Will mirror// madden.ingestion.QuantitativeValue for the starter.PercentageBasedFeecart_percentage=5;}// Service association needs to be provided.// Required.repeatedstringservice_ids=6;// Service area can be provided to further restrict eligibility of the// fee.// Optional.repeatedstringarea_ids=7;}// Wrapper for a range of monetary amount that could be bounded or unbounded.// At least one of min_amount or max_amount is required.messageMoneyRange{// Minimum amount.google.type.Moneymin_amount=1;// Maximum amount.google.type.Moneymax_amount=2;}// Variable fee which changes based on the price of the order.messagePercentageBasedFee{// Optional, base fee not including the variable percentage based fee.google.type.Moneybase_value=1;// Optional, overall range of possible values of the PercentageBasedFee.MoneyRangerange=2;// Optional, percentage representing an additional variable fee based on// the cart subtotal. E.g. 15.0 represents a fee of 15% of the cart.doublepercentage_of_cart_value=3;}messageServiceArea{// Unique identifier.// Required.stringarea_id=1;// Identifier to the parent service entity.// Required.repeatedstringservice_ids=2;// One of the following needs to be provided to define the service area.// Required.oneofregion{GeoCirclecircle=3;Localitylocality=4;Polygonpolygon=5;}// Sets to true if the assigned area is excluded from serving.// Optional.optionalboolexcluded_area=6;}// Geographical circular area described by a point and radius.messageGeoCircle{// Geographical center of the area.// Required.google.type.LatLngcenter=1;// Radius for the circular area, in meters. Must be greater than 0.// Required.doubleradius=2;}// Geolocation of interests.messageLocality{stringcountry_code=1;// Postal code in the country's local format in string.stringpostal_code=2;}// Represents a polygon shaped region.messagePolygon{reserved1;// List of S2Loops which defines a polygon. A point is considered in the// polygon if it is contained in odd number of loops.repeatedLooploops=2;}// Represents a loop of geo coordinates. This should be a valid S2Loop.messageLoop{// Points making the boundary of loop.repeatedgoogle.type.LatLngpoint=1;}// Service hours entity for ASAP/Advance orders.messageServiceHours{// Unique identifier of the provided advance service hours.// Required.stringhours_id=1;// The unique identifier of the Service entity correlated to this ServiceHours// entity.// Required.repeatedstringservice_ids=2;// The hours the orders can be fulfilled. For ASAP services, this is also// orderable time.// One of the fields (asap_hours/advance_hours) is required to be set.repeatedAsapTimeWindowasap_hours=3;repeatedAdvanceTimeWindowadvance_hours=4;// When advance ordering services, this is the time windows the orders can be// placed.// Required when advance_hour is given. Invalid when asap_hour is given.repeatedTimeOfDayWindoworderable_time=5;// Indicates if the service hours are for special occasions// (e.g. Thanksgiving/...)// Optionalboolspecial_hour=6;// A timestamp window indicating the validity of the special hours.// Optional. Required if it's special hours.ValidityRangevalidity_range=7;}messageAsapTimeWindow{// A time window the ASAP order can be placed and fulfilled.// Required.TimeOfDayWindowtime_windows=1;// Indicates the lead time, specific to service_time, the service can// be fulfilled.// Optional.ETAlead_time=2;}// The fulfillment time window for advance orders.messageAdvanceTimeWindow{// A time window the advance order can be fulfilled.// Required.TimeOfDayWindowtime_windows=1;// a window that an advance order can be placed. For example, an advance// order must be placed at least 60 minutes ahead and not exceeding 2// days, the interval would be [PT60M, P2D).// Optional.DurationIntervaladvance_booking_interval=2;}// The TimeWindow object is a composite entity that describes a list// of windows the user's order can be either placed or fulfilled.messageTimeOfDayWindow{// The time window the order can be placed/fulfilled.// Required.TimeOfDayRangetime_windows=1;// The list of days in a week the windows are applied.// Required. If not given, we assume 7 days a week.repeatedgoogle.type.DayOfWeekday_of_week=2;}// A closed-open timestamp range.messageValidityRange{// The beginning time of the range (inclusive).// Optional.google.protobuf.Timestampvalid_from_time=1;// The ending time of the range (exclusive).// Optional.google.protobuf.Timestampvalid_through_time=2;}// A closed-open duration range.messageDurationInterval{// The minimum duration (inclusive).// Required.google.protobuf.Durationmin_offset=1;// The maximum duration (exclusive).// Required.google.protobuf.Durationmax_offset=2;}// A closed-open time range.messageTimeOfDayRange{// A Time indicating the beginning time of the day of the range (inclusive).// Required. If not given, we assume 00:00:00.google.type.TimeOfDayopen_time=1;// A Time indicating the ending time of the day of the range (exclusive).// Required. If not given, we assume 23:59:59.google.type.TimeOfDayclose_time=2;}// Service feed ends
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-03-01 UTC."],[[["This document outlines the protocol buffer schema for ingesting merchant, action, and service data related to food ordering."],["It defines message structures for entities, actions (like food ordering), services (delivery, takeout), fees, service areas, and operating hours."],["Entities represent businesses with details like name, location, and contact information, linked to actions and services they offer."],["Services specify offerings like delivery or takeout, including details about fees, service areas, and operational hours with ASAP and advance ordering options."],["Data is organized into feeds (EntityFeed, ActionFeed, FoodServiceFeed) for efficient ingestion and processing."]]],["The content defines proto files for data exchange, detailing structures for merchant, action, and service feeds. Key actions include: defining `Entity` data (ID, name, contact, location), `GeoCoordinates` (latitude, longitude, address), and `PostalAddress`. It outlines `ActionDetail` structures linking entities to actions, like `FoodOrderingInfo` (delivery/takeout). The `ServiceFeed` specifies `FoodOrderingService` (type, lead time, parent entity), fees (`FeeType`, `Money`, `MoneyRange`, `PercentageBasedFee`), `ServiceArea` (geo-fencing), and `ServiceHours` for order placement and fulfillment (`AsapTimeWindow`, `AdvanceTimeWindow`).\n"]]