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

يفترض هذا المستند أنّك قرأت الدليل التمهيدي حول المهام المجدوَلة في قسم مقدّمة عن 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;
  }
  ```

REST

لإنشاء مهمة عدم توفّر من بيئة خادم، يمكنك إجراء طلب 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;
  }
  ```

REST

لإنشاء مهمة إيقاف مُجدوَلة من بيئة خادم، يمكنك إجراء طلب 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

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