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

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

يوفّر "محرك الأسطول" للمهام المُجدوَلة فئات واسعة مختلفة من المهام:

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

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

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

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

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

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

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

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

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

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

الحقلالقيمة
targetTimeWindow الفترة الزمنية التي يجب أن تكتمل خلالها المهمة. لا يؤثر هذا الحقل في سلوك التوجيه.
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>

&lt;id&gt; هو معرّف فريد للمهمة.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) بالقيمة 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>

&lt;id&gt; هو معرّف فريد للمهمة.

يجب أن يحتوي رأس الطلب على حقل 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

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