Gönderim görevleri oluşturma

Bu belgede, Fleet Engine'e Giriş bölümündeki [Planlanmış görevler][1] ile ilgili giriş kılavuzunu ve bu bölümdeki [Planlanmış görev nedir?][2] başlıklı makaleyi okuduğunuz varsayılır.

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

  • Kargo görevleri: Kargo alma ve teslim etme gibi sürüş görevleri için kullanılır.
  • Kullanılamazlık görevleri: Sürücülerin kullanılamadığı zamanlar (ör. zorunlu molalar) için kullanılır.
  • Planlanmış durdurma görevleri: Bırakma kutularında veya müşteri konumlarında sürüş dışı görevler için kullanılır. Örneğin, binaya girme veya teslimat noktası bulma süresi.

Bu belgede, sunucunuzda nasıl kargo görevleri oluşturacağınız açıklanmaktadır. Diğer görev türleri için Diğer görev türlerini oluşturma başlıklı makaleyi inceleyin.

Kargo görevi alanları

Bu bölümde, hem teslim alma hem de teslimat görevleri için gereken görev alanları açıklanmaktadır.

Zorunlu görev alanları

Fleet Engine'de oluşturduğunuz her görev için gerekli alanları sağlamanız ve isteğe bağlı alanları da sağlayabilirsiniz. Fleet Engine, diğer tüm alanları yoksayar ve bir görev oluşturma isteğinde atanmış bir deliveryVehicleId sağlanırsa istisna oluşturur. Bir araca görev atamak için UpdateDeliveryVehicleRequest uygulamasını 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 ayarlayın. Bu türlerden biri şunlardır:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id Benzersiz görev kimliği. Bu, gönderinin 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 başlıklı makaleyi inceleyin.
tracking_id Yalnızca PICKUP veya DELIVERY görevleri: Bir gönderiyi izlemek için kullandığınız numara veya tanımlayıcı. Bu alanı kargo dışı görevler için sağlamayın.
planned_location PICKUP, DELIVERY veya yalnızca SCHEDULED_STOP görevleri: Görevin tamamlanacağı konum. UNAVAILABLE görevleri için gerekli değildir.
task_duration Görevi tamamlamak için eklenmesi beklenen süre. Örneğin, park yeri aramak veya teslimat noktasına yürümek için.

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

AlanDeğer
target_time_window 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 koşullarda son kullanıcılara görünür olduğunu belirten görev izleme yapılandırması.
attributes Özel görev özelliklerinin listesi. Her özelliğin benzersiz bir anahtarı olmalıdır.

Kargo teslim alma görevi oluşturma

Bir gönderiyi teslim alan sürücünün etkinliğini takip etmek için Fleet Engine'i kullanmak üzere bir kargo teslim alma görevi oluşturun. Bu işlem için görev türü özelliğinin PICKUP olarak ayarlanması gerekir. Aşağıdaki örnekte, Grand Indonesia East Mall'dan yapılan bir kargo teslim alma gösterilmektedir.

Aşağıdaki örneklerde, [Java gRPC kitaplığı][4] kullanılarak nasıl kargo teslim alma görevi oluşturulacağı veya [CreateTask][5] için nasıl HTTP REST isteği 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

Sunucu ortamından kargo teslim alma görevi oluşturmak için CreateTask adresine 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, Authorization alanı ve Bearer <token> değeri bulunmalıdır. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][7] bölümlerinde açıklanan yönergelere göre sunucunuz tarafından verilir.

İstek gövdesinde, [Shipment task fields][8] bölümünde açıklanan uygun alanlara sahip bir Task öğesi 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": "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

Kargo teslimatı görevi oluşturma

Bir gönderiyi teslim eden sürücünün etkinliğini takip etmek için Fleet Engine'i kullanmak üzere bir kargo teslimatı görevi oluşturun. Bu işlem, görev türü özelliğinin DELIVERY olarak ayarlanmasını içerir. Aşağıdaki örnekte, Grand Indonesia East Mall'a yapılan bir kargo teslimatı gösterilmektedir.

Aşağıdaki örneklerde, [Java gRPC kitaplığı][4] kullanılarak nasıl kargo teslim alma görevi oluşturulacağı veya [CreateTask][5] için nasıl HTTP REST isteği 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.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

Sunucu ortamından kargo teslim alma görevi oluşturmak için CreateTask adresine 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, Authorization alanı ve Bearer <token> değeri bulunmalıdır. Burada <token>, [Hizmet hesabı rolleri][6] ve [JSON Web jetonları][7] bölümlerinde açıklanan yönergelere göre sunucunuz tarafından verilir.

İstek gövdesi 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": "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
 ```

placeidtrips1: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#locationinfo placeidtrips2: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html placeidtrips3: /maps/documentation/mobility/fleet-engine/reference/tasks/rpc/maps.fleetengine.delivery.v1.html#maps.fleetengine.delivery.v1.LocationInfo.FIELDS.string.maps.fleetengine.delivery.v1.LocationInfo.place placeidtrips4: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/LocationInfo.html#FIELDS.place

Sırada ne var?

  • [Diğer görev türlerini oluşturma][13]
  • [Görevleri güncelleme][3]

[1]: /maps/documentation/mobility/fleet-engine/essentials/tasks-intro [2]: /maps/documentation/mobility/fleet-engine/journeys/tasks [3]: update-tasks [4]: /maps/documentation/mobility/fleet-engine/essentials/client-libraries-tasks#java [5]: /maps/documentation/mobility/fleet-engine/reference/tasks/rest/v1/providers.tasks/create [6]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/service-accounts [7]: /maps/documentation/mobility/fleet-engine/essentials/set-up-fleet/jwt [8]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-shipment-tasks#shipment_task_fields [13]: /maps/documentation/mobility/fleet-engine/journeys/tasks/create-other-tasks