API Dispatch (Ottimizzazione Percorsi)

Usa Dispatch per ottimizzare percorsi su più veicoli e molti stop. Dispatch restituisce un percorso ordinato per veicolo con tempi, distanza e assegnazioni per delivery routing, field service, corrieri e pianificazione flotte.

Panoramica dell'API Dispatch di TrackRoad che mostra veicoli e stop trasformati in percorsi ottimizzati
Dispatch assegna gli stop su più veicoli e restituisce percorsi ottimizzati con ordine delle fermate, ETA, distanza e durata per ogni veicolo.

Ti serve il contratto completo?

Usa Swagger per i modelli REST e il WSDL per i dettagli di integrazione SOAP.

Apri Swagger UI Apri SOAP WSDL Panoramica Riferimento API

Indice dei contenuti

  1. Cosa fa Dispatch
  2. Modalità Optima, Time Window e TimeWindowDepot
  3. Pickup e consegne multiple
  4. Endpoint e URL di base
  5. Autenticazione
  6. Schema della richiesta
  7. Schema della risposta
  8. Errori comuni
  9. Best practice
  10. Endpoint correlati
  11. FAQ

Cosa fa Dispatch#

Dispatch risolve un problema di instradamento multiveicolo. Assegna gli stop ai veicoli e ordina ogni percorso usando vincoli come finestre temporali, capacità, priorità e posizioni di partenza o arrivo.

LatLong è preferibile. Ogni stop dovrebbe includere LatLong quando possibile. Se LatLong non è fornito, devi indicare Address affinché il servizio possa geocodificare lo stop.

Il metodo Dispatch accetta un elenco di veicoli e un elenco di location di stop. Ogni veicolo può includere una posizione di partenza e una posizione finale facoltativa. Ogni location può contenere nome, campi indirizzo, latitudine e longitudine.

Se latitudine e longitudine sono presenti, TrackRoad le usa direttamente. In caso contrario, il servizio geocodifica l'indirizzo per ottenere le coordinate.

Dispatch restituisce elementi veicolo. Ogni elemento veicolo contiene il percorso assegnato come elenco ordinato di stop, ottimizzato in base a posizione, capacità, tempi e altri fattori di routing.

Quando è disponibile un solo veicolo, Dispatch esegue solo l'ottimizzazione del percorso. Le modalità di dispatch contano soprattutto quando sono disponibili più veicoli.

Se non sai quale modalità di dispatch usare, inizia con Auto. Per un'ottimizzazione a veicolo singolo altamente accurata, usa Optima.

Modalità Optima, Time Window e TimeWindowDepot#

In alcuni linguaggi potrebbe non essere possibile passare un datetime nullo. In tal caso, usa 0001-01-01T00:00:00. Le date precedenti alla soglia del sistema vengono trattate come valori null.

Per risultati migliori, usa DispatchMode Optima.

Tre variabili influenzano il comportamento del dispatch con finestre temporali:

  • CanArriveEarly
  • TimeConstraintArrival
  • TimeConstraintDeparture

Opzione 1: CanArriveEarly = true

Quando CanArriveEarly è true, la finestra temporale inizia all'inizio della giornata. Se TimeConstraintArrival è null, lo stop può essere visitato in qualsiasi momento del giorno. Se TimeConstraintArrival è impostato, definisce l'ultimo orario di arrivo accettabile. L'orario di partenza viene ignorato.

Opzione 2: CanArriveEarly = false

Quando CanArriveEarly è false, arrivo e partenza definiscono la finestra temporale consentita. Se l'arrivo è impostato e la partenza è null, lo stop viene trattato come un appuntamento preciso. Se entrambi sono impostati, TrackRoad cerca di visitare lo stop entro quell'intervallo.

Opzione 3: Due finestre temporali

Puoi anche specificare una seconda finestra temporale usando TimeConstraintArrival2 e TimeConstraintDeparture2. È utile quando uno stop può essere visitato solo in due periodi distinti, ad esempio con restrizioni di consegna nel centro città. TimeWindowDepot segue la stessa logica ma presume che i veicoli partano e terminino da un deposito comune.

Le pause possono essere modellate con LocationType = Break. Le catene di pickup e consegna multiple supportano una sola finestra temporale di consegna a livello di consegna e quel vincolo temporale figlio non può essere più restrittivo del vincolo padre.

Pickup e consegne multiple#

Dispatch supporta il chaining di pickup e consegne. È utile per operazioni di corriere e workflow in cui uno stop deve essere visitato prima di un altro.

Usa Midway per il primo stop di una catena e Delivery per specificare la location successiva correlata. Usa DeliveryNonStop per determinare se la consegna collegata deve avvenire immediatamente o può avvenire più tardi nello stesso percorso.

Ad esempio, se un pacco viene ritirato alla location B e consegnato alla location M, TrackRoad preserva la relazione richiesta tra ritiro e consegna continuando a ottimizzare il percorso rispetto agli stop rimanenti.

DeliveryNonStop = true

Quando DeliveryNonStop è true, lo stop di consegna collegato deve essere visitato immediatamente dopo lo stop di pickup.

DeliveryNonStop = false

Quando DeliveryNonStop è false, la consegna collegata deve comunque avvenire dopo il pickup, ma non necessariamente subito.

Puoi concatenare più consegne, come B → M → N, impostando Delivery e KeepSameOrder su ogni stop collegato.

Per i lavori di andata e ritorno, definisci ritiro, consegna e ritorno come una catena. Una raccomandazione comune è DeliveryNonStop = false e KeepSameOrder = true per un'ottimizzazione più flessibile mantenendo l'ordine di business.

Esempio TrackRoad API di stop andata e ritorno
Esempio: stop di andata e ritorno.
Esempio TrackRoad API di percorso andata e ritorno
Esempio: percorso di andata e ritorno.

Endpoint e URL di base#

REST

Voce Valore
URL di base https://trackservice.trackroad.com
Endpoint POST /rest/dispatch
URL completo https://trackservice.trackroad.com/rest/dispatch
Content-Type application/json

SOAP

Voce Valore
Endpoint https://trackservice.trackroad.com/TrackService.asmx
WSDL https://trackservice.trackroad.com/TrackService.asmx?WSDL
Metodo Dispatch
SOAPAction http://trackservice.trackroad.com/Dispatch

SOAP usa gli stessi modelli DispatchSpecification e DispatchResult. La differenza principale è l'envelope SOAP e l'autenticazione basata su header.

Autenticazione#

Autenticazione REST (X-API-Key)

Includi il tuo TrackServiceKey nell'header X-API-Key in ogni richiesta. Genera la chiave nel tuo account TrackRoad su Autenticazione API .

curl -X POST "https://trackservice.trackroad.com/rest/dispatch" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_TRACKSERVICEKEY" \
  -d '{ "RoutingService": 0, "DistanceUnit": 0, "RouteOptimize": 0, "Vehicles": [], "Locations": [] }'

Conserva le chiavi API lato server. Non incorporare chiavi in codice browser o client mobile.

Autenticazione SOAP (SessionIDHeader)

Per le richieste SOAP, invia il tuo TrackServiceKey in SessionIDHeader come SessionID. Login e Logout legacy non sono necessari quando usi l'autenticazione TrackServiceKey.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <SessionIDHeader xmlns="http://trackservice.trackroad.com/">
      <SessionID>YOUR_TRACKSERVICEKEY</SessionID>
    </SessionIDHeader>
  </soap:Header>
  <soap:Body>
    <Dispatch xmlns="http://trackservice.trackroad.com/">
      <specification>
        <RoutingService>0</RoutingService>
        <DistanceUnit>0</DistanceUnit>
        <RouteOptimize>0</RouteOptimize>
        <Vehicles />
        <Locations />
      </specification>
    </Dispatch>
  </soap:Body>
</soap:Envelope>

Namespace e prefissi SOAP possono variare in base al tooling. Un client generato da WSDL è di solito l'opzione più semplice.

Schema della richiesta#

Il body della richiesta è un singolo oggetto: DispatchSpecification. Come minimo, fornisci veicoli e location.

DispatchSpecification

Proprietà Tipo Obbligatorio Descrizione
RoutingServiceint (enum)NoMotore di routing. 0 = NetRoad, 1 = TrackRoad, 2 = Bing. Consigliato: 0 = NetRoad.
IsNeedMatchCodeboolNoSe true, include i codici di qualità del geocoding dove rilevanti.
CurrentTimestring (date-time)NoRiferimento temporale corrente usato per i vincoli di tempo in formato ISO 8601.
DispatchModeint (enum)NoStrategia di ottimizzazione. Per i suggerimenti sulle modalità, vedi Modalità Dispatch.
MinimumOptimizationintNoSoglia di intensità dell'ottimizzazione. Intervallo tipico: da 1 a 10.
DistanceUnitint (enum)No0 = Miglio, 1 = Chilometro.
RouteOptimizeint (enum)No0 = MinimizeTime, 1 = MinimizeDistance. Consigliato: 0 = MinimizeTime.
VehiclesVehicle[]NoVeicoli disponibili per il dispatch.
LocationsLocation[]Stop da assegnare e ordinare.

DispatchMode

Proprietà Tipo Valore Descrizione
Autoint0Seleziona automaticamente una strategia di dispatch adatta. Miglior punto di partenza predefinito.
EqualStopint1Cerca di distribuire un numero uguale di stop tra i veicoli.
SingleRegionint2Utile quando i veicoli sono geograficamente dispersi ma servono stop in aree simili.
MultipleRegionint3Utile per veicoli che operano in città diverse o regioni lontane e per il dispatch sul campo in tempo reale.
EqualHourint4Cerca di dividere il lavoro in percorsi con durata totale simile.
EqualDistanceint5Cerca di dividere il lavoro in percorsi con distanza totale simile.
TimeWindowint6Dà priorità agli appuntamenti e alle finestre di consegna. L'ottimizzazione può essere ridotta per rispettare i vincoli temporali.
TimeWindowDepotint7Modalità con finestre temporali che presume un deposito centrale condiviso dai veicoli.
Optimaint8Modalità ad alta precisione per un singolo veicolo, con o senza finestre temporali.
BalanceLocationint9Bilancia il numero di stop assegnati tra più autisti.
BalanceTimeint10Bilancia il tempo di percorso tra più autisti.
MinimumVehiclesint11Seleziona il numero minimo di veicoli necessario per servire tutti gli stop, tenendo conto dei fattori di routing.

Vehicle

Proprietà Tipo Obbligatorio Descrizione
NamestringConsigliatoIdentificatore del veicolo visualizzato nei risultati.
EmailstringNoContatto facoltativo del conducente o del veicolo.
GroupstringNoCampo facoltativo di raggruppamento come team, deposito o regione.
SpeedintNoOverride facoltativo della velocità. Se impostato a 0, viene usata la velocità stradale predefinita.
MaxStopsintNoNumero massimo di stop per percorso del veicolo.
MaxWeightdoubleNoCapacità massima di peso del veicolo.
MaxSkidsintNoCapacità massima di skid del veicolo.
MaxVolumedoubleNoCapacità massima di volume del veicolo.
MaxMinutesintNoDurata massima del percorso del veicolo.
FuelCostdoubleNoParametro di costo facoltativo usato da alcune modalità di ottimizzazione.
OnTheRoadboolNoSe true, un percorso multi-giornaliero può continuare dalla posizione finale del giorno precedente invece di tornare al punto di partenza originale.
Tinstring (date-time)NoTimestamp di disponibilità iniziale del veicolo.
Toutstring (date-time)NoTimestamp di disponibilità finale del veicolo.
StartLocationLocationNoDeposito o posizione iniziale facoltativa del veicolo.
FinishLocationLocationNoDeposito o posizione finale facoltativa del veicolo.
RolesstringNoStringa di ruolo facoltativa che può essere confrontata con le condizioni degli stop.
TransportTypeint (enum)NoModalità di trasporto come auto, camion, autobus, moto, pedone, scooter o bicicletta.
ExcludeTollsboolNoSpecifica se le strade a pedaggio devono essere evitate.
ExcludeHighwaysboolNoSpecifica se le autostrade devono essere evitate.
UseTruckRouteboolNoSpecifica se i percorsi per camion devono essere preferiti o consentiti.
WidthfloatNoLarghezza del veicolo in metri.
HeightfloatNoAltezza del veicolo in metri.
LengthfloatNoLunghezza del veicolo in metri.
AxleLoadfloatNoCarico per asse del veicolo in tonnellate metriche.
AxleCountintNoNumero di assi.
Esempio TrackRoad API della funzione OnTheRoad del veicolo
Esempio: comportamento del percorso giornaliero con OnTheRoad attivo rispetto a disattivo.

Location

Ogni location dovrebbe includere LatLong quando possibile. Se le coordinate mancano, è obbligatorio Address affinché TrackRoad possa geocodificare lo stop.

Proprietà Tipo Obbligatorio Descrizione
MatchCodeint (enum)NoCodice di qualità della geocodifica.
NamestringNoEtichetta dello stop mostrata nei risultati.
DeliverystringNoNome della location di consegna collegata o etichetta cliente.
DeliveryNonStopboolNoDetermina se la consegna collegata deve avvenire immediatamente dopo lo stop corrente.
KeepSameOrderboolNoSe true, preserva l'ordine relativo definito nella richiesta.
VehiclestringNoPre-assegnazione facoltativa a un veicolo specifico tramite nome.
DescriptionstringNoNote o descrizione facoltative.
PhonestringNoNumero di telefono di contatto facoltativo.
LatLongLatLongCondizionaleInput coordinate preferito. Obbligatorio se Address non è fornito.
AddressAddressCondizionaleInput indirizzo usato per la geocodifica quando LatLong non è fornito.
PriorityintNoIndicazione di priorità per l'ottimizzazione.
WaitintNoTempo di servizio o attesa allo stop.
VolumedoubleNoDomanda di volume consumata dalla capacità del veicolo.
WeightdoubleNoDomanda di peso consumata dalla capacità del veicolo.
SkidsintNoDomanda di skid consumata dalla capacità del veicolo.
TimeConstraintArrivalstring (date-time)NoValore di arrivo della finestra temporale primaria.
TimeConstraintDeparturestring (date-time)NoValore di partenza della finestra temporale primaria.
TimeConstraintArrival2string (date-time)NoValore di arrivo della seconda finestra temporale facoltativa.
TimeConstraintDeparture2string (date-time)NoValore di partenza della seconda finestra temporale facoltativa.
LocationTypeint (enum)No0 = Midway, 1 = Start, 2 = Finish, 3 = Delivery, 4 = MidwayDrop, 5 = Break.
CanArriveEarlyboolNoSe false, non è consentito arrivare prima della finestra temporale prevista.
ConditionsstringNoCondizione facoltativa di business rule o matching di ruolo.

LatLong

Proprietà Tipo Obbligatorio Descrizione
LatitudedoubleLatitudine in gradi (da -90 a 90).
LongitudedoubleLongitudine in gradi (da -180 a 180).

Address

Proprietà Tipo Obbligatorio Descrizione
StreetstringConsigliatoIndirizzo stradale.
CitystringConsigliatoCittà.
StatestringNoStato o regione.
PostalCodestringNoCAP o codice postale.
CountrystringConsigliatoPaese.

Schema della risposta#

Una risposta riuscita restituisce DispatchResult contenente elementi di percorso per veicolo ed eventuali errori o avvisi.

DispatchResult

Proprietà Tipo Descrizione
ItemsVehicleItem[]Elementi di risultato per veicolo contenenti il percorso assegnato.
ErrorsError[]Errori o avvisi facoltativi.
Statusint (enum)Stato dell'operazione: 0 = None, 1 = Success, 2 = Failed, 3 = SuccessWithErrors.

VehicleItem

Proprietà Tipo Descrizione
VehicleVehicleIl veicolo associato a questo percorso.
LocationsLocation[]Location ordinate assegnate a quel veicolo.

Error

Proprietà Tipo Descrizione
MessagestringMessaggio di errore o avviso leggibile dall'utente.

Esempi#

I blocchi di codice di esempio per richiesta e risposta possono restare invariati e non richiedono localizzazione.

{
  "RoutingService": 0,
  "DistanceUnit": 0,
  "RouteOptimize": 0,
  "DispatchMode": 0,
  "Vehicles": [
    {
      "Name": "Truck 1",
      "StartLocation": { "LatLong": { "Latitude": 37.7946, "Longitude": -122.3950 }, "LocationType": 1 },
      "FinishLocation": { "LatLong": { "Latitude": 37.7946, "Longitude": -122.3950 }, "LocationType": 2 }
    }
  ],
  "Locations": [
    { "Name": "Stop A", "LatLong": { "Latitude": 37.7897, "Longitude": -122.4011 }, "LocationType": 0 },
    { "Name": "Stop B", "LatLong": { "Latitude": 37.7810, "Longitude": -122.4110 }, "LocationType": 0 }
  ]
}

REST request examples (multiple languages)#

curl -X POST "https://trackservice.trackroad.com/rest/dispatch" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_TRACKSERVICEKEY" \
  -d '{
    "RoutingService": 0,
    "DistanceUnit": 0,
    "RouteOptimize": 0,
    "DispatchMode": 0,
    "Vehicles": [
      {
        "Name": "Truck 1",
        "StartLocation": { "LatLong": { "Latitude": 37.7946, "Longitude": -122.3950 }, "LocationType": 1 },
        "FinishLocation": { "LatLong": { "Latitude": 37.7946, "Longitude": -122.3950 }, "LocationType": 2 }
      }
    ],
    "Locations": [
      { "Name": "Stop A", "LatLong": { "Latitude": 37.7897, "Longitude": -122.4011 }, "LocationType": 0 },
      { "Name": "Stop B", "LatLong": { "Latitude": 37.7810, "Longitude": -122.4110 }, "LocationType": 0 }
    ]
  }'

SOAP request examples (multiple languages)#

SOAP uses the same DispatchSpecification model, but it’s wrapped in a SOAP envelope and authenticated via SessionIDHeader (SessionID = TrackServiceKey).

curl -X POST "https://trackservice.trackroad.com/TrackService.asmx" \
  -H "Content-Type: text/xml; charset=utf-8" \
  -H "SOAPAction: http://trackservice.trackroad.com/Dispatch" \
  -d @dispatch-soap.xml

SOAP: Raw request (Envelope + SessionIDHeader)#

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <SessionIDHeader xmlns="http://trackservice.trackroad.com/">
      <SessionID>YOUR_TRACKSERVICEKEY</SessionID>
    </SessionIDHeader>
  </soap:Header>
  <soap:Body>
    <Dispatch xmlns="http://trackservice.trackroad.com/">
      <specification>
        <RoutingService>0</RoutingService>
        <DistanceUnit>0</DistanceUnit>
        <RouteOptimize>0</RouteOptimize>
        <DispatchMode>0</DispatchMode>
        <Vehicles></Vehicles>
        <Locations></Locations>
      </specification>
    </Dispatch>
  </soap:Body>
</soap:Envelope>

JSON: Response example#

{
  "Items": [
    {
      "Vehicle": { "Name": "Truck 1" },
      "Locations": [
        { "Name": "Stop A", "LatLong": { "Latitude": 37.7897, "Longitude": -122.4011 } },
        { "Name": "Stop B", "LatLong": { "Latitude": 37.7810, "Longitude": -122.4110 } }
      ]
    }
  ],
  "Errors": [],
  "Status": 1
}

SOAP: Response example#

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <DispatchResponse xmlns="http://trackservice.trackroad.com/">
      <DispatchResult>
        <Status>1</Status>
        <Errors />

        <Items>
          <VehicleItem>
            <Vehicle>
              <Name>Truck 1</Name>
            </Vehicle>

            <Locations>
              <Location>
                <Name>Stop A</Name>
                <LocationType>0</LocationType>
                <LatLong>
                  <Latitude>37.7897</Latitude>
                  <Longitude>-122.4011</Longitude>
                </LatLong>
              </Location>

              <Location>
                <Name>Stop B</Name>
                <LocationType>0</LocationType>
                <LatLong>
                  <Latitude>37.7810</Latitude>
                  <Longitude>-122.4110</Longitude>
                </LatLong>
              </Location>
            </Locations>
          </VehicleItem>
        </Items>

      </DispatchResult>
    </DispatchResponse>
  </soap:Body>
</soap:Envelope>

Errori comuni#

  • REST 401 / Unauthorized: X-API-Key mancante o non valido.
  • REST 403 / Forbidden: la chiave è valida ma bloccata, scaduta o senza credito.
  • Errori di validazione: uno stop non contiene né LatLongAddress, oppure le coordinate non sono valide.
  • Errori di autenticazione SOAP: SessionIDHeader mancante o non valido, oppure SessionID vuoto.

Best practice

  • Preferisci LatLong per evitare ambiguità di geocodifica e migliorare la coerenza del routing.
  • Usa StartLocation e FinishLocation per il routing basato su deposito e per ETA più accurati.
  • Aggiungi vincoli di capacità come peso, volume e skid per assegnazioni di percorso più realistiche.
  • Usa finestre temporali quando gli stop devono essere visitati entro orari del cliente o operativi.
  • Per SOAP, usa TrackServiceKey in SessionIDHeader. Il flusso di login legacy non è richiesto.

FAQ#

Cosa fa l'API Dispatch?
Dispatch ottimizza gli stop su più veicoli e restituisce percorsi ordinati per veicolo con tempi e distanze.
Come si autentica Dispatch in REST e SOAP?
REST usa il tuo TrackServiceKey nell'header X-API-Key. SOAP usa lo stesso TrackServiceKey in SessionIDHeader come SessionID.
Per gli stop servono LatLong o Address?
LatLong è preferibile. Se LatLong non è fornito, Address è obbligatorio affinché TrackRoad possa geocodificare lo stop.

Pronto a ottimizzare i percorsi?

Genera la tua chiave API e inizia a integrare Dispatch per l'ottimizzazione multiveicolo dei percorsi con REST o SOAP.

Ottieni API Key SOAP WSDL Swagger UI