Dispatch API (Routeoptimalisatie)

Gebruik Dispatch om routes over meerdere voertuigen en veel stops te optimaliseren. Dispatch retourneert een geordende route per voertuig met timing-, afstands- en toewijzingsgegevens voor bezorgrouting, field service, koeriersactiviteiten en vlootplanning.

Overzicht van de TrackRoad Dispatch API met voertuigen en stops die naar geoptimaliseerde routes stromen
Dispatch wijst stops toe aan meerdere voertuigen en retourneert geoptimaliseerde routes met stopvolgorde, ETA, afstand en duur voor elk voertuig.

Het volledige contract nodig?

Gebruik Swagger voor REST-modellen en WSDL voor SOAP-integratiedetails.

Swagger UI bekijken SOAP WSDL bekijken Overzicht API-referentie

Inhoudsopgave

  1. Wat Dispatch doet
  2. Optima-modus, Time Window & TimeWindowDepot
  3. Meerdere ophaal- en afleverpunten
  4. Endpoints en basis-URL's
  5. Authenticatie
  6. Request-schema
  7. Response-schema
  8. Veelvoorkomende fouten
  9. Best practices
  10. Gerelateerde endpoints
  11. FAQ

Wat Dispatch doet#

Dispatch lost een routeringsprobleem met meerdere voertuigen op. Het wijst stops toe aan voertuigen en bepaalt de volgorde van elke route met beperkingen zoals tijdvensters, capaciteit, prioriteit en start- of eindlocaties.

LatLong heeft de voorkeur. Elke stop moet waar mogelijk LatLong bevatten. Als LatLong niet is opgegeven, moet u Address opgeven zodat de service de stop kan geocoderen.

De Dispatch-methode accepteert een lijst met voertuigen en een lijst met stoplocaties. Elk voertuig kan een startlocatie en een optionele eindlocatie bevatten. Elke locatie kan een naam, adresvelden en latitude en longitude bevatten.

Als latitude en longitude aanwezig zijn, gebruikt TrackRoad deze direct. Anders geocodeert de service het adres om coördinaten te verkrijgen.

Dispatch retourneert voertuigitems. Elk voertuigitem bevat de toegewezen route als een geordende lijst met stops, geoptimaliseerd op locatie, capaciteit, timing en andere routeringsfactoren.

Wanneer slechts één voertuig beschikbaar is, voert Dispatch alleen routeoptimalisatie uit. Dispatchmodi zijn vooral van belang wanneer meerdere voertuigen beschikbaar zijn.

Als u niet zeker weet welke dispatchmodus u moet gebruiken, begin dan met Auto. Gebruik voor zeer nauwkeurige optimalisatie van één voertuig Optima.

Optima-modus, Time Window & TimeWindowDepot#

In sommige talen is het mogelijk niet om een null datetime door te geven. Gebruik in dat geval 0001-01-01T00:00:00. Datums ouder dan de systeemdrempel worden als null-waarden behandeld.

Gebruik voor de beste resultaten DispatchMode Optima.

Drie variabelen beïnvloeden het dispatchgedrag met tijdvensters:

  • CanArriveEarly
  • TimeConstraintArrival
  • TimeConstraintDeparture

Optie 1: CanArriveEarly = true

Wanneer CanArriveEarly true is, begint het tijdvenster aan het begin van de dag. Als TimeConstraintArrival null is, kan de stop op elk moment van de dag worden bezocht. Als TimeConstraintArrival is ingesteld, definieert deze de laatst aanvaardbare aankomsttijd. Vertrektijd wordt genegeerd.

Optie 2: CanArriveEarly = false

Wanneer CanArriveEarly false is, definiëren aankomst en vertrek het toegestane tijdvenster. Als aankomst is ingesteld en vertrek null is, wordt de stop behandeld als een exacte afspraak. Als beide zijn ingesteld, probeert TrackRoad de stop binnen dat tijdsbereik te bezoeken.

Optie 3: Twee tijdvensters

U kunt ook een tweede tijdvenster opgeven met TimeConstraintArrival2 en TimeConstraintDeparture2. Dit is nuttig wanneer een stop slechts in twee afzonderlijke periodes kan worden bezocht, zoals beperkte levertijden in een stadscentrum. TimeWindowDepot volgt dezelfde logica, maar gaat ervan uit dat voertuigen starten en eindigen vanuit een gemeenschappelijk depot.

Pauzes kunnen worden gemodelleerd met LocationType = Break. Ketens van meerdere ophaal- en afleverpunten ondersteunen slechts één aflever-tijdvenster op afleverniveau, en die onderliggende tijdsbeperking mag niet strenger zijn dan de bovenliggende beperking.

Meerdere ophaal- en afleverpunten#

Dispatch ondersteunt het koppelen van ophaal- en afleverpunten. Dit is nuttig voor koeriersactiviteiten en workflows waarbij één stop vóór een andere moet worden bezocht.

Gebruik Midway voor de eerste stop in een keten en Delivery om de volgende gerelateerde locatie op te geven. Gebruik DeliveryNonStop om te bepalen of de volgende gekoppelde aflevering onmiddellijk moet plaatsvinden of later in dezelfde route mag gebeuren.

Als een pakket bijvoorbeeld wordt opgehaald op locatie B en afgeleverd op locatie M, bewaart TrackRoad de vereiste relatie tussen ophalen en afleveren terwijl de route rond de overige stops toch wordt geoptimaliseerd.

DeliveryNonStop = true

Wanneer DeliveryNonStop true is, moet de gekoppelde afleverstop onmiddellijk na de ophaalstop worden bezocht.

DeliveryNonStop = false

Wanneer DeliveryNonStop false is, moet de gekoppelde aflevering nog steeds na het ophalen plaatsvinden, maar niet noodzakelijk onmiddellijk.

U kunt meerdere afleveringen aaneenschakelen, zoals B → M → N, door Delivery en KeepSameOrder op elke gekoppelde stop in te stellen.

Definieer voor retourritten ophaal-, aflever- en retourlocaties als één keten. Een veelvoorkomende aanbeveling is DeliveryNonStop = false en KeepSameOrder = true voor flexibelere optimalisatie met behoud van de zakelijke volgorde.

Voorbeeld van retourrit-stops in de TrackRoad API
Voorbeeld: Retourrit-stops.
Voorbeeld van retourroute in de TrackRoad API
Voorbeeld: Retourroute.

Endpoints en basis-URL's#

REST

Item Waarde
Basis-URL https://trackservice.trackroad.com
Endpoint POST /rest/dispatch
Volledige URL https://trackservice.trackroad.com/rest/dispatch
Content-Type application/json

SOAP

Item Waarde
Endpoint https://trackservice.trackroad.com/TrackService.asmx
WSDL https://trackservice.trackroad.com/TrackService.asmx?WSDL
Methode Dispatch
SOAPAction http://trackservice.trackroad.com/Dispatch

SOAP gebruikt dezelfde modellen DispatchSpecification en DispatchResult. Het belangrijkste verschil is de SOAP-envelope en headergebaseerde authenticatie.

Authenticatie#

REST-authenticatie (X-API-Key)

Neem uw TrackServiceKey op in de X-API-Key-header bij elk request. Genereer de sleutel in uw TrackRoad-account op API-authenticatie .

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": [] }'

Bewaar API-sleutels server-side. Verwerk geen sleutels in browser- of mobiele clientcode.

SOAP-authenticatie (SessionIDHeader)

Stuur voor SOAP-requests uw TrackServiceKey in SessionIDHeader als SessionID. Verouderde Login en Logout zijn niet nodig wanneer u TrackServiceKey-authenticatie gebruikt.

<?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>

SOAP-namespaces en -prefixen kunnen variëren afhankelijk van uw tooling. Een client die uit WSDL is gegenereerd, is meestal de eenvoudigste optie.

Request-schema#

De request-body is één object: DispatchSpecification. Geef minimaal voertuigen en locaties op.

DispatchSpecification

Eigenschap Type Vereist Beschrijving
RoutingServiceint (enum)NeeRouteringsengine. 0 = NetRoad, 1 = TrackRoad, 2 = Bing. Aanbevolen: 0 = NetRoad.
IsNeedMatchCodeboolNeeAls true, worden waar relevant geocoding match-quality-codes opgenomen.
CurrentTimestring (date-time)NeeReferentietijd die wordt gebruikt voor tijdsbeperkingen in ISO 8601-formaat.
DispatchModeint (enum)NeeOptimalisatiestrategie. Zie voor aanbevelingen per modus Dispatchmodi.
MinimumOptimizationintNeeDrempel voor optimalisatie-intensiteit. Typisch bereik: 1 tot 10.
DistanceUnitint (enum)Nee0 = Mijl, 1 = Kilometer.
RouteOptimizeint (enum)Nee0 = MinimizeTime, 1 = MinimizeDistance. Aanbevolen: 0 = MinimizeTime.
VehiclesVehicle[]NeeVoertuigen die beschikbaar zijn voor dispatch.
LocationsLocation[]JaStops die moeten worden toegewezen en geordend.

DispatchMode

Eigenschap Type Waarde Beschrijving
Autoint0Selecteert automatisch een geschikte dispatchstrategie. Beste standaard uitgangspunt.
EqualStopint1Probeert een gelijk aantal stops over voertuigen te verdelen.
SingleRegionint2Nuttig wanneer voertuigen geografisch verspreid zijn maar stops in vergelijkbare gebieden bedienen.
MultipleRegionint3Nuttig voor voertuigen die in verschillende steden of verre regio's opereren en voor real-time field dispatch.
EqualHourint4Probeert werk te verdelen in routes met een vergelijkbare totale tijd.
EqualDistanceint5Probeert werk te verdelen in routes met een vergelijkbare totale afstand.
TimeWindowint6Geeft prioriteit aan afspraak- en aflevervensters. Optimalisatie kan worden verminderd om aan tijdsbeperkingen te voldoen.
TimeWindowDepotint7Tijdvenstermodus die uitgaat van een centraal depot dat door voertuigen wordt gedeeld.
Optimaint8Zeer nauwkeurige modus voor één voertuig, met of zonder tijdvensters.
BalanceLocationint9Brengt het aantal toegewezen stops over meerdere chauffeurs in balans.
BalanceTimeint10Brengt de routetijd over meerdere chauffeurs in balans.
MinimumVehiclesint11Selecteert het minimale aantal voertuigen dat nodig is om alle stops te bedienen, rekening houdend met routeringsfactoren.

Vehicle

Eigenschap Type Vereist Beschrijving
NamestringAanbevolenVoertuig-ID die in de resultaten wordt weergegeven.
EmailstringNeeOptioneel contact van chauffeur of voertuig.
GroupstringNeeOptioneel groeperingsveld zoals team, depot of regio.
SpeedintNeeOptionele snelheidsoverschrijving. Als deze op 0 staat, wordt de standaardwegsnelheid gebruikt.
MaxStopsintNeeMaximaal aantal stops per route voor het voertuig.
MaxWeightdoubleNeeMaximale gewichtscapaciteit van het voertuig.
MaxSkidsintNeeMaximale skid-/palletcapaciteit van het voertuig.
MaxVolumedoubleNeeMaximale volumecapaciteit van het voertuig.
MaxMinutesintNeeMaximale routeduur voor het voertuig.
FuelCostdoubleNeeOptionele kostenparameter die door sommige optimalisatiemodi wordt gebruikt.
OnTheRoadboolNeeAls true, kan een meerdaagse route doorgaan vanaf de eindlocatie van de vorige dag in plaats van terug te keren naar het oorspronkelijke startpunt.
Tinstring (date-time)NeeTijdstip waarop het voertuig beschikbaar wordt.
Toutstring (date-time)NeeTijdstip waarop het voertuig niet meer beschikbaar is.
StartLocationLocationNeeOptioneel startdepot of startpositie voor het voertuig.
FinishLocationLocationNeeOptioneel einddepot of eindpositie voor het voertuig.
RolesstringNeeOptionele rolstring die kan worden gematcht met stopvoorwaarden.
TransportTypeint (enum)NeeTransportmodus zoals auto, vrachtwagen, bus, motorfiets, voetganger, scooter of fiets.
ExcludeTollsboolNeeGeeft aan of tolwegen moeten worden vermeden.
ExcludeHighwaysboolNeeGeeft aan of snelwegen moeten worden vermeden.
UseTruckRouteboolNeeGeeft aan of vrachtwagenroutes de voorkeur hebben of toegestaan zijn.
WidthfloatNeeVoertuigbreedte in meters.
HeightfloatNeeVoertuighoogte in meters.
LengthfloatNeeVoertuiglengte in meters.
AxleLoadfloatNeeAslast van het voertuig in metrische tonnen.
AxleCountintNeeAantal assen.
Voorbeeld van de OnTheRoad-functie voor voertuigen in de TrackRoad API
Voorbeeld: Dagelijks routegedrag met OnTheRoad ingeschakeld versus uitgeschakeld.

Location

Elke locatie moet waar mogelijk LatLong bevatten. Als coördinaten ontbreken, is Address vereist zodat TrackRoad de stop kan geocoderen.

Eigenschap Type Vereist Beschrijving
MatchCodeint (enum)NeeGeocode match-quality-code.
NamestringNeeStoplabel dat in de resultaten wordt weergegeven.
DeliverystringNeeNaam van gekoppelde afleverlocatie of klantlabel.
DeliveryNonStopboolNeeBepaalt of de gekoppelde aflevering onmiddellijk na de huidige stop moet plaatsvinden.
KeepSameOrderboolNeeAls true, blijft de relatieve volgorde uit het request behouden.
VehiclestringNeeOptionele voorafgaande toewijzing aan een specifiek voertuig op naam.
DescriptionstringNeeOptionele notities of beschrijving.
PhonestringNeeOptioneel telefoonnummer.
LatLongLatLongVoorwaardelijkVoorkeursinvoer voor coördinaten. Vereist als Address niet is opgegeven.
AddressAddressVoorwaardelijkAdresinvoer die voor geocodering wordt gebruikt wanneer LatLong niet is opgegeven.
PriorityintNeePrioriteitsindicatie voor optimalisatie.
WaitintNeeService- of wachttijd bij de stop.
VolumedoubleNeeVolumebehoefte die van de voertuigcapaciteit wordt afgetrokken.
WeightdoubleNeeGewichtsbehoefte die van de voertuigcapaciteit wordt afgetrokken.
SkidsintNeeSkidbehoefte die van de voertuigcapaciteit wordt afgetrokken.
TimeConstraintArrivalstring (date-time)NeePrimaire aankomstwaarde voor het tijdvenster.
TimeConstraintDeparturestring (date-time)NeePrimaire vertrekwaarde voor het tijdvenster.
TimeConstraintArrival2string (date-time)NeeOptionele tweede aankomstwaarde voor het tijdvenster.
TimeConstraintDeparture2string (date-time)NeeOptionele tweede vertrekwaarde voor het tijdvenster.
LocationTypeint (enum)Nee0 = Midway, 1 = Start, 2 = Finish, 3 = Delivery, 4 = MidwayDrop, 5 = Break.
CanArriveEarlyboolNeeAls false, is aankomst vóór het toegestane tijdvenster niet toegestaan.
ConditionsstringNeeOptionele bedrijfsregel of rolmatchingsvoorwaarde.

LatLong

Eigenschap Type Vereist Beschrijving
LatitudedoubleJaLatitude in graden (-90 tot 90).
LongitudedoubleJaLongitude in graden (-180 tot 180).

Address

Eigenschap Type Vereist Beschrijving
StreetstringAanbevolenStraatadres.
CitystringAanbevolenStad.
StatestringNeeStaat of regio.
PostalCodestringNeePostcode.
CountrystringAanbevolenLand.

Response-schema#

Een succesvolle response retourneert DispatchResult met route-items per voertuig en optionele fouten of waarschuwingen.

DispatchResult

Eigenschap Type Beschrijving
ItemsVehicleItem[]Resultaatitems per voertuig met de toegewezen route.
ErrorsError[]Optionele fouten of waarschuwingen.
Statusint (enum)Bewerkingsstatus: 0 = None, 1 = Success, 2 = Failed, 3 = SuccessWithErrors.

VehicleItem

Eigenschap Type Beschrijving
VehicleVehicleHet voertuig dat bij deze route hoort.
LocationsLocation[]Geordende locaties die aan dat voertuig zijn toegewezen.

Error

Eigenschap Type Beschrijving
MessagestringVoor mensen leesbare fout- of waarschuwingsmelding.

Voorbeelden#

Voorbeeldcodeblokken voor request en response kunnen ongewijzigd blijven en hoeven niet gelokaliseerd te worden.

{
  "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>

Veelvoorkomende fouten#

  • REST 401 / Unauthorized: Ontbrekende of ongeldige X-API-Key.
  • REST 403 / Forbidden: Sleutel is geldig maar geblokkeerd, verlopen of zonder krediet.
  • Validatiefouten: Een stop mist zowel LatLong als Address, of de coördinaten zijn ongeldig.
  • SOAP-authenticatiefouten: Ontbrekende of ongeldige SessionIDHeader of lege SessionID.

Best practices

  • Gebruik bij voorkeur LatLong om ambiguïteit bij geocodering te vermijden en de routeringsconsistentie te verbeteren.
  • Gebruik StartLocation en FinishLocation voor depotgebaseerde routering en betere ETA's.
  • Voeg capaciteitsbeperkingen toe zoals gewicht, volume en skids voor realistischere routetoewijzing.
  • Gebruik tijdvensters wanneer stops binnen klant- of operationele planningen bezocht moeten worden.
  • Gebruik voor SOAP de TrackServiceKey in SessionIDHeader. Verouderde loginflow is niet nodig.

FAQ#

Wat doet de Dispatch API?
Dispatch optimaliseert stops over meerdere voertuigen en retourneert geordende routes per voertuig met timing- en afstandsgegevens.
Hoe authenticeer ik voor Dispatch REST en SOAP?
REST gebruikt uw TrackServiceKey in de X-API-Key-header. SOAP gebruikt dezelfde TrackServiceKey in SessionIDHeader als SessionID.
Heb ik LatLong of Address nodig voor stops?
LatLong heeft de voorkeur. Als LatLong niet is opgegeven, is Address vereist zodat TrackRoad de stop kan geocoderen.

Klaar om routes te optimaliseren?

Genereer uw API-sleutel en begin met het integreren van Dispatch voor routeoptimalisatie met meerdere voertuigen via REST of SOAP.

API-sleutel ophalen SOAP WSDL Swagger UI