Gönderim görevleri oluşturma

Bu belgede, Fleet Engine'e Giriş bölümünde yer alan Planlanmış görevler giriş kılavuzunu ve bu bölümdeki Planlanmış görev nedir? hakkındaki giriş kılavuzunu okuduğunuz varsayılmıştı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.
  • Kullanılabilirlik dışı görevler: Sürücüler müsait olmadığında (ör. zorunlu aralarda) kullanın.
  • Planlanmış durak görevleri: Kargo kutularında veya müşteri konumlarında sürüş dışı görevler için kullanın (ör. bir binaya girme veya teslimat noktasını bulma zamanı).

Bu dokümanda, sunucunuzda gönderim görevlerinin nasıl oluşturulacağı açıklanmaktadır. Diğer görev türleri için Diğer görev türleri oluşturma başlıklı makaleyi inceleyin.

Gönderim görevi alanları

Bu bölümde hem teslim alma hem de teslimat görevleri için gerekli olan görev alanları belgelenmiştir.

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ğlarsa istisna atar. Bir araca görev atamak için UpdateDeliveryVehicleRequest işlevini kullanın. Daha fazla bilgi için Görevleri güncelleme başlıklı makaleyi inceleyin.

AlanDeğer
type

Görev türüyle eşleşen türe ayarlanır. Bu türlerden biri şunlardır:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Benzersiz görev kimliği. Bu numara, 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örevlerinde: Görevin tamamlanacağı konum. UNAVAILABLE görev için 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.

Kargo alma görevi oluşturma

Kargoyu teslim alan bir sürücünün etkinliğini takip etmek için Fleet Engine'ı kullanmak istiyorsanız kargo teslim alma görevi oluşturun. Bu işlem, görev türü özelliğinin PICKUP olarak ayarlanmasını içerir. Aşağıdaki örnekte, Grand Indonesia East Mall'dan bir gönderimin alınması gösterilmektedir.

Aşağıdaki örneklerde, Java gRPC kitaplığı kullanılarak kargo alma görevinin nasıl oluşturulacağı veya CreateTask adresine HTTP REST isteği nasıl gönderileceği 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.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

Bir sunucu ortamından kargo teslim alma 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 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 metni, Gönderi görevi alanları bölümünde açıklanan uygun alanlara sahip bir Task öğesi içermelidir.

Örnek curl komutu:

 # 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

Gönderi teslimatı görevi oluşturma

Gönderi teslim eden bir sürücünün etkinliğini takip etmek için Fleet Engine'ı kullanmak istiyorsanız gönderi teslimi görevi oluşturun. Buna, görev türü özelliğinin DELIVERY olarak ayarlanması da dahildir. Aşağıdaki örnekte GrandIndonesia East Mall'a gönderi teslimatı gösterilmektedir.

Aşağıdaki örnekler, Java gRPC kitaplığını kullanarak kargo teslim alma 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.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

Bir sunucu ortamından kargo teslim alma 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 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, $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
 ```

Sırada ne var?