API di ottimizzazione dei percorsi (REST + SOAP) – Guida per sviluppatori

TrackRoad offre API per ottimizzazione dei percorsi e dispatch che consentono agli sviluppatori di integrare routing multi-stop, dispatch multi-veicolo, finestre temporali e vincoli di capacità nei propri sistemi.

Questa pagina è una panoramica pratica e una guida rapida. Per i dettagli completi sugli endpoint e gli esempi per linguaggio, consulta la documentazione API e le pagine dedicate a autenticazione e Dispatch .

Guida per sviluppatori all’API di ottimizzazione dei percorsi TrackRoad con richieste Dispatch, routing multi-stop e finestre temporali
API di ottimizzazione dei percorsi (REST + SOAP): Dispatch, routing multi-veicolo, finestre temporali e vincoli.

Inizia a integrare l’API di ottimizzazione dei percorsi

Autenticati con il tuo TrackServiceKey: REST usa X-API-Key, SOAP usa SessionIDHeader.SessionID. Quindi crea una richiesta Dispatch e avvia l’ottimizzazione.

Apri la documentazione Swagger API Riferimento API Dispatch

Indice dei contenuti

  1. Cosa puoi realizzare
  2. REST vs SOAP
  3. Autenticazione (TrackServiceKey)
  4. API Dispatch (chiamata principale di ottimizzazione)
  5. Finestre temporali e modalità Optima
  6. Comprendere i risultati
  7. Consigli sulle prestazioni
  8. Esempio REST (X-API-Key → Dispatch)
  9. Esempio SOAP (SessionIDHeader → Dispatch)
  10. Risoluzione dei problemi
  11. FAQ
  12. Passi successivi

Cosa puoi sviluppare con l’API di ottimizzazione dei percorsi TrackRoad#

L’API consente l’ottimizzazione dei percorsi per casi d’uso aziendali comuni:

  • Sistemi di pianificazione delle consegne (courier, pacchi, grocery)
  • Pianificazione dei servizi sul campo (tecnici, riparazioni, installazioni)
  • Dispatch di flotte con più veicoli e più fermate
  • Workflow di geocodifica e routing turn-by-turn
  • Modalità Dispatch avanzate per diverse strategie di routing

Il motore di routing supporta vincoli come:

  • Finestre temporali (vincoli di arrivo e partenza)
  • Limiti di capacità (peso / volume)
  • Bilanciamento di tempo e distanza tra i veicoli
  • Più punti di partenza e arrivo per veicolo
  • Fermate di pausa e tempo di servizio per fermata

REST vs SOAP#

API REST (JSON/XML)

REST è leggero e comune per integrazioni web e mobile. TrackRoad supporta chiamate REST con payload JSON o XML.

API SOAP

SOAP è comune nei sistemi enterprise e supporta riferimenti di servizio fortemente tipizzati in .NET. È utile se vuoi usare classi compilate come DispatchSpecification, Vehicle e Location.

Autenticazione (TrackServiceKey)#

TrackRoad utilizza una chiave API stabile chiamata TrackServiceKey. Non si comporta come una classica session ID a scadenza. Vedi autenticazione API per i dettagli completi.

  • REST: invia la tua chiave nell’header HTTP: X-API-Key: YOUR_TRACKSERVICEKEY
  • SOAP: invia la tua chiave in SessionIDHeader come SessionID

API Dispatch (chiamata principale di ottimizzazione)#

L’ottimizzazione dei percorsi viene eseguita con Dispatch. Dispatch prende veicoli più fermate e restituisce percorsi ottimizzati per veicolo.

Riferimento completo: API Dispatch

Endpoint SOAP WSDL

http://trackservice.trackroad.com/trackservice.asmx?wsdl

Input tipici di Dispatch

  • Veicoli (ognuno con posizione di partenza e arrivo)
  • Fermate (località)
  • DispatchMode (Auto, EqualStop, SingleRegion, MultipleRegion, Optima, ecc.)
  • MinimumOptimization (precisione)

Finestre temporali e modalità Optima#

TrackRoad supporta le finestre temporali tramite vincoli di arrivo e partenza alle fermate. Per ottenere i migliori risultati, TrackRoad consiglia di usare DispatchMode Optima con le finestre temporali.

Variabili chiave

  • CanArriveEarly
  • TimeConstraintArrival
  • TimeConstraintDeparture

Se il tuo linguaggio non può passare valori datetime nulli, usa 0001-01-01T00:00:00. TrackRoad tratta le date minori o uguali al 1° gennaio 2012 come nulle.

Per saperne di più: Ottimizzazione dei percorsi con finestre temporali

Comprendere i risultati di Dispatch#

Dispatch restituisce percorsi ottimizzati per veicolo. Ogni risultato include fermate ordinate con metadati come:

  • Sequenza delle fermate
  • MatchCode e qualità del match dell’indirizzo
  • Latitudine e Longitudine
  • Tempo e distanza fino alla fermata successiva

Consigli su prestazioni e scalabilità

  • Raggruppa le fermate quando possibile invece di ottimizzare un percorso alla volta
  • Fornisci tempi di servizio e finestre temporali accurati per ottenere risultati realistici
  • Usa la modalità Optima per pianificazioni con vincoli
  • Aumenta MinimumOptimization per una qualità migliore con insiemi più grandi di fermate
  • Usa il dispatch multi-veicolo per il routing di flotta invece di richieste separate

Esempio REST JSON (X-API-Key → Dispatch)#

Questo esempio mostra il flusso REST consigliato usando X-API-Key (TrackServiceKey).

Passo 1 — Imposta gli header di autenticazione

Headers:
X-API-Key: YOUR_TRACKSERVICEKEY
Content-Type: application/json

Passo 2 — Dispatch (ottimizza i percorsi)

Dispatch prende veicoli più fermate e restituisce percorsi ottimizzati. Questo esempio usa un veicolo e più fermate.

POST https://trackservice.trackroad.com/rest/dispatch
Headers:
X-API-Key: YOUR_TRACKSERVICEKEY
Content-Type: application/json

{
  "DispatchMode": "Optima",
  "DistanceUnit": "Mile",
  "MinimumOptimization": 1,
  "Vehicles": [
    {
      "Name": "Vehicle 1",
      "StartLocation": { "Name": "Depot", "Address": "350 5th Ave, New York, NY" },
      "FinishLocation": { "Name": "Depot", "Address": "350 5th Ave, New York, NY" },
      "TimeIn": "2025-12-25T08:00:00",
      "TimeOut": "2025-12-25T18:00:00",
      "CapacityWeight": 1000,
      "CapacityVolume": 100
    }
  ],
  "Stops": [
    {
      "Name": "Stop 1",
      "Address": "405 Lexington Ave, New York, NY",
      "ServiceTimeMinutes": 10,
      "TimeWindowStart": "2025-12-25T09:00:00",
      "TimeWindowEnd": "2025-12-25T11:00:00",
      "Weight": 120,
      "Volume": 12
    },
    {
      "Name": "Stop 2",
      "Address": "11 Wall St, New York, NY",
      "ServiceTimeMinutes": 8,
      "TimeWindowStart": "2025-12-25T10:00:00",
      "TimeWindowEnd": "2025-12-25T14:00:00",
      "Weight": 60,
      "Volume": 6
    },
    {
      "Name": "Stop 3",
      "Address": "200 Central Park West, New York, NY",
      "ServiceTimeMinutes": 12,
      "Weight": 80,
      "Volume": 8
    }
  ]
}

Suggerimento: Per le finestre temporali, usa DispatchMode = Optima. Se la tua integrazione non può inviare valori null, usa una data di default come 0001-01-01T00:00:00 per rappresentare “null”.

Esempio curl

curl -X POST "https://trackservice.trackroad.com/rest/dispatch" \
  -H "X-API-Key: YOUR_TRACKSERVICEKEY" \
  -H "Content-Type: application/json" \
  -d @dispatch-request.json

Login e Logout legacy sono disponibili per retrocompatibilità. Per la maggior parte delle integrazioni, usa X-API-Key (TrackServiceKey) in ogni richiesta.

Esempio SOAP C# (SessionIDHeader → Dispatch)

L’autenticazione SOAP di TrackRoad usa SessionIDHeader.SessionID = TrackServiceKey. Vedi autenticazione per i dettagli completi.

Endpoint SOAP WSDL

http://trackservice.trackroad.com/trackservice.asmx?wsdl

Esempio SOAP C# passo per passo

using System;
using System.Collections.Generic;
using TrackServiceRef; // your generated SOAP reference namespace

public class TrackRoadSoapExample
{
    public static void OptimizeRoutesWithSoap()
    {
        var client = new TrackServiceSoapClient();

        // TrackRoad SOAP uses TrackServiceKey as SessionID.
        string sessionId = "YOUR_TRACKSERVICEKEY";

        // Vehicles
        var vehicle = new Vehicle
        {
            Name = "Vehicle 1",
            StartLocation = new Location { Name = "Depot", Address = "350 5th Ave, New York, NY" },
            FinishLocation = new Location { Name = "Depot", Address = "350 5th Ave, New York, NY" },
            TimeIn = new DateTime(2025, 12, 25, 8, 0, 0),
            TimeOut = new DateTime(2025, 12, 25, 18, 0, 0),
            CapacityWeight = 1000,
            CapacityVolume = 100
        };

        // Stops
        var stops = new List<Location>
        {
            new Location
            {
                Name = "Stop 1",
                Address = "405 Lexington Ave, New York, NY",
                ServiceTime = 10,
                TimeConstraintArrival = new DateTime(2025, 12, 25, 9, 0, 0),
                TimeConstraintDeparture = new DateTime(2025, 12, 25, 11, 0, 0),
                CanArriveEarly = true,
                Weight = 120,
                Volume = 12
            },
            new Location
            {
                Name = "Stop 2",
                Address = "11 Wall St, New York, NY",
                ServiceTime = 8,
                TimeConstraintArrival = new DateTime(2025, 12, 25, 10, 0, 0),
                TimeConstraintDeparture = new DateTime(2025, 12, 25, 14, 0, 0),
                CanArriveEarly = true,
                Weight = 60,
                Volume = 6
            },
            new Location
            {
                Name = "Stop 3",
                Address = "200 Central Park West, New York, NY",
                ServiceTime = 12,
                Weight = 80,
                Volume = 8
            }
        };

        // Dispatch spec
        var spec = new DispatchSpecification
        {
            DispatchMode = DispatchMode.Optima,
            DistanceUnit = DistanceUnit.Mile,
            MinimumOptimization = 1,
            CurrentTime = DateTime.MinValue
        };

        // Dispatch
        var dispatchResult = client.Dispatch(sessionId, spec, new[] { vehicle }, stops.ToArray());

        if (!dispatchResult.Success)
            throw new Exception("Dispatch failed: " + dispatchResult.Message);

        foreach (var route in dispatchResult.Routes)
        {
            Console.WriteLine($"Vehicle: {route.VehicleName}");
            Console.WriteLine($"Distance: {route.Distance}");
            Console.WriteLine($"Duration: {route.Duration}");

            foreach (var stop in route.Stops)
                Console.WriteLine($"  {stop.Sequence}. {stop.Name}  ETA: {stop.ETA}");
        }
    }
}

Note

  • Usa la modalità Optima per finestre temporali e pianificazioni.
  • Fornisci gli orari di lavoro del driver (TimeIn, TimeOut) per un routing realistico.
  • Se non puoi fornire valori datetime nulli, usa DateTime.MinValue o una regola data nulla.

Risoluzione dei problemi: errori API comuni e come correggerli#

L’ottimizzazione dei percorsi è un problema basato su vincoli. Se fornisci indirizzi non validi o vincoli impossibili, come finestre temporali troppo rigide, veicoli insufficienti o limiti di capacità superati, il motore Dispatch può restituire errori o produrre percorsi incompleti.

1) “Dispatch failed” o Success = false

  • Indirizzi delle fermate non validi o incompleti
  • Finestre temporali impossibili
  • Orari di lavoro del veicolo troppo brevi
  • Veicoli insufficienti per servire tutte le fermate
  • Vincoli di capacità superati

2) Alcune fermate mancano nei percorsi

Cause comuni:

  • Finestre temporali troppo rigide
  • Orari di lavoro troppo rigidi
  • Capacità superata
  • Il tempo di servizio spinge il programma oltre i limiti di fattibilità

3) Corrispondenze indirizzo non valide o di bassa qualità (problemi MatchCode)

  • Fornisci indirizzi completi (via, città, CAP, paese)
  • Se hai già le coordinate, invia Latitude e Longitude
  • Valida le fermate con geocodifica prima del Dispatch quando necessario

4) Le finestre temporali non sono fattibili

  • Usa DispatchMode Optima
  • Amplia le finestre temporali
  • Consenti l’arrivo anticipato (CanArriveEarly = true) quando appropriato
  • Aggiungi veicoli o aumenta gli orari di lavoro dei veicoli

5) Veicoli insufficienti o routing di flotta incompleto

  • Aggiungi più veicoli
  • Aumenta la capacità (peso e volume)
  • Aumenta gli orari di lavoro
  • Usa DispatchMode MinimumVehicles se il tuo obiettivo è minimizzare il numero di veicoli necessari

6) L’API restituisce “key invalid” (autenticazione)

L’autenticazione TrackRoad usa una chiave API stabile chiamata TrackServiceKey. “Key invalid” di solito significa che la chiave manca, è errata o è stata inviata nel posto sbagliato.

  • REST: invia X-API-Key: TrackServiceKey
  • SOAP: invia SessionIDHeader.SessionID = TrackServiceKey
  • Vedi autenticazione API per i dettagli esatti.

FAQ: API di ottimizzazione dei percorsi#

TrackRoad offre un’API di ottimizzazione dei percorsi?
Sì. TrackRoad offre API di ottimizzazione dei percorsi e dispatch tramite REST (JSON/XML) e SOAP.
Che cos’è l’API Dispatch in TrackRoad?
Dispatch è il metodo principale di ottimizzazione che prende veicoli più fermate e restituisce percorsi ottimizzati per veicolo. Vedi il riferimento API Dispatch .
Come autentico le richieste API TrackRoad?
TrackRoad usa una chiave API stabile chiamata TrackServiceKey. REST usa X-API-Key; SOAP usa SessionIDHeader.SessionID. Vedi autenticazione API .
Perché ricevo errori “key invalid”?
“Key invalid” in genere significa che TrackServiceKey manca, è errata o è stata inviata nel punto sbagliato. REST: X-API-Key. SOAP: SessionIDHeader.

Passi successivi

Esplora la documentazione completa per sviluppatori, apri l’interfaccia Swagger oppure prova gli strumenti TrackRoad se vuoi testare i workflow di routing.

Apri la documentazione API Prova lo strumento di ottimizzazione dei percorsi