با Fleet Engine برای ردیابی حمل و نقل شروع کنید

با Fleet Engine Deliveries API فعالیت های ناوگان خود را برای اولین و آخرین مایل تحویل مدل کنید. می‌توانید با استفاده از Driver SDK برای Android و iOS یا مستقیماً با استفاده از تماس‌های HTTP REST یا gRPC از این API استفاده کنید.

راه اندازی اولیه

شما Fleet Engine Deliveries API را در Google Cloud Console پیکربندی می‌کنید.

  • برای کسب اطلاعات در مورد مراحلی که باید در کنسول بردارید و نحوه ایجاد یک رمز وب JSON برای مجوز، به تأیید هویت و مجوز مراجعه کنید.

  • برای جزئیات استفاده از کنسول، به مستندات Google Cloud Console مراجعه کنید.

تنظیمات خود را تأیید کنید

پس از ایجاد حساب‌های خدمات، بررسی کنید که تنظیمات شما کامل شده است و می‌توانید یک وسیله نقلیه تحویل ایجاد کنید. تأیید راه‌اندازی فوراً تضمین می‌کند که به مسائل مجوز مشترکی که ممکن است هنگام راه‌اندازی پروژه‌تان به وجود بیاید، رسیدگی کرده‌اید. دو راه برای تأیید تنظیمات شما وجود دارد:

کتابخانه های مشتری

برای تجربه بهتر توسعه دهنده نسبت به gRPC خام یا REST، از کتابخانه های سرویس گیرنده در چندین زبان برنامه نویسی رایج استفاده کنید. برای دستورالعمل‌های نحوه به‌دست آوردن کتابخانه‌های سرویس گیرنده برای برنامه سرور خود، به کتابخانه‌های مشتری مراجعه کنید.

مثال های جاوا در این مستندات فرض می کنند که شما با gRPC آشنا هستید.

ساختارهای داده

Fleet Engine Deliveries API از دو ساختار داده برای مدل‌سازی تحویل و تحویل محموله‌ها استفاده می‌کند:

  • وسیله نقلیه تحویلی که برای حمل محموله استفاده می شود.
  • وظایف تحویل و تحویل محموله

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

وسایل نقلیه تحویل

وسایل نقلیه تحویل محموله ها را از انبار به محل تحویل و از محل تحویل به انبار حمل می کنند. در موارد خاص، آنها همچنین ممکن است یک محموله را مستقیماً از محل تحویل به محل تحویل حمل کنند.

از Driver SDK برای ایجاد یک شی DeliveryVehicle در Fleet Engine و ارسال به‌روزرسانی‌های مکان برای حمل و نقل و ردیابی ناوگان استفاده کنید.

وظایف

برای اقداماتی که یک وسیله نقلیه در طول روز انجام می دهد، بر اساس نوع عمل، وظایف را تعیین می کنید:

  • برای تحویل و تحویل، وظایف حمل و نقل را تعیین کنید.
  • برای مواقعی که درایورها در دسترس نیستند، مانند وقفه های ضروری، وظایف Unavailability را تعیین کنید.
  • برای کارهای غیر رانندگی در دراپ باکس یا مکان مشتری، وظایف توقف برنامه ریزی شده را تعیین کنید.

هر وظیفه ای که اختصاص می دهید باید شناسه وظیفه منحصر به فرد داشته باشد، اما وظایف می توانند شناسه ردیابی یکسانی را به اشتراک بگذارند. هنگامی که Fleet Engine پنجره های ETA را برای هر کار محاسبه می کند، از تمام وظایف و ترتیب برنامه ریزی آنها برای تخمین زدن استفاده می کند. برای اطلاعات بیشتر درباره شناسه کار، به دستورالعمل‌های شناسه کار مراجعه کنید.

برای ایجاد وظایف در Fleet Engine، از Driver SDK Task Manager استفاده کنید.

وظایف حمل و نقل

وظایف حمل و نقل را هم برای تحویل و هم برای تحویل یک محموله ایجاد کنید و اطلاعات زیر را شامل شود:

  • محل تحویل یا تحویل.
  • شماره پیگیری یا شناسه
  • زمان اقامت برای در نظر گرفتن زمان اضافی برای تکمیل کار، جستجوی پارکینگ، یا پیاده روی به محل تحویل.
  • شناسه کار منحصر به فرد به دستورالعمل های Task ID مراجعه کنید.

برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:

اندروید

iOS

وظایف در دسترس نبودن

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

با اطلاعات زیر یک کار عدم دسترسی ایجاد کنید:

  • طول استراحت.
  • به صورت اختیاری، محل استراحت. لازم نیست مکان خاصی را ارائه دهید، اما انجام این کار پنجره های ETA دقیق تری را در طول روز فراهم می کند.

برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:

اندروید

iOS

کارهای توقف برنامه ریزی شده

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

برای اطلاعات بیشتر به موضوعات زیر مراجعه کنید:

اندروید

iOS

دستورالعمل های Task ID

هنگام ایجاد شناسه کار، این دستورالعمل‌های محتوا و قالب را دنبال کنید:

  • شناسه وظایف منحصر به فرد ایجاد کنید
  • هیچ گونه اطلاعات شناسایی شخصی (PII) یا داده های متنی واضح را در معرض نمایش قرار ندهید.
  • از رشته های معتبر یونیکد استفاده کنید.
  • از 64 کاراکتر یا کمتر استفاده کنید.
  • هیچ یک از کاراکترهای ASCII زیر را شامل نکنید: "/"، ":"، "\"، "?"، یا "#".
  • عادی سازی بر اساس فرم عادی سازی یونیکد C.

در زیر چند نمونه از Task IDهای خوب آورده شده است:

  • 566c33d9-2a31-4b6a-9cd4-80ba1a0c643b
  • e4708eabcfa39bf2767c9546c9273f747b4626e8cc44e9630d50f6d129013d38
  • NTA1YTliYWNkYmViMTI0ZmMzMWFmOWY2NzNkM2Jk

جدول زیر نمونه هایی از Task ID های پشتیبانی نشده را نشان می دهد:

شناسه های وظیفه پشتیبانی نشده دلیل
8/31/2019-20:48-46.70746,-130.10807,-85.17909,61.33680 الزامات PII و نویسه ها را نقض می کند: کاما، نقطه، دو نقطه، و اسلش.
JohnDoe-577b484da26f-Cupertino-SantaCruz الزامات PII را نقض می کند.
4R0oXLToF"112 تابستانی دکتر ایست هارتفورد، CT06118"577b484da26f8a PII و الزامات نویسه را نقض می کند: فضای خالی، کاما و علامت نقل قول. بیش از 64 کاراکتر.

منابع بیشتر

برای مشاهده فیلدهای خاص موجود در هر ساختار داده، به مستندات مرجع API برای DeliveryVehicle ( gRPC ، REST ) ​​و Task ( gRPC ، REST ) ​​مراجعه کنید.

زندگی یک وسیله نقلیه

شی DeliveryVehicle نشان دهنده یک وسیله نقلیه تحویل اول یا آخرین مایل است. شما یک شی DeliveryVehicle با استفاده از:

  • شناسه پروژه پروژه Google Cloud که حاوی حساب سرویس مورد استفاده برای فراخوانی APIهای Fleet Engine است.
  • شناسه وسیله نقلیه متعلق به مشتری

از شناسه های خودرویی که برای هر وسیله نقلیه منحصر به فرد است استفاده کنید. از شناسه وسیله نقلیه مجدداً استفاده نکنید مگر اینکه هیچ کار فعالی برای وسیله نقلیه اصلی وجود نداشته باشد.

Fleet Engine به طور خودکار اشیاء DeliveryVehicle را که با استفاده از UpdateDeliveryVehicle به روز نشده اند را پس از هفت روز حذف می کند. برای دیدن اینکه آیا وسیله نقلیه وجود دارد:

  1. با UpdateDeliveryVehicle تماس بگیرید.
  2. اگر با خطای NOT_FOUND مواجه شدید ، سپس با CreateDeliveryVehicle تماس بگیرید تا وسیله نقلیه را بازسازی کنید. اگر تماس خودرویی را برگرداند ، همچنان برای به‌روزرسانی در دسترس است.

انواع وسایل نقلیه

موجودیت VehicleType حاوی یک فیلد اختیاری از VehicleType است که شامل یک Category است که می توانید آن را به عنوان AUTO ، TWO_WHEELER ، BICYCLE ، یا PEDESTRIAN مشخص کنید. اگر فیلد را تنظیم نکنید، به طور پیش‌فرض روی AUTO تنظیم می‌شود.

تمام مسیریابی برای وسایل نقلیه از RouteTravelMode مربوطه برای نوع وسیله نقلیه استفاده می کند.

ویژگی های خودرو

موجودیت DeliveryVehicle حاوی یک فیلد تکراری از DeliveryVehicleAttribute است. API ListDeliveryVehicles شامل یک فیلد filter است که می تواند موجودیت های بازگردانده شده DeliveryVehicle را به آنهایی با ویژگی های مشخص شده محدود کند. DeliveryVehicleAttribute بر رفتار مسیریابی Fleet Engine تأثیری ندارد.

اطلاعات شناسایی شخصی (PII) یا اطلاعات حساس را در ویژگی‌ها وارد نکنید زیرا این قسمت ممکن است برای کاربران قابل مشاهده باشد.

زندگی یک کار

می‌توانید با رابط‌های Deliveries API gRPC یا REST در Fleet Engine وظایفی ایجاد، به‌روزرسانی و جستجو کنید.

یک شی Task دارای یک فیلد حالت برای ردیابی پیشرفت آن در طول چرخه حیات خود است. مقادیر از OPEN به CLOSED منتقل می شوند. وظایف جدید در حالت OPEN ایجاد می شوند که نشان می دهد:

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

دستورالعمل های وظیفه

تنها زمانی می توانید یک کار را به یک وسیله نقلیه در حالت OPEN اختصاص دهید.

شما یک کار را با حذف آن از لیست توقف های وسیله نقلیه لغو می کنید، که وضعیت کار را به طور خودکار روی CLOSED تنظیم می کند.

هنگامی که وسیله نقلیه کار، توقف وسیله نقلیه کار را کامل کرد:

  1. فیلد نتیجه کار را به SUCCEED یا FAILED به روز کنید.

  2. مهر زمانی رویداد را مشخص کنید.

    سپس کتابخانه جاوا اسکریپت ردیابی حمل و نقل نتیجه کار را نشان می دهد و وضعیت کار به طور خودکار روی CLOSED تنظیم می شود. برای اطلاعات بیشتر، به ردیابی محموله خود با کتابخانه جاوا اسکریپت ردیابی حمل و نقل مراجعه کنید.

مانند وسایل نقلیه، Fleet Engine کارهایی را که به‌روزرسانی نشده‌اند را پس از هفت روز حذف می‌کند و اگر بخواهید با شناسه‌ای که از قبل وجود دارد، کاری ایجاد کنید، یک خطا برمی‌گرداند.

توجه: Fleet Engine از حذف صریح یک کار پشتیبانی نمی کند. این سرویس به طور خودکار وظایف را پس از هفت روز بدون به روز رسانی حذف می کند. اگر می خواهید داده های کار را بیش از هفت روز حفظ کنید، باید خودتان آن قابلیت را اجرا کنید.

ویژگی های وظیفه

موجودیت Task حاوی یک فیلد مکرر از TaskAttribute است که می تواند مقداری از یکی از 3 نوع رشته، عدد و bool داشته باشد. ListTasks API شامل یک فیلد filter است که می تواند موجودیت های Task برگشتی را به آنهایی که دارای ویژگی های مشخص شده هستند محدود کند. ویژگی های وظیفه بر رفتار مسیریابی Fleet Engine تأثیر نمی گذارد.

اطلاعات شناسایی شخصی (PII) یا سایر اطلاعات حساس را در ویژگی‌ها وارد نکنید زیرا این ویژگی‌ها ممکن است برای کاربران قابل مشاهده باشد.

چرخه عمر وسیله نقلیه و کار را مدیریت کنید

یادآوری: سیستم داخلی شما به عنوان منبع قابل اعتماد داده‌هایی عمل می‌کند که Fleet Engine Deliveries API از طرف شما افزایش می‌دهد.

برای مدیریت چرخه عمر وسیله نقلیه و وظایف در سیستم خود، از Fleet Engine Deliveries API برای ایجاد، به روز رسانی و ردیابی وسایل نقلیه خود و وظایف مرتبط با آنها استفاده کنید.

در همان زمان، برنامه درایور مستقیماً با Fleet Engine ارتباط برقرار می کند تا مکان دستگاه و اطلاعات مسیر را به روز کند. این مدل به Fleet Engine امکان مدیریت کارآمد مکان را در زمان واقعی می دهد. این مکان را مستقیماً به کتابخانه ردیابی می‌فرستد، که سپس می‌توانید از آن برای به‌روزرسانی مشتریان در مورد وضعیت سفارش‌شان استفاده کنید.

برای مثال، فرض کنید سناریوی زیر را دارید:

  • راننده ای به ایستگاه تحویل کالا نزدیک می شود. برنامه درایور موقعیت خود را به Fleet Engine ارسال می کند.
  • Fleet Engine مکان دستگاه را به کتابخانه ردیابی می فرستد، که برنامه مصرف کننده شما از آن برای هشدار به مصرف کننده در مورد نزدیکی بسته خود استفاده می کند.
  • پس از اینکه راننده ارسال را کامل کرد، روی دکمه "محموله تحویل شد" در برنامه راننده کلیک می کند.
  • عمل "محموله تحویل داده شد" اطلاعات را به سیستم پشتیبان شما می فرستد، که مراحل اعتبار سنجی و تأیید تجاری لازم را انجام می دهد.
  • سیستم شما کار را به عنوان موفقیت آمیز تأیید می کند و Fleet Engine را با استفاده از Deliveries API به روز می کند.

نمودار زیر این فرآیندها را در سطح عمومی نشان می دهد. همچنین رابطه استاندارد بین سیستم شما، مشتری و Fleet Engine را نشان می دهد.

با استفاده از Deliveries API

توکن های مشتری را مدیریت کنید

به‌روزرسانی‌های موقعیت مکانی که از برنامه درایور منشأ می‌گیرند و مستقیماً به Fleet Engine ارسال می‌شوند، به توکن‌های مجوز نیاز دارند. در اینجا روش توصیه شده برای رسیدگی به به روز رسانی از مشتری به Fleet Engine است:

  1. توکن را با استفاده از نقش حساب کاربری سرویس کاربر راننده ناوگان تحویل موتور ناوگان تولید کنید.

  2. به برنامه درایور رمزی با دامنه محدود ارائه دهید. این محدوده فقط به آن امکان می‌دهد مکان دستگاه را در Fleet Engine به‌روزرسانی کند.

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

سایر نقش های حساب خدمات

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

برای اطلاعات بیشتر در مورد استفاده از نقش‌های راننده غیرقابل اعتماد و مطمئن، به تنظیمات پروژه Cloud مراجعه کنید.

مدل یک روز کاری

جدول زیر توضیح می دهد که چگونه یک روز کاری برای رانندگان اولین یا آخرین مایل در یک شرکت تحویل و تدارکات ممکن است شبیه باشد. ممکن است شرکت شما در جزئیات متفاوت باشد، اما می توانید ببینید که چگونه می توانید یک روز کاری را مدل کنید.

زمان فعالیت مدل سازی
ظرف 24 ساعت پس از شروع روز Dispatcher محموله ها را به وسایل نقلیه یا مسیرهای تحویل اختصاص می دهد. می‌توانید کارهایی را برای تحویل محموله، تحویل گرفتن، استراحت و موارد دیگر در Fleet Engine پیش از موعد ایجاد کنید. به عنوان مثال، می توانید یک کار تحویل محموله ، وظیفه تحویل محموله ، عدم دسترسی برنامه ریزی شده یا توقف برنامه ریزی شده ایجاد کنید.

پس از نهایی شدن مجموعه بسته های تحویل و ترتیبی که باید تحویل شوند، وظایف را به یک وسیله نقلیه اختصاص دهید.
شروع روز راننده با ورود به برنامه Driver روز را در انبار شروع می کند. Delivery Driver API را راه اندازی کنید. در صورت نیاز وسیله نقلیه تحویل را در Fleet Engine ایجاد کنید .
راننده محموله ها را روی وسیله نقلیه تحویل بار می کند و محموله ها را اسکن می کند. اگر وظایف تحویل محموله قبل از زمان ایجاد نشده است، وظایف تحویل محموله را در زمان اسکن ایجاد کنید .
راننده ترتیب انجام وظایف را تأیید می کند. اگر زودتر از موعد ایجاد نشده‌اند، وظایف تحویل محموله ، در دسترس نبودن برنامه‌ریزی‌شده و توقف‌های برنامه‌ریزی‌شده را ایجاد کنید.
راننده انبار را ترک می کند و متعهد می شود که تعداد کارهای بعدی را تکمیل کند. تمام وظایف یا زیرمجموعه ای از وظایف را با انجام دستور تکمیل آنها به وسیله نقلیه اختصاص دهید .
راننده یک محموله را تحویل می دهد. پس از رسیدن به ایستگاه تحویل، اقدامات مربوط به رسیدن خودرو به ایستگاه را انجام دهید. پس از تحویل محموله، کار تحویل را ببندید و به صورت اختیاری، وضعیت حمل و نقل و سایر اطلاعات متا را ذخیره کنید . پس از انجام تمام وظایف در ایستگاه و قبل از شروع رانندگی به ایستگاه بعدی، اقدامات مربوط به خودرو را انجام دهید تا یک توقف کامل شود و وسیله نقلیه به ایستگاه بعدی برسد .
راننده با یک وسیله نقلیه تغذیه کننده ملاقات می کند تا محموله های اضافی را به وسیله نقلیه تحویل منتقل کند. نقطه ملاقات برای انتقال بین وسایل نقلیه تغذیه کننده و تحویل باید به عنوان توقف برنامه ریزی شده مدل شود.

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

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

به روز رسانی مکان چگونه کار می کند

برای بهترین عملکرد با Fleet Engine، جریانی از به‌روزرسانی‌های مکان خودرو را در اختیار آن قرار دهید. برای ارائه این به روز رسانی ها از یکی از راه های زیر استفاده کنید:

  1. از Driver SDK - Android ، iOS - ساده ترین گزینه استفاده کنید.
  2. از کد سفارشی استفاده کنید -- اگر مکان‌ها از طریق باطن شما منتقل می‌شوند یا اگر از دستگاه‌هایی غیر از Android یا iOS استفاده می‌کنید مفید است.

صرف نظر از اینکه چگونه به‌روزرسانی‌های مکان وسیله نقلیه را ارائه می‌دهید، بخش پشتیبان شما مسئول به‌روزرسانی Fleet Engine در زمانی که وسیله نقلیه تحویلی به ایستگاه می‌رود (از جمله انبار) و زمانی که به ایستگاه می‌رسد، است . Fleet Engine این رویدادها را به طور خودکار شناسایی نمی کند.

محل توقف و تحویل خودرو

توقف وسیله نقلیه جایی است که وسیله نقلیه تحویل یک کار حمل و نقل یا کار دیگری را انجام می دهد. این یا یک نقطه دسترسی مانند یک بارانداز یا یک مکان شکسته در جاده است.

محل تحویل، محلی است که محموله در آن تحویل یا تحویل می شود. رسیدن و برگشت به محل تحویل ممکن است نیاز به پیاده روی از ایستگاه خودرو داشته باشد.

به عنوان مثال، هنگامی که یک راننده در حال تحویل محموله به فروشگاهی در یک مرکز خرید است، وسیله نقلیه تحویل در پارکینگ مرکز خرید در نزدیکی نزدیک‌ترین ورودی به فروشگاه توقف می‌کند. این محل توقف خودرو است. سپس راننده از ایستگاه وسیله نقلیه به سمت مرکز خریدی که فروشگاه در آن قرار دارد می رود. این محل تحویل است.

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

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

از SDK های موبایل استفاده کنید

قبل از برقراری تماس با Driver SDK، مطمئن شوید که آن را مقداردهی اولیه کنید.

Delivery Driver API را راه اندازی کنید

قبل از راه اندازی API درایور تحویل در Driver SDK، مطمئن شوید که Navigation SDK را مقداردهی اولیه کرده اید . سپس Delivery Driver API را همانطور که در مثال زیر نشان داده شده است مقداردهی اولیه کنید:

static final String PROVIDER_ID = "provider-1234";
static final String VEHICLE_ID = "vehicle-8241890";

NavigationApi.getNavigator(
   this, // Activity.
   new NavigatorListener() {
     @Override
     public void onNavigatorReady(Navigator navigator) {
       DeliveryDriverApi.createInstance(DriverContext.builder(getApplication())
         .setNavigator(navigator)
         .setProviderId(PROVIDER_ID)
         .setVehicleId(VEHICLE_ID)
         .setAuthTokenFactory((context) -> "JWT") // AuthTokenFactory returns JWT for call context.
         .setRoadSnappedLocationProvider(NavigationApi.getRoadSnappedLocationProvider(getApplication()))
         .setNavigationTransactionRecorder(NavigationApi.getNavigationTransactionRecorder(getApplication()))
         .setStatusListener((statusLevel,statusCode,statusMsg) -> // Optional, surfaces polling errors.
             Log.d("TAG", String.format("New status update. %s, %s, %s", statusLevel, statusCode, statusMsg)))
         .build));
     }
     @Override
     public void onError(int errorCode) {
       Log.e("TAG", String.format("Error loading Navigator instance: %s", errorCode));
     }
   });

موارد استفاده کنید

این بخش نحوه استفاده از Deliveries API برای مدل‌سازی موارد استفاده رایج را توضیح می‌دهد.

شناسه های موجودیت منحصر به فرد

قالب و مقدار شناسه‌های موجودیت منحصربه‌فرد مورد استفاده در تماس‌های REST برای Fleet Engine غیرشفاف هستند. از استفاده از شناسه‌های افزایش‌دهنده خودکار خودداری کنید و مطمئن شوید که شناسه حاوی اطلاعات شناسایی شخصی (PII) مانند شماره تلفن راننده نباشد.

وسیله نقلیه ایجاد کنید

شما می توانید یک وسیله نقلیه از Driver SDK یا از یک محیط سرور با استفاده از gRPC یا REST ایجاد کنید.

gRPC

برای ایجاد یک وسیله نقلیه جدید، یک تماس CreateDeliveryVehicle با Fleet Engine برقرار می کنید. از شی CreateDeliveryVehicleRequest برای تعریف ویژگی های وسیله نقلیه تحویل جدید استفاده کنید. توجه داشته باشید که هر مقدار مشخص شده برای فیلد Name در دستورالعمل API برای شناسه های مشخص شده توسط کاربر نادیده گرفته می شود. برای تنظیم شناسه خودرو باید از قسمت DeliveryVehicleId استفاده کنید.

هنگام ایجاد یک DeliveryVehicle ، می توانید به صورت اختیاری این فیلدها را مشخص کنید:

  • ویژگی های
  • آخرین محل
  • تایپ کنید

هیچ فیلد دیگری تنظیم نکنید. اگر این کار را انجام دهید، Fleet Engine یک خطا برمی‌گرداند زیرا آن فیلدها فقط خواندنی هستند یا فقط با تماس با UpdateDeliveryVehicle می‌توانند به‌روزرسانی شوند.

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

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای ایجاد یک وسیله نقلیه نشان می دهد:

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String VEHICLE_ID = "vehicle-8241890"; // Avoid auto-incrementing IDs.

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Vehicle settings
    String parent = "providers/" + PROJECT_ID;
    DeliveryVehicle vehicle = DeliveryVehicle.newBuilder()
      .addAttributes(DeliveryVehicleAttribute.newBuilder()
        .setKey("route_number").setValue("1"))  // Opaque to the Fleet Engine
      .build();

    // Vehicle request
    CreateDeliveryVehicleRequest createVehicleRequest =
      CreateDeliveryVehicleRequest.newBuilder()  // No need for the header
          .setParent(parent)
          .setDeliveryVehicleId(VEHICLE_ID)     // Vehicle ID assigned by the Provider
          .setDeliveryVehicle(vehicle)
          .build();

    // Error handling
    // If Fleet Engine does not have vehicle with that ID and the credentials of the
    // requestor pass, the service creates the vehicle successfully.

    try {
      DeliveryVehicle createdVehicle =
        deliveryService.createDeliveryVehicle(createVehicleRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case ALREADY_EXISTS:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

باقی مانده

برای ایجاد وسیله نقلیه از محیط سرور، یک تماس HTTP REST با CreateDeliveryVehicle برقرار کنید:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles?deliveryVehicleId=<id>

<id> یک شناسه منحصر به فرد برای وسیله نقلیه تحویل در ناوگان شما است.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه POST نشان دهنده موجودیت DeliveryVehicle است که باید ایجاد شود. می توانید فیلدهای اختیاری زیر را مشخص کنید:

  • ویژگی های
  • آخرین محل
  • نوع

مثال دستور curl :

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
  "attributes": [{"key": "model", "value": "sedan"}],
  "lastLocation": {"location": {"latitude": 12.1, "longitude": 14.5}}
}
EOM

Fleet Engine فیلد name نهاد DeliveryVehicle را به ازای راهنمای API برای شناسه‌های مشخص‌شده توسط کاربر نادیده می‌گیرد. هیچ فیلد دیگری تنظیم نکنید. اگر این کار را انجام دهید، Fleet Engine خطایی را برمی‌گرداند زیرا این فیلدها یا فقط خواندنی هستند یا فقط با تماس با UpdateDeliveryVehicle قابل به‌روزرسانی هستند.

برای ایجاد وسیله نقلیه بدون تنظیم هیچ فیلدی، بدنه درخواست POST را خالی بگذارید. وسیله نقلیه تازه ایجاد شده سپس یک شناسه وسیله نقلیه را از پارامتر deliveryVehicleId در URL POST استخراج می کند.

مثال دستور curl :

# Set $JWT, $PROJECT_ID, and $VEHICLE_ID in the local
# environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?deliveryVehicleId=${VEHICLE_ID}" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}"

یک وظیفه تحویل محموله ایجاد کنید

می توانید یک وظیفه تحویل محموله را از Driver SDK یا از یک محیط سرور با استفاده از gRPC یا REST ایجاد کنید.

gRPC

مثال زیر نحوه استفاده از کتابخانه 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.PICKUP)
  .setState(Task.State.OPEN)
  .setTrackingId("my-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .setTargetTimeWindow(
    TimeWindow.newBuilder()
      .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
      .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
  .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
  .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
  .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
  .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 a 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> یک شناسه منحصر به فرد برای کار است. نباید شماره رهگیری برای محموله باشد. اگر شناسه وظیفه در سیستم خود ندارید، ممکن است یک شناسه منحصر به فرد جهانی (UUID) ایجاد کنید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت Task باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    نوع Type.PICKUP
    حالت حالت.باز
    شناسه پیگیری شماره یا شناسه ای که برای ردیابی یک محموله استفاده می کنید.
    مکان برنامه ریزی شده مکانی که قرار است کار در آن تکمیل شود، در این مورد محل تحویل محموله.
    مدت زمان کار زمان مورد انتظار، بر حسب ثانیه، که برای تحویل گرفتن محموله در محل وانت لازم است.

  • فیلدهای اختیاری:

    رشته ارزش
    targetTimeWindow پنجره زمانی که در طی آن کار باید تکمیل شود. این بر رفتار مسیریابی تأثیری ندارد.
    ویژگی های لیستی از ویژگی های Task سفارشی. هر ویژگی باید یک کلید منحصر به فرد داشته باشد.

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

مثال دستور curl :

# Set $JWT, $PROJECT_ID, $TRACKING_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": "PICKUP",
  "state": "OPEN",
  "trackingId": "${TRACKING_ID}",
  "plannedLocation": {
     "point": {
        "latitude": -6.195139,
        "longitude": 106.820826
     }
  },
  "taskDuration": "90s",
  "targetTimeWindow": {
    "startTime": "2023-03-29T21:00:00Z",
    "endTime": "2023-03-29T23:00:00Z"
  }
}
EOM

یک وظیفه تحویل محموله ایجاد کنید

یک وظیفه تحویل محموله یا از Driver SDK یا از یک محیط سرور با استفاده از gRPC یا REST ایجاد کنید.

gRPC

مثال زیر نحوه استفاده از کتابخانه 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.DELIVERY)
  .setState(Task.State.OPEN)
  .setTrackingId("my-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .setTargetTimeWindow(
    TimeWindow.newBuilder()
      .setStartTime(Timestamp.newBuilder().setSeconds(1680123600))
      .setEndTime(Timestamp.newBuilder().setSeconds(1680130800)))
  .addAttributes(TaskAttribute.newBuilder().setKey("foo").setStringValue("value"))
  .addAttributes(TaskAttribute.newBuilder().setKey("bar").setNumberValue(10))
  .addAttributes(TaskAttribute.newBuilder().setKey("baz").setBoolValue(false))
  .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;
}

باقی مانده

برای ایجاد یک کار تحویل محموله از یک محیط سرور با استفاده از gRPC یا REST، یک تماس HTTP REST با CreateTask برقرار کنید:

`POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks?taskId=<id>`

<id> یک شناسه منحصر به فرد برای کار است. نباید شماره رهگیری برای محموله باشد. اگر شناسه وظیفه در سیستم خود ندارید، ممکن است یک شناسه منحصر به فرد جهانی (UUID) ایجاد کنید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت Task باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    نوع نوع.تحویل
    حالت حالت.باز
    شناسه پیگیری شماره یا شناسه ای که برای ردیابی یک محموله استفاده می کنید.
    مکان برنامه ریزی شده مکانی که قرار است کار تکمیل شود، در این مورد محل تحویل این محموله.
    مدت زمان کار زمان مورد انتظار، بر حسب ثانیه، که طول می کشد تا محموله در محل تحویل تحویل داده شود.

  • فیلدهای اختیاری:

    رشته ارزش
    targetTimeWindow پنجره زمانی که در طی آن کار باید تکمیل شود. این بر رفتار مسیریابی تأثیری ندارد.
    ویژگی های لیستی از ویژگی های Task سفارشی. هر ویژگی باید یک کلید منحصر به فرد داشته باشد.

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

مثال دستور curl :

# Set $JWT, $PROJECT_ID, $TRACKING_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": "DELIVERY",
  "state": "OPEN",
  "trackingId": "${TRACKING_ID}",
  "plannedLocation": {
     "point": {
        "latitude": -6.195139,
        "longitude": 106.820826
     }
  },
  "taskDuration": "90s",
  "targetTimeWindow": {
    "startTime": "2023-03-29T21:00:00Z",
    "endTime": "2023-03-29T23:00:00Z"
  }
}
EOM

دسته ای ایجاد وظایف

شما می توانید دسته ای از وظایف را از محیط سرور با استفاده از gRPC یا REST ایجاد کنید.

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای ایجاد دو کار، یکی برای تحویل و دیگری برای دریافت در یک مکان نشان می دهد:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Delivery Task settings
Task deliveryTask = Task.newBuilder()
  .setType(Task.Type.DELIVERY)
  .setState(Task.State.OPEN)
  .setTrackingId("delivery-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Delivery Task request
CreateTaskRequest createDeliveryTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8312508")  // Task ID assigned by the Provider
      .setTask(deliveryTask)      // Initial state
      .build();

// Pickup Task settings
Task pickupTask = Task.newBuilder()
  .setType(Task.Type.PICKUP)
  .setState(Task.State.OPEN)
  .setTrackingId("pickup-tracking-id")
  .setPlannedLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .setTaskDuration(
    Duration.newBuilder().setSeconds(2 * 60))
  .build();

// Pickup Task request
CreateTaskRequest createPickupTaskRequest =
  CreateTaskRequest.newBuilder()  // No need for the header or parent fields
      .setTaskId("task-8241890")  // Task ID assigned by the Provider
      .setTask(pickupTask)        // Initial state
      .build();

// Batch Create Tasks settings
String parent = "providers/" + PROJECT_ID;

// Batch Create Tasks request
BatchCreateTasksRequest batchCreateTasksRequest =
  BatchCreateTasksRequest.newBuilder()
      .setParent(parent)
      .addRequests(createDeliveryTaskRequest)
      .addRequests(createPickupTaskRequest)
      .build();

// Error handling
// If Fleet Engine does not have any task(s) with these task ID(s) and the
// credentials of the requestor pass, the service creates the task(s)
// successfully.

try {
  BatchCreateTasksResponse createdTasks = deliveryService.batchCreateTasks(
    batchCreateTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case ALREADY_EXISTS:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

باقی مانده

برای ایجاد یک کار تحویل و دریافت از یک محیط سرور، یک تماس HTTP REST با BatchCreateTasks برقرار کنید:

POST https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks:batchCreate

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت BatchCreateTasksRequest باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    درخواست ها آرایه< CreateTasksRequest >

  • فیلدهای اختیاری:

    رشته ارزش
    سرتیتر `DeliveryRequestHeader`

هر عنصر CreateTasksRequest در requests باید قوانین اعتبارسنجی مشابه درخواست CreateTask را بگذراند، با این استثنا که فیلدهای parent و header اختیاری هستند. در صورت تنظیم، باید با فیلدهای مربوطه خود در BatchCreateTasksRequest سطح بالایی یکسان باشند. به ایجاد یک وظیفه تحویل محموله و ایجاد یک وظیفه تحویل محموله برای قوانین اعتبار سنجی خاص برای هر یک مراجعه کنید.

برای اطلاعات بیشتر به مستندات مرجع API برای BatchCreateTasks ( gRPC ، REST ) ​​مراجعه کنید.

مثال دستور curl :

# Set $JWT, $PROJECT_ID, $DELIVERY_TRACKING_ID, $DELIVERY_TASK_ID,
# $PICKUP_TRACKING_ID, and $PICKUP_TASK_ID in the local environment
curl -X POST "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks:batchCreate" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "requests" : [
    {
      "taskId": "${DELIVERY_TASK_ID}",
      "task" : {
        "type": "DELIVERY",
        "state": "OPEN",
        "trackingId": "${DELIVERY_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    },
    {
      "taskId": "${PICKUP_TASK_ID}",
      "task" : {
        "type": "PICKUP",
        "state": "OPEN",
        "trackingId": "${PICKUP_TRACKING_ID}",
        "plannedLocation": {
          "point": {
              "latitude": -6.195139,
              "longitude": 106.820826
          }
        },
        "taskDuration": "90s"
      }
    }
  ]
}
EOM

در دسترس نبودن برنامه ریزی شده

می‌توانید وظیفه‌ای ایجاد کنید که در دسترس نبودن (مثلاً برای استراحت راننده یا سوخت‌گیری خودرو) از Driver SDK یا از محیط سرور با استفاده از gRPC یا REST ایجاد کنید. یک کار در دسترس نبودن برنامه ریزی شده نباید شامل شناسه ردیابی باشد. شما می توانید به صورت اختیاری یک مکان ارائه دهید.

gRPC

مثال زیر نحوه استفاده از کتابخانه 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> یک شناسه منحصر به فرد برای کار است. اگر شناسه وظیفه در سیستم خود ندارید، ممکن است یک شناسه منحصر به فرد جهانی (UUID) ایجاد کنید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت Task باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    نوع Type.UNAVAILABLE
    حالت حالت.باز
    مدت زمان کار طول استراحت بر حسب ثانیه

  • فیلدهای اختیاری:

    رشته ارزش
    مکان برنامه ریزی شده محل استراحت اگر باید در یک مکان خاص گرفته شود.

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

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

توقف های برنامه ریزی شده

می‌توانید یک کار توقف برنامه‌ریزی‌شده را از Driver SDK یا از محیط سرور با استفاده از gRPC یا REST ایجاد کنید. یک کار توقف برنامه ریزی شده ممکن است شامل شناسه ردیابی نباشد.

gRPC

مثال زیر نحوه استفاده از کتابخانه 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> یک شناسه منحصر به فرد برای کار است. اگر شناسه وظیفه در سیستم خود ندارید، ممکن است یک شناسه منحصر به فرد جهانی (UUID) ایجاد کنید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت Task باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    نوع نوع.SCHEDULED_STOP
    حالت حالت.باز
    مکان برنامه ریزی شده محل توقف.
    مدت زمان کار طول پیش بینی شده توقف بر حسب ثانیه.

  • فیلدهای اختیاری:

    • هیچ یک

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

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

تنظیم پنجره زمانی هدف

پنجره زمانی هدف، پنجره زمانی است که در طی آن کار باید تکمیل شود. به عنوان مثال، اگر یک پنجره زمان تحویل را به گیرندگان تحویل می‌دهید، می‌توانید از پنجره زمان هدف وظیفه برای گرفتن این پنجره زمانی و ایجاد هشدارها یا تجزیه و تحلیل عملکرد پس از سفر با استفاده از فیلد استفاده کنید.

پنجره زمان هدف شامل یک زمان شروع و یک زمان پایان است و می تواند برای هر نوع کار تنظیم شود. پنجره زمانی هدف بر رفتار مسیریابی تأثیری ندارد.

gRPC

مثال زیر نحوه استفاده از کتابخانه 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;
    }

باقی مانده

برای تنظیم یک پنجره زمان کار با استفاده از HTTP، با UpdateTask تماس بگیرید:

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

<id> یک شناسه منحصر به فرد برای کار است.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت Task باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    targetTimeWindow پنجره زمانی که در طی آن کار باید تکمیل شود. این تنظیم بر رفتار مسیریابی تأثیری ندارد

  • فیلدهای اختیاری:

    • هیچ یک

همه فیلدهای دیگر موجود در موجودیت برای به روز رسانی نادیده گرفته می شوند.

مثال دستور curl :

# 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

پیکربندی نمایان بودن ردیابی کار را تنظیم کنید

مشاهده داده ها در کتابخانه ردیابی حمل و نقل و داده های بازگردانده شده از تماس با GetTaskTrackingInfo را می توان بر اساس هر وظیفه با تنظیم TaskTrackingViewConfig بر روی کار کنترل کرد. برای اطلاعات بیشتر به وظایف خودروهای فعال مراجعه کنید. این می تواند هنگام ایجاد یا به روز رسانی کار انجام شود. نمونه زیر نمونه ای از به روز رسانی کار با این پیکربندی است:

gRPC

مثال زیر نحوه استفاده از کتابخانه 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;
}

باقی مانده

برای تنظیم پنجره پیکربندی نمای ردیابی کار با استفاده از HTTP، UpdateTask را تماس بگیرید:

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

<id> یک شناسه منحصر به فرد برای کار است.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت Task باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    taskTrackingViewConfig پیکربندی برای ردیابی کار که مشخص می کند کدام عناصر داده تحت چه شرایطی برای کاربران نهایی قابل مشاهده است.

  • فیلدهای اختیاری:

    • هیچ یک

همه فیلدهای دیگر موجود در موجودیت برای به روز رسانی نادیده گرفته می شوند.

مثال دستور curl :

# 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

وظایف را به یک وسیله نقلیه اختصاص دهید

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

برای تغییر یک محموله از یک وسیله نقلیه به وسیله نقلیه دیگر، کار اصلی را ببندید و سپس قبل از اختصاص دادن وسیله نقلیه جدید، آن را دوباره ایجاد کنید. اگر ترتیب کار را برای کاری که قبلاً به وسیله نقلیه دیگری اختصاص داده شده است به روز کنید، با خطا مواجه می شوید.

به روز رسانی سفارش کار

می توانید کارهای سفارش اختصاص داده شده به وسیله نقلیه را که از Driver SDK یا محیط سرور انجام می شود، به روز کنید. از هر دو روش برای اجتناب از شرایط مسابقه و حفظ یک منبع حقیقت استفاده نکنید.

هنگامی که سفارش کار را برای یک وسیله نقلیه به روز می کنید، موارد زیر را نیز انجام می دهد:

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

برای تغییر یک محموله از یک وسیله نقلیه به وسیله نقلیه دیگر، کار اصلی را ببندید و سپس قبل از اختصاص دادن وسیله نقلیه جدید، آن را دوباره ایجاد کنید. اگر ترتیب کار را برای کاری که قبلاً به وسیله نقلیه دیگری اختصاص داده شده است به روز کنید، با خطا مواجه می شوید.

می‌توانید در هر زمان سفارش کار را به‌روزرسانی کنید.

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای به روز رسانی سفارش کار برای وسیله نقلیه نشان می دهد:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
static final String TASK1_ID = "task-756390";
static final String TASK2_ID = "task-849263";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.NEW)))
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

باقی مانده

برای به روز رسانی سفارش کار برای یک وسیله نقلیه از محیط سرور، یک تماس HTTP REST با UpdateDeliveryVehicle برقرار کنید:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

<id> یک شناسه منحصر به فرد برای وسیله نقلیه تحویلی در ناوگان شما است که قصد دارید سفارش کار را برای آن به روز کنید. این شناسه ای است که هنگام ایجاد وسیله نقلیه مشخص کرده اید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت DeliveryVehicle باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    باقی مانده وسایل نقلیه سفر فهرستی از بخش‌های سفر برای وظایف به ترتیبی که باید اجرا شوند. اولین وظیفه در لیست ابتدا اجرا می شود.
    باقیمانده VehicleJourneySegments[i].stop توقف کار i در لیست.
    باقیمانده VehicleJourneySegments[i].stop.plannedLocation مکان برنامه ریزی شده برای توقف.
    باقیمانده VehicleJourneySegments[i].stop.tasks فهرستی از کارهایی که باید در این توقف خودرو انجام شوند.
    باقیمانده VehicleJourneySegments[i].stop.state ایالت.جدید

  • فیلدهای اختیاری:

    • هیچ یک

همه فیلدهای دیگر موجود در موجودیت برای به روز رسانی نادیده گرفته می شوند.

مثال دستور curl :

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

خودرو به سمت ایستگاه بعدی در حرکت است

هنگامی که وسیله نقلیه از یک ایستگاه خارج می شود یا ناوبری را شروع می کند، باید به موتور ناوگان اطلاع داده شود. می‌توانید Fleet Engine را از طریق Driver SDK یا از محیط سرور با استفاده از gRPC یا REST اطلاع دهید. از هر دو روش برای اجتناب از شرایط مسابقه و حفظ یک منبع حقیقت استفاده نکنید.

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای اطلاع دادن به Fleet Engine از مسیر حرکت یک وسیله نقلیه به ایستگاه بعدی نشان می دهد.

    static final String PROJECT_ID = "my-delivery-co-gcp-project";
    static final String VEHICLE_ID = "vehicle-8241890";

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

    // Vehicle settings
    DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
        // Next stop marked as ENROUTE
        .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 1st stop
           .setStop(VehicleStop.newBuilder()
               .setPlannedLocation(LocationInfo.newBuilder()
                   .setPoint(LatLng.newBuilder()
                       .setLatitude(37.7749)
                       .setLongitude(122.4194)))
               .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
               .setState(VehicleStop.State.ENROUTE)))
        // All other stops marked as NEW
        .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
           .setStop(VehicleStop.newBuilder()
               .setPlannedLocation(LocationInfo.newBuilder()
                   .setPoint(LatLng.newBuilder()
                       .setLatitude(37.3382)
                       .setLongitude(121.8863)))
               .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
               .setState(VehicleStop.State.NEW)))
        .build();

    // DeliveryVehicle request
    UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
      UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
          .setName(vehicleName)
          .setDeliveryVehicle(deliveryVehicle)
          .setUpdateMask(FieldMask.newBuilder().addPaths("remaining_vehicle_journey_segments"))
          .build();

    try {
      DeliveryVehicle updatedDeliveryVehicle =
          deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
    } catch (StatusRuntimeException e) {
      Status s = e.getStatus();
      switch (s.getCode()) {
         case NOT_FOUND:
           break;
         case PERMISSION_DENIED:
           break;
      }
      return;
    }

باقی مانده

برای اطلاع از Fleet Engine که یک وسیله نقلیه از محیط سرور به ایستگاه بعدی خود می‌رود، یک تماس HTTP REST با UpdateDeliveryVehicle برقرار کنید:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

<id> یک شناسه منحصر به فرد برای وسیله نقلیه تحویل در ناوگان شما است که قصد دارید سفارش کار را برای آن به روز کنید. این شناسه ای است که هنگام ایجاد وسیله نقلیه مشخص کرده اید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت DeliveryVehicle باشد:

  • فیلد مورد نیاز:

    رشته ارزش
    باقی مانده وسایل نقلیه سفر فهرست توقف‌های خودروهای باقی‌مانده با ایالت‌هایشان که به‌عنوان State.NEW علامت‌گذاری شده‌اند. اولین توقف در لیست باید دارای وضعیت آن با عنوان State.ENROUTE باشد.

  • فیلدهای اختیاری:

    • هیچ یک

همه فیلدهای دیگر موجود در نهاد برای اعلان نادیده گرفته می شوند.

مثال دستور curl :

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ENROUTE",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

به روز رسانی مکان خودرو

اگر از Driver SDK برای به‌روزرسانی مکان خودرو استفاده نمی‌کنید، می‌توانید با مکان خودرو مستقیماً با Fleet Engine تماس بگیرید. برای هر وسیله نقلیه فعال، Fleet Engine انتظار دارد حداقل یک بار در هر دقیقه و حداکثر یک بار در هر 5 ثانیه یک به روز رسانی مکان انجام شود.

gRPC

مثال زیر نحوه استفاده از کتابخانه Java gRPC برای به روز رسانی مکان خودرو در Fleet Engine را نشان می دهد:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
    .setLastLocation(DeliveryVehicleLocation.newBuilder()
        .setSupplementalLocation(LatLng.newBuilder()
            .setLatitude(37.3382)
            .setLongitude(121.8863))
        .setSupplementalLocationTime(now())
        .setSupplementalLocationSensor(DeliveryVehicleLocationSensor.CUSTOMER_SUPPLIED_LOCATION)
        .setSupplementalLocationAccuracy(DoubleValue.of(15.0)))  // Optional
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(myDeliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("last_location"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

باقی مانده

برای به‌روزرسانی مکان خودرو در Fleet Engine با استفاده از HTTP REST، با UpdateDeliveryVehicle تماس بگیرید:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location`

<id> یک شناسه منحصربه‌فرد برای وسیله نقلیه تحویلی در ناوگان شما است یا می‌خواهید مکان را به‌روزرسانی کنید. این شناسه ای است که هنگام ایجاد وسیله نقلیه مشخص کرده اید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت DeliveryVehicle باشد:

  • فیلد مورد نیاز:

    رشته ارزش
    lastLocation.supplementalLocation مکان وسیله نقلیه.
    lastLocation.supplementalLocationTime آخرین مهر زمانی شناخته شده خودرو در این مکان بود.
    lastLocation.supplementalLocationSensor باید با CUSTOMER_SUPPLIED_LOCATION پر شود.

  • فیلدهای اختیاری:

    رشته ارزش
    lastLocation.supplementalLocationAccuracy دقت مکان ارائه شده، بر حسب متر.

مثال دستور curl :

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "lastLocation": {
    "supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
    "supplementalLocationTime": "$(date -u --iso-8601=seconds)",
    "supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
    "supplementalLocationAccuracy": 15
  }
}
EOM

خودرو به یک ایستگاه می رسد

هنگام رسیدن وسیله نقلیه به ایستگاه باید به موتور ناوگان اطلاع داده شود. می‌توانید Fleet Engine را از طریق Driver SDK یا از محیط سرور با استفاده از gRPC یا REST اطلاع دهید. از هر دو روش برای اجتناب از شرایط مسابقه و حفظ یک منبع حقیقت استفاده نکنید.

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای اطلاع دادن به Fleet Engine از رسیدن یک وسیله نقلیه به توقف نشان می دهد:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // Marking the arrival at stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.7749)
                   .setLongitude(122.4194)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
           .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // 2nd stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW))) // Remaining stops must be NEW.
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // No need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

باقی مانده

برای اطلاع رسانی Fleet Engine در مورد ورود یک وسیله نقلیه به ایستگاه از یک محیط سرور، یک تماس HTTP REST با UpdateDeliveryVehicle برقرار کنید:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remainingVehicleJourneySegments`

<id> یک شناسه منحصر به فرد برای وسیله نقلیه تحویل در ناوگان شما است که قصد دارید سفارش کار را برای آن به روز کنید. این شناسه ای است که هنگام ایجاد وسیله نقلیه مشخص کرده اید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت DeliveryVehicle باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    باقی مانده وسایل نقلیه سفر ایستگاهی که به آن رسیده اید با وضعیت آن به عنوان State.ARRIVED تنظیم شده است، و به دنبال آن لیستی از توقفگاه های خودرو باقی مانده با حالت های آنها به عنوان State.NEW مشخص شده است.

  • فیلدهای اختیاری:

    • هیچ یک

همه فیلدهای دیگر موجود در موجودیت برای به روز رسانی نادیده گرفته می شوند.

مثال دستور curl :

# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "remainingVehicleJourneySegments": [
    {
      "stop": {
        "state": "ARRIVED",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

خودرو توقف کامل می کند

هنگامی که یک وسیله نقلیه توقف کامل می کند، باید به موتور ناوگان اطلاع داده شود. این باعث می شود که تمام وظایف مرتبط با توقف در حالت بسته تنظیم شوند. می‌توانید Fleet Engine را از طریق Driver SDK یا از محیط سرور با استفاده از gRPC یا REST اطلاع دهید. از هر دو روش برای اجتناب از شرایط مسابقه و حفظ یک منبع حقیقت استفاده نکنید.

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای اطلاع دادن به Fleet Engine در مورد توقف کامل خودرو نشان می دهد.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle deliveryVehicle = DeliveryVehicle.newBuilder()
    // This stop has been completed and is commented out to indicate it
    // should be removed from the list of vehicle journey segments.
    // .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()
    //    .setStop(VehicleStop.newBuilder()
    //        .setPlannedLocation(LocationInfo.newBuilder()
    //            .setPoint(LatLng.newBuilder()
    //                .setLatitude(37.7749)
    //                .setLongitude(122.4194)))
    //        .addTasks(TaskInfo.newBuilder().setTaskId(TASK1_ID))
    //        .setState(VehicleStop.State.ARRIVED)))
    // All other remaining stops marked as NEW.
    // The next stop could be marked as ENROUTE if the vehicle has begun
    // its journey to the next stop.
    .addRemainingVehicleJourneySegments(VehicleJourneySegment.newBuilder()  // Next stop
       .setStop(VehicleStop.newBuilder()
           .setPlannedLocation(LocationInfo.newBuilder()
               .setPoint(LatLng.newBuilder()
                   .setLatitude(37.3382)
                   .setLongitude(121.8863)))
           .addTasks(TaskInfo.newBuilder().setTaskId(TASK2_ID))
           .setState(VehicleStop.State.NEW)))
    .build();

// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
  UpdateDeliveryVehicleRequest.newBuilder()  // no need for the header
      .setName(vehicleName)
      .setDeliveryVehicle(deliveryVehicle)
      .setUpdateMask(FieldMask.newBuilder()
          .addPaths("remaining_vehicle_journey_segments"))
      .build();

try {
  DeliveryVehicle updatedDeliveryVehicle =
      deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

باقی مانده

برای اطلاع رسانی Fleet Engine در مورد تکمیل توقف از یک محیط سرور، یک تماس HTTP REST با UpdateDeliveryVehicle برقرار کنید:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=remaining_vehicle_journey_segments`

<id> یک شناسه منحصر به فرد برای وسیله نقلیه تحویل در ناوگان شما است که قصد دارید سفارش کار را برای آن به روز کنید. این شناسه ای است که هنگام ایجاد وسیله نقلیه مشخص کرده اید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت DeliveryVehicle باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    باقیمانده_بخش_سفر_خودرو توقفی که انجام داده اید دیگر نباید در لیست توقف های خودرو باقی مانده باشد.

  • فیلدهای اختیاری:

    • هیچ یک

همه فیلدهای دیگر موجود در موجودیت برای به روز رسانی نادیده گرفته می شوند.

مثال دستور curl :

    # Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
    # environment
    curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "remainingVehicleJourneySegments": [
        {
          "stop": {
            "state": "NEW",
            "plannedLocation": {
              "point": {
                "latitude": 37.3382,
                "longitude": 121.8863
              }
            },
            "tasks": [
              {
                "taskId": "${TASK2_ID}"
              }
            ]
          }
        }
      ]
    }
    EOM

یک کار را به روز کنید

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

gRPC

این نمونه ای از به روز رسانی یک کار از طریق gRPC است.

باقی مانده

این نمونه ای از به روز رسانی یک کار از طریق REST است.

یک کار را ببندید

برای بستن کاری که به یک وسیله نقلیه محول شده است، یا به Fleet Engine اطلاع دهید که وسیله نقلیه توقفی را که در آن کار انجام می‌شود کامل کرده است یا آن را از لیست توقف‌های خودرو حذف کنید. برای انجام این کار، می‌توانید فهرست توقف‌های خودروی باقی‌مانده را درست مانند زمان به‌روزرسانی سفارش کار برای یک وسیله نقلیه تنظیم کنید.

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

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

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)
  .setState(Task.State.CLOSED) // You can only directly CLOSE a
  .build();                    // task that is NOT assigned to a vehicle.

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
      .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;
}

باقی مانده

برای علامت گذاری یک کار به عنوان بسته از محیط سرور، یک تماس HTTP REST با UpdateTask برقرار کنید:

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

<id> یک شناسه منحصر به فرد برای کار است.

سرصفحه درخواست شما باید حاوی یک فیلد مجوز با مقدار حامل <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

شما باید یک موجودیت Task را در بدن درخواست بگنجانید:

  • فیلدهای مورد نیاز:

    رشته ارزش
    حالت ایالت.بسته

  • فیلدهای اختیاری:

    رشته ارزش
    نتیجه وظیفه نتیجه.موفق شد یا نتیجه.شکست خورد
    taskOutcomeTime زمانی که کار تکمیل شد.
    taskOutcomeLocation مکانی که کار در آن تکمیل شد. Fleet Engine این را به آخرین مکان وسیله نقلیه پیش‌فرض می‌کند، مگر اینکه ارائه‌دهنده آن را به‌طور دستی لغو کند.

همه فیلدهای دیگر موجود در موجودیت برای به روز رسانی نادیده گرفته می شوند.

مثال دستور curl :

    # 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=state,taskOutcome,taskOutcomeTime" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "state": "CLOSED",
      "taskOutcome": "SUCCEEDED",
      "taskOutcomeTime": "$(date -u --iso-8601=seconds)"
    }
    EOM

نتیجه کار و مکان نتیجه را تنظیم کنید

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

کارهایی که در حالت بسته هستند، می‌توانند نتیجه آن‌ها را با موفقیت یا FAILED تنظیم کنند. Fleet Engine فقط وظایف تحویل را با وضعیت SUCCEEDED شارژ می کند.

هنگام علامت گذاری نتیجه یک کار، Fleet Engine به طور خودکار مکان نتیجه کار را با آخرین مکان شناخته شده وسیله نقلیه پر می کند. شما می توانید این رفتار را نادیده بگیرید.

gRPC

هنگامی که نتیجه را تنظیم می کنید، این گزینه را دارید که مکان نتیجه کار را تنظیم کنید. تنظیم مکان باعث می شود Fleet Engine آن را روی پیش فرض آخرین مکان وسیله نقلیه تنظیم نکند. همچنین می‌توانید مکان نتیجه کار مجموعه Fleet Engine را در زمان دیگری بازنویسی کنید. Fleet Engine هرگز مکان نتیجه کار را که شما ارائه می کنید بازنویسی نمی کند. شما نمی توانید مکان نتیجه کار را برای کاری که مجموعه ای از نتیجه کار ندارد تعیین کنید. شما می توانید هر دو نتیجه کار و مکان نتیجه کار را در یک درخواست تنظیم کنید.

مثال زیر نشان می دهد که چگونه می توان از کتابخانه gRPC جاوا برای تنظیم یک نتیجه کار به SUCCEEDED و تنظیم مکانی که در آن کار تکمیل شد استفاده کرد:

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)
  .setTaskOutcome(TaskOutcome.SUCCEEDED)
  .setTaskOutcomeTime(now())
  .setTaskOutcomeLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
      .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;
}

باقی مانده

برای علامت گذاری یک کار به عنوان انجام شده از محیط سرور، یک تماس HTTP REST با UpdateTask برقرار کنید:

`PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<id>?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation`

<id> یک شناسه منحصر به فرد برای کار است.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید دارای یک موجودیت Task باشد:

  • فیلدهای مورد نیاز:

    رشته ارزش
    نتیجه وظیفه نتیجه.موفق شد یا نتیجه.شکست خورد

  • فیلدهای اختیاری:

    رشته ارزش
    taskOutcomeLocation مکانی که کار در آن تکمیل شد. اگر تنظیم نشده باشد، Fleet Engine این را به آخرین مکان وسیله نقلیه پیش‌فرض می‌کند.
    taskOutcomeTime مهر زمانی که کار تکمیل شد.

همه فیلدهای دیگر موجود در موجودیت برای به روز رسانی نادیده گرفته می شوند.

مثال دستور curl :

# 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=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskOutcome": "SUCCEEDED",
  "taskOutcomeTime": "$(date -u --iso-8601=seconds)",
  "taskOutcomeLocation": {
    "point": {
      "latitude": -6.195139,
      "longitude": 106.820826
    }
  }
}
EOM

تغییر مسیر یک محموله

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

از وسایل نقلیه تغذیه و تحویل استفاده کنید

اگر از وسایل نقلیه تغذیه کننده برای انتقال محموله ها به وسایل نقلیه تحویل در طول روز استفاده می کنید، انتقال محموله ها را به عنوان یک کار توقف برنامه ریزی شده برای وسیله نقلیه تحویل مدل کنید. برای اطمینان از ردیابی دقیق موقعیت مکانی، تنها پس از بارگیری در خودروی تحویل، وظیفه تحویل محموله را برای یک محموله منتقل شده تعیین کنید. برای اطلاعات بیشتر، توقف برنامه ریزی شده را ببینید.

وضعیت حمل و نقل و سایر اطلاعات متا را ذخیره کنید

هنگامی که یک وظیفه حمل و نقل تکمیل می شود، وضعیت کار و نتیجه در کار ثبت می شود. با این حال، ممکن است بخواهید سایر اطلاعات متا مخصوص حمل و نقل را به روز کنید. برای ذخیره سایر اطلاعات متا که می توانید خارج از سرویس Fleet Engine به آنها مراجعه کنید، از tracking_id مرتبط با وظیفه به عنوان کلید در یک جدول خارجی استفاده کنید.

برای اطلاعات بیشتر، Life of a task را ببینید.

یک وسیله نقلیه را جستجو کنید

می‌توانید وسیله نقلیه را از Driver SDK یا از محیط سرور با استفاده از gRPC یا REST جستجو کنید.

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای جستجوی وسیله نقلیه نشان می دهد:

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Vehicle request
String name = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
GetDeliveryVehicleRequest getVehicleRequest = GetDeliveryVehicleRequest.newBuilder()  // No need for the header
    .setName(name)
    .build();

try {
  DeliveryVehicle vehicle = deliveryService.getDeliveryVehicle(getVehicleRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

باقی مانده

برای جستجوی وسیله نقلیه از محیط سرور، یک تماس HTTP REST با GetVehicle برقرار کنید:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<vehicleId>`

<id> یک شناسه منحصر به فرد برای کار است.

<vehicleId> شناسه وسیله نقلیه برای جستجو است.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید خالی باشد.

اگر جستجو موفقیت آمیز باشد، بدنه پاسخ حاوی یک موجودیت وسیله نقلیه است.

مثال دستور curl :

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}"

یک کار را جستجو کنید

می توانید با استفاده از gRPC یا REST یک کار را از محیط سرور جستجو کنید. Driver SDK از جستجوی یک کار پشتیبانی نمی کند.

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای جستجوی یک کار نشان می دهد:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task request
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
GetTaskRequest getTaskRequest = GetTaskRequest.newBuilder()  // No need for the header
    .setName(taskName)
    .build();

try {
  Task task = deliveryService.getTask(getTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

باقی مانده

برای جستجوی یک کار از محیط سرور، یک تماس HTTP REST با GetTask برقرار کنید:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks/<taskId>`

<id> یک شناسه منحصر به فرد برای کار است.

<taskId> شناسه کاری است که باید جستجو کنید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

بدنه درخواست باید خالی باشد.

اگر جستجو موفقیت آمیز باشد، بدنه پاسخ حاوی یک موجودیت وظیفه است.

مثال دستور curl :

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -H "Authorization: Bearer ${JWT}" \
      "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}"

اطلاعات وظیفه حمل و نقل را با شناسه ردیابی آن جستجو کنید

شما می توانید اطلاعات وظایف حمل و نقل را به روش های زیر جستجو کنید که هر کدام هدف جداگانه ای دارند:

  • توسط شناسه وظیفه : توسط کاربرانی مانند اپراتورهای ناوگان که به نمای کامل داده های وظیفه دسترسی دارند استفاده می شود.
  • توسط یک شناسه ردیابی : توسط نرم افزار مشتری شما برای ارائه اطلاعات محدود به کاربر نهایی استفاده می شود، مانند زمانی که یک بسته در خانه او انتظار می رود.

در این بخش جستجوی اطلاعات کار با شناسه ردیابی بحث می شود. اگر می‌خواهید یک کار را با شناسه کار جستجو کنید، به جستجوی یک کار بروید.

برای جستجوی اطلاعات با شناسه ردیابی، می توانید از یکی از موارد زیر استفاده کنید:

الزامات جستجو

  • اطلاعات حمل و نقل ارائه شده توسط شناسه ردیابی مطابق با قوانین دید بیان شده در کنترل دید مکان های ردیابی شده است .

  • از Fleet Engine برای جستجوی اطلاعات محموله با شناسه ردیابی استفاده کنید. Driver SDK از جستجوی اطلاعات با شناسه ردیابی پشتیبانی نمی کند. برای انجام این کار با Fleet Engine، از محیط سرور یا مرورگر استفاده می کنید.

  • از باریک ترین نشانه ممکن برای محدود کردن خطرات امنیتی استفاده کنید. برای مثال، اگر از یک توکن مصرف‌کننده تحویل استفاده می‌کنید، هر فراخوانی از Fleet Engine Deliveries API فقط اطلاعات مربوط به آن کاربر نهایی، مانند فرستنده یا گیرنده یک محموله را برمی‌گرداند. تمام اطلاعات دیگر در پاسخ ها ویرایش شده است. برای اطلاعات بیشتر در مورد نشانه‌ها، به ایجاد یک نشانه وب JSON (JWT) برای مجوز مراجعه کنید.

جستجو با جاوا با استفاده از gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای جستجوی اطلاعات مربوط به یک وظیفه حمل و نقل با شناسه ردیابی آن نشان می دهد.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
GetTaskTrackingInfoRequest getTaskTrackingInfoRequest = GetTaskTrackingInfoRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setTrackingId(TRACKING_ID)
    .build();

try {
  TaskTrackingInfo taskTrackingInfo = deliveryService.getTaskTrackingInfo(getTaskTrackingInfoRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

جستجو با استفاده از HTTP

برای جستجوی یک کار حمل و نقل از یک مرورگر، یک تماس HTTP REST با GetTaskTrackingInfo برقرار کنید:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/taskTrackingInfo/<tracking_id>`

<tracking_id> شناسه ردیابی مرتبط با کار است.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

اگر جستجو موفقیت آمیز باشد، بدنه پاسخ حاوی یک موجودیت taskTrackingInfo است.

مثال دستور curl :

# Set JWT, PROJECT_ID, and TRACKING_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/taskTrackingInfo/${TRACKING_ID}"

لیست وظایف

می توانید وظایف را از یک محیط سرور یا مرورگر فهرست کنید. Driver SDK از وظایف فهرست بندی پشتیبانی نمی کند.

لیست وظایف دسترسی گسترده به وظایف را درخواست می کند. وظایف لیست فقط برای کاربران قابل اعتماد در نظر گرفته شده است. هنگام درخواست لیست وظایف، از Delivery Fleet Reader یا Delivery Super User Authentication Tokens استفاده کنید.

وظایف فهرست شده دارای فیلدهای زیر هستند:

  • VehicleStop.planned_location
  • VehicleStop.state
  • VehicleStop.TaskInfo.taskId

وظایف فهرست شده را می توان با اکثر ویژگی های وظیفه فیلتر کرد. برای نحو درخواست فیلتر، به AIP-160 مراجعه کنید. لیست زیر ویژگی های وظیفه معتبری را نشان می دهد که می توانید برای فیلتر کردن از آنها استفاده کنید:

  • ویژگی های
  • تحویل_خودرو_شناسه
  • حالت
  • مکان_plannated
  • task_duration
  • وظیفه_نتیجه
  • task_outcome_location
  • task_outcome_location_source
  • task_outcome_time
  • tracking_id
  • نوع

از قالب‌های فیلد زیر بر اساس پیشنهادهای بهبود API Google استفاده کنید:

نوع فیلد قالب مثال
مهر زمان RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
مدت زمان تعداد ثانیه به دنبال آن s task_duration = 120s
Enum رشته state = CLOSED AND type = PICKUP
محل point.latitude و point.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

برای لیست کامل اپراتورهای پرس و جو فیلتر، به AIP-160 مراجعه کنید.

اگر هیچ درخواست فیلتری مشخص نشده باشد، همه وظایف فهرست می شوند.

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

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

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای فهرست کردن وظایف یک deliveryVehicleId و یک ویژگی وظیفه نشان می دهد. یک پاسخ موفق هنوز هم می تواند خالی باشد. پاسخ خالی نشان می دهد که هیچ وظیفه ای با deliveryVehicleId ارائه شده مرتبط نیست.

static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String TRACKING_ID = "TID-7449w087464x5";

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListTasksRequest listTasksRequest = ListTasksRequest.newBuilder()  // No need for the header
    .setParent(parent)
    .setFilter("delivery_vehicle_id = 123 AND attributes.foo = true")
    .build();

try {
  ListTasksResponse listTasksResponse = deliveryService.listTasks(listTasksRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;

     case PERMISSION_DENIED:
       break;
  }
  return;
}

باقی مانده

برای فهرست کردن وظایف از مرورگر، یک تماس HTTP REST با ListTasks برقرار کنید:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/tasks`

برای اعمال یک فیلتر برای کارهای فهرست شده، یک پارامتر URL "فیلتر" با یک جستجوی فیلتر از URL به عنوان مقدار آن اضافه کنید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

اگر جستجو موفقیت آمیز باشد، بدنه پاسخ حاوی داده هایی با ساختار زیر است:

    // JSON representation
    {
      "tasks": [
        {
          object (Task)
        }
      ],
      "nextPageToken": string,
      "totalSize": integer
    }

یک پاسخ موفق هنوز هم می تواند خالی باشد. یک پاسخ خالی نشان می دهد که هیچ کاری مطابق با معیارهای فیلتر مشخص شده یافت نشد.

مثال دستور curl :

    # Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
    curl -H "Authorization: Bearer ${JWT}" \
      "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks?filter=state%20%3D%20OPEN%20AND%20delivery_vehicle_id%20%3D%20${VEHICLE_ID}"

لیست وسایل نقلیه تحویل

می توانید وسایل نقلیه تحویل را از یک محیط سرور یا مرورگر فهرست کنید. Driver SDK از لیست وسایل نقلیه تحویل پشتیبانی نمی کند.

فهرست وسایل نقلیه تحویل درخواست دسترسی گسترده به وسایل نقلیه تحویل است و فقط برای کاربران قابل اعتماد در نظر گرفته شده است. هنگام درخواست خودروهای تحویل لیست، از Reader Fleet Reader یا Delivery Super User Authentication Tokens استفاده کنید.

خودروهای تحویل فهرست شده به دلیل تأثیر آنها بر اندازه پاسخ، فیلدهای زیر را تغییر داده اند:

  • CurrentRouteSegment
  • Remaining VehicleJourneySegments

شما می توانید لیست وسایل نقلیه تحویل را با attributes آنها فیلتر کنید. به عنوان مثال، برای پرس و جو از یک ویژگی با کلید my_key و مقدار my_value ، از attributes.my_key = my_value استفاده کنید. برای پرس و جو برای چندین صفت، با استفاده از عملگرهای AND و OR منطقی مانند attributes.key1 = value1 AND attributes.key2 = value2 به پرس و جوها بپیوندید. برای توضیح کامل نحو پرس و جو فیلتر، به AIP-160 مراجعه کنید.

با استفاده از پارامتر درخواست viewport می توانید وسایل نقلیه تحویل لیست شده را بر اساس مکان فیلتر کنید. پارامتر درخواست viewport نماها را با استفاده از دو مختصات مرزی تعریف می کند: یک جفت مختصات طول و عرض جغرافیایی high (شمال شرقی) و low (جنوب غربی). درخواست ها در صورتی رد می شوند که دارای عرض جغرافیایی بالا باشند که از نظر جغرافیایی کمتر از عرض جغرافیایی پایین باشد.

لیست خودروهای تحویلی به طور پیش فرض با استفاده از اندازه صفحه معقول صفحه بندی می شوند. اگر اندازه صفحه را مشخص کنید، درخواست فقط تعداد وسایل نقلیه مشخص شده توسط محدودیت یا کمتر را برمی‌گرداند. اگر اندازه صفحه درخواستی از حداکثر مقدار داخلی بیشتر شود، از حداکثر داخلی استفاده می شود. اندازه صفحه پیش فرض و حداکثر هر دو 100 وسیله نقلیه است.

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

gRPC

مثال زیر نحوه استفاده از کتابخانه gRPC جاوا را برای فهرست کردن وسایل نقلیه تحویل در یک منطقه خاص با یک ویژگی خاص نشان می دهد. یک پاسخ موفق هنوز هم می تواند خالی باشد. وقتی این اتفاق می افتد، به این معنی است که هیچ وسیله نقلیه ای با ویژگی مشخص شده در حال حاضر در نمای مشخص شده نیست.

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Tasks request
String parent = "providers/" + PROJECT_ID;
ListDeliveryVehiclesRequest listDeliveryVehiclesRequest =
  ListDeliveryVehiclesRequest.newBuilder()  // No need for the header
      .setParent(parent)
      .setViewport(
            Viewport.newBuilder()
              .setHigh(LatLng.newBuilder()
                  .setLatitude(37.45)
                  .setLongitude(-122.06)
                  .build())
              .setLow(LatLng.newBuilder()
                  .setLatitude(37.41)
                  .setLongitude(-122.11)
                  .build())
      .setFilter("attributes.my_key = my_value")
      .build();

try {
  ListDeliveryVehiclesResponse listDeliveryVehiclesResponse =
      deliveryService.listDeliveryVehicles(listDeliveryVehiclesRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
      case NOT_FOUND:
          break;

      case PERMISSION_DENIED:
          break;
  }
  return;
}

باقی مانده

برای فهرست کردن وظایف از یک مرورگر، یک تماس HTTP REST با ListDeliveryVehicles برقرار کنید:

`GET https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles`

برای اعمال یک فیلتر برای کارهای فهرست شده، یک پارامتر URL "فیلتر" با یک جستجوی فیلتر از URL به عنوان مقدار آن اضافه کنید.

سرصفحه درخواست باید حاوی یک فیلد Authorization با مقدار Bearer <token> باشد، که در آن <token> نشانه ای است که توسط کارخانه توکن Fleet Engine صادر می شود .

اگر جستجو موفقیت آمیز باشد، بدنه پاسخ حاوی داده هایی با ساختار زیر است:

// JSON representation
{
  "deliveryVehicles": [
    {
      object (DeliveryVehicle)
    }
  ],
  "nextPageToken": string,
  "totalSize": integer
}

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

مثال دستور curl :

# Set JWT, PROJECT_ID, and VEHICLE_ID in the local environment
curl -H "Authorization: Bearer ${JWT}" \
  "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles?filter=attributes.my_key%20%3D%20my_value%20&viewport.high.latitude=37.45&viewport.high.longitude=-122.06&viewport.low.latitude=37.41&viewport.low.longitude=-122.11"

پیگیری حمل و نقل

شما دو گزینه برای استفاده از Fleet Engine Deliveries API برای فعال کردن ردیابی حمل و نقل دارید:

  • ترجیحا: از کتابخانه جاوا اسکریپت ردیابی حمل و نقل استفاده کنید. این کتابخانه به شما امکان می دهد مکان وسایل نقلیه و مکان های مورد علاقه ردیابی شده در Fleet Engine را تجسم کنید. این شامل یک جزء نقشه جاوا اسکریپت است که جایگزینی برای یک شی استاندارد google.maps.Map و اجزای داده برای اتصال با Fleet Engine است. این مؤلفه به شما امکان می دهد یک تجربه ردیابی محموله قابل تنظیم و متحرک را از وب یا برنامه تلفن همراه خود ارائه دهید.

  • ردیابی محموله خود را در بالای Fleet Engine Deliveries API اجرا کنید.

نکته کلیدی این است که وظایف حمل و نقل را با ردیابی شناسه جستجو کنید .

اگر از یک نقش مصرف‌کننده تحویل استفاده می‌کنید، هر فراخوانی از Fleet Engine Deliveries API فقط اطلاعات مربوط به یک فرستنده یا گیرنده را برمی‌گرداند. تمام اطلاعات دیگر در پاسخ ها ویرایش شده است. شما مسئول احراز هویت کاربران نهایی هستید. علاوه بر این، اطلاعات مکان بر اساس کاری که قبلا انجام شده است فیلتر می شود. در طول یک کار در دسترس نبودن، هیچ اطلاعات مکانی با کاربر نهایی به اشتراک گذاشته نمی شود.

ورود به سیستم

می‌توانید Fleet Engine را طوری تنظیم کنید که گزارش‌های RPC را به Cloud Logging ارسال کند. برای اطلاعات بیشتر، ورود به سیستم را ببینید.

نقش ها و نشانه های مجوز

همانطور که در مدیریت چرخه عمر خودرو و کار و یادداشت‌های مجوز برای موارد استفاده فردی توضیح داده شده است، برقراری تماس با Fleet Engine نیاز به احراز هویت با نشانه‌های وب JSON دارد که با استفاده از اعتبار حساب سرویس امضا شده‌اند. حساب‌های سرویس مورد استفاده برای صدور آن نشانه‌ها ممکن است یک یا چند نقش داشته باشند که هر نقش مجموعه‌ای از مجوزها را اعطا می‌کند.

برای اطلاعات بیشتر، احراز هویت و مجوز را ببینید.

عیب یابی مشکلات رایج

در صورت بروز هرگونه مشکل، بخش‌های زیر را برای راهنمایی بررسی کنید.

تاب آوری

Fleet Engine منبع حقیقت در نظر گرفته نمی شود. شما مسئول بازگرداندن وضعیت سیستم خود در صورت لزوم بدون اتکا به Fleet Engine هستید.

وضعیت از دست رفته در Fleet Engine

هنگام کار با Fleet Engine، کلاینت ها را پیاده سازی کنید تا در صورت بروز نقص، سیستم خود را درمان کند. به عنوان مثال، هنگامی که Fleet Engine سعی می کند یک وسیله نقلیه را به روز کند، ممکن است با خطایی پاسخ دهد که نشان می دهد خودرو وجود ندارد. سپس مشتری باید وسیله نقلیه را در حالت جدید بازسازی کند. اگرچه این مشکل به ندرت رخ می دهد، مطمئن شوید که سیستم شما به اندازه کافی انعطاف پذیر است تا بتواند آن را مدیریت کند.

در سناریوی بسیار بعید از شکست فاجعه بار Fleet Engine، ممکن است نیاز باشد که بیشتر یا همه وسایل نقلیه و وظایف را بازسازی کنید. اگر نرخ ایجاد خیلی زیاد شود، برخی از درخواست‌ها ممکن است دوباره به دلیل مشکلات سهمیه شکست بخورند، زیرا بررسی‌های سهمیه برای جلوگیری از حملات انکار سرویس (DOS) انجام می‌شود. در این مورد، با استفاده از یک استراتژی عقب‌نشینی برای تلاش‌های مجدد، نرخ تفریح ​​را کاهش دهید.

وضعیت از دست رفته در برنامه درایور

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

سوالات متداول

اگر یک راننده برای یک کار از کار افتاده توقف کند چه؟

در این حالت، ابتدا ترتیب کارها را به روز کنید و سپس به صورت عادی ادامه دهید و ورود به توقف، اتمام کار و سایر جزئیات را علامت بزنید. اگر این کار را نکنید، سیستم ممکن است ناسازگار شود، ETAها ممکن است نادرست شوند، و ممکن است خطاهای غیرمنتظره گزارش شوند.