Inizia a utilizzare Fleet Engine per Fleet Performance

Modella le attività della flotta per il primo e l'ultimo miglio di consegne con l'API Fleet Engine Deliveries. Puoi utilizzare questa API con l'SDK Driver per Android e iOS, oppure direttamente tramite chiamate REST HTTP o gRPC.

Configurazione iniziale

Puoi configurare l'API Fleet Engine Deliveries nella console Google Cloud.

Verificare la configurazione

Dopo aver creato gli account di servizio, verifica che la configurazione sia completa e puoi creare un veicolo per la consegna. Verifica immediata della configurazione garantisce di aver risolto i problemi di autorizzazione più comuni che possono verificarsi quando durante la configurazione del progetto. Puoi verificare la configurazione in due modi:

Librerie client

Per una migliore esperienza degli sviluppatori rispetto a gRPC o REST non elaborati, utilizza la classe librerie client in vari linguaggi di programmazione comuni. Per istruzioni su come ottenere le librerie client per la tua applicazione server, vedi Librerie client.

Gli esempi Java in questa documentazione presuppongono che tu abbia familiarità con gRPC.

Strutture di dati

L'API Fleet Engine Deliveries utilizza due strutture di dati per modellare il ritiro e la consegna delle spedizioni:

  • Il veicolo per la consegna utilizzato per il trasporto della spedizione.
  • Le attività di ritiro e consegna della spedizione.

Puoi usare le attività anche per modellare le interruzioni del conducente e le fermate pianificate durante la giornata.

Veicoli per la consegna

I veicoli per la consegna trasportano le spedizioni da un deposito a una località di consegna, e da un punto di prelievo al deposito. In alcuni casi, potrebbero anche Trasportare una spedizione direttamente dal punto di prelievo a quello di consegna.

Utilizza l'SDK Driver per creare un oggetto DeliveryVehicle in Fleet Engine e inviare aggiornamenti sulla posizione per il monitoraggio della spedizione e della flotta.

Nota: puoi assegnare fino a 500 attività e 300 attività rimanenti segmenti di percorso del veicolo fino a DeliveryVehicle oggetti.

Tasks

Per le azioni compiute da un veicolo durante il giorno, assegni attività in base a il tipo di azione:

  • Per ritiri e consegne, assegna l'opzione Attività di spedizione.
  • Nei momenti in cui i conducenti non sono disponibili, come le pause obbligatorie, e assegnare le attività di indisponibilità.
  • Per le attività non manuali presso caselle postali o sedi dei clienti, assegna Attività di interruzione pianificate.

Ogni attività assegnata deve avere un ID attività univoco, ma le attività possono condividere lo stesso l'ID monitoraggio. Quando Fleet Engine calcola l'orario di arrivo stimato finestre per ogni attività, utilizza tutte le attività e l'ordine in cui sono pianificati per fare delle stime. Per ulteriori informazioni sugli ID attività, consulta Linee guida per gli ID attività.

Per creare attività in Fleet Engine, utilizza il Task Manager dell'SDK Driver.

Attività di spedizione

Creare attività di spedizione sia per il ritiro che per la consegna di una spedizione e includi le seguenti informazioni:

  • Il luogo di ritiro o consegna.
  • Un ID o un numero di riferimento.
  • Un tempo di attesa per calcolare il tempo aggiuntivo per completare l’attività, guarda per il parcheggio o a piedi fino al punto di consegna.
  • Un ID attività univoco. Consulta le linee guida per gli ID attività.

Per ulteriori informazioni, consulta i seguenti argomenti:

Android

iOS

Attività di indisponibilità

Le attività di indisponibilità coprono i periodi di tempo in cui un veicolo non è disponibile ritiri o consegne, ad esempio pause per il rifornimento del veicolo o del conducente delle pause.

Crea un'attività di indisponibilità con le seguenti informazioni:

  • La durata della pausa.
  • Facoltativamente, il luogo dell'interruzione. Non è necessario fornire un posizione specifica, ma così facendo si ottengono finestre di orario di arrivo stimato più precise. durante la giornata.

Per ulteriori informazioni, consulta i seguenti argomenti:

Android

iOS

Attività di interruzione pianificate

Creare attività di soste programmate per modellare le fermate di cui un veicolo per le consegne ha bisogno da realizzare. Ad esempio, crea un'attività di interruzione pianificata per una pianificazione giornaliera programmata il ritiro si ferma in una località specifica, indipendentemente da altre consegne o ritiro presso lo stesso luogo. Puoi anche creare attività di interruzione pianificate per il ritiro delle cassette portate o per i trasferimenti tra i modelli o si ferma presso centri riparazioni e punti di assistenza.

Per ulteriori informazioni, consulta i seguenti argomenti:

Android

iOS

Linee guida per gli ID attività

Quando crei ID attività, segui queste linee guida per i contenuti e la formattazione:

  • Crea ID attività univoci
  • Non esporre informazioni che consentono l'identificazione personale (PII) o cancella i dati di testo.
  • Utilizza stringhe Unicode valide.
  • Utilizza al massimo 64 caratteri.
  • Non includere nessuno dei seguenti caratteri ASCII: "/", ":", "\", "?" oppure "#".
  • Normalizza in base al modulo di normalizzazione Unicode C.

Di seguito sono riportati alcuni esempi di ID attività validi:

  • 566c33d9-2a31-4b6a-9cd4-80ba1a0c643b
  • e4708eabcfa39bf2767c9546c9273f747b4626e8cc44e9630d50f6d129013d38
  • NTA1YTliYWNkYmViMTI0ZmMzMWFmOWY2NzNkM2Jk

La tabella seguente mostra esempi di ID attività non supportati:

ID attività non supportati Motivo
8/31/2019-20:48-46.70746,-130.10807,-85.17909,61.33680 Viola le informazioni personali e i requisiti dei caratteri: virgole, punti, due punti e barre.
JohnDoe-577b484da26f-Cupertino-SantaCruz Viola i requisiti relativi alle PII.
4R0oXLToF"112 Summer Dr. East Hartford, CT06118"577b484da26f8a Viola i requisiti di PII e caratteri: spazi vuoti, virgole e virgolette. Più di 64 caratteri.

Altre risorse

Per visualizzare i campi specifici contenuti in ogni dato struttura, consulta la documentazione di riferimento API per DeliveryVehicle (gRPC, REST) e Task (gRPC, REST).

La vita di un veicolo

L'oggetto DeliveryVehicle rappresenta un veicolo per la consegna primo o ultimo miglio. Puoi creare un oggetto DeliveryVehicle utilizzando:

  • L'ID del progetto Google Cloud che contiene l'account di servizio. utilizzato per chiamare le API Fleet Engine.
  • Un ID veicolo di proprietà del cliente.

Utilizza ID veicolo univoci per ciascun veicolo. Non riutilizzare un ID veicolo a meno che non ci siano attività attive per il veicolo originale.

Fleet Engine elimina automaticamente DeliveryVehicle oggetti che non sono è stato aggiornato utilizzando UpdateDeliveryVehicle dopo sette giorni. Il tipo di l'approccio per mantenere un veicolo disponibile su Fleet Engine è aggiornare la sua posizione a intervalli regolari. Aggiornamenti alla maggior parte degli altri campi in DeliveryVehicle l'entità estenderà anche la sua durata, a condizione che il nuovo valore del campo sia diverso da quello esistente.

Per verificare l'esistenza di un veicolo:

  1. Chiama il numero UpdateDeliveryVehicle.
  2. Se visualizzi un errore NOT_FOUND, chiama CreateDeliveryVehicle per ricreare il veicolo. Se la chiamata restituisce un veicolo, è ancora disponibile per l'aggiornamento.

Attributi veicolo

L'entità DeliveryVehicle contiene un campo ripetuto di DeliveryVehicleAttribute. L'API ListDeliveryVehicles include un filter che può limitare le entità DeliveryVehicle restituite a quelle con specifici degli attributi. DeliveryVehicleAttribute non influisce su Fleet Engine un comportamento di routing.

Non includere informazioni che consentono l'identificazione personale (PII) o informazioni sensibili negli attributi, in quanto questo campo può essere visibile agli utenti.

La vita di un'attività

Puoi creare, aggiornare ed eseguire query in attività in Fleet Engine con le interfacce gRPC o REST dell'API Deliveries.

Un oggetto Task dispone di un campo di stato per monitorarne l'avanzamento durante il suo ciclo di vita. I valori passano da OPEN (APERTO) a CHIUSO. Vengono create nuove attività nello stato OPEN, che indica che:

  • L'attività non è stata ancora assegnata a un veicolo per le consegne.
  • Il veicolo per le consegne non ha ancora superato la fermata del veicolo assegnata all'attività.

Linee guida per le attività

Puoi assegnare un'attività a un veicolo solo quando è nello stato APERTO.

Puoi annullare un'attività rimuovendola dall'elenco delle fermate del veicolo, in modo da impostare il automaticamente lo stato dell'attività a CHIUSA.

Quando il veicolo dell'attività completa l'arresto del veicolo:

  1. Aggiorna il campo dei risultati dell'attività impostandolo su SUCCEEDED o FAILED.

  2. Specifica il timestamp dell'evento.

    La libreria JavaScript Fleet Tracking indica quindi il risultato dell'attività e lo stato dell'attività viene impostato automaticamente su CHIUSA. Per ulteriori informazioni, vedi Monitora il tuo parco risorse con la libreria JavaScript Fleet Tracking.

Come per i veicoli, Fleet Engine elimina le attività che non sono state aggiornate sette giorni e se provi a creare un'attività con un ID già esistente, restituisce un errore.

Nota: Fleet Engine non supporta l'eliminazione esplicita di un'attività. Il servizio elimina automaticamente le attività dopo sette giorni senza aggiornamenti. Se vuoi conservare i dati delle attività per più di sette giorni, devi implementare questa funzionalità personalmente.

Attributi attività

L'entità Task contiene un campo ripetuto di TaskAttribute, che può avere un valore di uno dei tre tipi seguenti: stringa, numero e bool. L'API ListTasks include un campo filter che può limitare la restituzione Task a quelle con gli attributi specificati. Gli attributi delle attività il comportamento di routing di Fleet Engine.

Non includere informazioni che consentono l'identificazione personale (PII) o altri dati sensibili le informazioni negli attributi, poiché questi attributi possono essere visibili agli utenti.

Gestisci il ciclo di vita del veicolo e delle attività

Promemoria: il sistema interno funge da fonte attendibile dei dati che L'API Fleet Engine Deliveries aumenta per tuo conto.

Per gestire i cicli di vita dei veicoli e delle attività nel tuo sistema, utilizza l'API Fleet Engine Deliveries per creare, aggiornare e monitorare i tuoi veicoli e le attività associate.

Allo stesso tempo, l'applicazione driver comunica direttamente con Fleet Engine per aggiornare la posizione del dispositivo e le informazioni sul percorso. Questo modello consente a Fleet Engine gestire in modo efficiente la posizione in tempo reale. Invia la posizione direttamente al libreria di monitoraggio, che potrai utilizzare per aggiornare i consumatori sullo stato del loro ordine.

Ad esempio, supponiamo che tu abbia il seguente scenario:

  • Un autista si avvicina a una fermata di consegna. L'applicazione driver invia la sua posizione a Fleet Engine.
  • Fleet Engine invia la posizione del dispositivo libreria di monitoraggio, che la tua applicazione consumer utilizza per avvisare il consumatore alla vicinanza del pacco.
  • Al termine della spedizione, il corriere fa clic su "Spedizione consegnata" sull'applicazione del driver.
  • La colonna "Spedizione consegnata" invia le informazioni al sistema di backend, che esegue i passaggi necessari di convalida e verifica dell'attività.
  • Il sistema conferma che l'attività è RIUSCITA e aggiorna Fleet Engine utilizzando API Deliveries.

Il seguente diagramma illustra questi processi a livello generico. Inoltre, mostra la relazione standard tra il tuo sistema, il client e Fleet Engine.

Integrazione del diagramma dell'API Deliveries>

Gestisci token client

Aggiornamenti della posizione provenienti dall'applicazione del conducente e inviati direttamente a Fleet Engine richiedono token di autorizzazione. Ecco l'approccio consigliato per gestire gli aggiornamenti dal client a Fleet Engine:

  1. Genera il token utilizzando Floet Engine Delivery Untrusted Driver User. il ruolo dell'account di servizio.

  2. Fornisci all'applicazione driver un token di ambito limitato. Questo ambito consente di aggiornare la posizione del dispositivo solo in Fleet Engine.

Questo approccio garantisce che le chiamate provenienti da dispositivi mobili, considerati ambienti poco affidabili, aderisci al principio del privilegio minimo.

Altri ruoli dell'account di servizio

Se invece vuoi autorizzare le applicazioni dei conducenti a eseguire direttamente Fleet Engine si aggiornano oltre a quelli limitati al ruolo Untrusted Driver. ad esempio, per determinati aggiornamenti delle attività, puoi usare il ruolo Per informazioni su un modello che utilizza il ruolo Driver attendibile, consulta Modello di driver affidabile.

Per ulteriori informazioni sugli utilizzi dei ruoli di conducente non attendibili e attendibili, vedi Configurazione del progetto Cloud.

Modella una giornata di lavoro

La tabella seguente descrive come una giornata lavorativa per i conducenti del primo o dell'ultimo miglio di un'azienda di consegna e logistica. La tua azienda può anche nei dettagli, ma puoi vedere come potresti modellare una giornata di lavoro.

OraAttivitàDefinizione del modello
Entro 24 ore dall'inizio della giornata Il supervisore assegna le spedizioni ai veicoli per la consegna o ai percorsi. Puoi creare attività per le consegne, i ritiri, le pause e altre a Fleet Engine in anticipo. Ad esempio, puoi creare un'etichetta attività di ritiro della spedizione, attività di consegna della spedizione, indisponibilità pianificata oppure fermata programmata.

Assegnare attività a un veicolo una volta terminato l'insieme di pacchi di consegna e l'ordine in cui devono essere pubblicati sono finalizzati.
Inizio giornata Il conducente inizia la giornata al deposito accedendo all'app Driver. Inizializza l'API Delivery Driver. Crea il veicolo per la consegna in Fleet Engine secondo le necessità.
L'autista carica le spedizioni sul veicolo per la consegna, scansionando le spedizioni. Se le attività di consegna delle spedizioni non sono state create in anticipo, creare attività di consegna della spedizione al momento della scansione.
Il conducente conferma l'ordine delle attività da eseguire. Se non sono state create in anticipo, crea attività di ritiro della spedizione, indisponibilità pianificata e fermate pianificate.
Il conducente lascia il deposito e si impegna a svolgere il numero successivo di attività completata. Assegna tutte le attività o un sottoinsieme di attività al veicolo eseguendone l'ordine di completamento.
Il corriere consegna una spedizione. Dopo aver raggiunto la fermata, esegui le azioni correlate a un veicolo che arriva a una fermata. Dopo aver consegnato la spedizione, chiudi la dell'attività di distribuzione dei contenuti e, facoltativamente, stato di spedizione in negozio e altre meta informazioni. Dopo aver completato tutte le attività nella fermata e prima inizio a guidare fino alla fermata successiva, esegui azioni relative a il veicolo completa una fermata e il veicolo sta per raggiungere la fermata successiva.
Il conducente incontra un veicolo con alimentatore per trasferire ulteriori spedizioni sul veicolo per la consegna. Il punto d'incontro per un trasferimento tra il feeder e i veicoli per la consegna deve essere modellata come interruzione pianificata.

Dopo aver trasferito e scansionato le spedizioni, crea attività di consegna se non sono già stati creati. Quindi, aggiorna il completamento dell'attività. in ordine assegnando attività a un veicolo e aggiornando l'ordine delle attività.
Il conducente riceve la notifica di una richiesta di ritiro. Dopo aver accettato la richiesta di ritiro, creare un'attività di ritiro della spedizione. Poi aggiorna l'esecuzione dell'attività in ordine assegnando attività a un veicolo e aggiornando l'ordine delle attività.
Mezzogiorno Il conducente fa la pausa pranzo. Se una località è associata all'attività di indisponibilità, considerala come qualsiasi altra attività. Eseguire azioni correlate a un veicolo arrivare a una fermata, il veicolo completa una fermata e il veicolo sta per raggiungere la fermata successiva.

In caso contrario, non sono necessarie ulteriori azioni fino al termine dell'interruzione. Rimuovere l'attività confermando le attività successive e rimanenti. aggiornando l'ordine delle attività.
Il corriere ritira una spedizione. Questo è modellato proprio come una fermata di consegna. Esegui azioni correlate a un veicolo che arriva a una fermata e la chiusura di un'attività e, facoltativamente, archiviazione dello stato di spedizione e di altre meta informazioni. Dopo aver completato tutte le attività dalla fermata e prima di iniziare a guidare alla fermata successiva, esegui le azioni relative al veicolo che completa una fermata e il veicolo sta per raggiungere la fermata successiva. Nota: per garantire la corretta fatturazione, tutti i ritiri devono avere un indirizzo corrispondente di distribuzione dei contenuti. Se il ritiro deve essere consegnato in un altro luogo della stesso percorso del conducente durante la giornata, ti consigliamo di modellare l'attività di consegna come qualsiasi altra attività di consegna lungo il percorso. Se il conducente porta il ritiro torniamo al deposito, ti consigliamo di creare un'attività di consegna presso il deposito destinazione.
L'autista si ferma a un appuntamento per ritirare le spedizioni da una casella di posta. Questo modello è modellato come qualsiasi altra tappa per il ritiro. Esegui azioni correlate a un veicolo che arriva a una fermata e la chiusura di un'attività. Dopo aver completato tutte le attività alla fermata e iniziare a guidare fino alla fermata successiva, eseguire azioni relative a una fermata del veicolo e il veicolo sta per raggiungere la fermata successiva.
Il conducente riceve la notifica di deviazione della spedizione in una località alternativa. Imposta lo stato dell'attività di consegna della spedizione originale su COMPLETATO e crea un nuovo attività di consegna della spedizione per la nuova località di consegna. Per ulteriori informazioni, consulta la sezione Reindirizzare una spedizione.
Il driver ha tentato di consegnare un pacchetto, ma non è riuscito a farlo. Questo è un modello simile a quello di una corretta interruzione della consegna, segnando il dell'attività di distribuzione dei contenuti come completata. Esegui azioni correlate a Un veicolo che arriva a una fermata. Dopo il giorno mancata consegna della spedizione, chiudi l'attività e, facoltativamente, stato di spedizione in negozio e altre meta informazioni. Dopo aver completato tutte le attività dalla fermata e prima di iniziare a guidare alla fermata successiva, esegui le azioni relative al veicolo che completa una fermata e il veicolo sta per raggiungere la fermata successiva.
Al conducente è stato comunicato di trattenere (non consegnare) una spedizione. Dopo che la notifica è stata ricevuta e confermata, imposta lo stato dell'attività su COMPLETATA.
Il conducente è stato informato della prossima consegna di una determinata spedizione, con la modifica dell'ordine di consegna impegnato. Aggiorna l'ordine delle attività.
Il conducente sceglie di consegnare una spedizione non ordinata. Aggiorna l'ordine delle attività e poi procedere normalmente.
Il corriere consegna più spedizioni in un'unica località. Si tratta di un modello simile a quello di una singola tappa di consegna della spedizione. Una volta giunti alla fermata, esegui azioni correlate a una veicolo che arriva a una fermata. Dopo aver consegnato ogni spedizione, chiudi ogni attività e, facoltativamente, lo stato di spedizione in negozio e altre meta informazioni. Dopo aver completato tutte le attività dalla fermata e prima di iniziare a guidare alla fermata successiva, esegui le azioni relative al veicolo che completa una fermata e il veicolo sta per raggiungere la fermata successiva.
Fine giornata Il conducente torna al deposito. Se il corriere torna in deposito con le spedizioni ritirate durante devi inoltre creare e chiudere ogni pacco come attività di consegna per garantire la corretta fatturazione. Puoi farlo modellando il deposito come qualsiasi altra un'altra fermata di consegna. Se il deposito non viene utilizzato come tappa di consegna, puoi scegliere modellare il deposito come una fermata pianificata. La modellazione della fermata consente ai conducenti di vedere il percorso per tornare al deposito e fornire visibilità sulla durata stimata dall'arrivo.

Come funzionano gli aggiornamenti della posizione

Per ottenere le migliori prestazioni con Fleet Engine, fornisci un flusso di veicoli aggiornamenti posizione. Per fornire questi aggiornamenti, utilizza uno dei seguenti metodi:

  1. Usa l'SDK Driver - Android, iOS è l'opzione più semplice.
  2. Utilizza un codice personalizzato, utile se le località sono inoltrate tramite backend o se usi dispositivi diversi da Android o iOS.

Indipendentemente da come fornisci gli aggiornamenti sulla posizione del veicolo, il tuo backend responsabile dell'aggiornamento di Fleet Engine quando un veicolo per le consegne viene il percorso verso una fermata (incluso il deposito) e quando arriva in una fermata. Fleet Engine non rileva questi eventi automaticamente.

Fermate dei veicoli e luoghi di consegna

Una fermata veicolo è il luogo in cui un veicolo per la consegna completa un'attività di spedizione o per svolgere altre attività. Si tratta di un punto di accesso, ad esempio un dock di caricamento, posizione agganciata alla strada.

La località di consegna è il luogo in cui viene consegnata la spedizione o ritirato. Per andare e tornare dalla località di consegna potrebbero essere necessari dei percorsi a piedi dalla fermata del veicolo.

Ad esempio, quando un corriere consegna una spedizione a un negozio in un centro commerciale, il veicolo per le consegne si ferma nel parcheggio del centro commerciale vicino l'ingresso più vicino al negozio. Questa è la fermata del veicolo. Il conducente e poi cammina dalla fermata del veicolo a quella all'interno del centro commerciale dove in cui si trova il negozio. Questo è il luogo di consegna.

Per una migliore esperienza di tracciamento della spedizione per gli utenti, valuta come le attività di spedizione vengono assegnate alle fermate del veicolo; tieni presente che il numero le fermate del veicolo rimanenti per le attività di spedizione vengono segnalate all'utente per aiutarlo visualizzare lo stato di avanzamento della spedizione.

Ad esempio, se un conducente effettua molte consegne in un unico edificio per uffici, valuta la possibilità di assegnare tutte le attività di consegna a una singola fermata del veicolo. Se ogni attività di consegna è assegnata a un proprio punto di sosta, la tua spedizione esperienza di monitoraggio sarebbe meno utile per gli utenti in quanto disponibile una volta che il veicolo si trova entro un numero limitato di fermate prima del giorno la sua destinazione. Avere molte soste del veicolo in breve tempo non significa a un utente il tempo necessario per monitorare l'avanzamento della pubblicazione.

Utilizzare gli SDK per dispositivi mobili

Prima di effettuare chiamate all'SDK del driver, assicurati di inizializzarlo.

Inizializzare l'API Delivery Driver

Prima di inizializzare l'API Delivery Driver nell'SDK Driver, assicurati per inizializzare l'SDK di navigazione. Quindi inizializza l'API Delivery Driver come mostrato nell'esempio seguente:

static final String PROVIDER_ID = "provider-1234";
static final String VEHICLE_ID = "vehicle-8241890";

NavigationApi.getNavigator(
   this, // Activity.
   new NavigatorListener() {
     @Override
     public void onNavigatorReady(Navigator navigator) {
       DeliveryDriverApi.createInstance(DriverContext.builder(getApplication())
         .setNavigator(navigator)
         .setProviderId(PROVIDER_ID)
         .setVehicleId(VEHICLE_ID)
         .setAuthTokenFactory((context) -> "JWT") // AuthTokenFactory returns JWT for call context.
         .setRoadSnappedLocationProvider(NavigationApi.getRoadSnappedLocationProvider(getApplication()))
         .setNavigationTransactionRecorder(NavigationApi.getNavigationTransactionRecorder(getApplication()))
         .setStatusListener((statusLevel,statusCode,statusMsg) -> // Optional, surfaces polling errors.
             Log.d("TAG", String.format("New status update. %s, %s, %s", statusLevel, statusCode, statusMsg)))
         .build));
     }
     @Override
     public void onError(int errorCode) {
       Log.e("TAG", String.format("Error loading Navigator instance: %s", errorCode));
     }
   });

Casi d'uso

Questa sezione descrive come utilizzare l'API Deliveries per creare modelli di casi d'uso comuni.

Identificatori di entità univoci

Il formato e il valore degli identificatori di entità univoci utilizzati nelle chiamate REST sono: opaco a Fleet Engine. Evita di utilizzare ID con incremento automatico e assicurati che l'identificatore non contenga informazioni che consentono l'identificazione personale (PII), come il numero di telefono del conducente.

Crea un veicolo

Puoi creare un veicolo da SDK driver o da un ambiente server che utilizza gRPC o REST.

gRPC

Per creare un nuovo veicolo, effettui una chiamata CreateDeliveryVehicle a Fleet Engine. Utilizza l'oggetto CreateDeliveryVehicleRequest per definire gli attributi di il nuovo veicolo per le consegne. Tieni presente che qualsiasi valore specificato per il campo Name ignorato in base alle linee guida dell'API per gli ID specificati dall'utente. Devi utilizzare il campo DeliveryVehicleId per impostare l'ID del veicolo.

Quando crei un DeliveryVehicle, puoi specificare facoltativamente questi campi:

  • Attributi
  • LastLocation
  • Tipo

Non impostare altri campi. In questo caso, Fleet Engine restituisce un errore perché questi campi sono di sola lettura o possono essere aggiornati solo con una chiamata UpdateDeliveryVehicle.

Per creare un veicolo senza impostare campi facoltativi, puoi uscire dalla Impostazione del campo DeliveryVehicle annullata in CreateDeliveryVehicleRequest.

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per creare un veicolo:

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String VEHICLE_ID = "vehicle-8241890"; // Avoid auto-incrementing IDs.

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Vehicle settings
    String parent = "providers/" + PROJECT_ID;
    DeliveryVehicle vehicle = DeliveryVehicle.newBuilder()
      .addAttributes(DeliveryVehicleAttribute.newBuilder()
        .setKey("route_number").setValue("1"))  // Opaque to the Fleet Engine
      .build();

    // Vehicle request
    CreateDeliveryVehicleRequest createVehicleRequest =
      CreateDeliveryVehicleRequest.newBuilder()  // No need for the header
          .setParent(parent)
          .setDeliveryVehicleId(VEHICLE_ID)     // Vehicle ID assigned by the Provider
          .setDeliveryVehicle(vehicle)
          .build();

    // Error handling
    // If Fleet Engine does not have vehicle with that ID and the credentials of the
    // requestor pass, the service creates the vehicle successfully.

    try {
      DeliveryVehicle createdVehicle =
        deliveryService.createDeliveryVehicle(createVehicleRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case ALREADY_EXISTS:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

REST

Per creare un veicolo da un ambiente server, esegui una chiamata REST HTTP a CreateDeliveryVehicle:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles?deliveryVehicleId=<id>

L'&lt;id&gt; è un identificatore univoco di un veicolo da consegnare del tuo parco risorse.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo del POST rappresenta l'entità DeliveryVehicle da creare. Puoi specificare i seguenti campi facoltativi:

  • attributi
  • lastLocation
  • tipo

Esempio di comando curl:

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
  "attributes": [{"key": "model", "value": "sedan"}],
  "lastLocation": {"location": {"latitude": 12.1, "longitude": 14.5}}
}
EOM

Fleet Engine ignora il campo name dell'entità DeliveryVehicle in base alle indicazioni dell'API per gli ID specificati dall'utente. Non impostare altri campi. In questo caso, Fleet Engine restituisce un errore perché questi campi sono di sola lettura o possono essere aggiornati solo mediante una chiamata a UpdateDeliveryVehicle.

Per creare un veicolo senza impostare alcun campo, lascia il corpo del messaggio POST richiesta vuota. Il veicolo appena creato estrae un ID veicolo dalla deliveryVehicleId nell'URL POST.

Esempio di comando curl:

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}"

Crea un'attività di ritiro della spedizione

Puoi creare un'attività di ritiro della spedizione sia dalla SDK driver o da un ambiente server usando gRPC o REST.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per creare un'attività di ritiro della spedizione:

static final String PROJECT_ID = "my-delivery-co-gcp-project";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
  .setType(Task.Type.PICKUP)
  .setState(Task.State.OPEN)
  .setTrackingId("my-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .setTargetTimeWindow(
    TimeWindow.newBuilder()
      .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
      .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
  .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
  .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
  .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
  .build();

// Task request
CreateTaskRequest createTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header
      .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTask(task)              // Initial state
      .build();

// Error handling
// If Fleet Engine does not have a task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.

try {
  Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per creare un'attività di ritiro della spedizione da un ambiente server, effettua una chiamata REST HTTP a CreateTask:

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

&lt;id&gt; è un identificatore univoco dell'attività. Non deve essere il numero di riferimento. per la spedizione. Se nel tuo sistema non sono presenti ID attività, puoi generare Un UUID (Universally Unique Identifier).

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità Task:

  • Campi obbligatori:

    CampoValore
    tipo Type.PICKUP
    stato State.OPEN
    trackingId Il numero o l'identificatore che stai utilizzando per tracciare una spedizione.
    plannedLocation Il luogo in cui deve essere completata l'attività, in questo caso il luogo di ritiro della spedizione.
    taskDuration Il tempo previsto, in secondi, necessario per il ritiro della spedizione presso il punto di ritiro.

  • Campi facoltativi:

    CampoValore
    targetTimeWindow L'intervallo di tempo durante il quale deve essere completata l'attività. Ciò non influisce sul comportamento di routing.
    attributi Un elenco di attributi personalizzati delle attività. Ogni attributo deve avere una chiave univoca.

Tutti gli altri campi dell'entità vengono ignorati per la creazione. Lanci di Fleet Engine un'eccezione se la richiesta include un deliveryVehicleId assegnato. Tu assegni attività usando UpdateDeliveryVehicleRequest. Per ulteriori informazioni, vedi Assegna attività a un veicolo e UpdateDeliveryVehicleRequest.

Esempio di comando curl:

# Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "type": "PICKUP",
  "state": "OPEN",
  "trackingId": "${TRACKING_ID}",
  "plannedLocation": {
     "point": {
        "latitude": -6.195139,
        "longitude": 106.820826
     }
  },
  "taskDuration": "90s",
  "targetTimeWindow": {
    "startTime": "2023-03-29T21:00:00Z",
    "endTime": "2023-03-29T23:00:00Z"
  }
}
EOM

Creare un'attività di consegna della spedizione

Crea un'attività di consegna della spedizione dal SDK driver o da un ambiente server usando gRPC o REST.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per creare un'attività di consegna della spedizione:

static final String PROJECT_ID = "my-delivery-co-gcp-project";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
  .setType(Task.Type.DELIVERY)
  .setState(Task.State.OPEN)
  .setTrackingId("my-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .setTargetTimeWindow(
    TimeWindow.newBuilder()
      .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
      .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
  .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
  .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
  .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
  .build();

// Task request
CreateTaskRequest createTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header
      .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTask(task)              // Initial state
      .build();

// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.

try {
  Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per creare un'attività di consegna della spedizione da un ambiente server utilizzando gRPC o REST, effettua una chiamata REST HTTP a CreateTask:

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

&lt;id&gt; è un identificatore univoco dell'attività. Non deve essere il numero di riferimento. per la spedizione. Se nel tuo sistema non sono presenti ID attività, puoi generare Un UUID (Universally Unique Identifier).

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità Task:

  • Campi obbligatori:

    CampoValore
    tipo Type.DELIVERY
    stato State.OPEN
    trackingId Il numero o l'identificatore che stai utilizzando per tracciare una spedizione.
    plannedLocation Il luogo in cui deve essere completata l'attività, in questo caso la località di consegna di questa spedizione.
    taskDuration Il tempo previsto, in secondi, necessario per consegnare la spedizione presso il luogo di consegna.

  • Campi facoltativi:

    CampoValore
    targetTimeWindow L'intervallo di tempo durante il quale deve essere completata l'attività. Ciò non influisce sul comportamento di routing.
    attributi Un elenco di attributi personalizzati delle attività. Ogni attributo deve avere una chiave univoca.

Tutti gli altri campi dell'entità vengono ignorati per la creazione. Lanci di Fleet Engine Un'eccezione se la richiesta include un deliveryVeicoliId assegnato. Tu assegni attività usando UpdateDeliveryVehicleRequest. Per ulteriori informazioni, vedi Assegna attività a un veicolo e UpdateDeliveryVehicleRequest.

Esempio di comando curl:

# Set $JWT, $PROJECT_ID, $TRACKING_ID, and $TASK_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "type": "DELIVERY",
  "state": "OPEN",
  "trackingId": "${TRACKING_ID}",
  "plannedLocation": {
     "point": {
        "latitude": -6.195139,
        "longitude": 106.820826
     }
  },
  "taskDuration": "90s",
  "targetTimeWindow": {
    "startTime": "2023-03-29T21:00:00Z",
    "endTime": "2023-03-29T23:00:00Z"
  }
}
EOM

Attività di creazione in batch

Puoi creare un batch di attività da un ambiente server utilizzando gRPC o REST.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java di creare due attività, una per la consegna e l'altra per il ritiro nello stesso momento località:

static final String PROJECT_ID = "my-delivery-co-gcp-project";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Delivery Task settings
Task deliveryTask = Task.newBuilder()
  .setType(Task.Type.DELIVERY)
  .setState(Task.State.OPEN)
  .setTrackingId("delivery-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Delivery Task request
CreateTaskRequest createDeliveryTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8312508")  // Task ID assigned by the Provider
      .setTask(deliveryTask)      // Initial state
      .build();

// Pickup Task settings
Task pickupTask = Task.newBuilder()
  .setType(Task.Type.PICKUP)
  .setState(Task.State.OPEN)
  .setTrackingId("pickup-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Pickup Task request
CreateTaskRequest createPickupTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTask(pickupTask)        // Initial state
      .build();

// Batch Create Tasks settings
String parent = "providers/" + PROJECT_ID;

// Batch Create Tasks request
BatchCreateTasksRequest batchCreateTasksRequest =
  BatchCreateTasksRequest.newBuilder()
      .setParent(parent)
      .addRequests(createDeliveryTaskRequest)
      .addRequests(createPickupTaskRequest)
      .build();

// Error handling
// If Fleet Engine does not have any task(s) with these task ID(s) and the
// credentials of the requestor pass, the service creates the task(s)
// successfully.

try {
  BatchCreateTasksResponse createdTasks = deliveryService.batchCreateTasks(
    batchCreateTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per creare un'attività di consegna e di ritiro da un ambiente server, crea una Chiamata REST HTTP a BatchCreateTasks:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks:batchCreate

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità BatchCreateTasksRequest:

  • Campi obbligatori:

    CampoValore
    richieste Array<CreateTasksRequest>

  • Campi facoltativi:

    CampoValore
    intestazione `DeliveryRequestHeader`

Ogni elemento CreateTasksRequest in requests deve superare la stessa convalida è una richiesta CreateTask, ad eccezione del fatto che parent mentre i campi header sono facoltativi. Se impostati, devono essere identici i rispettivi campi nel livello BatchCreateTasksRequest di primo livello. Consulta creare un'attività di ritiro della spedizione e crea un'attività di consegna della spedizione per regole di convalida specifiche.

Per saperne di più, consulta la documentazione di riferimento delle API per BatchCreateTasks (gRPC, REST).

Esempio di comando curl:

# Set $JWT, $PROJECT_ID, $DELIVERY_TRACKING_ID, $DELIVERY_TASK_ID,
# $PICKUP_TRACKING_ID, and $PICKUP_TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks:batchCreate" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "requests" : [
    {
      "taskId": "${DELIVERY_TASK_ID}",
      "task" : {
        "type": "DELIVERY",
        "state": "OPEN",
        "trackingId": "${DELIVERY_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    },
    {
      "taskId": "${PICKUP_TASK_ID}",
      "task" : {
        "type": "PICKUP",
        "state": "OPEN",
        "trackingId": "${PICKUP_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    }
  ]
}
EOM

Indisponibilità pianificata

Puoi creare un'attività per indicare l'indisponibilità (ad esempio, per il conducente rotte o rifornimento del veicolo) SDK Driver, o da un ambiente server usando gRPC o REST. Un'attività di indisponibilità pianificata non deve includere un ID monitoraggio. Se vuoi, puoi fornire una località.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per creare un'attività di indisponibilità:

    static final String PROJECT_ID = "my-delivery-co-gcp-project";

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Task settings
    String parent = "providers/" + PROJECT_ID;
    Task task = Task.newBuilder()
      .setType(Task.Type.UNAVAILABLE)
      .setState(Task.State.OPEN)
      .setTaskDuration(
        Duration.newBuilder().setSeconds(60 * 60))  // 1hr break
      .build();

    // Task request
    CreateTaskRequest createTaskRequest =
      CreateTaskRequest.newBuilder()  // No need for the header
          .setParent(parent)          // Avoid using auto-incrementing IDs for the taskId
          .setTaskId("task-8241890")  // Task ID assigned by the Provider
          .setTask(task)              // Initial state
          .build();

    // Error handling
    // If Fleet Engine does not have task with that ID and the credentials of the
    // requestor pass, the service creates the task successfully.

    try {
      Task createdTask = deliveryService.createTask(createTaskRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case ALREADY_EXISTS:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

REST

Per creare un'attività di indisponibilità da un ambiente server, effettua una chiamata REST HTTP a CreateTask:

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

&lt;id&gt; è un identificatore univoco dell'attività. In caso contrario avere ID attività nel sistema, potresti generare un identificativo (UUID).

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità Task:

  • Campi obbligatori:

    CampoValore
    tipo Type.UNAVAILABLE
    stato State.OPEN
    taskDuration La durata dell'interruzione in secondi.

  • Campi facoltativi:

    CampoValore
    plannedLocation Il luogo della pausa, se deve essere scattata in un luogo specifico.

Tutti gli altri campi dell'entità vengono ignorati per la creazione. Lanci di Fleet Engine Un'eccezione se la richiesta include un deliveryVeicoliId assegnato. Tu assegni attività usando UpdateDeliveryVehicleRequest. Per ulteriori informazioni, vedi Assegna attività a un veicolo e UpdateDeliveryVehicleRequest.

Esempio di comando curl:

    # Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
    curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "type": "UNAVAILABLE",
      "state": "OPEN",
      "plannedLocation": {
         "point": {
            "latitude": -6.195139,
            "longitude": 106.820826
         }
      },
      "taskDuration": "300s"
    }
    EOM

Fermate programmate

Puoi creare un'attività di interruzione pianificata dal SDK Driver, o da un ambiente server usando gRPC o REST. Un'attività di interruzione pianificata potrebbe non includere un monitoraggio ID.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per creare un'attività di interruzione pianificata:

static final String PROJECT_ID = "my-delivery-co-gcp-project";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String parent = "providers/" + PROJECT_ID;
Task task = Task.newBuilder()
  .setType(Task.Type.SCHEDULED_STOP)
  .setState(Task.State.OPEN)
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Task request
CreateTaskRequest createTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header
      .setParent(parent)
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTrip(task)              // Initial state
      .build();

// Error handling
// If Fleet Engine does not have task with that ID and the credentials of the
// requestor pass, the service creates the task successfully.

try {
  Task createdTask = deliveryService.createTask(createTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per creare un'attività di interruzione pianificata da un ambiente server, effettua una chiamata REST HTTP a CreateTask:

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

&lt;id&gt; è un identificatore univoco dell'attività. Se non disponi ID attività nel tuo sistema, potresti generare Un UUID (Universally Unique Identifier).

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità Task:

  • Campi obbligatori:

    CampoValore
    tipo Type.SCHEDULED_STOP
    stato State.OPEN
    plannedLocation La posizione della fermata.
    taskDuration La durata prevista della fermata in secondi.

  • Campi facoltativi:

    • Nessuno

Tutti gli altri campi dell'entità vengono ignorati per la creazione. Lanci di Fleet Engine Un'eccezione se la richiesta include un deliveryVeicoliId assegnato. Tu assegni attività usando UpdateDeliveryVehicleRequest. Per ulteriori informazioni, vedi Assegna attività a un veicolo e UpdateDeliveryVehicleRequest.

Esempio di comando curl:

    # Set $JWT, $PROJECT_ID, and $TASK_ID in the local environment
    curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?taskId=${TASK_ID}" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "type": "SCHEDULED_STOP",
      "state": "OPEN",
      "plannedLocation": {
         "point": {
            "latitude": -6.195139,
            "longitude": 106.820826
         }
      },
      "taskDuration": "600s"
    }
    EOM

Imposta finestra temporale di destinazione

La finestra temporale di destinazione è TimeWindow durante il quale deve essere completata l'attività. Ad esempio, se comunichi un finestra temporale di consegna ai destinatari della consegna, puoi utilizzare l'ora target dell'attività finestra temporale per acquisire questa finestra temporale e generare avvisi o analizzare una volta terminata la corsa il rendimento utilizzando il campo.

La finestra temporale di destinazione è composta da un'ora di inizio e un'ora di fine e può essere impostata per qualsiasi tipo di attività. L'intervallo di tempo di destinazione non influisce sul routing comportamento degli utenti.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per impostare una finestra temporale per le attività:

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String TASK_ID = "task-8241890";

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Task settings
    String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
    Task task = Task.newBuilder()
      .setName(taskName)
      .setTargetTimeWindow(
        TimeWindow.newBuilder()
          .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
          .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
      .build();

    // Task request
    UpdateTaskRequest updateTaskRequest =
      UpdateTaskRequest.newBuilder()  // No need for the header
          .setTask(task)
          .setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
          .build();

    try {
      Task updatedTask = deliveryService.updateTask(updateTaskRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case NOT_FOUND:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

REST

Per impostare una finestra temporale per le attività utilizzando HTTP, chiama UpdateTask:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow`

&lt;id&gt; è un identificatore univoco dell'attività.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità Task:

  • Campi obbligatori:

    CampoValore
    targetTimeWindow L'intervallo di tempo durante il quale deve essere completata l'attività. Questa impostazione non influisce sul comportamento del routing

  • Campi facoltativi:

    • Nessuno

Tutti gli altri campi dell'entità vengono ignorati per l'aggiornamento.

Esempio di comando curl:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=targetTimeWindow" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "targetTimeWindow": {
    "startTime": "2023-03-29T21:00:00Z",
    "endTime": "2023-03-29T23:00:00Z"
  }
}
EOM

Imposta la configurazione della visibilità del monitoraggio delle attività

La visibilità dei dati nella libreria del tracciamento della spedizione e di tali dati restituito da una chiamata a GetTaskTrackingInfo può essere controllato in base a un'attività di base impostando un TaskTrackingViewConfig sull'attività. Consulta Attività attive del veicolo per ulteriori informazioni. Puoi farlo quando crei o aggiorni dell'attività. Di seguito è riportato un esempio di aggiornamento dell'attività con questa configurazione:

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per impostare la configurazione della visualizzazione del monitoraggio delle attività:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskTrackingViewConfig(
    TaskTrackingViewConfig.newBuilder()
      .setRoutePolylinePointsVisibility(
        VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
      .setEstimatedArrivalTimeVisibility(
        VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
      .setRemainingStopCountVisibility(
        VisibilityOption.newBuilder().setNever(true)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
  }
  return;
}

REST

Per impostare la finestra della configurazione della visualizzazione del monitoraggio delle attività utilizzando HTTP, chiama UpdateTask:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig`

&lt;id&gt; è un identificatore univoco dell'attività.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità Task:

  • Campi obbligatori:

    CampoValore
    taskTrackingViewConfig La configurazione per il monitoraggio delle attività che specifica quali elementi dei dati siano visibili agli utenti finali in quali circostanze.

  • Campi facoltativi:

    • Nessuno

Tutti gli altri campi dell'entità vengono ignorati per l'aggiornamento.

Esempio di comando curl:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

Assegnare attività a un veicolo

Puoi assegnare attività a un veicolo per le consegne aggiornando l'ordine delle attività per il veicolo. L'ordinamento delle attività per un veicolo è determinato dall'elenco di fermate per il veicolo da consegnare e puoi assegnare una o più attività a ciascuna fermata. Per maggiori dettagli, vedi Aggiorna l'ordine delle attività.

Per modificare una spedizione da un veicolo all'altro, chiudi l'attività originale e poi ricrearlo prima di assegnarlo al nuovo veicolo. Se aggiorni l'attività ordinando un'attività già assegnata a un altro veicolo, ricevi un messaggio di errore.

Aggiorna l'ordine delle attività

Puoi aggiornare le attività degli ordini assegnate a un veicolo che vengono eseguite da il SDK Driver, o l'ambiente server. Non utilizzare entrambi i metodi per evitare le condizioni di gara e mantenere un'unica fonte di verità.

Quando aggiorni l'ordine delle attività per un veicolo, si verifica anche quanto segue:

  • Assegna attività nuove al veicolo.
  • Chiude tutte le attività assegnate in precedenza al veicolo, ma non nell'ordine aggiornato.

Per cambiare una spedizione da un veicolo all'altro: chiudi l'attività originale e poi ricrearlo prima di assegnarlo al nuovo veicolo. Se aggiorni l'attività ordinando un'attività già assegnata a un altro veicolo, ricevi un messaggio di errore.

Puoi aggiornare l'ordine delle attività in qualsiasi momento.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per aggiornare l'ordine delle attività per il veicolo:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.NEW)))
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per aggiornare l'ordine delle attività per un veicolo da un ambiente server, effettua una chiamata REST HTTP a UpdateDeliveryVehicle:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

L'&lt;id&gt; è un identificatore univoco di un veicolo da consegnare del tuo parco veicoli per cui intendi aggiornare l'ordine delle attività. È l'identificatore che che hai specificato durante la creazione del veicolo.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità DeliveryVehicle:

  • Campi obbligatori:

    CampoValore
    remainingVehicleJourneySegments Un elenco di segmenti di percorso per le attività nell'ordine in cui devono essere eseguite. La prima attività dell'elenco viene eseguita per prima.
    remainingVehicleJourneySegments[i].stop L'interruzione per l'attività i nell'elenco.
    remainingVehicleJourneySegments[i].stop.plannedLocation Il luogo pianificato per la fermata.
    remainingVehicleJourneySegments[i].stop.tasks Un elenco di attività da eseguire in corrispondenza di questa fermata del veicolo.
    remainingVehicleJourneySegments[i].stop.state State.NEW

  • Campi facoltativi:

    • Nessuno

Tutti gli altri campi dell'entità vengono ignorati per l'aggiornamento.

Esempio di comando curl:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

Il veicolo è in viaggio verso la prossima fermata

Fleet Engine deve essere avvisato quando un veicolo parte da una fermata o parte per la navigazione. Puoi inviare una notifica a Fleet Engine dal SDK Driver, o da un ambiente server usando gRPC o REST. Non usare entrambi i metodi per evitare il gruppo etnico le condizioni ambientali e di mantenere un'unica fonte attendibile.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per informare Fleet Engine che un veicolo è in viaggio verso la fermata successiva.

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String VEHICLE_ID = "vehicle-8241890";

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Vehicle settings
    DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
        // Next stop marked as ENROUTE
        .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
           .setStop(VehicleStop.newBuilder()
               .setPlannedLocation(LocationInfo.newBuilder()
                   .setPoint(LatLng.newBuilder()
                       .setLatitude(37.7749)
                       .setLongitude(122.4194)))
               .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
               .setState(VehicleStop.State.ENROUTE)))
        // All other stops marked as NEW
        .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
           .setStop(VehicleStop.newBuilder()
               .setPlannedLocation(LocationInfo.newBuilder()
                   .setPoint(LatLng.newBuilder()
                       .setLatitude(37.3382)
                       .setLongitude(121.8863)))
               .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
               .setState(VehicleStop.State.NEW)))
        .build();

    // DeliveryVehicle request
    UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
      UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
          .setName(vehicleName)
          .setDeliveryVehicle(deliveryVehicle)
          .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
          .build();

    try {
      DeliveryVehicle updatedDeliveryVehicle =
          deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case NOT_FOUND:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

REST

Per informare Fleet Engine che un veicolo si sta dirigendo verso la fermata successiva da una nell'ambiente server, effettua una chiamata REST HTTP a UpdateDeliveryVehicle:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

L'&lt;id&gt; è un identificatore univoco del veicolo da consegnare del tuo parco risorse per cui intendi aggiornare l'ordine delle attività. È l'identificatore che che hai specificato durante la creazione del veicolo.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità DeliveryVehicle:

  • Campo obbligatorio:

    CampoValore
    remainingVehicleJourneySegments Elenco delle fermate del veicolo rimanenti con i relativi stati contrassegnati come Stato.NEW. Lo stato della prima fermata nell'elenco deve essere State.ENROUTE.

  • Campi facoltativi:

    • Nessuno

Tutti gli altri campi dell'entità vengono ignorati per la notifica.

Esempio di comando curl:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ENROUTE",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

Aggiorna la posizione del veicolo

Se non utilizzi l'SDK Driver per aggiornare la posizione del veicolo, puoi effettuare una chiamata diretta a Fleet Engine con la posizione del veicolo. Per qualsiasi veicolo attivo, Fleet Engine si aspetta un aggiornamento della posizione almeno una volta al minuto e al massimo una volta ogni 5 secondi.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per aggiornare la posizione di un veicolo in Fleet Engine:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
    .setLastLocation(DeliveryVehicleLocation.newBuilder()
        .setSupplementalLocation(LatLng.newBuilder()
            .setLatitude(37.3382)
            .setLongitude(121.8863))
        .setSupplementalLocationTime(now())
        .setSupplementalLocationSensor(DeliveryVehicleLocationSensor.CUSTOMER_SUPPLIED_LOCATION)
        .setSupplementalLocationAccuracy(DoubleValue.of(15.0)))  // Optional
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(myDeliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("last_location"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per aggiornare la posizione di un veicolo in Fleet Engine utilizzando REST HTTP, effettua una chiamata a UpdateDeliveryVehicle:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location`

L'&lt;id&gt; è un identificatore univoco del veicolo da consegnare indicato parco risorse o di cui intendi aggiornare la località. È l'identificatore che che hai specificato durante la creazione del veicolo.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità DeliveryVehicle:

  • Campo obbligatorio:

    CampoValore
    lastLocation.supplementalLocation La posizione del veicolo.
    lastLocation.supplementalLocationTime L'ultimo timestamp noto in cui si trovava il veicolo in questa posizione.
    lastLocation.supplementalLocationSensor Deve essere compilato con CUSTOMER_SUPPLIED_LOCATION.

  • Campi facoltativi:

    CampoValore
    lastLocation.supplementalLocationAccuracy Precisione della posizione fornita, in metri.

Esempio di comando curl:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "lastLocation": {
    "supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
    "supplementalLocationTime": "$(date -u --iso-8601=seconds)",
    "supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
    "supplementalLocationAccuracy": 15
  }
}
EOM

Il veicolo arriva a una fermata

Fleet Engine deve essere avvisata quando un veicolo arriva a una fermata. Puoi inviare notifiche Fleet Engine SDK Driver, o da un ambiente server usando gRPC o REST. Non usare entrambi i metodi per evitare il gruppo etnico le condizioni ambientali e di mantenere un'unica fonte attendibile.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per comunicare a Fleet Engine che un veicolo è arrivato a una fermata:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // Marking the arrival at stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW))) // Remaining stops must be NEW.
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per informare Fleet Engine dell'arrivo di un veicolo a una fermata da un ambiente server, effettua una chiamata REST HTTP a UpdateDeliveryVehicle:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

L'&lt;id&gt; è un identificatore univoco del veicolo da consegnare del tuo parco risorse per cui intendi aggiornare l'ordine delle attività. È l'identificatore che che hai specificato durante la creazione del veicolo.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità DeliveryVehicle:

  • Campi obbligatori:

    CampoValore
    remainingVehicleJourneySegments La fermata a cui sei arrivato con il relativo stato impostato su State.ARRIVED, seguito da un elenco delle fermate dei veicoli rimanenti con il relativo stato contrassegnato come State.NEW.

  • Campi facoltativi:

    • Nessuno

Tutti gli altri campi dell'entità vengono ignorati per l'aggiornamento.

Esempio di comando curl:

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ARRIVED",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

Il veicolo completa una fermata

Fleet Engine deve essere avvisata quando un veicolo completa un arresto. Questo causa tutte le attività associate alla fermata vengano impostate sullo stato CHIUSA. Puoi invia una notifica a Fleet Engine SDK Driver, o da un ambiente server usando gRPC o REST. Non usare entrambi i metodi per evitare le gare e per mantenere un'unica fonte di riferimento.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per informare Fleet Engine che un veicolo ha completato una sosta.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // This stop has been completed and is commented out to indicate it
    // should be removed from the list of vehicle journey segments.
    // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
    //    .setStop(VehicleStop.newBuilder()
    //        .setPlannedLocation(LocationInfo.newBuilder()
    //            .setPoint(LatLng.newBuilder()
    //                .setLatitude(37.7749)
    //                .setLongitude(122.4194)))
    //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
    //        .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    // The next stop could be marked as ENROUTE if the vehicle has begun
    // its journey to the next stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // no need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per notificare a Fleet Engine il completamento di un'interruzione da un ambiente server, effettua una chiamata REST HTTP a UpdateDeliveryVehicle:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`

L'&lt;id&gt; è un identificatore univoco del veicolo da consegnare del tuo parco risorse per cui intendi aggiornare l'ordine delle attività. È l'identificatore che che hai specificato durante la creazione del veicolo.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità DeliveryVehicle:

  • Campi obbligatori:

    CampoValore
    remaining_vehicle_journey_segments La tappa completata non dovrebbe più essere nell'elenco di le fermate del veicolo rimanenti.

  • Campi facoltativi:

    • Nessuno

Tutti gli altri campi dell'entità vengono ignorati per l'aggiornamento.

Esempio di comando curl:

    # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
    # environment
    curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "remainingVehicleJourneySegments": [
        {
          "stop": {
            "state": "NEW",
            "plannedLocation": {
              "point": {
                "latitude": 37.3382,
                "longitude": 121.8863
              }
            },
            "tasks": [
              {
                "taskId": "${TASK2_ID}"
              }
            ]
          }
        }
      ]
    }
    EOM

Aggiorna un'attività

La maggior parte dei campi delle attività sono immutabili. Tuttavia, puoi modificare lo stato, risultato dell'attività, tempo del risultato dell'attività, posizione dei risultati dell'attività e attributi aggiornare direttamente l'entità dell'attività. Ad esempio, nei casi in cui un'attività non sia assegnato a un veicolo, puoi chiudere l'attività aggiornando il direttamente lo stato desiderato.

gRPC

Questo è un esempio di aggiornamento di un'attività tramite gRPC.

REST

Questo è un esempio di aggiornamento di un'attività tramite REST.

Chiudere un'attività

Per chiudere un'attività assegnata a un veicolo, invia una notifica a Fleet Engine Che il veicolo abbia completato la fermata dove si svolge l'attività o rimuoverla dall'elenco delle fermate. Per farlo, puoi impostare l'elenco il veicolo rimanente si ferma esattamente come aggiornando l'ordine delle attività per un veicolo.

Se a un'attività non è ancora stato assegnato un veicolo e deve essere chiusa, aggiornala su CHIUSO. Tuttavia, non puoi riaprire un'attività CHIUSA.

La chiusura di un'attività non indica se l'attività è riuscita o meno. Indica che non è più considerata in corso. Per il monitoraggio della flotta, è importante indicare il risultato effettivo di un'attività in modo che i risultati.

gRPC

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setState(Task.State.CLOSED) // You can only directly CLOSE a
  .build();                    // task that is NOT assigned to a vehicle.

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per contrassegnare un'attività come chiusa da un ambiente server, effettua una chiamata REST HTTP a UpdateTask:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=state`

&lt;id&gt; è un identificatore univoco dell'attività.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Devi includere un'entità Task nel corpo della richiesta:

  • Campi obbligatori:

    CampoValore
    stato State.CLOSED

  • Campi facoltativi:

    CampoValore
    taskOutcome Risultato.SUCCEEDED o Risultato.NON RIUSCITO
    taskOutcomeTime L'ora in cui è stata completata l'attività.
    taskOutcomeLocation Il luogo in cui è stata completata l'attività. Impostazione predefinita di Fleet Engine all'ultima posizione del veicolo, a meno che non venga sostituito manualmente dal fornitore.

Tutti gli altri campi dell'entità vengono ignorati per l'aggiornamento.

Esempio di comando curl:

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "state": "CLOSED",
      "taskOutcome": "SUCCEEDED",
      "taskOutcomeTime": "$(date -u --iso-8601=seconds)"
    }
    EOM

Imposta l'esito dell'attività e la località dei risultati

La chiusura di un'attività non indica se l'attività è riuscita o meno, ma che l'attività non è più considerata in corso. Per il monitoraggio della flotta, è importante indicare il risultato effettivo di un'attività in modo che sia visualizzato l'esito dell'invio e che la fatturazione per i servizi sia corretta. Una volta impostato, non puoi modificare il risultato dell'attività. Puoi, tuttavia, modificare l'ora e la posizione dei risultati dell'attività dopo che sono state impostate.

I risultati delle attività che si trovano in stato CHIUSO possono essere impostati su RIUSCITA o NON RIUSCITA. Fleet Engine addebita solo le attività di consegna con lo stato RIUSCITA.

Quando contrassegna il risultato di un'attività, Fleet Engine compila automaticamente posizione dei risultati dell'attività con l'ultima posizione nota del veicolo. Puoi questo comportamento.

gRPC

Hai la possibilità di impostare la posizione dei risultati dell'attività quando imposti il risultato finale. L'impostazione della località impedisce a Fleet Engine di impostarla sul valore predefinito posizione del veicolo. Puoi anche sovrascrivere la posizione dei risultati dell'attività Fleet Engine in un secondo momento. Fleet Engine non sovrascrive mai la località dei risultati di un'attività che fornisci. Non puoi impostare una località dei risultati per un'attività per cui non sono stati impostati risultati dell'attività. Puoi impostare i risultati di entrambe le attività e la posizione dei risultati dell'attività all'interno della stessa richiesta.

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per impostare il risultato di un'attività su SUCCEEDED e impostare il luogo in cui l'attività è stata completato:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskOutcome(TaskOutcome.SUCCEEDED)
  .setTaskOutcomeTime(now())
  .setTaskOutcomeLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per contrassegnare un'attività come completata da un ambiente server: effettua una chiamata REST HTTP a UpdateTask:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation`

&lt;id&gt; è un identificatore univoco dell'attività.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve contenere un'entità Task:

  • Campi obbligatori:

    CampoValore
    taskOutcome Risultato.SUCCEEDED o Risultato.NON RIUSCITO

  • Campi facoltativi:

    CampoValore
    taskOutcomeLocation Il luogo in cui è stata completata l'attività. Se non impostato, Fleet Engine l'impostazione predefinita è l'ultima posizione del veicolo.
    taskOutcomeTime Il timestamp di completamento dell'attività.

Tutti gli altri campi dell'entità vengono ignorati per l'aggiornamento.

Esempio di comando curl:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskOutcome": "SUCCEEDED",
  "taskOutcomeTime": "$(date -u --iso-8601=seconds)",
  "taskOutcomeLocation": {
    "point": {
      "latitude": -6.195139,
      "longitude": 106.820826
    }
  }
}
EOM

Reindirizzare una spedizione

Una volta creata un'attività di spedizione, la posizione pianificata non può essere modificata. Per reindirizzare una spedizione, chiudi l'attività di spedizione senza impostare un risultato, quindi crea una nuova attività con la posizione pianificata aggiornata. Dopo aver creato la nuova attività, assegnala allo stesso veicolo. Per maggiori informazioni informazioni, consulta la sezione Chiudere l'attività di spedizione e assegnare l'attività.

Utilizzare feeder e veicoli per la consegna

Se utilizzi i veicoli con alimentatore per trasportare le spedizioni ai veicoli per la consegna nell'arco della giornata, modella il trasferimento delle spedizioni come un'attività di interruzione programmata del veicolo per la consegna. Per garantire la precisione del monitoraggio della posizione, assegna solo un'attività di consegna della spedizione per una spedizione trasferita dopo che è stata caricata un veicolo per le consegne. Per ulteriori informazioni, vedi Fermata programmata.

Stato di spedizione in negozio e altre meta informazioni

Quando viene completata un'attività di spedizione, vengono registrati lo stato e il risultato dell'attività. nell'attività. Tuttavia, puoi decidere di aggiornare altre meta informazioni specifici della spedizione. Per memorizzare altre meta informazioni che puoi riferimento esterno al servizio Fleet Engine, utilizza il tracking_id associato con l'attività come chiave in una tabella esterna.

Per ulteriori informazioni, vedi Ciclo di vita di un'attività.

Cerca un veicolo

Puoi cercare un veicolo da SDK Driver, o da un ambiente server usando gRPC o REST.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per cercare un veicolo:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle request
String name = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
GetDeliveryVehicleRequest getVehicleRequest = GetDeliveryVehicleRequest.newBuilder()  // No need for the header
    .setName(name)
    .build();

try {
  DeliveryVehicle vehicle = deliveryService.getDeliveryVehicle(getVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per cercare un veicolo da un ambiente server, effettua una chiamata REST HTTP a GetVehicle:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<vehicleId>`

&lt;id&gt; è un identificatore univoco dell'attività.

&lt;vehicleId&gt; è l'ID del veicolo da cercare.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve essere vuoto.

Se la ricerca ha esito positivo, il corpo della risposta contiene un'entità veicolo.

Esempio di comando curl:

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}"

Cercare un'attività

Puoi cercare un'attività da un ambiente server utilizzando gRPC o REST. L'SDK Driver non alla ricerca di un'attività.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per cercare un'attività:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8597549";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task request
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
GetTaskRequest getTaskRequest = GetTaskRequest.newBuilder()  // No need for the header
    .setName(taskName)
    .build();

try {
  Task task = deliveryService.getTask(getTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per cercare un'attività da un ambiente server, effettua una chiamata REST HTTP a GetTask:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>`

&lt;id&gt; è un identificatore univoco dell'attività.

&lt;taskId&gt; è l'ID dell'attività da cercare.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Il corpo della richiesta deve essere vuoto.

Se la ricerca ha esito positivo, il corpo della risposta contiene un'entità dell'attività.

Esempio di comando curl:

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -H "Authorization: Bearer ${JWT}" \
      "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}"

Cerca le informazioni sull'attività di spedizione in base all'ID di monitoraggio

Puoi cercare informazioni sulle attività del parco risorse nei seguenti modi: ognuno dei quali ha uno scopo distinto:

  • da un ID attività: viene utilizzato da utenti come gli operatori del parco risorse che hanno accesso una vista completa dei dati dell'attività.
  • da un ID monitoraggio: utilizzato dal software client per fornire un numero limitato di informazioni per un utente finale, ad esempio quando è previsto un pacco a casa sua.

Questa sezione illustra la ricerca di informazioni sulle attività tramite un ID monitoraggio. Se vuoi Per cercare un'attività in base all'ID attività, vai a Cercare un'attività.

Per cercare informazioni in base a un ID monitoraggio, puoi utilizzare uno dei seguenti metodi:

Requisiti di ricerca

  • Le informazioni sulla spedizione fornite da un ID monitoraggio sono conformi alle regole sulla visibilità indicato in Controlla la visibilità delle posizioni monitorate.

  • Utilizza Fleet Engine per cercare informazioni sulla spedizione in base all'ID monitoraggio. Il conducente L'SDK non supporta le ricerche di informazioni per ID monitoraggio. Per farlo con il parco risorse Engine, puoi utilizzare un ambiente server o browser.

  • Utilizza il token più ristretto possibile per limitare i rischi per la sicurezza. Ad esempio, se se usi un token Delivery Consumer, tutte le chiamate API Fleet Engine Deliveries vengono restituite solo le informazioni pertinenti per l'utente finale, quali il corriere o il ricevente di una spedizione. Tutte le altre informazioni nelle risposte vengono oscurate. Per ulteriori informazioni sui token, consulta Creazione di un token JWT (JSON Web Token) per l'autorizzazione.

Ricerche con Java utilizzando gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per cercare informazioni su un'attività di spedizione in base all'ID monitoraggio.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
GetTaskTrackingInfoRequest getTaskTrackingInfoRequest = GetTaskTrackingInfoRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setTrackingId(TRACKING_ID)
    .build();

try {
  TaskTrackingInfo taskTrackingInfo = deliveryService.getTaskTrackingInfo(getTaskTrackingInfoRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

Ricerche con HTTP

Per cercare un'attività di spedizione da un browser, effettua una chiamata REST HTTP a GetTaskTrackingInfo:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>`

&lt;tracking_id&gt; è l'ID monitoraggio associato all'attività.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Se la ricerca ha esito positivo, il corpo della risposta contiene un taskTrackingInfo dell'oggetto.

Esempio di comando curl:

# Set JWT, PROJECT_ID, and TRACKING_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/taskTrackingInfo/${TRACKING_ID}"

Elenca attività

Puoi elencare le attività da un ambiente server o browser. L'SDK Driver non che supporti le attività di creazione di elenchi.

L'elenco delle attività richiede l'accesso ampio alle attività. Le attività delle schede sono destinate esclusivamente utenti attendibili. Usa il lettore parco risorse di distribuzione o l'autenticazione super user distribuzione Token quando si effettuano richieste di attività di elenco.

Le attività elencate hanno i seguenti campi oscurati:

  • VehicleStop.planned_location
  • VehicleStop.state
  • VehicleStop.TaskInfo.taskId

Le attività elencate possono essere filtrate in base alla maggior parte delle proprietà delle attività. Per la sintassi delle query di filtro, vedi AIP-160. Il seguente elenco mostra un'attività valida che puoi utilizzare per l'applicazione di filtri:

  • attributi
  • delivery_vehicle_id
  • stato
  • planned_location
  • task_duration
  • task_outcome
  • task_outcome_location
  • task_outcome_location_source
  • task_outcome_time
  • tracking_id
  • tipo

Utilizza i seguenti formati dei campi basati sulle proposte di miglioramento delle API di Google:

Tipo di campo Formato Esempio
Timestamp RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
Durata Numero di secondi seguiti da s task_duration = 120s
Enum Stringa state = CLOSED AND type = PICKUP
Località point.latitude e point.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

Consulta AIP-160 per un elenco completo delle query di filtro .

Se non viene specificata alcuna query di filtro, vengono elencate tutte le attività.

Gli elenchi di attività vengono impaginati. È possibile specificare una dimensione di pagina nelle richieste di attività di elenco. Se viene specificata una dimensione di pagina, il numero di attività restituite non è maggiore rispetto alle dimensioni di pagina specificate. Se non sono presenti dimensioni di pagina, un valore predefinito ragionevole . Se le dimensioni di pagina richieste superano un valore massimo interno, si utilizza il valore massimo interno.

Un elenco di attività può includere un token per la lettura della pagina successiva dei risultati. Utilizza il token di pagina con una richiesta altrimenti identica alla precedente per recuperare la pagina successiva di attività. Quando il token di pagina restituito è vuoto, non sono disponibili altre attività per il recupero.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per elencare le attività per un deliveryVeicoliId e un attributo attività. Un successo la risposta può essere ancora vuota. Una risposta vuota indica che nessuna attività associato all'oggetto deliveryVeicoliId fornito.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListTasksRequest listTasksRequest = ListTasksRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setFilter("delivery_vehicle_id = 123 AND attributes.foo = true")
    .build();

try {
  ListTasksResponse listTasksResponse = deliveryService.listTasks(listTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

REST

Per elencare le attività da un browser, effettua una chiamata REST HTTP a ListTasks:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks`

Per applicare un filtro alle attività elencate, includi un "filtro" Parametro URL con una query di filtro con escape come valore.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Se la ricerca ha esito positivo, il corpo della risposta conterrà dati con la seguente struttura:

    // JSON representation
    {
      "tasks": [
        {
          object (Task)
        }
      ],
      "nextPageToken": string,
      "totalSize": integer
    }

Una risposta corretta può essere ancora vuota. Una risposta vuota indica che nessuna sono state trovate attività che soddisfano i criteri di filtro specificati.

Esempio di comando curl:

    # Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
    curl -H "Authorization: Bearer ${JWT}" \
      "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?filter=state%20%3D%20OPEN%20AND%20delivery_vehicle_id%20%3D%20${VEHICLE_ID}"

Elenca i veicoli per la consegna

Puoi elencare i veicoli per la consegna da un ambiente server o browser. Il conducente L'SDK non supporta le schede dei veicoli per la consegna.

L'elenco dei veicoli per la consegna delle schede richiede l'accesso ampio ai veicoli per la consegna ed è ed è destinata esclusivamente a utenti attendibili. Usa il lettore parco risorse o la funzionalità Super distribuzione Token di autenticazione utente quando si effettuano richieste di veicoli per la consegna dell'elenco.

I seguenti campi dei veicoli per la consegna elencati sono stati oscurati a causa del loro impatto dimensioni risposta:

  • CurrentRouteSegment
  • RemainingVehicleJourneySegments

Puoi filtrare l'elenco dei veicoli per la consegna in base alla proprietà attributes. Per Ad esempio, per eseguire query su un attributo con chiave my_key e valore my_value, utilizza attributes.my_key = my_value. Per eseguire query per più attributi, unisci le query utilizzando gli operatori logici AND e OR come in attributes.key1 = value1 AND attributes.key2 = value2. Per la versione completa, consulta AIP-160 descrizione della sintassi delle query di filtro.

Puoi filtrare i veicoli per la consegna elencati per località utilizzando la richiesta viewport . Il parametro di richiesta viewport definisce le aree visibili utilizzando due delimitazioni coordinate: latitudine e longitudine di high (nord-est) e low (sud-ovest) la coppia di coordinate. Le richieste vengono rifiutate se contengono una latitudine elevata geograficamente inferiore a una latitudine bassa.

Per impostazione predefinita, gli elenchi di veicoli per la consegna vengono impaginati utilizzando dimensioni della pagina ragionevoli. Se specifichi una dimensione di pagina, la richiesta restituisce solo il numero specificato dal limite, o meno. Se le dimensioni di pagina richieste superano una dimensione massimo, viene utilizzato il valore massimo interno. La pagina predefinita e quella massima le dimensioni sono entrambe 100 veicoli.

Un elenco di veicoli per la consegna può includere un token per la lettura della pagina successiva di che consentono di analizzare i dati e visualizzare i risultati. Un token di pagina è presente in una risposta solo quando più pagine di pubblicazione di veicoli disponibili per il recupero. Per recuperare la pagina successiva di attività, utilizza il token della pagina con una richiesta altrimenti identica alla precedente richiesta.

gRPC

L'esempio seguente mostra come utilizzare il parametro Libreria gRPC Java per elencare i veicoli per la consegna in una determinata regione con un determinato attributo. R la risposta corretta può essere ancora vuota. In questo caso, significa che i veicoli con l'attributo specificato si trovano già nell'area visibile specificata.

static final String PROJECT_ID = "my-delivery-co-gcp-project";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListDeliveryVehiclesRequest listDeliveryVehiclesRequest =
  ListDeliveryVehiclesRequest.newBuilder()  // No need for the header
      .setParent(parent)
      .setViewport(
            Viewport.newBuilder()
              .setHigh(LatLng.newBuilder()
                  .setLatitude(37.45)
                  .setLongitude(-122.06)
                  .build())
              .setLow(LatLng.newBuilder()
                  .setLatitude(37.41)
                  .setLongitude(-122.11)
                  .build())
      .setFilter("attributes.my_key = my_value")
      .build();

try {
  ListDeliveryVehiclesResponse listDeliveryVehiclesResponse =
      deliveryService.listDeliveryVehicles(listDeliveryVehiclesRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
          break;

      case PERMISSION_DENIED:
          break;
  }
  return;
}

REST

Per elencare le attività da un browser, effettua una chiamata REST HTTP a ListDeliveryVehicles:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles`

Per applicare un filtro alle attività elencate, includi un "filtro" parametro URL con un Query di filtro con escape URL come valore.

L'intestazione della richiesta deve contenere un campo Authorization con il valore Bearer <token>, dove <token> è un token emesso dalla fabbrica di token di Fleet Engine.

Se la ricerca ha esito positivo, il corpo della risposta conterrà dati con la seguente struttura:

// JSON representation
{
  "deliveryVehicles": [
    {
      object (DeliveryVehicle)
    }
  ],
  "nextPageToken": string,
  "totalSize": integer
}

Una risposta corretta può essere ancora vuota. In questo caso, significa che Sono stati trovati veicoli per la consegna che soddisfano la query di filtro e l'area visibile specificati.

Esempio di comando curl:

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?filter=attributes.my_key%20%3D%20my_value%20&viewport.high.latitude=37.45&viewport.high.longitude=-122.06&viewport.low.latitude=37.41&viewport.low.longitude=-122.11"

Monitoraggio del parco risorse

Hai due opzioni per utilizzare l'API Fleet Engine Deliveries per abilitare il monitoraggio della flotta:

  • Preferita:utilizza Libreria di monitoraggio del parco risorse JavaScript. La libreria ti consente di visualizzare la posizione dei veicoli e dei luoghi di interesse monitorato in Fleet Engine. Contiene un componente mappa JavaScript che sostituisce un oggetto google.maps.Map standard, e dati per la connessione a Fleet Engine. Questo componente ti consente di offrire un'esperienza di tracciamento animata e personalizzabile del parco risorse dalla tua applicazione web o mobile.

  • Implementa il monitoraggio della tua flotta in aggiunta all'API Fleet Engine Deliveries.

La chiave è cercare le attività del parco risorse per ID monitoraggio.

Logging

Puoi impostare Fleet Engine in modo che invii i log RPC a Cloud Logging. Per maggiori informazioni le informazioni, vedi Logging.

Ruoli e token di autorizzazione

Come descritto in Gestire il ciclo di vita del veicolo e delle attività e le note sull'autorizzazione per i singoli casi d'uso, rendendo a Fleet Engine richiede l'autenticazione con token web JSON che è stato firmato utilizzando le credenziali dell'account di servizio. Gli account di servizio utilizzati di emettere questi token possono avere uno o più ruoli, ognuno dei quali concede un insieme di autorizzazioni diverso.

Per ulteriori informazioni, vedi Autenticazione e autorizzazione.

Risolvere i problemi più comuni

Consulta le seguenti sezioni per assistenza in caso di problemi.

Resilienza

Fleet Engine non è considerata una fonte di riferimento. Sei responsabile per ripristinare lo stato del sistema, se necessario, senza fare affidamento Fleet Engine.

Stato perso in Fleet Engine

Quando lavori con Fleet Engine, implementa i client in modo che il sistema si riprenda automaticamente in caso di errore. Ad esempio, quando Fleet Engine tenta di aggiornare veicolo, potrebbe rispondere con un errore che indica che non esistono. Il client deve quindi ricreare il veicolo nel nuovo stato. Sebbene questo problema si verifica raramente, assicurati che il sistema sia abbastanza resiliente li annotino.

Nello scenario estremamente improbabile di un guasto catastrofico di Fleet Engine, potresti dover ricreare la maggior parte o tutti i veicoli e le attività. Se la frequenza di creazione diventa troppo elevato, alcune richieste potrebbero non riuscire di nuovo a causa di problemi di quota vengono effettuati controlli di quota per evitare attacchi DoS (Denial of Service). In questo caso, rallentare il tasso di ricreazione utilizzando una strategia di backoff per nuovi tentativi.

Stato di perdita nell'app del conducente

Se l'app del conducente ha un arresto anomalo, quest'ultima deve ricreare lo stato attuale all'interno dell'SDK Driver. L'app deve tentare di ricreare le attività per garantire e ripristinare lo stato attuale. L'app deve inoltre ricreare e impostare esplicitamente l'elenco delle fermate per l'SDK Driver.

Domande frequenti

Cosa succede se un conducente si ferma per un'attività non in ordine?

In questo caso, aggiorna prima l'ordine delle attività e poi procedi normalmente. contrassegnare l'arrivo alla fermata, il completamento dell'attività e altri dettagli. In caso contrario, il sistema potrebbe diventare incoerente, gli orari di arrivo stimati potrebbero diventare errati, e potrebbero essere segnalati errori imprevisti.