إعداد المهام

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

  • ضبط الفترة الزمنية المستهدَفة لمهمة شحن: يمكنك ضبط الفترة الزمنية لإكمال المهمة.

  • تخصيص مستوى رؤية المهام: يمكنك تخصيص مستوى رؤية أنشطة المهام لعرضها على العملاء أو مشغّلي أسطول المركبات.

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

ضبط الفترة الزمنية المستهدَفة

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

تتألف الفترة الزمنية المستهدَفة من وقتَي البدء والانتهاء ويمكن ضبطها على أي نوع من المهام. لا تؤثر الفترة الزمنية المستهدَفة في سلوك التوجيه.

توضّح الأمثلة التالية كيفية ضبط الفترة الزمنية باستخدام مكتبة Java gRPC أو كيفية إرسال طلب HTTP REST إلى UpdateTask. يمكنك أيضًا ضبط هذا الحقل في وقت إنشاء المهمة.

gRPC

  static final String PROJECT_ID = "my-delivery-co-gcp-project";
  static final String TASK_ID = "task-8241890";

  DeliveryServiceBlockingStub deliveryService =
    DeliveryServiceGrpc.newBlockingStub(channel);

  // Task settings
  String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
  Task task = Task.newBuilder()
    .setName(taskName)
    .setTargetTimeWindow(
      TimeWindow.newBuilder()
        .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
        .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
    .build();

  // Task request
  UpdateTaskRequest updateTaskRequest =
    UpdateTaskRequest.newBuilder()  // No need for the header
        .setTask(task)
        .setUpdateMask(FieldMask.newBuilder().addPaths("targetTimeWindow"))
        .build();

  try {
    Task updatedTask = deliveryService.updateTask(updateTaskRequest);
  } catch (StatusRuntimeException e) {
    Status s = e.getStatus();
    switch (s.getCode()) {
       case NOT_FOUND:
         break;
       case PERMISSION_DENIED:
         break;
    }
    return;
  }

REST

لضبط فترة زمنية للمهمة باستخدام HTTP، يمكنك طلب PATCH واستخدام updateMask لتعديل المعلمة targetTimeWindow:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=targetTimeWindow

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

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
  curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=targetTimeWindow" \
    -H "Content-type: application/json" \
    -H "Authorization: Bearer ${JWT}" \
    --data-binary @- << EOM
  {
    "targetTimeWindow": {
      "startTime": "2023-03-29T21:00:00Z",
      "endTime": "2023-03-29T23:00:00Z"
    }
  }
  EOM

تخصيص مستوى رؤية المهام

توفّر Fleet Engine بشكلٍ تلقائي مستوى رؤية لأنشطة المهام التي يمكن بعد ذلك عرضها على كلٍّ من العملاء الذين يتلقّون شحنة ومشغّلي أسطول المركبات الذين يتتبّعون الشحنات. ويشمل ذلك معلومات مثل الإشارة إلى عدد المحطات قبل إرسال إشعار إلى العميل بشأن حالة تسليم الطرد. يمكنك تخصيص هذه المعلومات على أساس كل مهمة على حدة لتناسب نموذج عملك بشكلٍ أفضل.

يصف هذا القسم قواعد مستوى رؤية العناصر التي يتم تتبّعها على الخريطة. تنطبق هذه القواعد على فئتَين من العناصر:

  • مستوى رؤية علامة الموقع الجغرافي
  • مستوى رؤية بيانات المهام لمهام المركبات النشطة، مثل الخطوط المتعددة والوقت المقدَّر للوصول

قواعد مستوى رؤية علامة الموقع الجغرافي

تعرض Fleet Engine علامات الموقع الجغرافي لموقع تسليم الشحنة المعروض على الخريطة، بغض النظر عن حالة التسليم.

قواعد مستوى رؤية بيانات المهام

يصف هذا القسم قواعد مستوى الرؤية التلقائية التي تنطبق على بيانات المهام. يمكنك تخصيص مهام المركبات النشطة فقط، ما يعني أنّه لا يمكن تطبيق قواعد مستوى الرؤية المخصّصة إلا على مهام الاستلام والتسليم.

قد لا يكون من الممكن تخصيص المهام التالية:

  • المحطات المجدوَلة
  • مهام عدم التوفّر
  • مهام المركبات غير النشطة

قواعد مستوى رؤية مهام عدم التوفّر

بشكلٍ تلقائي، لا تظهر المركبة على الخريطة إذا تم تخصيص مهمة واحدة على الأقل من مهام عدم التوفّر للمهمة التي يتم تتبّعها. على سبيل المثال، إذا كان السائق يأخذ استراحة أو يتم تزويد المركبة بالوقود على الطريق إلى الشحنة التي يتم تتبّعها. سيظلّ الوقت المقدَّر للوصول والوقت المقدَّر لإكمال المهمة متاحَين. ومرة أخرى، لا يمكنك تخصيص هذه القاعدة.

مستوى رؤية مهام المركبات النشطة

يوفّر عنصر TaskTrackingInfo عددًا من عناصر البيانات التي يمكنك إظهارها باستخدام مكتبة تتبُّع الشحنات. بشكلٍ تلقائي، تكون هذه الحقول مرئية عند تخصيص المهمة للمركبة وعندما تكون المركبة على بُعد 5 محطات من المهمة. ينتهي مستوى الرؤية عند إكمال المهمة أو إلغائها.

يمكنك تخصيص إعدادات مستوى الرؤية على أساس كل مهمة على حدة من خلال ضبط الـ TaskTrackingViewConfig على مهمة عند إنشاء المهمة أو تعديلها في Fleet Engine. يؤدي ذلك إلى إنشاء قواعد لإتاحة عناصر بيانات فردية.

يعرض الجدول التالي الحقول التي يمكنك تطبيق قواعد مستوى الرؤية عليها.

حقول مهام المركبات لقواعد مستوى الرؤية
  • الخطوط المتعددة للمسار
  • الوقت المقدَّر للوصول
  • الوقت المقدَّر لإكمال المهمة
  • المسافة المتبقية للقيادة إلى المهمة
  • عدد المحطات المتبقية
  • موقع المركبة

يعرض هذا الجدول خيارات مستوى الرؤية المتاحة للحقول المذكورة أعلاه.

خيارات مستوى الرؤية
  • عدد المحطات المتبقية
  • المدة حتى وقت الوصول المقدَّر
  • المسافة المتبقية للقيادة
  • مرئي دائمًا
  • غير مرئي مطلقًا

قواعد مستوى رؤية الخطوط المتعددة للمسار وموقع المركبة

بالنسبة إلى مسار يتم تتبّعه، يخضع مستوى رؤية الخطوط المتعددة للمسار لمستوى رؤية المركبة. إذا كان الخط المتعدد للمسار مرئيًا على مسار نشط حيث لا تظهر المركبة، يمكن مع ذلك استنتاج موقع المركبة من نهاية الخط المتعدد المرئي. لذلك، يجب أن يكون مستوى رؤية الخط المتعدد للمسار مقيّدًا أو أكثر تقييدًا من مستوى رؤية المركبة.

اتّبِع هذه القواعد لتوفير مجموعة صالحة من مستوى رؤية الخطوط المتعددة للمسار وموقع المركبة.

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

في هذا السيناريو، يضبط كلٌّ من الخط المتعدد وموقع المركبة الخيارات نفسها، والتي تشمل ما يلي:

  • عدد المحطات المتبقية
  • المدة حتى الوقت المقدَّر للوصول
  • المسافة المتبقية للقيادة

للالتزام بالقواعد، يجب أن تكون قيمة مستوى رؤية الخطوط المتعددة للمسار أقل من أو تساوي القيمة المضبوطة لمستوى رؤية المركبة. في هذا المثال، تم ضبط الحدّ الأدنى لعدد المحطات المتبقية للخط المتعدد على 3، وهو أقل من القيمة 5 المحدّدة للمركبة. هذا يعني أنّه عندما تصل الرحلة التي يتم تتبّعها إلى 5 محطات من موقع المهمة، تظهر المركبة، ولكن لا يظهر مسار تلك المركبة إلا عندما تكون الرحلة على بُعد 3 محطات.

```js
"taskTrackingViewConfig": {
  "routePolylinePointsVisibility": {
    "remainingStopCountThreshold": 3
  },
  "vehicleLocationVisibility": {
    "remainingStopCountThreshold": 5
  },
}
```

تحديد خيارات مستوى رؤية مختلفة للخطوط المتعددة للمسار وموقع المركبة

عندما يكون للخطوط المتعددة للمسار وموقع المركبة خيارات مستوى رؤية مختلفة ، لا يظهر موقع المركبة إلا عندما يتم استيفاء كلٍّ من خيارات مستوى الرؤية. ومرة أخرى، يخضع مستوى رؤية الخط المتعدد لقواعد مستوى رؤية المركبة:

  • مرئي دائمًا: يجب أن يستخدم الخط المتعدد للمسار خيار مستوى الرؤية مرئي دائمًا عندما يوفّر موقع المركبة أيضًا خيار مستوى الرؤية مرئي دائمًا نفسه.
  • غير مرئي مطلقًا: يجب أن يستخدم الخط المتعدد للمسار خيار مستوى الرؤية غير مرئي مطلقًا مستوى الرؤية عندما يستخدم موقع المركبة خيار مستوى الرؤية غير مرئي مطلقًا مستوى الرؤية.

في ما يلي مثال:

  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "vehicleLocationVisibility": {
      "remainingDrivingDistanceMetersThreshold": 3000
    },
  }

في هذا المثال، لا يظهر موقع المركبة إلا إذا كان عدد المحطات المتبقية 3 على الأقل و كانت المسافة المتبقية للقيادة 3000 متر على الأقل.

مثال على تخصيص مستوى رؤية المهام

توضّح الأمثلة التالية كيفية ضبط مهمة باستخدام قواعد مستوى الرؤية التالية:

  • إظهار الخطوط المتعددة للمسار إذا كانت المركبة على بُعد 3 محطات.
  • إظهار الوقت المقدَّر للوصول إذا كانت المسافة المتبقية للقيادة أقصر من 5000 متر.
  • عدم إظهار عدد المحطات المتبقية مطلقًا.
  • يحتفظ كل حقل آخر بمستوى الرؤية التلقائي الذي يتم إظهاره عندما تكون المركبة على بُعد 5 محطات من المهمة.

يمكنك الاطّلاع على TaskTrackingViewConfig لـ gRPC أو REST.

gRPC

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TASK_ID = "task-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskTrackingViewConfig(
    TaskTrackingViewConfig.newBuilder()
      .setRoutePolylinePointsVisibility(
        VisibilityOption.newBuilder().setRemainingStopCountThreshold(3))
      .setEstimatedArrivalTimeVisibility(
        VisibilityOption.newBuilder().remainingDrivingDistanceMetersThreshold(5000))
      .setRemainingStopCountVisibility(
        VisibilityOption.newBuilder().setNever(true)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("taskTrackingViewConfig"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
        break;
      case PERMISSION_DENIED:
        break;
  }
  return;
}

REST

لضبط نافذة إعدادات مستوى رؤية تتبُّع المهام باستخدام HTTP، يمكنك طلب PATCH واستخدام updateMask لتعديل المعلمة taskTrackingViewConfig:

PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskTrackingViewConfig

على سبيل المثال:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

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