انواع وظایف دیگر را ایجاد کنید

این سند فرض می‌کند که شما راهنمای مقدماتی وظایف زمان‌بندی‌شده در بخش مقدمه‌ای بر موتور ناوگان و همچنین راهنمای «وظیفه زمان‌بندی‌شده چیست؟» در این بخش را مطالعه کرده‌اید.

موتور ناوگان برای وظایف زمان‌بندی‌شده، دسته‌های مختلفی از وظایف را ارائه می‌دهد:

  • وظایف حمل و نقل : برای انجام وظایف رانندگی، از جمله دریافت و تحویل محموله‌ها استفاده می‌شود.
  • وظایف عدم دسترسی : برای مواقعی که رانندگان در دسترس نیستند، مانند زمان‌های استراحت مورد نیاز، استفاده می‌شود.
  • وظایف توقف زمان‌بندی‌شده : برای وظایف غیر رانندگی در صندوق‌های تحویل یا مکان‌های مشتری، مانند زمان ورود به ساختمان یا یافتن محل تحویل، استفاده می‌شود.

این سند نحوه ایجاد وظایف غیر حمل و نقل در سرور شما را پوشش می‌دهد. برای انواع وظایف حمل و نقل، به ایجاد وظایف حمل و نقل مراجعه کنید.

فیلدهای وظیفه برای وظایف غیر رانندگی

این بخش، فیلدهای وظیفه مورد نیاز برای وظایف در دسترس نبودن و توقف برنامه‌ریزی‌شده را مستند می‌کند.

فیلدهای وظیفه مورد نیاز

برای هر وظیفه‌ای که در Fleet Engine ایجاد می‌کنید، باید فیلدهای الزامی را به آن ارائه دهید و همچنین می‌توانید هر یک از فیلدهای اختیاری را نیز ارائه دهید. Fleet Engine تمام فیلدهای دیگر را نادیده می‌گیرد و اگر درخواست ایجاد وظیفه، deliveryVehicleId اختصاص داده شده را ارائه دهد، یک استثنا ایجاد می‌کند. برای اختصاص وظایف به یک وسیله نقلیه، از UpdateDeliveryVehicleRequest استفاده کنید. برای اطلاعات بیشتر، به Update tasks مراجعه کنید.

میدان ارزش
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 فهرستی از ویژگی‌های سفارشی وظایف. هر ویژگی باید یک کلید منحصر به فرد داشته باشد.

ایجاد یک وظیفه در دسترس نبودن

شما می‌توانید یک وظیفه (task) ایجاد کنید که نشان‌دهنده‌ی عدم دسترسی باشد؛ برای مثال، برای وقفه‌های درایور. برای ایجاد یک وظیفه‌ی عدم دسترسی، از دستورالعمل‌های زیر استفاده کنید:

  • نوع وظیفه را روی UNAVAILABLE تنظیم کنید.
  • شناسه رهگیری را وارد نکنید.
  • اگرچه لازم نیست مکانی را برای یک کار در حالت عدم دسترسی مشخص کنید، اما انجام این کار محاسبات ETA را در طول روز بهبود می‌بخشد.

قوانین ویژه دید در مورد موقعیت مکانی وسیله نقلیه هنگامی که در یک وظیفه UNAVAILABLE برای اشتراک گذاری سفر قرار دارد، اعمال می‌شود.

  • اپلیکیشن‌های مصرف‌کننده یکپارچه‌شده با کتابخانه ردیابی محموله : وقتی وسیله نقلیه در وضعیت عدم دسترسی قرار دارد، کاربران اپلیکیشن مصرف‌کننده نمی‌توانند موقعیت مکانی وسیله نقلیه را ببینند، اگرچه همچنان می‌توانند اطلاعات وضعیت محموله خود را مشاهده کنند.
  • برنامه‌های ردیابی ناوگان یکپارچه با کتابخانه ردیابی ناوگان : هنگامی که وسیله نقلیه در حال انجام وظیفه‌ای است که در آن امکان دسترسی به آن وجود ندارد، مدیران ناوگان که از برنامه ردیابی ناوگان استفاده می‌کنند، می‌توانند موقعیت مکانی وسیله نقلیه را برای وظایف در دسترس نبودن مشاهده کنند.

مثال‌های زیر نحوه ایجاد یک وظیفه زمان‌بندی‌شده برای عدم دسترسی با استفاده از کتابخانه جاوا 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 با فیلدهای مناسب شرح داده شده در Task fields برای وظایف غیر محرک باشد.

مثال دستور 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

ایجاد یک وظیفه توقف زمان‌بندی‌شده

شما می‌توانید برای یک توقف برنامه‌ریزی‌شده، وظیفه‌ای ایجاد کنید؛ برای مثال، برای وظایف غیر رانندگی در مکان‌های مشتری، برای توقف‌های سوخت‌گیری یا برای زمانی که راننده محموله‌ها را از یک وسیله نقلیه تغذیه‌کننده دریافت می‌کند. هنگام ایجاد یک وظیفه توقف برنامه‌ریزی‌شده، از دستورالعمل‌های زیر استفاده کنید:

  • نوع وظیفه را تنظیم کنید
  • شناسه رهگیری را وارد نکنید.
  • شما می‌توانید به صورت اختیاری یک مکان ارائه دهید.

مثال‌های زیر نحوه ایجاد یک وظیفه زمان‌بندی‌شده برای عدم دسترسی با استفاده از کتابخانه جاوا 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

قدم بعدی چیست؟