Başka görev türleri oluşturma

Bu dokümanda, Fleet Engine'a Giriş bölümündeki Planlanmış görevler ile ilgili giriş kılavuzunu ve bu bölümdeki Planlanmış görev nedir? başlıklı makaleyi okuduğunuz varsayılmaktadır.

Planlanmış görevler için Fleet Engine, farklı geniş görev kategorileri sunar:

  • Gönderi görevleri: Kargoların teslim alınması ve teslim edilmesi gibi sürüş görevleri için kullanın.
  • Müsaitlik durumu görevleri: Gerekli aralar gibi sürücülerin uygun olmadığı zamanlarda kullanın.
  • Planlanmış durdurma görevleri: Açılır kutularda veya müşteri yerlerinde bulunan, bir binaya girme veya teslimat noktası bulma zamanı gibi araç sürmeyen görevler için kullanın.

Bu dokümanda, sunucunuzda gönderim dışı görevlerin nasıl oluşturulacağı ele alınmaktadır. Gönderim görevi türleri için Gönderim görevleri oluşturma bölümüne bakın.

Sürüş olmayan görevler için görev alanları

Bu bölümde, hem müsait olmama hem de planlanmış durdurma görevleri için gereken görev alanları açıklanmaktadır.

Zorunlu görev alanları

Fleet Engine'da oluşturduğunuz her görev için gerekli alanları sağlamanız gerekir. İsteğe bağlı alanlardan herhangi birini de sağlayabilirsiniz. Fleet Engine, diğer tüm alanları yoksayar ve görev oluşturma isteği atanmış bir deliveryVehicleId sağlıyorsa istisna oluşturur. Bir araca görev atamak için UpdateDeliveryVehicleRequest işlevini kullanın. Daha fazla bilgi için Görevleri güncelleme bölümünü inceleyin.

AlanDeğer
type

Görev türüyle eşleşen türe ayarlayın. Bu türlerden biri şudur:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Benzersiz görev kimliği. Bu, gönderimin takip numarası olmamalıdır. Sisteminizde görev kimlikleri yoksa evrensel olarak benzersiz bir tanımlayıcı (UUID) oluşturabilirsiniz. Ayrıntılar için Görev kimlikleri bölümüne bakın.
tracking_id Yalnızca PICKUP veya DELIVERY görevleri: Bir gönderiyi takip etmek için kullandığınız numara veya tanımlayıcı. Gönderim dışı görevler için bu alanı belirtmeyin.
plannedLocation Yalnızca PICKUP, DELIVERY veya SCHEDULED_STOP görevleri: Görevin tamamlanacağı konum. UNAVAILABLE görevlerinde gerekli değildir.
taskDuration Görevi tamamlamak için eklenmesi beklenen süre. Örneğin, park yeri aramak veya aktarma konumuna doğru yürümek için kullanılabilir.

İsteğe bağlı gönderim görevi alanları

AlanDeğer
targetTimeWindow Görevin tamamlanması gereken zaman aralığı. Bu alan, yönlendirme davranışını etkilemez.
task_tracking_view_config Yalnızca PICKUP veya DELIVERY görevleri: Hangi veri öğelerinin hangi durumlarda son kullanıcılar tarafından görülebileceğini belirten görev izleme yapılandırması.
attributes Özel görev özelliklerinin listesi. Her özelliğin benzersiz bir anahtarı olmalıdır.

Kullanılabilir olmama görevi oluşturma

Müsait olmadığını gösteren bir görev oluşturabilirsiniz (ör. sürücü molaları için). Müsaitlik durumu görevi oluşturmak için aşağıdaki yönergeleri kullanın:

  • Görev türünü UNAVAILABLE olarak ayarlayın.
  • İzleme kimliği eklemeyin.
  • Kullanılamazlık görevi için konum sağlamanız gerekmese de bunu yaptığınızda gün boyunca daha iyi ETA hesaplamaları elde edersiniz.

Yolculuk paylaşımı için bir UNAVAILABLE görevindeyken araç konumu için özel görünürlük kuralları geçerli olur.

  • Sevkiyat İzleme kitaplığına entegre tüketici uygulamaları: Araç "kullanılamıyor" görevindeyken, tüketici uygulaması kullanıcıları aracın konumunu göremez ancak gönderimle ilgili durum bilgilerini görmeye devam ederler.
  • Araç Takip kitaplığıyla entegre araç takip uygulamaları: Araç, müsait olmama görevindeyken araç takip uygulamasını kullanan filo yöneticileri, müsait olmama görevleri için araç konumunu görebilir.

Aşağıdaki örnekler, Java gRPC kitaplığını kullanarak planlanmış bir kullanılabilir olmama görevinin nasıl oluşturulacağını veya CreateTask için nasıl HTTP REST isteğinde bulunulacağını göstermektedir.

gRPC

  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

Bir sunucu ortamından kullanılamama görevi oluşturmak için CreateTask öğesine HTTP REST çağrısı yapın:

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

<id>, görevin benzersiz tanımlayıcısıdır.

İstek üstbilgisinde, Authorization (Yetkilendirme) alanı olmalıdır. Bu alanın değeri Bearer <token> (Taşıyıcı <token>) şeklindedir. <token>, Hizmet hesabı rolleri ve JSON web jetonları bölümünde açıklanan yönergelere göre sunucunuz tarafından verilir.

İstek gövdesi, sürücü olmayan görevler için görev alanları bölümünde açıklanan uygun alanlara sahip bir Task varlığı içermelidir.

Örnek curl komutu:

 # 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

Planlanmış bir durdurma görevi oluşturma

Planlanmış bir durak için görev oluşturabilirsiniz. Örneğin, müşteri konumlarında sürüş dışı görevler, yakıt ikmali durakları veya bir sürücünün besleyici araçtan kargo aldığı durumlar için görev oluşturabilirsiniz. Planlanmış bir durdurma görevi oluştururken aşağıdaki yönergeleri kullanın:

  • Görev türünü şu şekilde ayarlayın:
  • İzleme kimliği eklemeyin.
  • İsterseniz bir konum da belirtebilirsiniz.

Aşağıdaki örneklerde, Java gRPC kitaplığı kullanılarak planlanmış bir müsait olmama görevi oluşturma veya CreateTask adresine HTTP REST isteği gönderme gösterilmektedir.

gRPC

  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

Sunucu ortamından planlanmış bir durdurma görevi oluşturmak için CreateTask öğesine HTTP REST çağrısı yapın:

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

&lt;id&gt;, görev için benzersiz bir tanımlayıcıdır.

İstek başlığında, Bearer <token> değerine sahip bir Yetkilendirme alanı bulunmalıdır. Burada <token>, sunucunuz tarafından Hizmet hesabı rolleri ve JSON Web jetonları bölümlerinde açıklanan yönergelere göre verilir.

İstek gövdesinde bir Task varlığı bulunmalıdır:

Örnek curl komutu:

# 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

Sırada ne var?