این سند فرض میکند که راهنمای مقدماتی تکالیف زمانبندیشده را در بخش مقدمهای بر Fleet Engine و همچنین تکلیف زمانبندیشده چیست؟ را در این بخش خواندهاید.
Fleet Engine برای کارهای زمانبندیشده، دستههای گسترده مختلفی از کارها را ارائه میدهد:
- تکالیف ارسال: برای تکالیف رانندگی، ازجمله تحویل گرفتن و تحویل دادن محمولهها استفاده میشود.
- تکالیف عدم دسترسی: برای زمانهایی که رانندگان دردسترس نیستند، مانند زمانهای استراحت الزامی، استفاده میشود.
- تکالیف توقف زمانبندیشده: برای تکالیف غیررانندگی در صندوقهای پستی یا مکانهای مشتری استفاده میشود، مانند زمان ورود به ساختمان یا پیدا کردن نقطه تحویل.
این سند نحوه ایجاد تکالیف غیرارسال را در سرور شما پوشش میدهد. برای انواع تکلیف ارسال، به ایجاد تکالیف ارسال مراجعه کنید.
فیلدهای تکلیف برای تکالیف غیررانندگی
این بخش فیلدهای تکلیف موردنیاز برای هر دو تکلیف توقف زمانبندیشده و عدمدسترسی را مستند میکند.
فیلدهای الزامی تکلیف
برای هر تکلیفی که در Fleet Engine ایجاد میکنید، باید فیلدهای الزامی را ارائه دهید و همچنین میتوانید هریک از فیلدهای اختیاری را ارائه دهید. Fleet Engine
همه فیلدهای دیگر را نادیده میگیرد و اگر درخواست ایجاد تکلیف
deliveryVehicleId اختصاصدادهشدهای ارائه دهد، استثنا قائل میشود. برای واگذار کردن تکالیف به خودرو،
از UpdateDeliveryVehicleRequest استفاده کنید. برای اطلاعات بیشتر، به
بهروزرسانی تکالیف مراجعه کنید.
| فیلد | مقدار |
|---|---|
type |
روی نوعی تنظیم کنید که با نوع تکلیف مطابقت داشته باشد، که یکی از موارد زیر است:
|
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;
}
```
استراحت
برای ایجاد تکلیف عدمدسترسی از محیط سرور،
با CreateTask تماس HTTP REST برقرار کنید:
POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id><id> شناسه یکتای تکلیف است.
سرایند درخواست باید حاوی فیلد مجوز با مقدار Bearer <token> باشد، که در آن <token> توسط سرور شما مطابق با دستورالعملهای شرحدادهشده در نقشهای حساب سرویس و ژتونهای وب JSON صادر شده است.
بدنه درخواست باید حاوی نهاد Task با فیلدهای مناسب
شرحدادهشده در فیلدهای 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> شناسه یکتای تکلیف است.
سرایند درخواست باید حاوی فیلد مجوز با مقدار 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