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

توجه: شما می توانید حداکثر 500 کار و 300 بخش باقی مانده از سفر وسیله نقلیه را به اشیاء DeliveryVehicle اختصاص دهید.

وظایف

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

  • برای تحویل و تحویل، وظایف حمل و نقل را تعیین کنید.
  • برای مواقعی که درایورها در دسترس نیستند، مانند وقفه های ضروری، وظایف 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 تماس بگیرید تا وسیله نقلیه را بازسازی کنید. اگر تماس خودرویی را برگرداند ، همچنان برای به‌روزرسانی در دسترس است.

ویژگی های وسیله نقلیه

موجودیت 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. مهر زمانی رویداد را مشخص کنید.

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

مانند وسایل نقلیه، 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 را نشان می دهد.

یکپارچه سازی نمودار 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

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

باقی مانده

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

بدنه درخواست باید حاوی یک نهاد 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

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

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

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

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

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

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

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

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

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

gRPC

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

بدنه درخواست باید حاوی یک موجودیت 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.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

وسیله نقلیه در ایستگاه بعدی ثبت نام می کند

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

gRPC

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

    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;
    }

باقی مانده

برای اطلاع موتور ناوگان مبنی بر اینکه یک وسیله نقلیه در توقف بعدی خود از یک محیط سرور ثبت نام می کند ، یک تماس استراحت HTTP را برای UpdateDeliveryVehicle انجام دهید:

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

بدنه درخواست باید حاوی یک موجودیت 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

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

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

gRPC

مثال زیر نحوه استفاده از کتابخانه Java GRPC را برای به روزرسانی موقعیت وسیله نقلیه در موتور ناوگان نشان می دهد:

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;
}

باقی مانده

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

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

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

    رشته ارزش
    LastLocation.SupplementAllocation محل وسیله نقلیه
    LastLocation.SupplementAllocationTime آخرین زمانبندی شناخته شده وسیله نقلیه در این مکان بود.
    LastLocation.SupplementAllocationEnsor باید با 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

وسیله نقلیه در توقف می رسد

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

gRPC

مثال زیر نحوه استفاده از کتابخانه Java GRPC را برای اطلاع موتور ناوگان نشان می دهد که یک وسیله نقلیه در یک توقف وارد شده است:

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;
}

باقی مانده

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

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

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

    رشته ارزش
    باقیمانده توقفی که شما با ایالت خود به عنوان ایالت به دست آورده اید. و به دنبال آن لیستی از توقف های باقی مانده وسایل نقلیه با ایالت های خود که به عنوان 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

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

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

gRPC

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

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;
}

باقی مانده

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

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

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

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

  • زمینه های اختیاری:

    • هیچ یک

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

دستور 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 است.

باقی مانده

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

بستن یک کار

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

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

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

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 برای UpdateTask برقرار کنید:

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

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

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

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

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

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

  • زمینه های اختیاری:

    رشته ارزش
    نتیجه کار نتیجه. بیش از حد یا نتیجه.
    پیش بینی زمان اتمام کار
    تدوین کار مکانی که کار به پایان رسید. موتور ناوگان این مورد را به آخرین مکان خودرو پیش فرض می کند مگر اینکه به صورت دستی توسط ارائه دهنده بیش از حد باشد.

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

دستور 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

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

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

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

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

gRPC

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

مثال زیر نحوه استفاده از کتابخانه Java 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)
  .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 را برای UpdateTask برقرار کنید:

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

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

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

    رشته ارزش
    نتیجه کار نتیجه. بیش از حد یا نتیجه.

  • زمینه های اختیاری:

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

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

دستور 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

یک محموله را دوباره انجام دهید

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

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

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

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

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

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

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

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

gRPC

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

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

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

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

دستور 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 یا استراحت می توانید یک کار را از یک محیط سرور جستجو کنید. درایور SDK از جستجوی یک کار پشتیبانی نمی کند.

gRPC

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

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

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

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

دستور 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}"

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

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

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

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

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

مورد نیاز جستجو

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

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

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

جستجوی با جاوا با استفاده از GRPC

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

اگر جستجوی موفقیت آمیز باشد ، بدنه پاسخ حاوی یک موجود 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}"

لیست وظایف

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

لیست وظایف درخواست دسترسی گسترده به وظایف را دارد. لیست وظایف فقط برای کاربران قابل اعتماد در نظر گرفته شده است. هنگام تهیه درخواست های لیست لیست ، از Neader Fleet Reader یا ارائه نشانه های تأیید اعتبار کاربر فوق العاده استفاده کنید.

وظایف ذکر شده قسمتهای زیر را دوباره تنظیم کرده اند:

  • Vehiclestop.Plonded_Location
  • Vehiclestop.State
  • Vehiclestop.taskinfo.taskid

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

  • ویژگی های
  • تحویل_ائیکل_ید
  • حالت
  • برنامه ریزی_ برنامه ریزی شده
  • کار_ کار
  • task_outcome
  • 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 مراجعه کنید.

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

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

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

gRPC

مثال زیر نحوه استفاده از کتابخانه Java GRPC را برای لیست وظایف مربوط به یک 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 را به ListTasks انجام دهید:

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

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

    // 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}"

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

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

لیست وسایل نقلیه تحویل درخواست دسترسی گسترده به وسایل نقلیه تحویل را دارد و فقط برای کاربران قابل اعتماد در نظر گرفته شده است. هنگام تهیه درخواست وسایل نقلیه تحویل لیست ، از Neader Fleet Reader یا ارائه نشانه های تأیید اعتبار فوق العاده کاربر استفاده کنید.

وسایل نقلیه تحویل ذکر شده به دلیل تأثیر آنها در اندازه پاسخ ، زمینه های زیر را دوباره رد می کنند:

  • بخش فعلی
  • باقیمانده

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

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

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

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

gRPC

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

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

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

هدر درخواست باید دارای مجوز میدانی با ارزش حامل <Token> باشد ، جایی که <Token> نشانه ای است که توسط یک کارخانه توکن موتور ناوگان صادر می شود .

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

// 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"

ردیابی ناوگان

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

  • ترجیحی: از کتابخانه ردیابی ناوگان JavaScript استفاده کنید. این کتابخانه به شما امکان می دهد مکان وسایل نقلیه و مکان های مورد علاقه ردیابی شده در موتور ناوگان را تجسم کنید. این ماده حاوی یک مؤلفه نقشه JavaScript است که جایگزینی قطره ای برای یک شیء استاندارد Google.maps.map و اجزای داده برای اتصال با موتور ناوگان است. این مؤلفه به شما امکان می دهد یک تجربه ردیابی ناوگان متحرک قابل تنظیم و قابل تنظیم را از طریق وب یا برنامه تلفن همراه خود ارائه دهید.

  • ردیابی ناوگان خود را در بالای API تحویل موتور ناوگان اجرا کنید.

نکته اصلی این است که با ردیابی شناسه کارهای ناوگان را جستجو کنید .

ورود به سیستم

می توانید موتور ناوگان را برای ارسال سیاهههای RPC به ورود به ابر تنظیم کنید. برای اطلاعات بیشتر ، به ورود به سیستم مراجعه کنید.

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

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

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

عیب یابی موضوعات مشترک

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

قابلیت مقاومت

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

حالت از دست رفته در موتور ناوگان

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

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

وضعیت گمشده در برنامه درایور

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

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

اگر یک راننده برای یک کار خارج شود ، چه اتفاقی می افتد؟

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