ShipmentModel

運送模型包含一組運送作業,必須由一組車輛執行,同時盡可能降低整體成本,也就是下列項目的總和:

  • 車輛路線的費用 (所有車輛的總時間費用、每趟行程費用和固定費用總和)。
  • 未完成出貨的處罰。
  • 運送作業的全球持續時間成本
JSON 表示法
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
欄位
shipments[]

object (Shipment)

模型中必須執行的運送作業集合。

vehicles[]

object (Vehicle)

可用於執行拜訪的車輛組合。

globalStartTime

string (Timestamp format)

模型的全球開始和結束時間:系統不會將範圍外的時間視為有效時間。

模型的時間跨度不得超過一年,也就是 globalEndTimeglobalStartTime 之間的時間差不得超過 31536000 秒。

使用 cost_per_*hour 欄位時,您可能會將這個時間範圍設為較短的間隔,以提升效能 (例如,如果您模擬單日,應將全域時間限制設為該日)。如果未設定,系統會預設使用 1970 年 1 月 1 日 00:00:00 (世界標準時間) (即秒數:0,奈秒:0)。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

globalEndTime

string (Timestamp format)

如果未設定,系統會使用 1971 年 1 月 1 日 00:00:00 世界標準時間 (即秒數:31536000,奈秒:0) 做為預設值。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

globalDurationCostPerHour

number

整體時間表的「全球時間長度」是所有車輛最早有效開始時間和最晚有效結束時間的差距。使用者可以為該數量指派每小時成本,以便盡早完成工作。此費用必須與 Shipment.penalty_cost 使用相同的單位。

durationDistanceMatrices[]

object (DurationDistanceMatrix)

指定模型中使用的時間和距離矩陣。如果這個欄位空白,系統會根據 useGeodesicDistances 欄位的值,改用 Google 地圖或大地測量距離。如果不是空白,useGeodesicDistances 就不會是 true,且 durationDistanceMatrixSrcTagsdurationDistanceMatrixDstTags 都不能為空白。

使用範例:

  • 有兩個位置:locA 和 locB。
  • 1 輛車輛的路線起點和終點皆為 locA。
  • 在 locB 有 1 個上車地點要求。
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • 有三個位置:locA、locB 和 locC。
  • 1 輛車輛從 locA 開始路線,並在 locB 結束,使用矩陣「fast」。
  • 1 輛車輛從 locB 開始路線,並在 locB 結束,使用矩陣「slow」。
  • 1 輛車輛從 locB 開始路線,並在 locB 結束,使用矩陣「fast」。
  • 在 locC 有 1 個取件訪問要求。
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

定義時間長度和距離矩陣來源的標記;durationDistanceMatrices(i).rows(j) 定義標記 durationDistanceMatrixSrcTags(j) 與矩陣 i 中其他造訪之間的時間長度和距離。

標記對應至 VisitRequest.tagsVehicle.start_tags。給定的 VisitRequestVehicle 必須與這個欄位中的一個標記完全相符。請注意,Vehicle 的來源、目的地和矩陣標記可能相同;同樣地,VisitRequest 的來源和目的地標記也可能相同。所有標記都必須不同,且不得為空字串。如果這個欄位不為空白,durationDistanceMatrices 就必須非空白。

durationDistanceMatrixDstTags[]

string

定義時間和距離矩陣目的地的標記;durationDistanceMatrices(i).rows(j).durations(k) (resp. durationDistanceMatrices(i).rows(j).meters(k)) 會定義矩陣 i 中,從標記為 durationDistanceMatrixSrcTags(j) 的造訪到標記為 durationDistanceMatrixDstTags(k) 的造訪之間的旅程時間 (或距離)。

標記對應至 VisitRequest.tagsVehicle.start_tags。給定的 VisitRequestVehicle 必須與這個欄位中的一個標記完全相符。請注意,Vehicle 的來源、目的地和矩陣標記可能相同;同樣地,VisitRequest 的來源和目的地標記也可能相同。所有標記都必須不同,且不得為空字串。如果這個欄位不為空白,durationDistanceMatrices 就必須非空白。

transitionAttributes[]

object (TransitionAttributes)

新增至模型的轉場屬性。

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

不相容的 shipment_types 組合 (請參閱 ShipmentTypeIncompatibility)。

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

shipmentType 需求集 (請參閱 ShipmentTypeRequirement)。

precedenceRules[]

object (PrecedenceRule)

模型中必須強制執行的優先順序規則集。

maxActiveVehicles

integer

限制有效車輛數量上限。如果車輛的路線至少執行一筆運送作業,就會視為處於運作狀態。在駕駛人數少於車輛數量,且車隊車輛種類不一的情況下,您可以使用這個選項限制路線數量。系統就會選取最適合的車輛子集。必須為正值。

運送地址

單一商品的運送作業,從其中一個提貨地點到其中一個送達地點。為了讓系統將運送作業視為已完成,一輛車輛必須先前往其中一個取貨地點 (並相應減少其備用容量),然後再前往其中一個送達地點 (並相應增加其備用容量)。

JSON 表示法
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
欄位
displayName

string

使用者定義的運送貨物顯示名稱。長度上限為 63 個半形字元,可以使用 UTF-8 字元。

pickups[]

object (VisitRequest)

與運送作業相關的取貨替代方案集合。如果未指定,車輛只需要前往與送貨地點相對應的位置即可。

deliveries[]

object (VisitRequest)

與運送作業相關的替代運送選項集合。如果未指定,車輛只需前往與乘客上車地點相對應的位置即可。

loadDemands

map (key: string, value: object (Load))

裝載貨物的負載需求 (例如重量、體積、貨架數量等)。地圖中的鍵應為描述對應負載類型的 ID,最好也包含單位。例如:"weight_kg"、"volume_gallons"、"pallet_count" 等。如果指定的鍵未顯示在對應的載入中,系統會將該載入視為空值。

allowedVehicleIndices[]

integer

可能執行這項運送作業的車輛組合。如果留空,則所有車輛都可能執行該動作。車輛會依據 ShipmentModelvehicles 清單中的索引指定。

costsPerVehicle[]

number

指定透過每輛車輛運送這項貨物時產生的費用。如果已指定,則必須具備下列其中一種條件:

  • costsPerVehicleIndices 相同的元素數量。costsPerVehicle[i] 對應至車款的 costsPerVehicleIndices[i] 車輛。
  • 元素數量必須與模型中的車輛數量相同。第 i 個元素對應至模型的車輛 #i。

這些費用必須與 penaltyCost 使用相同的單位,且不得為負值。如果沒有此類費用,請將這個欄位留空。

costsPerVehicleIndices[]

integer

costsPerVehicle 適用的車輛索引。如果不為空白,則必須與 costsPerVehicle 具有相同數量的元素。車輛索引只能指定一次。如果車輛從 costsPerVehicleIndices 中排除,其費用為零。

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

指定相較於從上車地點到送達地點的最短路徑,最多可繞行的絕對時間。如果指定了這個值,則必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。

舉例來說,假設 t 是從所選取的取貨替代方案直接前往所選取的送貨替代方案所需的最短時間。然後設定 pickupToDeliveryAbsoluteDetourLimit 會強制執行以下操作:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

如果在同一筆訂單上同時指定相對和絕對限制,系統會為每個可能的取件/送達組合使用較嚴格的限制。自 2017 年 10 月起,系統只會在行程時間不受車輛影響時支援繞道。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

pickupToDeliveryTimeLimit

string (Duration format)

指定從商品開始取件到開始送達的時間長度上限。如果指定了這項屬性,則該值必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。這不取決於你為取件和送件選取的替代方案,也不取決於車輛速度。您可以同時指定這項限制和最大繞行限制:解決方案會遵循這兩項規範。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

shipmentType

string

非空白字串,指定此出貨的「類型」。這項功能可用於定義 shipment_types 之間的不相容性或需求 (請參閱 ShipmentModel 中的 shipmentTypeIncompatibilitiesshipmentTypeRequirements)。

visitTypes 不同,後者是針對單一造訪指定:屬於同一筆訂單的所有取貨/送貨都會共用相同的 shipmentType

label

string

指定此運送單的標籤。這個標籤會在對應 ShipmentRoute.VisitshipmentLabel 回應中回報。

ignore

boolean

如果為 True,則略過這項出貨作業,但不會套用 penaltyCost

如果模型中含有任何 shipmentTypeRequirements,忽略出貨作業就會導致驗證錯誤。

系統允許忽略在 injectedFirstSolutionRoutesinjectedSolutionConstraint 中執行的運送作業;解決程序會從執行路線中移除相關的取貨/送貨拜訪。precedenceRules 參照的忽略出貨項目也會遭到忽略。

penaltyCost

number

如果無法完成運送,這筆罰款會加到路線的整體費用中。如果運送員前往其中一個提貨和送貨地點,系統就會將該筆訂單視為完成。費用可以使用模型中所有其他費用相關欄位使用的單位來表示,且必須為正值。

重要事項:如果未指定這項處罰,系統會視為無限,也就是必須完成出貨。

pickupToDeliveryRelativeDetourLimit

number

指定相對於從上車地點到送達地點的最短路徑,最多可繞行的相對時間。如果指定了這個值,則必須為非負值,且運送作業至少必須包含一個取件和一個送達作業。

舉例來說,假設 t 是從所選取的取貨替代方案直接前往所選取的送貨替代方案所需的最短時間。然後設定 pickupToDeliveryRelativeDetourLimit 會強制執行以下操作:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

如果在同一筆訂單上同時指定相對和絕對限制,系統會為每個可能的取件/送達組合使用較嚴格的限制。自 2017 年 10 月起,系統只會在行程時間不受車輛影響時支援繞道。

VisitRequest

可透過車輛完成的訪客要求:包含一個或兩個地理位置 (請參閱下方說明)、以時間窗口表示的營業時間,以及服務時間長度 (車輛抵達取貨或送貨地點所需的時間)。

JSON 表示法
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
欄位
arrivalLocation

object (LatLng)

車輛執行此 VisitRequest 時抵達的地理位置。如果運送模型含有時間距離矩陣,請勿指定 arrivalLocation

arrivalWaypoint

object (Waypoint)

車輛執行這項 VisitRequest 時抵達的路線點。如果運送模型含有時間距離矩陣,請勿指定 arrivalWaypoint

departureLocation

object (LatLng)

車輛完成這個 VisitRequest 後的出發地點。如果與 arrivalLocation 相同,可以省略。如果運送模型含有時間距離矩陣,請勿指定 departureLocation

departureWaypoint

object (Waypoint)

車輛完成這個 VisitRequest 後的出發路徑點。如果與 arrivalWaypoint 相同,可以省略。如果運送模型含有時間距離矩陣,請勿指定 departureWaypoint

tags[]

string

指定附加至造訪要求的標記。不得使用空字串或重複的字串。

timeWindows[]

object (TimeWindow)

限制造訪時間的時間區間。請注意,車輛可能會在到達時間回溯期過後離開,也就是說,到達時間 + 車程時間不一定會在回溯期內。如果車輛在 TimeWindow.start_time 之前抵達,乘客可能會等待一段時間。

如果沒有 TimeWindow,表示車輛可隨時執行這項拜訪。

時間區間必須不重疊,也就是說,每個時間區間都不得與其他時間區間重疊或相鄰,且必須依遞增順序排列。

只有在單一時間範圍內,才能設定 costPerHourAfterSoftEndTimesoftEndTime

duration

string (Duration format)

行程時間,也就是車輛從抵達到離開之間的時間 (會加入可能的等候時間;請參閱 timeWindows)。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

cost

number

在車輛路線上處理這項拜訪要求的費用。你可以使用這項功能,為每項替代取貨或運送服務支付不同的費用。這個成本必須與 Shipment.penalty_cost 相同單位,且不得為負數。

loadDemands

map (key: string, value: object (Load))

載入此造訪要求的需求。這與 Shipment.load_demands 欄位相同,但只會套用至這個 VisitRequest,而非整個 Shipment。這裡列出的請求會加入 Shipment.load_demands 中列出的請求。

visitTypes[]

string

指定造訪類型。這項資訊可用於分配車輛完成這次拜訪所需的額外時間 (請參閱 Vehicle.extra_visit_duration_for_visit_type)。

一個類型只能出現一次。

label

string

指定這個 VisitRequest 的標籤。這個標籤會在回應中以對應的 ShipmentRoute.Visit 中的 visitLabel 回報。

LatLng

代表經緯度組合的物件。以一對雙精準數表示經度度數和緯度度數。除非另有指定,否則這個物件必須符合 WGS84 標準。此外,值必須在正規化範圍內。

JSON 表示法
{
  "latitude": number,
  "longitude": number
}
欄位
latitude

number

緯度度數,必須介於 [-90.0, +90.0] 的範圍之間。

longitude

number

經度度數,必須介於 [-180.0, +180.0] 的範圍之間。

途經點

封裝路線點。路標會標示 VisitRequest 的到達和離開位置,以及車輛的起點和終點。

JSON 表示法
{
  "sideOfRoad": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
欄位
sideOfRoad

boolean

選用設定。表示這個路線控點的位置是為了讓車輛偏好停靠在道路的特定側邊。設定這個值後,路線會經過該位置,讓車輛停在偏離道路中心的路邊。這個選項不適用於「步行」交通模式。

聯集欄位 location_type。表示位置的方式有很多種。location_type 只能是下列其中一項:
location

object (Location)

使用地理座標指定的點,包括選用的標頭。

placeId

string

與路標相關聯的 POI 地點 ID。

位置

封裝位置 (地理點和選用的標題)。

JSON 表示法
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
欄位
latLng

object (LatLng)

航點的地理座標。

heading

integer

與流量方向相關的指南針方位。這個值用於指定接送和下車地點的道路兩側。方向值的範圍為 0 到 360,其中 0 指定正北方向,90 指定正東方向,以此類推。

TimeWindow

時間窗可限制事件的時間,例如造訪的抵達時間,或車輛的開始和結束時間。

硬性時間範圍邊界 startTimeendTime 會強制執行事件的最早和最晚時間,例如 startTime <= event_time <= endTime。軟性時間回溯期的下限 softStartTime 表示事件發生時機應在 softStartTime 當天或之後,發生時間與事件發生前軟性開始時間的時間間隔成正比。軟性時間回溯期上限 softEndTime 表示偏好在 softEndTime 當天或之前發生事件,發生事件的時間越晚,所需成本就越高。softEndTimestartTimeendTimesoftStartTimesoftEndTime 應在全球時間限制內 (請參閱 ShipmentModel.global_start_timeShipmentModel.global_end_time),並遵守下列規定:

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
JSON 表示法
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
欄位
startTime

string (Timestamp format)

硬性時段開始時間。如果未指定,則會設為 ShipmentModel.global_start_time

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

endTime

string (Timestamp format)

硬性時間範圍的結束時間。如果未指定,則會設為 ShipmentModel.global_end_time

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

softStartTime

string (Timestamp format)

時間範圍的軟性開始時間。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

softEndTime

string (Timestamp format)

時間範圍的軟性結束時間。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

costPerHourBeforeSoftStartTime

number

如果事件發生時間早於 softStartTime,系統會將每小時費用加進模型中的其他費用,計算方式如下:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

這個成本必須為正值,且只有在已設定 softStartTime 時才能設定這個欄位。

costPerHourAfterSoftEndTime

number

如果事件發生在 softEndTime 之後,系統會將每小時費用加進模型中的其他費用,計算方式如下:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

這個成本必須為正值,且只有在設定 softEndTime 時才能設定這個欄位。

車輛

模擬出貨問題中的車輛。解決運送問題時,系統會為這輛車輛建立從 startLocationendLocation 的路線。路線是指造訪記錄的序列 (請參閱 ShipmentRoute)。

JSON 表示法
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
欄位
displayName

string

車輛的使用者定義顯示名稱。長度上限為 63 個半形字元,可以使用 UTF-8 字元。

travelMode

enum (TravelMode)

行駛模式會影響車輛可行駛的道路和速度。另請參閱 travelDurationMultiple

routeModifiers

object (RouteModifiers)

一組滿足條件,影響系統為特定車輛計算路線的方式。

startLocation

object (LatLng)

車輛開始載運貨物的地理位置。如未指定,車輛會在第一趟上車地點開始行駛。如果運送模型含有時間和距離矩陣,請勿指定 startLocation

startWaypoint

object (Waypoint)

路徑點代表車輛在取件前所在的地理位置。如果未指定 startWaypointstartLocation,車輛會在第一個上車地點開始行駛。如果運送模型含有時間和距離矩陣,請勿指定 startWaypoint

endLocation

object (LatLng)

車輛完成最後一次 VisitRequest 後的終點地理位置。如果未指定,車輛的 ShipmentRoute 會在完成最後一次 VisitRequest 後立即結束。如果運送模型含有時間和距離矩陣,請勿指定 endLocation

endWaypoint

object (Waypoint)

路標代表車輛完成最後一次 VisitRequest 後的終點地理位置。如果未指定 endWaypointendLocation,車輛的 ShipmentRoute 會在完成最後一次 VisitRequest 後立即結束。如果運送模型含有時間和距離矩陣,請勿指定 endWaypoint

startTags[]

string

指定附加至車輛路線起點的標記。

不得使用空字串或重複的字串。

endTags[]

string

指定附加在車輛路線結尾的標記。

不得使用空字串或重複的字串。

startTimeWindows[]

object (TimeWindow)

車輛可能從起點出發的時間範圍。必須在全球時間限制範圍內 (請參閱 ShipmentModel.global_* 欄位)。如未指定,則除了這些全球時間限制外,沒有其他限制。

屬於相同重複欄位的時間範圍必須不重疊,也就是說,任何時間範圍都不能與其他時間範圍重疊或相鄰,且必須按照時間順序排列。

只有在單一時間範圍內,才能設定 costPerHourAfterSoftEndTimesoftEndTime

endTimeWindows[]

object (TimeWindow)

車輛抵達目的地所需的時間範圍。必須在全球時間限制範圍內 (請參閱 ShipmentModel.global_* 欄位)。如未指定,則除了這些全球時間限制外,沒有其他限制。

屬於相同重複欄位的時間範圍必須不重疊,也就是說,任何時間範圍都不能與其他時間範圍重疊或相鄰,且必須按照時間順序排列。

只有在單一時間範圍內,才能設定 costPerHourAfterSoftEndTimesoftEndTime

unloadingPolicy

enum (UnloadingPolicy)

車輛的卸載政策。

loadLimits

map (key: string, value: object (LoadLimit))

車輛的容量 (例如重量、體積、貨架數量)。地圖中的鍵是負載類型的 ID,與 Shipment.load_demands 欄位的鍵一致。如果這個對應表中沒有特定鍵,則系統會將對應的容量視為無限。

costPerHour

number

車輛費用:所有費用加總,且必須與 Shipment.penalty_cost 使用相同的單位。

車輛路線的每小時費用。這筆費用會套用到路線的總用時,包括行程時間、等候時間和拜訪時間。使用 costPerHour 而非 costPerTraveledHour 可能會導致額外的延遲。

costPerTraveledHour

number

車輛路線的每小時行駛費用。這項費用只會套用在路線的行程時間 (即 ShipmentRoute.transitions 中回報的時間),不包括等候時間和造訪時間。

costPerKilometer

number

車輛行駛路線的每公里費用。這筆費用會套用至 ShipmentRoute.transitions 中回報的距離,但不會套用至單一 VisitRequestarrivalLocationdepartureLocation 間隱含的任何移動距離。

fixedCost

number

如果這輛車輛用於處理運送作業,就會收取固定費用。

usedIfRouteIsEmpty

boolean

這個欄位只會套用至路線未提供任何貨運服務的車輛。指出在這種情況下,車輛是否應視為二手車。

如果為 true,即使車輛沒有運送任何貨物,也會從起點前往終點,且會考量從起點到終點的時間和距離成本。

否則,車輛就不會從起點前往終點,且系統不會為該車輛安排 breakRule 或延遲 (從 TransitionAttributes 開始)。在這種情況下,車輛的 ShipmentRoute 只包含車輛索引和標籤,不含其他資訊。

routeDurationLimit

object (DurationLimit)

限制車輛路線的總時間。在特定 OptimizeToursResponse 中,車輛的路線時間長度是 vehicleEndTimevehicleStartTime 的差異。

travelDurationLimit

object (DurationLimit)

套用至車輛路線的車程時間限制。在特定 OptimizeToursResponse 中,路線行程時間是所有 transitions.travel_duration 的總和。

routeDistanceLimit

object (DistanceLimit)

套用至車輛路線總距離的限制。在指定的 OptimizeToursResponse 中,路線距離是所有 transitions.travel_distance_meters 的總和。

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

指定從 visitTypes 字串到時間長度的對應項目。時間長度是指在指定 visitTypes 的造訪中,除了 VisitRequest.duration 之外所需的時間。如果指定 costPerHour,這段額外的造訪時間會增加成本。鍵 (例如 visitTypes) 不得為空字串。

如果造訪要求包含多種類型,地圖會為每種類型新增一段時間。

breakRule

object (BreakRule)

說明要對這輛車輛強制執行的休息時間表。如果為空白,則不會為這輛車輛安排休息時間。

label

string

指定此車輛的標籤。這個標籤會在回應中以對應 ShipmentRoutevehicleLabel 回報。

ignore

boolean

如果為 true,usedIfRouteIsEmpty 必須為 false,且這輛車輛仍未使用。

如果在 injectedFirstSolutionRoutes 中,運送作業是由已略過的車輛執行,則系統會在第一個解決方案中略過該作業,但可在回應中執行。

如果運送作業是由 injectedSolutionConstraint 中遭到忽略的車輛執行,且任何相關的接送/送達作業都受到限制,必須留在車輛上 (也就是未放寬至 RELAX_ALL_AFTER_THRESHOLD 層級),系統會在回應中略過該作業。如果運送單有非空白的 allowedVehicleIndices 欄位,且所有允許的車輛都遭到忽略,系統就會在回應中略過該運送單。

travelDurationMultiple

number

指定可用於增加或減少此車輛行駛時間的乘數。舉例來說,如果將此值設為 2.0,表示這輛車的速度較慢,且行駛時間是標準車輛的兩倍。這個係數不會影響造訪時間長度。但如果指定 costPerHourcostPerTraveledHour,則會影響費用。必須介於 [0.001, 1000.0] 的範圍之間。如果未設定,則車輛為標準車輛,且這個倍數會視為 1.0。

警告:在套用這個倍數後,但在執行任何數值運算之前,系統會將行程時間四捨五入至最近的秒,因此如果倍數過小,可能會導致精確度降低。

另請參閱下方的 extraVisitDurationForVisitType

TravelMode

車輛可使用的行程模式。

這些應為 Google 地圖平台路線偏好 API 的部分交通模式,請參閱:https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode

列舉
TRAVEL_MODE_UNSPECIFIED 未指定的交通方式,等同於 DRIVING
DRIVING 與駕駛路線相對應的交通模式 (汽車、...)。
WALKING 步行路線對應的交通方式。

RouteModifiers

封裝一組可選條件,用於計算車輛路線時必須滿足的條件。這與 Google 地圖平台路線偏好 API 中的 RouteModifiers 類似;請參閱:https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers

JSON 表示法
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
欄位
avoidTolls

boolean

指定是否在合理情況下避開收費道路。系統會優先提供不含收費道路的路線。僅適用於機動運輸模式。

avoidHighways

boolean

指定是否在合理情況下避開高速公路。系統會優先選擇不經過高速公路的路線。僅適用於機動運輸模式。

avoidFerries

boolean

指定是否在合理情況下避開渡輪。系統會優先提供不含渡輪的路線。僅適用於機動運輸模式。

avoidIndoor

boolean

選用設定。指定是否在合理情況下避免室內導航。系統會優先考量不含室內導航功能的路線。僅適用於 WALKING 行程模式。

UnloadingPolicy

車輛卸貨方式的政策。僅適用於同時包含自取和送達的運送作業。

其他運送作業可在路線上的任何位置執行,不受 unloadingPolicy 影響。

列舉
UNLOADING_POLICY_UNSPECIFIED 未指定卸貨政策;必須在相應的接送後才可送達。
LAST_IN_FIRST_OUT 必須以相反的順序進行配送
FIRST_IN_FIRST_OUT 運送作業必須按照取貨順序進行

LoadLimit

定義適用於車輛的負載限制,例如「這輛貨車只能載運 3500 公斤」。詳情請參閱《loadLimits》。

JSON 表示法
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string
}
欄位
softMaxLoad

string (int64 format)

負載的軟性限制。詳情請參閱《costPerUnitAboveSoftMax》。

costPerUnitAboveSoftMax

number

如果載重量超過這輛車輛路線的 softMaxLoad,系統會依據下列費用懲罰機制收取費用 (每輛車輛只會收取一次):(載重量 - softMaxLoad) * costPerUnitAboveSoftMax。所有費用加總起來,且必須與 Shipment.penalty_cost 使用相同的單位。

startLoadInterval

object (Interval)

車輛在路線起點的允許載客量間隔。

endLoadInterval

object (Interval)

車輛在路線結束時可接受的載客量間隔。

maxLoad

string (int64 format)

可接受的最大負載量。

時間間隔

可接受的負載量間隔。

JSON 表示法
{
  "min": string,
  "max": string
}
欄位
min

string (int64 format)

可接受的最低負載。必須大於或等於 0。如果同時指定這兩個值,min 必須小於或等於 max

max

string (int64 format)

可接受的最大負載。必須大於或等於 0。如果未指定,則此訊息不會限制最大負載。如果同時指定這兩個值,min 必須小於或等於 max

DurationLimit

定義車輛路線的時間上限。可以是硬式或軟式。

定義軟性上限欄位時,必須一併定義軟性上限門檻及其相關費用。

JSON 表示法
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
欄位
maxDuration

string (Duration format)

硬性限制,限制時間長度不得超過 maxDuration。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

softMaxDuration

string (Duration format)

軟性限制不會強制執行時間長度上限,但如果違反規定,路線就會產生費用。這項費用會與模型中定義的其他費用相加,並使用相同的單位。

如果已定義,softMaxDuration 不得為負數。如果也定義了 maxDuration,softMaxDuration 必須小於 maxDuration。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

quadraticSoftMaxDuration

string (Duration format)

軟性限制不會強制執行最大時間長度限制,但如果違反限制,路線就會產生費用,且費用會隨著時間呈現平方關係。這項費用會與模型中定義的其他費用相加,並使用相同的單位。

如果已定義,quadraticSoftMaxDuration 不得為負數。如果同時定義了 maxDurationquadraticSoftMaxDuration 必須小於 maxDuration,且兩者之間的差距不得超過一天:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

costPerHourAfterSoftMax

number

違反 softMaxDuration 門檻時,每小時產生的費用。如果時間長度低於門檻,額外費用為 0,否則費用取決於時間長度,如下所示:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

費用必須為非負值。

costPerSquareHourAfterQuadraticSoftMax

number

違反 quadraticSoftMaxDuration 門檻時,每平方小時的費用。

如果時間長度低於門檻,額外費用為 0,否則費用取決於時間長度,如下所示:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

費用必須為非負值。

DistanceLimit

定義可行駛的最大距離。可以是硬式或軟式。

如果定義軟性限制,softMaxMeterscostPerKilometerAboveSoftMax 都必須定義且為非負值。

JSON 表示法
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
欄位
maxMeters

string (int64 format)

硬性限制,限制距離不得超過 maxMeters。限制值不得為負數。

softMaxMeters

string (int64 format)

軟性限制不會強制執行最大距離限制,但如果違反限制,則會產生費用,並與模型中定義的其他費用相加,使用相同的單位。

如果已定義,則 softMaxMeters 必須小於 maxMeters,且必須為非負值。

costPerKilometerBelowSoftMax

number

每公里費用 (最高 softMaxMeters),公式如下:

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

routeDistanceLimit 不支援這項費用。

costPerKilometerAboveSoftMax

number

如果距離超過 softMaxMeters 上限,則會產生每公里費用。如果距離低於限制,額外費用為 0,否則計算費用的公式如下:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

費用必須為非負值。

BreakRule

產生車輛休息時間的規則 (例如午餐休息時間)。休息時間是指車輛在目前位置處於閒置狀態,無法執行任何拜訪的連續時間。可能會發生中斷的情況如下:

  • 在兩次造訪之間的轉換時間 (包括造訪前或造訪後的時間,但不包括造訪期間),在這種情況下,系統會延長造訪之間的對應轉換時間,
  • 或在車輛發動前 (車輛可能不會在休息期間發動),這不會影響車輛發動時間。
  • 或在車輛結束後 (同樣地,請提供車輛結束時間)。
JSON 表示法
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
欄位
breakRequests[]

object (BreakRequest)

中斷序列。請參閱 BreakRequest 訊息。

frequencyConstraints[]

object (FrequencyConstraint)

可能會套用多個 FrequencyConstraint。這些值都必須符合這個 BreakRuleBreakRequest。請參閱 FrequencyConstraint

BreakRequest

您必須事先知道適用於每輛車的休息時間序列 (即數量和順序)。重複的 BreakRequest 會定義該序列,並按照必須發生的順序排列。兩者的時間範圍 (earliestStartTime / latestStartTime) 可能會重疊,但必須與訂單相容 (系統會檢查這項條件)。

JSON 表示法
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
欄位
earliestStartTime

string (Timestamp format)

必要欄位。休息時間開始時間的下限 (包含在內)。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

latestStartTime

string (Timestamp format)

必要欄位。休息時間開始的上限 (包含在內)。

RFC3339 世界標準時間「Zulu」格式的時間戳記,精確度達奈秒單位,最多九個小數位數。例如 "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

minDuration

string (Duration format)

必要欄位。插播時間長度下限。必須為正數。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

FrequencyConstraint

您可以進一步限制上述指定的插播廣告頻率和時間長度,例如強制設下最小插播廣告頻率,例如「每 12 小時至少要插播 1 次廣告」。假設這可解讀為「在任何 12 小時的滑動時間窗格內,至少須有一次至少 1 小時的休息時間」,則該範例會轉譯為下列 FrequencyConstraint

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

除了 BreakRequest 中已指定的時間區間和最短時間長度外,解決方案中的插播時間和插播時間長度都會遵循所有這類限制。

FrequencyConstraint 實際上可能會套用於非連續的廣告插播。舉例來說,以下時程會遵循「每 12 小時 1 小時」的範例:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
JSON 表示法
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
欄位
minBreakDuration

string (Duration format)

必要欄位。此限制的插播時間長度下限。非負值。請參閱 FrequencyConstraint 的說明。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

maxInterBreakDuration

string (Duration format)

必要欄位。路徑中不含 duration >= minBreakDuration 中斷的部分,允許的時間間隔上限。必須為正數。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

DurationDistanceMatrix

指定從造訪和車輛起點到造訪和車輛終點的時間和距離矩陣。

JSON 表示法
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
欄位
rows[]

object (Row)

指定時間長度和距離矩陣的資料列。必須與 ShipmentModel.duration_distance_matrix_src_tags 具有相同數量的元素。

vehicleStartTag

string

標記定義這個時間長度和距離矩陣適用於哪些車輛。如果留空,則會套用至所有車輛,且只能有單一矩陣。

每個車輛啟動都必須與單一矩陣相符,也就是說,其中的 startTags 欄位必須與矩陣的 vehicleStartTag 相符 (且只相符一個矩陣)。

所有矩陣都必須有不同的 vehicleStartTag

指定時間長度和距離矩陣的資料列。

JSON 表示法
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
欄位
durations[]

string (Duration format)

特定資料列的時間長度值。必須與 ShipmentModel.duration_distance_matrix_dst_tags 具有相同數量的元素。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

meters[]

number

特定資料列的距離值。如果模型中沒有任何成本或限制參照距離,可以將這個屬性設為空白;否則,這個屬性必須包含與 durations 相同數量的元素。

TransitionAttributes

指定路徑上兩次連續造訪之間的轉換屬性。同一個轉換可能會套用多個 TransitionAttributes:在這種情況下,所有額外費用會相加,並套用最嚴格的限制或上限 (遵循自然的「AND」語義)。

JSON 表示法
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
欄位
srcTag

string

定義這些屬性適用的 (src->dst) 轉場組合。

來源造訪或車輛啟動活動的 VisitRequest.tagsVehicle.start_tags 必須包含 srcTag,或不包含 excludedSrcTag (視這兩個欄位是否為空白而定),才能與來源造訪或車輛啟動活動相符。

excludedSrcTag

string

請參閱 srcTagsrcTagexcludedSrcTag 中必須有一個值不為空白。

dstTag

string

只有在 VisitRequest.tagsVehicle.end_tags 包含 dstTag 或不包含 excludedDstTag 時,才會與目的地造訪或車輛結束相符 (取決於這兩個欄位中哪一個非空白)。

excludedDstTag

string

請參閱 dstTagdstTagexcludedDstTag 中必須有一個值不為空白。

cost

number

指定執行此轉換作業的費用。此值的單位與模型中的所有其他成本相同,且不得為負數。這筆費用會加上所有現有費用。

costPerKilometer

number

指定在執行這項轉換作業時,以每公里為單位計算的費用,並套用至實際行駛的距離。會加總車輛上指定的所有 Vehicle.cost_per_kilometer

distanceLimit

object (DistanceLimit)

指定執行此轉場效果時的移動距離限制。

自 2021 年 6 月起,我們只支援軟性限制。

delay

string (Duration format)

指定執行這項轉換時的延遲時間。

這項延遲一律會發生在完成來源造訪「後」和開始目的地造訪「前」

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

ShipmentTypeIncompatibility

根據 shipmentType 指定不同出貨之間的不相容性。系統會根據不相容模式,限制在同一條路線顯示不相容的貨件。

JSON 表示法
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
欄位
types[]

string

不相容類型的清單。兩個出貨項目在列出的 shipment_types 中不相容。

incompatibilityMode

enum (IncompatibilityMode)

套用至不相容項目的模式。

IncompatibilityMode

定義在同一條路線上,不相容的運送作業如何顯示。

列舉
INCOMPATIBILITY_MODE_UNSPECIFIED 未指定不相容模式。請一律不要使用這個值。
NOT_PERFORMED_BY_SAME_VEHICLE 在這種模式下,兩個不相容的貨物無法共用同一輛車輛。
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

對於兩個使用 NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY 不相容模式的不相容類型出貨:

  • 如果兩者都是僅接送 (不含送貨) 或僅送貨 (不含接送),則完全無法共用同一輛車。
  • 如果其中一個貨件是送貨,另一個是取貨,只要前者送達前後者取貨,兩者就能共用同一輛車輛。

ShipmentTypeRequirement

根據 shipmentType 指定不同出貨之間的要求。需求的具體內容則由需求模式定義。

JSON 表示法
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
欄位
requiredShipmentTypeAlternatives[]

string

dependentShipmentTypes 所需的替代運送類型清單。

dependentShipmentTypes[]

string

所有貨物類型在 dependentShipmentTypes 欄位中,至少需要有一個 requiredShipmentTypeAlternatives 類型的貨物,才能在同一條路線中進行拜訪。

注意:系統不允許要求鏈結,例如 shipmentType 依附自身。

requirementMode

enum (RequirementMode)

套用至需求的模式。

RequirementMode

定義路線上依附運送的顯示方式。

列舉
REQUIREMENT_MODE_UNSPECIFIED 未指定需求模式。請一律不要使用這個值。
PERFORMED_BY_SAME_VEHICLE 在這種模式下,所有「從屬」運送作業都必須與至少一個「必要」運送作業共用相同的車輛。
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME 模式下,所有「從屬」貨件在取件時,至少需要有一個「必要」貨件。

因此,「依附」貨件取件必須具備下列其中一種條件:

  • 在路線後方,或
  • 在路線上先行取件的「必要」貨件,如果「必要」貨件有運送作業,則必須在「從屬」貨件取件後執行。
IN_SAME_VEHICLE_AT_DELIVERY_TIME 與前述相同,但「依附」運送作業必須在運送時,在其車輛上有「必要」運送作業。

PrecedenceRule

兩個事件之間的優先順序規則 (每個事件都是提貨或出貨):第二個事件必須在第一個事件開始後至少 offsetDuration 才會開始。

多個優先順序可以參照相同 (或相關) 事件,例如「B 的取件發生在 A 送達後」和「C 的取件發生在 B 取件後」。

此外,優先順序只會在兩次出貨都執行時才會套用,否則會遭到忽略。

JSON 表示法
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
欄位
firstIsDelivery

boolean

指出「first」事件是否為放送事件。

secondIsDelivery

boolean

指出「第二」事件是否為遞送事件。

offsetDuration

string (Duration format)

「first」和「second」事件之間的偏移量。可以是負值。

時間長度以秒為單位,最多可有 9 個小數位數,並應以「s」結尾,例如:"3.5s"

firstIndex

integer

「first」事件的出貨索引。必須指定這個欄位。

secondIndex

integer

「second」事件的出貨索引。必須指定這個欄位。