API Dispatch (Optymalizacja Tras)

Użyj Dispatch, aby optymalizować trasy dla wielu pojazdów i wielu przystanków. Dispatch zwraca uporządkowaną trasę dla każdego pojazdu wraz z czasem, dystansem i przypisaniami dla routingu dostaw, field service, operacji kurierskich i planowania floty.

Przegląd API Dispatch TrackRoad pokazujący pojazdy i przystanki przekształcane w zoptymalizowane trasy
Dispatch przypisuje przystanki do wielu pojazdów i zwraca zoptymalizowane trasy z kolejnością przystanków, ETA, dystansem i czasem trwania dla każdego pojazdu.

Potrzebujesz pełnej specyfikacji?

Użyj Swagger do modeli REST i WSDL do szczegółów integracji SOAP.

Otwórz Swagger UI Otwórz SOAP WSDL Przegląd dokumentacji API

Spis treści

  1. Do czego służy Dispatch
  2. Tryb Optima, Time Window i TimeWindowDepot
  3. Wielokrotne odbiory i dostawy
  4. Endpointy i bazowe URL
  5. Uwierzytelnianie
  6. Schemat żądania
  7. Schemat odpowiedzi
  8. Typowe błędy
  9. Najlepsze praktyki
  10. Powiązane endpointy
  11. FAQ

Do czego służy Dispatch#

Dispatch rozwiązuje problem routingu wielu pojazdów. Przypisuje przystanki do pojazdów i porządkuje każdą trasę z użyciem ograniczeń takich jak okna czasowe, pojemność, priorytet oraz lokalizacje startu i końca.

LatLong jest preferowane. Każdy przystanek powinien zawierać LatLong, jeśli to możliwe. Jeśli LatLong nie jest podane, musisz podać Address, aby usługa mogła zgeokodować przystanek.

Metoda Dispatch przyjmuje listę pojazdów i listę lokalizacji przystanków. Każdy pojazd może zawierać lokalizację startową oraz opcjonalną lokalizację końcową. Każda lokalizacja może zawierać nazwę, pola adresowe, szerokość i długość geograficzną.

Jeśli szerokość i długość geograficzna są obecne, TrackRoad używa ich bezpośrednio. W przeciwnym razie usługa geokoduje adres, aby uzyskać współrzędne.

Dispatch zwraca elementy pojazdów. Każdy element pojazdu zawiera przypisaną trasę jako uporządkowaną listę przystanków, zoptymalizowaną pod kątem lokalizacji, pojemności, czasu i innych czynników routingu.

Gdy dostępny jest tylko jeden pojazd, Dispatch wykonuje wyłącznie optymalizację trasy. Tryby dispatchingu mają znaczenie głównie wtedy, gdy dostępnych jest wiele pojazdów.

Jeśli nie wiesz, którego trybu dispatchingu użyć, zacznij od Auto. Dla bardzo dokładnej optymalizacji pojedynczego pojazdu użyj Optima.

Tryb Optima, Time Window i TimeWindowDepot#

W niektórych językach przekazanie pustej wartości datetime może nie być możliwe. W takim przypadku użyj 0001-01-01T00:00:00. Daty starsze niż próg systemowy są traktowane jako wartości null.

Aby uzyskać najlepsze wyniki, użyj DispatchMode Optima.

Trzy zmienne wpływają na zachowanie dispatchingu z oknami czasowymi:

  • CanArriveEarly
  • TimeConstraintArrival
  • TimeConstraintDeparture

Opcja 1: CanArriveEarly = true

Gdy CanArriveEarly ma wartość true, okno czasowe zaczyna się na początku dnia. Jeśli TimeConstraintArrival ma wartość null, przystanek może zostać odwiedzony o dowolnej porze dnia. Jeśli TimeConstraintArrival jest ustawione, definiuje najpóźniejszy akceptowalny czas przyjazdu. Czas odjazdu jest ignorowany.

Opcja 2: CanArriveEarly = false

Gdy CanArriveEarly ma wartość false, przyjazd i odjazd definiują dozwolone okno czasowe. Jeśli przyjazd jest ustawiony, a odjazd ma wartość null, przystanek jest traktowany jak precyzyjny termin. Jeśli oba pola są ustawione, TrackRoad próbuje odwiedzić przystanek w tym przedziale czasu.

Opcja 3: Dwa okna czasowe

Możesz również określić drugie okno czasowe za pomocą TimeConstraintArrival2 i TimeConstraintDeparture2. Jest to przydatne, gdy przystanek może być odwiedzony tylko w dwóch oddzielnych przedziałach, na przykład przy ograniczeniach dostaw w centrum miasta. TimeWindowDepot działa według tej samej logiki, ale zakłada, że pojazdy startują i kończą trasę we wspólnym depo.

Przerwy można modelować przy użyciu LocationType = Break. Łańcuchy wielokrotnych odbiorów i dostaw obsługują tylko jedno okno czasowe dostawy na poziomie dostawy, a to podrzędne ograniczenie czasowe nie może być bardziej restrykcyjne niż ograniczenie nadrzędne.

Wielokrotne odbiory i dostawy#

Dispatch obsługuje łączenie odbiorów i dostaw w łańcuchy. Jest to przydatne w operacjach kurierskich i procesach, w których jeden przystanek musi zostać odwiedzony przed innym.

Użyj Midway dla pierwszego przystanku w łańcuchu oraz Delivery do określenia kolejnej powiązanej lokalizacji. Użyj DeliveryNonStop, aby określić, czy powiązana dostawa musi nastąpić natychmiast, czy może wystąpić później na tej samej trasie.

Na przykład jeśli paczka jest odbierana w lokalizacji B i dostarczana do lokalizacji M, TrackRoad zachowuje wymaganą zależność między odbiorem a dostawą, jednocześnie optymalizując trasę względem pozostałych przystanków.

DeliveryNonStop = true

Gdy DeliveryNonStop ma wartość true, powiązany przystanek dostawy musi zostać odwiedzony bezpośrednio po przystanku odbioru.

DeliveryNonStop = false

Gdy DeliveryNonStop ma wartość false, powiązana dostawa nadal musi nastąpić po odbiorze, ale nie musi nastąpić natychmiast.

Możesz łączyć wiele dostaw w łańcuch, na przykład B → M → N, ustawiając Delivery i KeepSameOrder na każdym powiązanym przystanku.

Dla zleceń typu round trip zdefiniuj odbiór, dostawę i powrót jako łańcuch. Częstą rekomendacją jest DeliveryNonStop = false oraz KeepSameOrder = true dla bardziej elastycznej optymalizacji przy zachowaniu kolejności biznesowej.

Przykład przystanków round trip w API TrackRoad
Przykład: przystanki round trip.
Przykład trasy round trip w API TrackRoad
Przykład: trasa round trip.

Endpointy i bazowe URL#

REST

Element Wartość
Adres bazowy https://trackservice.trackroad.com
Endpoint POST /rest/dispatch
Pełny URL https://trackservice.trackroad.com/rest/dispatch
Content-Type application/json

SOAP

Element Wartość
Endpoint https://trackservice.trackroad.com/TrackService.asmx
WSDL https://trackservice.trackroad.com/TrackService.asmx?WSDL
Metoda Dispatch
SOAPAction http://trackservice.trackroad.com/Dispatch

SOAP używa tych samych modeli DispatchSpecification i DispatchResult. Główna różnica to koperta SOAP i uwierzytelnianie nagłówkowe.

Uwierzytelnianie#

Uwierzytelnianie REST (X-API-Key)

Dołącz swój TrackServiceKey w nagłówku X-API-Key w każdym żądaniu. Wygeneruj klucz na swoim koncie TrackRoad w Uwierzytelnianie 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": [] }'

Przechowuj klucze API po stronie serwera. Nie osadzaj kluczy w kodzie przeglądarki ani klienta mobilnego.

Uwierzytelnianie SOAP (SessionIDHeader)

W żądaniach SOAP prześlij swój TrackServiceKey w SessionIDHeader jako SessionID. Stare operacje Login i Logout nie są wymagane, gdy używasz uwierzytelniania 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>

Przestrzenie nazw i prefiksy SOAP mogą się różnić w zależności od użytego narzędzia. Klient wygenerowany z WSDL jest zwykle najprostszą opcją.

Schemat żądania#

Treść żądania to pojedynczy obiekt: DispatchSpecification. Minimum to pojazdy i lokalizacje.

DispatchSpecification

Właściwość Typ Wymagane Opis
RoutingServiceint (enum)NieSilnik routingu. 0 = NetRoad, 1 = TrackRoad, 2 = Bing. Zalecane: 0 = NetRoad.
IsNeedMatchCodeboolNieJeśli true, uwzględnia kody jakości dopasowania geokodowania tam, gdzie to istotne.
CurrentTimestring (date-time)NieAktualny czas referencyjny używany dla ograniczeń czasowych w formacie ISO 8601.
DispatchModeint (enum)NieStrategia optymalizacji. Rekomendacje dotyczące trybów znajdziesz w Trybach Dispatch.
MinimumOptimizationintNiePróg intensywności optymalizacji. Typowy zakres: 1 do 10.
DistanceUnitint (enum)Nie0 = Mila, 1 = Kilometr.
RouteOptimizeint (enum)Nie0 = MinimizeTime, 1 = MinimizeDistance. Zalecane: 0 = MinimizeTime.
VehiclesVehicle[]NiePojazdy dostępne do dispatchingu.
LocationsLocation[]TakPrzystanki do przypisania i uporządkowania.

DispatchMode

Właściwość Typ Wartość Opis
Autoint0Automatycznie wybiera odpowiednią strategię dispatchingu. Najlepszy domyślny punkt startowy.
EqualStopint1Próbuje rozdzielić równą liczbę przystanków pomiędzy pojazdy.
SingleRegionint2Przydatne, gdy pojazdy są geograficznie rozproszone, ale obsługują przystanki w podobnych obszarach.
MultipleRegionint3Przydatne dla pojazdów działających w różnych miastach lub odległych regionach oraz dla dispatchingu terenowego w czasie rzeczywistym.
EqualHourint4Próbuje podzielić pracę na trasy o podobnym łącznym czasie.
EqualDistanceint5Próbuje podzielić pracę na trasy o podobnym łącznym dystansie.
TimeWindowint6Nadaje priorytet terminom i oknom dostaw. Optymalizacja może zostać ograniczona, aby spełnić ograniczenia czasowe.
TimeWindowDepotint7Tryb okien czasowych zakładający centralne depo współdzielone przez pojazdy.
Optimaint8Bardzo dokładny tryb dla pojedynczego pojazdu, z oknami czasowymi lub bez.
BalanceLocationint9Równoważy liczbę przypisanych przystanków pomiędzy wielu kierowców.
BalanceTimeint10Równoważy czas trasy pomiędzy wielu kierowców.
MinimumVehiclesint11Wybiera minimalną liczbę pojazdów potrzebnych do obsłużenia wszystkich przystanków z uwzględnieniem czynników routingu.

Vehicle

Właściwość Typ Wymagane Opis
NamestringZalecaneIdentyfikator pojazdu wyświetlany w wynikach.
EmailstringNieOpcjonalny kontakt do kierowcy lub pojazdu.
GroupstringNieOpcjonalne pole grupujące, takie jak zespół, depo lub region.
SpeedintNieOpcjonalne nadpisanie prędkości. Jeśli ustawione na 0, używana jest domyślna prędkość drogowa.
MaxStopsintNieMaksymalna liczba przystanków na trasę dla pojazdu.
MaxWeightdoubleNieMaksymalna ładowność pojazdu.
MaxSkidsintNieMaksymalna pojemność skids pojazdu.
MaxVolumedoubleNieMaksymalna pojemność objętościowa pojazdu.
MaxMinutesintNieMaksymalny czas trwania trasy dla pojazdu.
FuelCostdoubleNieOpcjonalny parametr kosztowy używany przez niektóre tryby optymalizacji.
OnTheRoadboolNieJeśli true, wielodniowa trasa może być kontynuowana od lokalizacji końcowej poprzedniego dnia zamiast wracać do pierwotnego punktu startowego.
Tinstring (date-time)NieZnacznik czasu dostępności początkowej pojazdu.
Toutstring (date-time)NieZnacznik czasu dostępności końcowej pojazdu.
StartLocationLocationNieOpcjonalne depo startowe lub pozycja początkowa pojazdu.
FinishLocationLocationNieOpcjonalne depo końcowe lub pozycja końcowa pojazdu.
RolesstringNieOpcjonalny ciąg roli, który może być dopasowywany do warunków przystanków.
TransportTypeint (enum)NieTyp transportu, taki jak samochód, ciężarówka, autobus, motocykl, pieszy, skuter lub rower.
ExcludeTollsboolNieOkreśla, czy należy unikać dróg płatnych.
ExcludeHighwaysboolNieOkreśla, czy należy unikać autostrad.
UseTruckRouteboolNieOkreśla, czy trasy dla ciężarówek mają być preferowane lub dozwolone.
WidthfloatNieSzerokość pojazdu w metrach.
HeightfloatNieWysokość pojazdu w metrach.
LengthfloatNieDługość pojazdu w metrach.
AxleLoadfloatNieNacisk osi pojazdu w tonach metrycznych.
AxleCountintNieLiczba osi.
Przykład funkcji OnTheRoad pojazdu w API TrackRoad
Przykład: zachowanie trasy dziennej z włączonym i wyłączonym OnTheRoad.

Location

Każda lokalizacja powinna zawierać LatLong, jeśli to możliwe. Jeśli współrzędne nie są dostępne, wymagane jest Address, aby TrackRoad mógł zgeokodować przystanek.

Właściwość Typ Wymagane Opis
MatchCodeint (enum)NieKod jakości dopasowania geokodowania.
NamestringNieEtykieta przystanku wyświetlana w wynikach.
DeliverystringNieNazwa powiązanej lokalizacji dostawy lub etykieta klienta.
DeliveryNonStopboolNieOkreśla, czy powiązana dostawa musi nastąpić bezpośrednio po bieżącym przystanku.
KeepSameOrderboolNieJeśli true, zachowuje względną kolejność zdefiniowaną w żądaniu.
VehiclestringNieOpcjonalne wstępne przypisanie do konkretnego pojazdu po nazwie.
DescriptionstringNieOpcjonalne notatki lub opis.
PhonestringNieOpcjonalny numer telefonu kontaktowego.
LatLongLatLongWarunkowePreferowane współrzędne wejściowe. Wymagane, jeśli Address nie jest podane.
AddressAddressWarunkoweDane adresowe używane do geokodowania, gdy LatLong nie jest podane.
PriorityintNieWskazówka priorytetu dla optymalizacji.
WaitintNieCzas obsługi lub oczekiwania na przystanku.
VolumedoubleNieZapotrzebowanie objętościowe konsumujące pojemność pojazdu.
WeightdoubleNieZapotrzebowanie wagowe konsumujące pojemność pojazdu.
SkidsintNieZapotrzebowanie na skids konsumujące pojemność pojazdu.
TimeConstraintArrivalstring (date-time)NieWartość przyjazdu dla głównego okna czasowego.
TimeConstraintDeparturestring (date-time)NieWartość wyjazdu dla głównego okna czasowego.
TimeConstraintArrival2string (date-time)NieOpcjonalna wartość przyjazdu dla drugiego okna czasowego.
TimeConstraintDeparture2string (date-time)NieOpcjonalna wartość wyjazdu dla drugiego okna czasowego.
LocationTypeint (enum)Nie0 = Midway, 1 = Start, 2 = Finish, 3 = Delivery, 4 = MidwayDrop, 5 = Break.
CanArriveEarlyboolNieJeśli false, przyjazd przed dozwolonym oknem czasowym nie jest dozwolony.
ConditionsstringNieOpcjonalna reguła biznesowa lub warunek dopasowania roli.

LatLong

Właściwość Typ Wymagane Opis
LatitudedoubleTakSzerokość geograficzna w stopniach (-90 do 90).
LongitudedoubleTakDługość geograficzna w stopniach (-180 do 180).

Address

Właściwość Typ Wymagane Opis
StreetstringZalecaneAdres ulicy.
CitystringZalecaneMiasto.
StatestringNieStan lub region.
PostalCodestringNieKod ZIP lub kod pocztowy.
CountrystringZalecaneKraj.

Schemat odpowiedzi#

Pomyślna odpowiedź zwraca DispatchResult zawierający elementy tras dla poszczególnych pojazdów oraz opcjonalne błędy lub ostrzeżenia.

DispatchResult

Właściwość Typ Opis
ItemsVehicleItem[]Elementy wyniku dla pojazdów zawierające przypisaną trasę.
ErrorsError[]Opcjonalne błędy lub ostrzeżenia.
Statusint (enum)Status operacji: 0 = None, 1 = Success, 2 = Failed, 3 = SuccessWithErrors.

VehicleItem

Właściwość Typ Opis
VehicleVehiclePojazd powiązany z tą trasą.
LocationsLocation[]Uporządkowane lokalizacje przypisane do tego pojazdu.

Error

Właściwość Typ Opis
MessagestringCzytelny komunikat błędu lub ostrzeżenia.

Przykłady#

Przykładowe bloki kodu żądań i odpowiedzi mogą pozostać bez zmian i nie wymagają lokalizacji.

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

Typowe błędy#

  • REST 401 / Unauthorized: brakujący lub nieprawidłowy X-API-Key.
  • REST 403 / Forbidden: klucz jest prawidłowy, ale zablokowany, wygasł lub nie ma kredytu.
  • Błędy walidacji: przystanek nie zawiera ani LatLong, ani Address, albo współrzędne są nieprawidłowe.
  • Błędy uwierzytelniania SOAP: brakujący lub nieprawidłowy SessionIDHeader albo pusty SessionID.

Najlepsze praktyki

  • Preferuj LatLong, aby uniknąć niejednoznaczności geokodowania i poprawić spójność routingu.
  • Używaj StartLocation i FinishLocation dla routingu opartego na depo i lepszych ETA.
  • Dodawaj ograniczenia pojemności, takie jak waga, objętość i skids, aby uzyskać bardziej realistyczne przypisanie tras.
  • Używaj okien czasowych, gdy przystanki muszą być odwiedzane w określonych ramach czasowych klienta lub operacyjnych.
  • Dla SOAP używaj TrackServiceKey w SessionIDHeader. Stary przepływ logowania nie jest wymagany.

FAQ#

Do czego służy API Dispatch?
Dispatch optymalizuje przystanki dla wielu pojazdów i zwraca uporządkowane trasy dla każdego pojazdu wraz z czasem i dystansem.
Jak uwierzytelnić Dispatch w REST i SOAP?
REST używa Twojego TrackServiceKey w nagłówku X-API-Key. SOAP używa tego samego TrackServiceKey w SessionIDHeader jako SessionID.
Czy przystanki wymagają LatLong czy Address?
LatLong jest preferowane. Jeśli LatLong nie jest podane, wymagane jest Address, aby TrackRoad mógł zgeokodować przystanek.

Gotowy do optymalizacji tras?

Wygeneruj swój klucz API, a następnie rozpocznij integrację Dispatch do optymalizacji tras wielu pojazdów z użyciem REST lub SOAP.

Pobierz klucz API SOAP WSDL Swagger UI