建立及上傳服務動態饋給
建立及上傳服務動態饋給時,請按照下列操作說明進行:
- 請按照服務動態饋給所述規格,提供服務資料檔案。建議每次上傳時,都為服務資料檔案命名專屬名稱。
在檔案名稱中加入時間戳記,例如
service_1633621547.json。 - 在檔案集描述元中,將
name欄位設為google.food_service。如需描述元檔案範例,請參閱 JSON 範例。 建議您為每次上傳作業使用專屬的描述元檔案名稱。 在檔案名稱中加入時間戳記,例如service_1633621547.filesetdesc.json。 描述元檔案必須上傳至一般 SFTP 伺服器。 - 每天將動態饋給上傳至一般安全檔案傳輸通訊協定伺服器,進行完整重新整理。
- 你可以在合作夥伴入口網站的「設定」>「動態饋給」部分找到 SFTP 伺服器詳細資料。
- 在合作夥伴入口網站的「動態饋給」>「記錄」部分,查看動態饋給擷取狀態。
定義
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; } }
訂購重新導向服務定義
// (-- LINT.IfChange --) 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 entity’s ID. // Required. string parent_entity_id = 3; // Indicates if the entity is disabled. // Optional. bool disabled = 4; // 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; } // (-- // LINT.ThenChange(//depot/google3/indexing/tugela/customers/food_ordering/utils/validation_issue_converter.cc) // --)
預計抵達時間定義
// 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. // (-- LINT.IfChange --) message ETA { // Indicates a range of ETA duration. google.protobuf.Duration min_lead_time_duration = 1; google.protobuf.Duration max_lead_time_duration = 2; } // (-- // LINT.ThenChange(//depot/google3/indexing/tugela/customers/food_ordering/utils/validation_issue_converter.cc)
費用定義
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 { // 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; } // (-- // LINT.ThenChange(//depot/google3/indexing/tugela/customers/food_ordering/utils/validation_issue_converter.cc) // --)
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. // (-- LINT.IfChange --) 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. string area_id = 1; // Identifier to the parent service entity. // Required. repeated string service_ids = 2; // One of the following needs to be provided to define the service area. // Required. oneof region { 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; } // (-- // LINT.ThenChange(//depot/google3/indexing/tugela/customers/food_ordering/utils/validation_issue_converter.cc)
GeoCircle 定義
// Geographical circular area described by a point and radius. // (-- LINT.IfChange --) message GeoCircle { // Geographical center of the area. // Required. google.type.LatLng center = 1; // Radius for the circular area, in meters. Must be greater than 0. // Required. double radius = 2; }
地區定義
// Geolocation of interests. message Locality { string country_code = 1; // Postal code in the country's local format in string. string postal_code = 2; }
多邊形定義
// 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. repeated Loop loops = 2; }
迴圈定義
// 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 = 1; }
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; } // (-- // LINT.ThenChange(//depot/google3/indexing/tugela/customers/food_ordering/utils/validation_issue_converter.cc)
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. // (-- LINT.IfChange --) 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 參照:
- google.type.Money.proto
- google.type.latlng.proto
- google.type.dayofweek.proto
- google.type.timeofday.proto
- google.protobuf.duration.proto
- google.protobuf.timestamp.proto
服務動態消息範例
服務動態饋給
檔案名稱:services_1697754089_0001.json
{ "data": [ { "service": { "service_id": "delivery-dining-1-service", "service_type": "DELIVERY", "parent_entity_id": "dining-1", "lead_time": { "min_lead_time_duration": "1200s", "max_lead_time_duration": "1800s" }, "action_link_id": "delivery-dining-1" } }, { "fee": { "fee_id": "delivery-dining-1-fee", "fee_type": "DELIVERY", "fixed_amount": { "currency_code": "USD", "units": 2, "nanos": 400000000 }, "service_ids": ["delivery-dining-1-service"] } }, { "fee": { "fee_id": "delivery-dining-1-service_fee", "fee_type": "SERVICE", "fixed_amount": { "currency_code": "USD", "units": 0, "nanos": 0 }, "service_ids": ["delivery-dining-1-service"] } }, { "service": { "service_id": "takeout-dining-1-service", "service_type": "TAKEOUT", "parent_entity_id": "dining-1", "lead_time": { "min_lead_time_duration": "600s", "max_lead_time_duration": "1800s" }, "action_link_id": "takeout-dining-1" } }, { "fee": { "fee_id": "takeout-dining-1-service_fee", "fee_type": "SERVICE", "fixed_amount": { "currency_code": "USD", "units": 0, "nanos": 0 }, "service_ids": ["takeout-dining-1-service"] } } ] }
描述元檔案
檔案名稱:services_1697754089.filesetdesc.json
{
"generation_timestamp": 1697754089,
"name": "google.food_service",
"data_file": [
"services_1697754089_0001.json",
"services_1697754089_0002.json"
]
}