إنشاء أنواع مهام أخرى

يفترض هذا المستند أنّك قرأت الدليل التمهيدي إلى المهام المجدوَلة في قسم مقدّمة إلى Fleet Engine بالإضافة إلى مقالة ما هي المهمة المجدوَلة؟ في هذا القسم.

يوفّر Fleet Engine للمهام المجدوَلة فئات مختلفة وواسعة من المهام:

  • مهام الشحن: تُستخدم لمهام القيادة، بما في ذلك استلام الشحنات وتسليمها.
  • مهام عدم التوفّر: تُستخدم للأوقات التي لا يكون فيها السائقون متوفّرين، مثل فترات الاستراحة المطلوبة.
  • مهام التوقّف المجدوَلة: تُستخدم للمهام غير المتعلّقة بالقيادة في صناديق تسليم الطرود أو مواقع العملاء، مثل الوقت اللازم لدخول مبنى أو تحديد نقطة تسليم.

يغطّي هذا المستند كيفية إنشاء مهام غير متعلّقة بالشحن على خادمك. بالنسبة إلى أنواع مهام الشحن، يُرجى الاطّلاع على مقالة إنشاء مهام الشحن.

حقول المهام غير المتعلّقة بالقيادة

يوضّح هذا القسم حقول المهام المطلوبة لكلّ من مهام عدم التوفّر ومهام التوقّف المجدوَلة.

حقول المهام المطلوبة

بالنسبة إلى كل مهمة تنشئها في Fleet Engine، يجب تزويدها بالحقول المطلوبة، ويمكنك أيضًا توفير أيّ من الحقول الاختيارية. يتجاهل Fleet Engine جميع الحقول الأخرى، ويطرح استثناءً إذا كان طلب إنشاء مهمة يوفّر deliveryVehicleId تم إسناده. لإسناد المهام إلى مركبة، استخدِم UpdateDeliveryVehicleRequest. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تعديل المهام.

الحقلالقيمة
type

اضبط النوع الذي يتطابق مع نوع المهمة، وهو أحد الأنواع التالية:

  • PICKUP
  • DELIVERY
  • SCHEDULED_STOP
  • UNAVAILABLE
state State.OPEN
task_id رقم تعريف فريد للمهمة يجب ألا يكون هذا الرقم هو رقم تتبُّع الشحنة. إذا لم يكن لديك أرقام تعريف للمهام في نظامك، يمكنك إنشاء معرّف فريد عالميًا (UUID). لمعرفة التفاصيل، يُرجى الاطّلاع على أرقام تعريف المهام.
tracking_id PICKUP أو DELIVERY مهام فقط: الرقم أو المعرّف الذي تستخدمه لتتبُّع شحنة. لا توفّر هذا الحقل للمهام غير المتعلّقة بالشحن.
planned_location PICKUP, DELIVERY أو SCHEDULED_STOP مهام فقط: الـ موقع جغرافي الذي سيتم فيه إكمال المهمة ليس مطلوبًا لـ UNAVAILABLE مهام.
task_duration الوقت المتوقّع إضافته لإكمال المهمة على سبيل المثال، للبحث عن مكان لإيقاف السيارة أو المشي إلى موقع التسليم

حقول مهام الشحن الاختيارية

الحقلالقيمة
target_time_window الفترة الزمنية التي يجب خلالها إكمال المهمة لا يؤثر هذا الحقل في سلوك التوجيه.
task_tracking_view_config PICKUP أو DELIVERY مهام فقط: إعدادات تتبُّع المهام التي تحدّد عناصر البيانات التي تظهر للمستخدمين النهائيين في ظل ظروف معيّنة
attributes قائمة بسمات المهام المخصّصة يجب أن تتضمّن كل سمة مفتاحًا فريدًا.

إنشاء مهمة عدم التوفّر

يمكنك إنشاء مهمة تشير إلى عدم التوفّر، مثلاً لفترات استراحة السائقين. لإنشاء مهمة عدم التوفّر، اتّبِع الإرشادات التالية:

  • اضبط نوع المهمة على UNAVAILABLE.
  • لا تُدرِج رقم تعريف للتتبُّع.
  • على الرغم من أنّه ليس عليك توفير موقع جغرافي لمهمة عدم التوفّر، فإنّ ذلك يوفّر عمليات محسّنة لحساب الوقت المقدَّر للوصول على مدار اليوم.

تنطبق قواعد رؤية خاصة على موقع المركبة عندما تكون في مهمة UNAVAILABLE لمشاركة الرحلة.

  • تطبيقات المستهلكين المدمَجة مع مكتبة تتبُّع الشحنات: عندما تكون المركبة في مهمة عدم التوفّر، لا يمكن لمستخدمي تطبيق المستهلكين الاطّلاع على موقع المركبة، على الرغم من أنّه لا يزال بإمكانهم الاطّلاع على معلومات الحالة لـ شحنتهم.
  • تطبيقات تتبُّع الأساطيل المدمَجة مع مكتبة تتبُّع الأساطيل: عندما تكون الـ مركبة في مهمة عدم التوفّر، سيتمكّن مديرو الأساطيل الذين يستخدمون تطبيق تتبُّع الـ أساطيل من الاطّلاع على موقع المركبة لمهام عدم التوفّر.

توضّح الأمثلة التالية كيفية إنشاء مهمة عدم توفّر مجدوَلة باستخدام مكتبة Java gRPC أو كيفية إرسال طلب HTTP REST إلى CreateTask.

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;
  }
  ```

راحة

لإنشاء مهمة عدم التوفّر من بيئة خادم، أرسِل طلب HTTP REST إلى CreateTask:

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

<id> هو معرّف فريد للمهمة.

يجب أن يحتوي عنوان الطلب على حقل Authorization بالقيمة Bearer <token>، حيث يُصدر خادمك <token> وفقًا للإرشادات الموضّحة في أدوار حسابات الخدمة و الرموز المميّزة الخاصة بالويب JSON.

يجب أن يحتوي نص الطلب على كيان Task مع الحقول المناسبة الموضّحة في حقول المهام غير المتعلّقة بالقيادة.

مثال على أمر 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

إنشاء مهمة توقّف مجدوَلة

يمكنك إنشاء مهمة لتوقّف مجدوَل، مثلاً للمهام غير المتعلّقة بالقيادة في مواقع العملاء أو للتزوّد بالوقود أو عندما يتلقّى السائق شحنات من مركبة نقل. عند إنشاء مهمة توقّف مجدوَلة، اتّبِع الإرشادات التالية:

  • اضبط نوع المهمة على
  • لا تُدرِج رقم تعريف للتتبُّع.
  • يمكنك اختياريًا توفير موقع جغرافي.

توضّح الأمثلة التالية كيفية إنشاء مهمة عدم توفّر مجدوَلة باستخدام مكتبة Java gRPC أو كيفية إرسال طلب HTTP REST إلى CreateTask.

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;
  }
  ```

راحة

لإنشاء مهمة توقّف مجدوَلة من بيئة خادم، أرسِل طلب HTTP REST إلى CreateTask:

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

<id> هو معرّف فريد للمهمة.

يجب أن يحتوي عنوان الطلب على حقل Authorization بالقيمة Bearer <token>، حيث يُصدر خادمك <token> وفقًا للإرشادات الموضّحة في أدوار حسابات الخدمة و الرموز المميّزة الخاصة بالويب JSON.

يجب أن يحتوي نص الطلب على كيان Task:

مثال على أمر 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

الخطوات التالية