服務動態饋給

建立及上傳服務動態饋給

建立及上傳服務動態饋給時,請務必遵循下列指示:

  • 請按照服務動態饋給中所述的規格,處理服務資料檔案。您必須使用不重複的服務資料檔案名稱進行上傳。建議您在檔案名稱中加入時間戳記,例如 service1_1633621547.json
  • 在檔案集描述元中,將 name 欄位設為 google.food_service。如需描述元檔案範例,請參閱描述元檔案 JSON 範例。 您必須為每個上傳內容使用不重複的描述檔案名稱。建議您在檔案名稱中加入時間戳記,例如 service1_1633621547.filesetdesc.json。描述元檔案必須上傳至一般安全檔案傳輸通訊協定 Dropbox。
  • 動態饋給必須每天上傳至一般安全檔案傳輸通訊協定 Dropbox,以便進行完整重新整理。
  • 如要查看一般動態饋給的安全檔案傳輸通訊協定 Dropbox 資訊,請前往合作夥伴入口網站的「Configuration > Feeds」部分。
  • 選取動態饋給 dropbox

  • 你可以在合作夥伴入口網站的「動態饋給 > 記錄」部分查看一般動態饋給擷取狀態。

定義

FoodServiceFeed 定義

// Food Ordering Team's EPA Service Feeds Spec.
message FoodServiceFeed {
  // Service feed entity data.
  repeated ServiceData data = 1;
}

ServiceData 定義

// Service feed entity data.
message ServiceData {
  oneof type {
    FoodOrderingService service = 1;
    ServiceHours service_hours = 2;
    ServiceArea service_area = 3;
    Fee fee = 4;
  }
}

訂購重新導向服務定義

message FoodOrderingService {
  // Unique identifier of the provided service.
  // Required.
  string service_id = 1;

  enum ServiceType {
    SERVICE_TYPE_UNKNOWN = 0;
    DELIVERY = 1;
    TAKEOUT = 2;
  }

  // The type of the service.
  // Required and cannot be SERVICE_TYPE_UNKNOWN.
  ServiceType service_type = 2;

  // The parent entitys ID.
  // Required.
  string parent_entity_id = 3;

  // Indicates if the entity is disabled.
  // Optional.
  bool disabled = 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.
  ETA lead_time = 5;

  // Parent action detail's link ID.
  // Required.
  string action_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.
message ETA {
  // Indicates a range of ETA duration.;;
}

費用定義

message Fee {
  // Unique identifier to the Fee entity.
  // Required.
  string fee_id = 1;

  enum FeeType {
    FEE_TYPE_UNKNOWN = 0;
    DELIVERY = 1;
    SERVICE = 2;
  }

  // Indicates the nature of the service, e.g. delivery fee/service fee.
  // Required.
  FeeType fee_type = 2;

  oneof amount {
    option (validator.one_of) = {

    // A fixed amount of fees to be collected.
    google.type.Money fixed_amount = 3;

    // A range of fees that could be collected. Will mirror
    // madden.ingestion.MoneyRange for the starting point.
    MoneyRange range_amount = 4;

    // Fees in terms of amount percentage. Will mirror
    // madden.ingestion.QuantitativeValue for the starter.
    PercentageBasedFee cart_percentage = 5;
  }

  // Service association needs to be provided.
  // Required.
  repeated string service_ids = 6;

  // Service area can be provided to further restrict eligibility of the
  // fee.
  // Optional.
  repeated string area_ids = 7;
}

MoneyRange 定義

// Wrapper for a range of monetary amount that could be bounded or unbounded.
// At least one of min_amount or max_amount is required.
message MoneyRange {
  // Minimum amount.
  google.type.Money min_amount = 1;

  // Maximum amount.
  google.type.Money max_amount = 2;
}

PercentageBasedFee 定義

// Variable fee which changes based on the price of the order.
message PercentageBasedFee {
  // Optional, base fee not including the variable percentage based fee.
  google.type.Money base_value = 1;

  // Optional, overall range of possible values of the PercentageBasedFee.
  MoneyRange range = 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.
  double percentage_of_cart_value =
      3;
}

ServiceArea 定義

message ServiceArea {
  // Unique identifier.
  // Required.;

  // Identifier to the parent service entity.
  // Required.;

  // One of the following needs to be provided to define the service area.
  // Required.
  oneof region {
    option (validator.one_of) = {

    GeoCircle circle = 3;
    Locality locality = 4;
    Polygon polygon = 5;
  }

  // Sets to true if the assigned area is excluded from serving.
  // Optional.
  optional bool excluded_area = 6;
}

GeoCircle 定義

// Geographical circular area described by a point and radius.
message GeoCircle {
  // Geographical center of the area.
  // Required.
  google.type.LatLng center =;

  // Radius for the circular area, in meters. Must be greater than 0.
  // Required.;
}

地區定義

// Geolocation of interests.
message Locality {;

  // Postal code in the country's local format in string.
  string postal_code =;
}

多邊形定義

// Represents a polygon shaped region.
message Polygon {
  reserved 1;

  // List of S2Loops which defines a polygon. A point is considered in the
  // polygon if it is contained in odd number of loops.;
}

迴圈定義

// Represents a loop of geo coordinates. This should be a valid S2Loop.
message Loop {
  // Points making the boundary of loop.
  repeated google.type.LatLng point =;
}

ServiceHours 定義

// Service hours entity for ASAP/Advance orders.
message ServiceHours {
  // Unique identifier of the provided advance service hours.
  // Required.
  string hours_id =
      1;

  // The unique identifier of the Service entity correlated to this ServiceHours
  // entity.
  // Required.
  repeated string service_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.
  repeated AsapTimeWindow asap_hours = 3;
  repeated AdvanceTimeWindow advance_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.
  repeated TimeOfDayWindow orderable_time = 5;

  // Indicates if the service hours are for special occasions
  // (e.g. Thanksgiving/...)
  // Optional
  bool special_hour = 6;
  // A timestamp window indicating the validity of the special hours.
  // Optional. Required if it's special hours.
  ValidityRange validity_range = 7;
}

AsapTimeWindow 定義

message AsapTimeWindow {
  // A time window the ASAP order can be placed and fulfilled.
  // Required.
  TimeOfDayWindow time_windows = 1;

  // Indicates the lead time, specific to service_time, the service can
  // be fulfilled.
  // Optional.
  ETA lead_time = 2;
}

AdvanceTimeWindow 定義

// The fulfillment time window for advance orders.
message AdvanceTimeWindow {
  // A time window the advance order can be fulfilled.
  // Required.
  TimeOfDayWindow time_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.
  DurationInterval advance_booking_interval = 2;
}

TimeOfDayWindow 定義

// The TimeWindow object is a composite entity that describes a list
// of windows the user's order can be either placed or fulfilled.
message TimeOfDayWindow {
  // The time window the order can be placed/fulfilled.
  // Required.
  TimeOfDayRange time_windows = 1;
  // The list of days in a week the windows are applied.
  // Required. If not given, we assume 7 days a week.
  repeated google.type.DayOfWeek day_of_week = 2;
}

ValidityRange 定義

// A closed-open timestamp range.
message ValidityRange {
  // The beginning time of the range (inclusive).
  // Optional.
  google.protobuf.Timestamp valid_from_time = 1;
  // The ending time of the range (exclusive).
  // Optional.
  google.protobuf.Timestamp valid_through_time = 2;
}

DurationInterval 定義

// A closed-open duration range.
message DurationInterval {
  // The minimum duration (inclusive).
  // Required.
  google.protobuf.Duration min_offset = 1;
  // The maximum duration (exclusive).
  // Required.
  google.protobuf.Duration max_offset = 2;
}

TimeOfDayRange 定義

// A closed-open time range.
message TimeOfDayRange {
  // A Time indicating the beginning time of the day of the range (inclusive).
  // Required. If not given, we assume 00:00:00.
  google.type.TimeOfDay open_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.TimeOfDay close_time = 2;
}

外部 Proto 參照:

服務動態饋給範例

服務動態饋給

檔案名稱:services1_1697754089.json

{
  "data": [
    {
      "service": {
        "service_id": "service/dining-1",
        "service_type": "DELIVERY",
        "parent_entity_id": "dining-1",
        "lead_time": {
          "min_lead_time_duration": "600s",
          "max_lead_time_duration": "1800s"
        },
        "action_link_id": "delivery_link/dining-1"
      }
    },
    {
      "fee": {
        "fee_id": "fee/dining-1",
        "fee_type": "DELIVERY",
        "fixed_amount": {
          "currency_code": "USD",
          "units": 2,
          "nanos": 400000000
        },
        "service_ids": ["service/dining-1"]
      }
    }
  ]
}

描述元檔案

檔案名稱:services1_1697754089.filesetdesc.json

{
  "generation_timestamp": 1697754089,
  "name": "google.food_service",
  "data_file": ["services1_1697754089.json"]
}