بدء استخدام Fleet Engine لتتبّع الشحن

صمِّم أنشطة أسطولك للمرحلة الأولى والأخيرة من عمليات التسليم واجهة برمجة تطبيقات Fleet Engine Deliveries API. يمكنك استخدام واجهة برمجة التطبيقات هذه باستخدام "حزمة تطوير البرامج (SDK) لبرنامج التشغيل" لنظام التشغيل Android. وiOS، أو مباشرةً من خلال استخدام اتصالات HTTP REST أو gRPC.

الإعداد الأولي

يمكنك ضبط واجهة برمجة التطبيقات Fleet Engine Deliveries API في Google Cloud Console.

  • لمزيد من المعلومات حول الخطوات التي يجب اتخاذها داخل وحدة التحكم وكيفية إنشاء رمز JSON المميّز للويب للتفويض، يُرجى مراجعة المصادقة والتفويض.

  • للحصول على تفاصيل حول استخدام وحدة التحكم، راجع مستندات Google Cloud Console

التحقق من صحة الإعداد

بعد إنشاء حسابات الخدمة، تأكَّد من اكتمال عملية الإعداد. ويمكنك إنشاء مركبة توصيل. جارٍ التحقّق من صحة الإعداد في الحال أنك قد عالجت مشاكل التفويض الشائعة التي يمكن أن تنشأ عندما لإعداد مشروعك. هناك طريقتان للتحقق من الإعداد:

مكتبات العملاء

للحصول على تجربة مطوِّر أفضل مقارنةً بـ gRPC أو REST، استخدِم مكتبات العملاء في العديد من لغات البرمجة الشائعة. بالنسبة تعليمات حول كيفية الحصول على مكتبات العملاء لتطبيق الخادم، راجع مكتبات العميل:

تفترض أمثلة Java في هذه الوثائق أنك على دراية بـ gRPC.

هياكل البيانات

تستخدم واجهة برمجة التطبيقات Fleet Engine Deliveries API بنيتَي بيانات لوضع نماذج للاستلام والتسليم الشحنات:

  • مركبة التسليم المُستخدَمة لنقل الشحنة
  • مهام استلام الشحنة والتسليم.

يمكنك أيضًا استخدام المهام لوضع نماذج للفواصل بين السائق ومحطات التوقف المجدولة. على مدار اليوم.

مركبات توصيل الطلبات

تنقل مركبات التسليم الشحنات من المستودع إلى موقع التسليم، ومن موقع الاستلام إلى المستودع. في بعض الحالات، قد يقومون أيضًا نقل الشحنة مباشرة من موقع الاستلام إلى موقع التسليم.

استخدِم حزمة تطوير البرامج (SDK) لبرنامج التشغيل لإنشاء عنصر DeliveryVehicle في Fleet Engine. وإرسال تحديثات الموقع لتتبع الشحن والأسطول.

المهام

بالنسبة إلى الإجراءات التي تتخذها المركبة خلال اليوم، يمكنك تعيين المهام وفقًا نوع الإجراء:

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

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

لإنشاء مهام في Fleet Engine، استخدِم ميزة "إدارة المهام" في حزمة تطوير البرامج (SDK) لبرنامج التشغيل.

مهام الشحن

إنشاء مهام شحن لكل من استلام وتسليم الشحنة تضمين المعلومات التالية:

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

لمزيد من المعلومات، يُرجى الاطّلاع على المواضيع التالية:

Android

iOS

مهام عدم التوفّر

تغطي مهام عدم التوفّر الفترات الزمنية التي لا تتوفّر فيها المركبة. خدمات الاستلام أو التسليم، مثل الاستراحات لإعادة شحن المركبة أو السائق استراحات الراحة.

أنشئ مهمة عدم التوفّر باستخدام المعلومات التالية:

  • تمثّل هذه السمة مدة الفاصل الإعلاني.
  • يمكنك اختيار موقع الفاصل الإعلاني. ليس عليك تقديم لموقع محدد، ولكن إجراء ذلك يوفر فترات و.م.و. على مدار اليوم.

لمزيد من المعلومات، يُرجى الاطّلاع على المواضيع التالية:

Android

iOS

مهام المحطات المجدوَلة

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

لمزيد من المعلومات، يُرجى الاطّلاع على المواضيع التالية:

Android

iOS

إرشادات معرّف المهمة

عند إنشاء معرّفات المهام، اتّبِع إرشادات المحتوى والتنسيق التالية:

  • إنشاء معرّفات مهام فريدة
  • لا تكشف عن أي معلومات لتحديد الهوية الشخصية (PII) أو ومحو البيانات النصية.
  • استخدِم سلاسل Unicode صالحة.
  • استخدِم 64 حرفًا أو أقل.
  • لا تُدرِج أيًا من أحرف ASCII التالية: "/", ":", "\" أو "?" أو "#".
  • يجب الضبط وفقًا لنموذج تسوية Unicode C.

فيما يلي بعض الأمثلة على معرفات المهام الجيدة:

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

يعرض الجدول التالي أمثلة لمعرّفات المهام غير المتوافقة:

معرّفات المهام غير المتوافقة السبب
8/31/2019-20:48-46.70746,-130.10807,-85.17909,61.33680 يخالف هذا المحتوى معلومات تحديد الهوية الشخصية ومتطلبات الأحرف: الفواصل والنقاط والنقطتين والشرطات المائلة.
JohnDoe-577b484da26f-Cupertino-SantaCruz تنتهك متطلبات معلومات تحديد الهوية الشخصية.
4R0oXLToF"112 Summer Dr. East Hartford, CT06118"577b484da26f8a يخالف معلومات تحديد الهوية الشخصية ومتطلبات الأحرف: المسافات البيضاء والفواصل وعلامات الاقتباس. يتجاوز 64 حرفًا.

مزيد من الموارد

للاطّلاع على الحقول المحدّدة في كل بيانات البنية، يمكنك الاطّلاع على المستندات المرجعية لواجهة برمجة التطبيقات الخاصة بالموقع الإلكتروني DeliveryVehicle (gRPC، REST) وTask (gRPC، REST).

عمر مركبة

يمثّل العنصر DeliveryVehicle مركبة توصيل من الميل الأول أو الأخير. يمكنك إنشاء كائن DeliveryVehicle باستخدام:

  • رقم تعريف المشروع على Google Cloud الذي يحتوي على حساب الخدمة المستخدمة لاستدعاء واجهات برمجة تطبيقات Fleet Engine.
  • رقم تعريف مركبة يملكه العميل

استخدِم أرقام تعريف مركبات فريدة لكل مركبة. عدم إعادة استخدام رقم تعريف مركبة ما لم تكن هناك مهام نشطة للمركبة الأصلية.

يحذف Fleet Engine تلقائيًا DeliveryVehicle عنصرًا لم تم تحديثها باستخدام UpdateDeliveryVehicle بعد سبعة أيام. الموصى بها لإبقاء المركبة متاحة في Fleet Engine في تحديث موقعها على فترات منتظمة. تعديلات على معظم الحقول الأخرى في DeliveryVehicle الكيان الجديد أيضًا، بشرط أن تكون قيمة الحقل الجديد مختلفة عن القائمة الحالية.

لمعرفة ما إذا كانت هناك مركبة متوفرة أم لا:

  1. أريد الاتصال بالرقم UpdateDeliveryVehicle.
  2. في حال ظهور خطأ NOT_FOUND، يُرجى الاتصال بالرقم CreateDeliveryVehicle لإعادة ابتكار المركبة. إذا أرجعت المكالمة مركبة، ستظل متاحة للتحديث.

أنواع المركبات

يحتوي الكيان VehicleType على حقل اختياري من VehicleType، ويحتوي على تعداد Category يمكنك تحديده على أنّه AUTO أو TWO_WHEELER أو BICYCLE أو PEDESTRIAN وإذا لم يتم ضبط الحقل، سيتم ضبطه تلقائيًا على AUTO.

تستخدم جميع مسارات التوجيه للمركبات طريقة RouteTravelMode المقابلة. لنوع المركبة.

سمات المركبات

يحتوي الكيان DeliveryVehicle على حقل متكرّر DeliveryVehicleAttribute تشمل واجهة برمجة التطبيقات ListDeliveryVehicles السمة filter الذي يمكن أن يحدّ من عرض كيانات DeliveryVehicle للعناصر التي تحتوي على السمات المحددة. لن تؤثر سياسة DeliveryVehicleAttribute في Fleet Engine. بشكل أفضل.

لا تُدرِج معلومات تحديد الهوية الشخصية أو معلومات حسّاسة. في السمات لأنّ هذا الحقل قد يكون مرئيًا للمستخدمين.

مدة عمل المهمة

يمكنك إنشاء مهام وتحديثها والاستعلام عنها في Fleet Engine باستخدام واجهات deliveryies API gRPC أو REST.

يحتوي كائن Task على حقل حالة لتتبُّع مستوى تقدُّمه. دورة حياتها. تنتقل القيم من OPEN إلى CLOSED. يتم إنشاء مهام جديدة. في الحالة OPEN، مما يشير إلى أن:

  • لم يتم بعد تعيين المهمة لمركبة تسليم.
  • لم تجتَز مركبة التسليم بعد محطة المركبة المخصّصة للمهمة.

إرشادات المهام

يمكنك تعيين مهمة لمركبة فقط عندما تكون في حالة "مفتوح".

يمكنك إلغاء مهمة من خلال إزالتها من قائمة محطات التوقف، مما يؤدي إلى تحديد وسيتم إغلاق حالة المهمة تلقائيًا.

عندما تكمل مركبة المهمة إيقاف مركبة المهمة:

  1. عدِّل حقل نتائج المهمة إلى "SUCCEEDED" أو "تعذّر الإجراء".

  2. حدِّد الطابع الزمني للحدث.

    بعد ذلك، تشير مكتبة تتبع شحن JavaScript إلى نتيجة المهمة يتم ضبط حالة المهمة على "مغلقة" تلقائيًا. لمزيد من المعلومات، يُرجى مراجعة تتبُّع الشحن باستخدام مكتبة "تتبُّع الشحن" في JavaScript

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

ملاحظة: لا يتيح Fleet Engine حذف مهمة بشكل صريح. الخدمة المهام تلقائيًا بعد سبعة أيام بدون تحديثات. إذا كنت تريد الاحتفاظ ببيانات المهمة لأكثر من سبعة أيام، فيجب عليك تنفيذ هذه الإمكانية بنفسك.

سمات المهام

يحتوي الكيان Task على حقل متكرّر TaskAttribute، التي يمكن أن تكون قيمة من أحد الأنواع الثلاثة: السلسلة، الرقم وقيمة منطقية. تتضمّن واجهة برمجة التطبيقات ListTasks حقلاً filter يمكن أن يحدّ من إمكانية عرض Task للكيانات التي تحتوي على السمات المحدّدة. لا يتم إجراء سمات المهام التأثير في سلوك توجيه Fleet Engine.

لا تُدرِج معلومات تحديد الهوية الشخصية أو معلومات حساسة أخرى. معلومات في السمات بما أنّ هذه السمات قد تكون مرئية للمستخدمين.

إدارة دورة حياة المهمة والمركبة

تذكير: يعمل النظام الداخلي لديك كمصدر موثوق به للبيانات التي تقدم واجهة برمجة التطبيقات Fleet Engine Deliveries API الدعم نيابةً عنك.

لإدارة دورات حياة المركبات والمهام في نظامك، استخدِم Fleet Engine Deliveries API لإنشاء مركباتك والمهام المرتبطة بها وتحديثها وتتبُّعها.

وفي الوقت نفسه، يتصل تطبيق السائق مباشرةً بـ Fleet Engine لتعديل معلومات الموقع الجغرافي والمسار للجهاز. يتيح هذا النموذج لـ Fleet Engine وإدارة موقعك في الوقت الفعلي بكفاءة. فهي ترسل الموقع مباشرةً إلى التي يمكنك استخدامها بعد ذلك لإطلاع المستهلكين على الحالة من ترتيبهم.

على سبيل المثال، لنفترض أن لديك السيناريو التالي:

  • سائق يقترب من محطة توصيل يرسل تطبيق السائق موقعه إلى Fleet Engine
  • يرسل Fleet Engine الموقع الجغرافي للجهاز إلى مكتبة التتبع، التي يستخدمها تطبيق المستهلك لتنبيه المستهلك بالقرب من طردهم.
  • بعد أن يكمل السائق الشحنة، ينقر على "تم تسليم الشحنة" في تطبيق برنامج التشغيل.
  • عمود "تم تسليم الشحنة" الإجراء يرسل المعلومات إلى نظام الخلفية، الذي ينفذ الخطوات اللازمة للتحقق من صحة النشاط التجاري والتحقق منه.
  • يؤكد النظام المهمة على أنها SUCCEEDED ويحدِّث Fleet Engine باستخدام واجهة برمجة التطبيقات Deliveries API

يوضِّح الرسم البياني التالي هذه العمليات على المستوى العام. وكذلك العلاقة القياسية بين نظامك والعميل وFleet Engine.

استخدام Deliveries API

إدارة الرموز المميّزة للعميل

تحديثات الموقع التي تنشأ من تطبيق السائق ويتم إرسالها مباشرة إلى Fleet Engine تتطلب رموزًا مميزة للمصادقة. في ما يلي الطريقة الموصى بها للتعامل مع التحديثات من العميل إلى Fleet Engine:

  1. أنشِئ الرمز المميّز باستخدام مستخدم برنامج التشغيل غير الموثوق به في عملية تسليم المحرّكات. دور حساب الخدمة.

  2. زوِّد تطبيق السائق برمز مميّز للنطاق. هذا النطاق فقط تحديث موقع الجهاز في Fleet Engine.

يضمن هذا النهج أن المكالمات الناشئة عن أجهزة محمولة- بيئات منخفضة الثقة مبدأ الامتياز الأقل.

الأدوار الأخرى لحساب الخدمة

أما إذا كنت تريد - بدلاً من ذلك - السماح لتطبيقات السائق بإجراء مهام تحديثات Fleet Engine بخلاف تلك التي تقتصر على دور "السائق غير الموثوق به" بالنسبة إلى بعض التعديلات مثلاً، يمكنك استخدام دور "سائق موثوق به". بالنسبة حول نموذج يستخدم دور السائق الموثوق به، يمكنك مراجعة طراز برنامج التشغيل الموثوق به:

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

وضع نموذج ليوم عمل

يصف الجدول التالي كيف يكون يوم العمل لسائقي الميل الأول أو الميل الأخير شركة توصيل وخدمات لوجستية. ويجوز لشركتك في التفاصيل، ولكن يمكنك أن ترى كيف يمكنك تصميم نموذج ليوم عمل.

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

تعيين المهام لمركبة بعد مجموعة حزم التوصيل ويتم الانتهاء من الترتيب الذي يجب تسليمها.
بداية اليوم يبدأ السائق بيوم في المستودع من خلال تسجيل الدخول إلى تطبيق Driver. إعداد Delivery Driver API: أنشئ مركبة التسليم في Fleet Engine حسب الحاجة.
يقوم السائق بتحميل الشحنات على مركبة التسليم، وفحص الشحنات. إذا لم يتم إنشاء مهام تسليم الشحنة مسبقًا، إنشاء مهام تسليم الشحن في وقت الفحص.
يؤكد السائق ترتيب المهام التي سيتم تنفيذها. إذا لم يتم إنشاؤها مسبقًا، عليك إنشاء مهام الاستلام من الشحن عدم التوفّر المجدول محطات التوقف المُجدوَلة
يغادر السائق المستودع ويلتزم بالعدد التالي من المهام مكتملة. إسناد جميع المهام أو مجموعة فرعية من المهام إلى المركبة من خلال تنفيذ طلب الانتهاء.
يسلم السائق شحنة. بعد الوصول إلى محطة التسليم، نفِّذ الإجراءات ذات الصلة. إلى مركبة تصل إلى محطة بعد تسليم الشحنة، أغلِق تسليم، واختياريًا، حالة شحن المتجر ومعلومات وصفية أخرى. بعد الانتهاء من جميع المهام في المحطة وقبل ويبدأون في الانتقال إلى المحطة التالية، وتنفيذ الإجراءات المتعلقة مركبة تكمل محطة والمركبة في طريقها إلى المحطة التالية.
يلتقي السائق بمركبة يتم تقديم التغذية لنقل شحنات إضافية إلى مركبة التسليم. نقطة التقاء للنقل بين مركبات الخلاصة ومركبات التسليم على أنه محطة توقف مجدولة.

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

وبخلاف ذلك، ليس عليك اتخاذ أي إجراء آخر حتى نهاية الفاصل. إزالة المهمة من خلال تأكيد المهام التالية والمتبقية، تعديل ترتيب المهام.
يستلم السائق شحنة. يتم تصميم هذا تمامًا مثل محطة توصيل. تنفيذ الإجراءات ذات الصلة إلى مركبة تصِل إلى محطة وإغلاق مهمة، واختياريًا، تخزين حالة الشحن والمعلومات الوصفية الأخرى: بعد الانتهاء من جميع المهام في المحطة وقبل بدء القيادة إلى المحطة التالية، ثم تنفيذ الإجراءات المتعلّقة بإكمال مركبة إلى محطة والمركبة في طريقها إلى المحطة التالية. ملاحظة: لضمان صحة الفوترة، يجب أن يكون لكل استلام الطلب تسليم المشروع. إذا كان سيتم تسليم الطلب إلى موقع آخر على للسائق نفسه في ذلك اليوم، فإننا نوصي بإنشاء نموذج لمهمة التسليم هذه وأي مهمة تسليم أخرى على المسار. إذا كان السائق أحضر استلام الطلب إلى المستودع، نوصي بإنشاء مهمة تسليم في المستودع الوجهة.
يحدد السائق محطة مجدولة لاستلام الشحنات من صندوق تسليم المنتجات. يتم تصميم هذه المنصة تمامًا مثل أي محطة أخرى لاستلام الطلبات. تنفيذ الإجراءات ذات الصلة إلى مركبة تصِل إلى محطة وإغلاق المهمة بعد الاكتمال جميع المهام في المحطة والبدء في القيادة إلى المحطة التالية، تنفيذ الإجراءات المتعلّقة بإكمال مركبة إلى محطة والمركبة في طريقها إلى المحطة التالية.
يتلقّى السائق إشعارًا بتحويل شحنة إلى موقع جغرافي بديل. قم بتعيين حالة مهمة تسليم الشحنة الأصلية على "مكتملة" وإنشاء مهمة جديدة تسليم الشحنة لموقع التسليم الجديد. لمزيد من المعلومات راجِع المقالة إعادة توجيه شحنة.
حاول السائق تسليم طرد ولكنه لم يتمكن من تسليمه. يتم وضع هذا النموذج بشكل مشابه لمحطة تسليم ناجحة، حيث يتم تحديد تسليمه على أنه قد تم إكماله. تنفيذ إجراءات ذات صلة مركبة تصل إلى محطة بعد أو فشلهم في تسليم الشحنة إغلاق المهمة، واختياريًا حالة شحن المتجر ومعلومات وصفية أخرى. بعد الانتهاء من جميع المهام في المحطة وقبل بدء القيادة إلى المحطة التالية، ثم تنفيذ الإجراءات المتعلّقة بإكمال مركبة إلى محطة والمركبة في طريقها إلى المحطة التالية.
تم إبلاغ السائق بحجز شحنة (عدم تسليمها). بعد تلقّي الإشعار وتأكيده قم بتعيين حالة المهمة على "مكتملة".
تم إرسال إشعار إلى السائق بتسليم شحنة معيّنة في المرة التالية، ما يؤدي إلى تغيير طلب التسليم المُلتزم به. تعديل ترتيب المهام
يختار السائق تسليم شحنة خارج الطلب. تعديل ترتيب المهام ثم والمضي قدمًا كالمعتاد.
يُسلِّم السائق عدة شحنات إلى موقع واحد. يتم وضع نموذج مشابه لمحطة تسليم شحنة واحدة. بعد الوصول إلى المحطة، نفِّذ إجراءات ذات صلة وصول مركبة إلى محطة بعد تسليم كل شحنة، أغلِق كل مهمة. ويمكنك اختياريًا الاطّلاع على حالة شحن المتجر وغيرها من المعلومات الوصفية. بعد الانتهاء من جميع المهام في المحطة وقبل بدء القيادة إلى المحطة التالية، ثم تنفيذ الإجراءات المتعلّقة بإكمال مركبة إلى محطة والمركبة في طريقها إلى المحطة التالية.
نهاية اليوم يعود السائق إلى المستودع. إذا عاد السائق إلى المستودع بشحنات تم التقاطها خلال المسار، يجب عليك أيضًا إنشاء وإغلاق كل حزمة كمهمة تسليم لضمان صحة الفوترة. يمكنك القيام بذلك عن طريق نمذجة المستودع مثل أي أخرى. إذا لم يكن المستودع يُستخدم كمحطة تسليم، يمكنك اختيار نمذجة المستودع كمحطة مجدولة. نمذجة المحطة تمكّن السائقين من رؤية الطريق إلى المستودع وإعطائهم معلومات عن الوقت المقدّر الوصول.

آلية عمل تعديلات الموقع الجغرافي

للحصول على أفضل أداء باستخدام Fleet Engine، ننصحك بتوفير مجموعة من المركبات. تحديثات الموقع الجغرافي. استخدِم إحدى الطريقتَين التاليتَين لتقديم هذه التعديلات:

  1. استخدام حزمة تطوير البرامج (SDK) لبرنامج التشغيل - Android، iOS - أبسط الخيارات.
  2. استخدام رمز مخصّص، وهو مفيد إذا كانت المواقع الجغرافية عبر الخلفية، أو إذا كنت تستخدم أجهزة بخلاف Android أو iOS.

وبغض النظر عن كيفية تقديم تحديثات الموقع الجغرافي للمركبة، سيتم حفظ الخلفية مسئولاً عن تحديث Fleet Engine عندما يتم في طريقك إلى محطة (بما في ذلك المستودع) وعندما تصل إلى محطة. لم يرصد Fleet Engine هذه الأحداث. تلقائيًا.

محطات توقّف المركبات ومواقع التسليم

محطة المركبة هي المكان الذي تكمل فيه مركبة التوصيل مهمة الشحن أو أي مهمة أخرى. وهي إما نقطة وصول مثل رصيف تحميل أو الذي تم تعطُّله على الطريق.

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

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

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

فعلى سبيل المثال، إذا كان أحد السائقين يقومون بالعديد من عمليات التوصيل إلى مبنى مكتبي واحد، التفكير في تعيين جميع مهام التسليم لمحطة واحدة للمركبة. في حال حذف حيث يتم إسناد كل مهمة تسليم إلى محطة المركبة الخاصة بها، فإن شحنتك قد تكون تجربة التتبع أقل فائدة لمستخدميك لأن التتبع لا عندما تكون المركبة ضمن عدد محدود من محطات التوقف قبل وجهتها. إن وجود العديد من محطات التوقف للمركبات في وقت قصير لا يعطي المستخدم الكثير من الوقت لاستخدامه لتتبع التقدم المحرز في التسليم.

استخدام حِزم تطوير البرامج (SDK) للأجهزة الجوّالة

قبل إجراء أي طلبات لحزمة تطوير البرامج (SDK) لبرنامج التشغيل، تأكَّد من إعدادها.

إعداد Delivery Driver API

قبل إعداد واجهة برمجة التطبيقات Delivery Driver API في حزمة تطوير البرامج (SDK) الخاصة ببرنامج التشغيل، تأكَّد من لإعداد حزمة تطوير البرامج (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)، مثل رقم هاتف السائق.

إنشاء مركبة

يمكنك إنشاء مركبة إما من حزمة تطوير البرامج (SDK) لبرنامج التشغيل أو من بيئة خادم باستخدام gRPC أو REST.

gRPC

لإنشاء مركبة جديدة، عليك إجراء طلب CreateDeliveryVehicle بحساب Fleet Engine. استخدِم الكائن CreateDeliveryVehicleRequest لتحديد سمات لمركبة التوصيل الجديدة. تجدر الإشارة إلى أنّ أي قيمة محدّدة للحقل Name ستكون تم تجاهلها وفقًا لإرشادات واجهة برمجة التطبيقات للمعرّفات المحددة من قِبل المستخدم. يجب استخدام الحقل DeliveryVehicleId لضبط رقم تعريف المركبة.

عند إنشاء DeliveryVehicle، يمكنك تحديد الحقول التالية بشكل اختياري:

  • السمات
  • LastLocation
  • النوع

ولا تضبط أي حقول أخرى. في حال إجراء ذلك، سيعرض Fleet Engine رسالة خطأ. لأن هذه الحقول إما للقراءة فقط أو يمكن تحديثها فقط عبر طلب UpdateDeliveryVehicle

لإنشاء مركبة بدون ضبط أي حقول اختيارية، يمكنك مغادرة تم إلغاء ضبط الحقل DeliveryVehicle في CreateDeliveryVehicleRequest.

يوضح المثال التالي كيفية استخدام مكتبة Java 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>

&lt;id&gt; هو معرّف فريد لمركبة توصيل في أسطولك.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يمثل نص POST كيان DeliveryVehicle المطلوب إنشاؤه. يمكنك تحديد الحقول الاختيارية التالية:

  • سمات
  • lastLocation
  • كتابة

مثال على الطلب 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 وفقًا لإرشادات واجهة برمجة التطبيقات للأرقام التعريفية المحدّدة من قِبل المستخدم. ولا تضبط أي حقول أخرى. في حال إجراء ذلك، سيعرض 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}"

إنشاء مهمة استلام الشحنة

يمكنك إنشاء مهمة استلام الشحنة إما من حزمة تطوير البرامج (SDK) لبرنامج التشغيل أو من بيئة خادم باستخدام gRPC أو REST.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة Java 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>`

&lt;id&gt; هو معرّف فريد للمهمة. يجب ألا يكون رقم التتبع للشحن. إذا لم يكن لديك معرّفات مهام في نظامك، يمكنك إنشاء معرّف فريد عالميًا (UUID).

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان Task:

  • الحقول المطلوبة:

    الحقلالقيمة
    كتابة Type.PICKUP
    الولاية State.OPEN
    trackingId الرقم أو المعرّف الذي تستخدمه لتتبُّع شحنة
    plannedLocation الموقع الذي تكتمل فيه المهمة، في هذه الحالة موقع استلام الشحنة.
    taskDuration الوقت المتوقع بالثواني الذي تستغرقه لاستلام الشحنة في موقع الاستلام.

  • الحقول الاختيارية:

    الحقلالقيمة
    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

إنشاء مهمة تسليم شحنة

إنشاء مهمة تسليم شحنة إما من حزمة تطوير البرامج (SDK) لبرنامج التشغيل أو من بيئة خادم باستخدام gRPC أو REST.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة Java 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>`

&lt;id&gt; هو معرّف فريد للمهمة. يجب ألا يكون رقم التتبع للشحن. إذا لم يكن لديك معرّفات مهام في نظامك، يمكنك إنشاء معرّف فريد عالميًا (UUID).

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان Task:

  • الحقول المطلوبة:

    الحقلالقيمة
    كتابة Type.DELIVERY
    الولاية State.OPEN
    trackingId الرقم أو المعرّف الذي تستخدمه لتتبُّع شحنة
    plannedLocation الموقع الذي تكتمل فيه المهمة، في هذه الحالة بموقع التسليم لهذه الشحنة.
    taskDuration الوقت المتوقع بالثواني الذي يستغرقه تسليم الشحنة في موقع التسليم.

  • الحقول الاختيارية:

    الحقلالقيمة
    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

يوضح المثال التالي كيفية استخدام مكتبة Java 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

يجب أن يحتوي رأس الطلب على الحقل Authorize (تفويض) مع القيمة Bearer <token>، حيث يكون <token> علامة الرمز المميّز الصادر عن مصنع الرموز المميّزة Fleet Engine

يجب أن يحتوي نص الطلب على كيان BatchCreateTasksRequest:

  • الحقول المطلوبة:

    الحقلالقيمة
    طلبات مصفوفة<CreateTasksRequest>

  • الحقول الاختيارية:

    الحقلالقيمة
    header `DeliveryRequestHeader`

يجب أن يجتاز كل عنصر CreateTasksRequest في requests عملية التحقق نفسها. كطلب CreateTask، باستثناء أن parent وheader حقول اختيارية. وفي حال ضبطها، يجب أن تكون متطابقة مع الحقول الخاصة بها في المستوى الأعلى BatchCreateTasksRequest. عرض إنشاء مهمة استلام الشحنة إنشاء مهمة تسليم شحنة لقواعد تحقق محددة لكل منها

لمزيد من المعلومات، يمكنك الاطّلاع على المستندات المرجعية لواجهة برمجة التطبيقات الخاصة بالموقع الإلكتروني 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

يوضح المثال التالي كيفية استخدام مكتبة Java 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>`

&lt;id&gt; هو معرّف فريد للمهمة. إذا لم تحدد معرّفات مهام في نظامك، يمكنك إنشاء عنوان URL فريد المعرّف (UUID).

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان Task:

  • الحقول المطلوبة:

    الحقلالقيمة
    كتابة Type.UNAVAILABLE
    الولاية State.OPEN
    taskDuration مدة الفاصل الإعلاني بالثواني.

  • الحقول الاختيارية:

    الحقلالقيمة
    plannedLocation موقع الفاصل إذا كان يجب التقاطه في موقع محدد.

ويتم تجاهل جميع الحقول الأخرى في العنصر للإنشاء. رميات 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

يوضح المثال التالي كيفية استخدام مكتبة Java 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>`

&lt;id&gt; هو معرّف فريد للمهمة. إذا لم يكن لديك معرفات المهام في نظامك، فيمكنك إنشاء معرّف فريد عالميًا (UUID).

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان Task:

  • الحقول المطلوبة:

    الحقلالقيمة
    كتابة Type.SCHEDULED_STOP
    الولاية State.OPEN
    plannedLocation موقع المحطة.
    taskDuration المدة المتوقعة للمحطة بالثواني.

  • الحقول الاختيارية:

    • بدون تحديد نمط

ويتم تجاهل جميع الحقول الأخرى في العنصر للإنشاء. رميات 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

تحديد الفترة الزمنية المستهدفة

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

تتألف فترة الوقت المستهدف من وقت بدء ووقت انتهاء ويمكن ضبطها. في أي نوع مهمة. لا تؤثر الفترة الزمنية المستهدفة في التوجيه. السلوك.

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)
      .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`

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

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

راحة

لضبط نافذة إعداد عرض تتبُّع المهام باستخدام HTTP، يمكنك طلب UpdateTask:

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

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

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان Task:

  • الحقول المطلوبة:

    الحقلالقيمة
    taskTrackingViewConfig تكوين تتبع المهام الذي يحدد عناصر البيانات مرئية للمستخدمين النهائيين تحت أي ظروف.

  • الحقول الاختيارية:

    • بدون تحديد نمط

ويتم تجاهل جميع الحقول الأخرى في العنصر لإجراء التحديث.

مثال على الطلب curl:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskTrackingViewConfig" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskTrackingViewConfig": {
    "routePolylinePointsVisibility": {
      "remainingStopCountThreshold": 3
    },
    "estimatedArrivalTimeVisibility": {
      "remainingDrivingDistanceMetersThreshold": 5000
    },
    "remainingStopCountVisibility": {
      "never": true
    }
  }
}
EOM

تعيين المهام لمركبة

يمكنك تعيين المهام لمركبة توصيل من خلال تحديث ترتيب المهام للمركبة. يتم تحديد ترتيب المهمة للمركبة حسب القائمة من محطات التوقف لمركبة التسليم، ويمكنك تعيين مهمة واحدة أو أكثر إلى كل محطة مركبة. للحصول على التفاصيل، يُرجى مراجعة تعديل ترتيب المهام

لتغيير شحنة من مركبة إلى أخرى، يجب إغلاق المهمة الأصلية ثم إعادة إنشائه قبل تعيين المركبة الجديدة. في حال تعديل المهمة الطلب لمهمة تم تعيينها بالفعل إلى مركبة أخرى، فستحصل على خطأ.

تعديل ترتيب المهام

يمكنك تحديث ترتيب تنفيذ المهام المعينة لمركبة من أي مما يلي: الـ Driver SDK، أو بيئة الخادم. لا تستخدم كلتا الطريقتين لتجنب شروط السباق والحفاظ على مصدر واحد للحقيقة.

عند تحديث ترتيب المهام لمركبة، يحدث أيضًا ما يلي:

  • يعيّن المهام الجديدة في المركبة.
  • لإغلاق أي مهام تم تعيينها سابقًا للمركبة، ولكنها لم يتم تعيينها بالترتيب المحدث.

لتغيير شحنة من مركبة إلى أخرى، إغلاق المهمة الأصلية ثم إعادة إنشائه قبل تعيين المركبة الجديدة. في حال تعديل المهمة الطلب لمهمة تم تعيينها بالفعل إلى مركبة أخرى، فستحصل على خطأ.

يمكنك تعديل ترتيب المهام في أي وقت.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة 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 REST. إلى UpdateDeliveryVehicle:

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

&lt;id&gt; هو معرّف فريد لمركبة توصيل في أسطولك. التي تنوي تحديث ترتيب المهام لها. إنه المعرف الذي التي حددتها عند إنشاء المركبة.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان DeliveryVehicle:

  • الحقول المطلوبة:

    الحقلالقيمة
    remainingVehicleJourneySegments قائمة بأجزاء الرحلة للمهام بالترتيب الذي يجب تنفيذها فيه. يتم تنفيذ المهمة الأولى في القائمة أولاً.
    remainingVehicleJourneySegments[i].stop محطة المهمة i في القائمة.
    remainingVehicleJourneySegments[i].stop.plannedLocation الموقع الجغرافي المُخطَّط له للمحطة.
    remainingVehicleJourneySegments[i].stop.tasks قائمة بالمهام التي سيتم تنفيذها في محطة المركبة هذه
    remainingVehicleJourneySegments[i].stop.state 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": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.7749,
            "longitude": -122.084061
          }
        },
        "tasks": [
          {
            "taskId": "${TASK1_ID}"
          }
        ]
      }
    },
    {
      "stop": {
        "state": "NEW",
        "plannedLocation": {
          "point": {
            "latitude": 37.3382,
            "longitude": 121.8863
          }
        },
        "tasks": [
          {
            "taskId": "${TASK2_ID}"
          }
        ]
      }
    }
  ]
}
EOM

مركبة في طريقها إلى المحطة التالية

يجب إرسال إشعار إلى فريق Fleet Engine عند انطلاق مركبة من المحطة أو عند انطلاقها التنقل. يمكنك إعلام Fleet Engine إما من خلال Driver SDK، أو من بيئة خادم باستخدام gRPC أو REST. لا تستخدِم كلتا الطريقتين لتجنُّب العِرق الظروف والحفاظ على مصدر واحد للحقيقة.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة Java gRPC لإخطار Fleet Engine بأن إحدى المركبات تسير في طريقها إلى محطتها التالية.

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

    DeliveryServiceBlockingStub deliveryService =
      DeliveryServiceGrpc.newBlockingStub(channel);

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

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

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

راحة

لإبلاغ Fleet Engine بأن مركبة ما في طريقها إلى محطتها التالية من يمكنك إجراء استدعاء HTTP REST إلى UpdateDeliveryVehicle:

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

&lt;id&gt; هو معرّف فريد لمركبة التسليم في أسطولك. التي تنوي تحديث ترتيب المهام لها. إنه المعرف الذي التي حددتها عند إنشاء المركبة.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان DeliveryVehicle:

  • الحقل المطلوب:

    الحقلالقيمة
    remainingVehicleJourneySegments قائمة المحطات المتبقية للمركبات مع وضع علامة 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 مع موقع المركبة. لأي مركبة نشطة يتوقع Fleet Engine تحديث الموقع مرة واحدة على الأقل كل دقيقة مرة كل 5 ثوانٍ.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة Java gRPC لتعديل الموقع الجغرافي للمركبة في Fleet Engine:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

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

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

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

راحة

لتعديل الموقع الجغرافي للمركبة في Fleet Engine باستخدام HTTP REST، يمكنك إجراء اتصال UpdateDeliveryVehicle:

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

&lt;id&gt; هو معرّف فريد لمركبة التسليم في الأسطول أو الذي تنوي تعديل الموقع الجغرافي فيه. إنه المعرف الذي التي حددتها عند إنشاء المركبة.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان DeliveryVehicle:

  • الحقل المطلوب:

    الحقلالقيمة
    lastLocation.supplementalLocation الموقع الجغرافي للمركبة
    lastLocation.supplementalLocationTime آخر طابع زمني معروف للمركبة في هذا الموقع الجغرافي
    lastLocation.supplementalLocationSensor يجب ملء هذا الحقل بـ CUSTOMER_SUPPLIED_LOCATION.

  • الحقول الاختيارية:

    الحقلالقيمة
    lastLocation.supplementalLocationAccuracy دقة الموقع الجغرافي الذي تم تقديمه، بالمتر

مثال على الطلب curl:

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

وصول مركبة إلى محطة

يجب إرسال إشعار إلى مجموعة المركبات عند وصول مركبة إلى محطة. يمكنك إرسال إشعار Fleet Engine إما من Driver SDK، أو من بيئة خادم باستخدام gRPC أو REST. لا تستخدِم كلتا الطريقتين لتجنُّب العِرق الظروف والحفاظ على مصدر واحد للحقيقة.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة Java gRPC لإشعار Fleet Engine بوصول مركبة إلى محطة:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

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

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

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

راحة

لإعلام Fleet Engine بوصول مركبة إلى محطة من بيئة الخادم، إجراء استدعاء HTTP REST إلى UpdateDeliveryVehicle:

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

&lt;id&gt; هو معرّف فريد لمركبة التسليم في أسطولك. التي تنوي تحديث ترتيب المهام لها. إنه المعرف الذي التي حددتها عند إنشاء المركبة.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان DeliveryVehicle:

  • الحقول المطلوبة:

    الحقلالقيمة
    remainingVehicleJourneySegments المحطة التي وصلت إليها مع ضبط حالتها على State.ARRIVED، متبوعة بقائمة بمحطات التوقف المتبقية للمركبات مع وضع علامة State.NEW على حالاتها.

  • الحقول الاختيارية:

    • بدون تحديد نمط

ويتم تجاهل جميع الحقول الأخرى في العنصر لإجراء التحديث.

مثال على الطلب curl:

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

تكمل مركبة محطة

يجب إرسال إشعار إلى فريق Fleet Engine عند اكتمال توقّف أي مركبة. يؤدي هذا إلى تعيين جميع المهام المرتبطة بالمحطة على حالة "مغلق". يمكنك إخطار Fleet Engine إما من خلال Driver SDK، أو من بيئة خادم باستخدام gRPC أو REST. لا تستخدِم كلتا الطريقتين لتجنُّب ظروف السباق والحفاظ على مصدر واحد للحقيقة.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة Java gRPC لإخطار Fleet Engine باكتمال محطة توقف.

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

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

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

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

راحة

لإعلام Fleet Engine بإكمال التوقف من بيئة الخادم، إجراء استدعاء HTTP REST إلى UpdateDeliveryVehicle:

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

&lt;id&gt; هو معرّف فريد لمركبة التسليم في أسطولك. التي تنوي تحديث ترتيب المهام لها. إنه المعرف الذي التي حددتها عند إنشاء المركبة.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان DeliveryVehicle:

  • الحقول المطلوبة:

    الحقلالقيمة
    remaining_vehicle_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.

راحة

هذا مثال على تعديل مهمة من خلال REST.

إغلاق مهمة

لإغلاق مهمة تم تعيينها لمركبة، عليك إما إرسال إشعار إلى Fleet Engine أنّ المركبة قد أكملت المحطة التي تحدث فيها المهمة أو إزالتها من قائمة محطات توقّف المركبات للقيام بذلك، يمكنك تعيين قائمة تتوقف المركبة المتبقية كما هو الحال عند تعديل ترتيب المهمة في مركبة.

إذا لم يتم تعيين مركبة لمهمة ما ويجب إغلاقها، يُرجى تعديل المهمة. إلى وضع الإغلاق. ومع ذلك، لا يمكنك إعادة فتح مهمة تم إغلاقها.

لا يشير إغلاق المهمة إلى النجاح أو الفشل. فهو يشير إلى أن لم تعد قيد التقدم. لتتبع الشحن، من المهم الإشارة إلى النتيجة الفعلية لمهمة ما بحيث يمكن النتيجة النهائية.

gRPC

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setState(Task.State.CLOSED) // You can only directly CLOSE a
  .build();                    // task that is NOT assigned to a vehicle.

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("state"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

راحة

لوضع علامة على مهمة للإشارة إلى أنها مغلقة من بيئة خادم، عليك إجراء استدعاء HTTP REST إلى UpdateTask:

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

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

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

عليك تضمين كيان Task في نص الطلب:

  • الحقول المطلوبة:

    الحقلالقيمة
    الولاية State.CLOSED

  • الحقول الاختيارية:

    الحقلالقيمة
    taskOutcome Result.SUCCEEDED أو Result.تعذّر
    taskOutcomeTime الوقت الذي تم فيه اكتمال المهمة.
    taskOutcomeLocation الموقع الذي اكتملت فيه المهمة. تضبط Fleet Engine هذا الإعداد تلقائيًا. إلى آخر موقع مركبة ما لم يلغِه مقدّم الخدمة يدويًا

ويتم تجاهل جميع الحقول الأخرى في العنصر لإجراء التحديث.

مثال على الطلب curl:

    # Set JWT, PROJECT_ID, and TASK_ID in the local environment
    curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=state,taskOutcome,taskOutcomeTime" \
      -H "Content-type: application/json" \
      -H "Authorization: Bearer ${JWT}" \
      --data-binary @- << EOM
    {
      "state": "CLOSED",
      "taskOutcome": "SUCCEEDED",
      "taskOutcomeTime": "$(date -u --iso-8601=seconds)"
    }
    EOM

تحديد نتيجة المهمة وموقع النتيجة

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

يمكن ضبط نتائج المهام في الحالة "مغلقة" على إما "تم بنجاح" أو "تعذّر الإجراء". يتقاضى Fleet Engine مهام التسليم فقط بالحالة تم بنجاح.

عند وضع علامة على نتيجة مهمة، يملأ Fleet Engine تلقائيًا موقع نتيجة المهمة مع آخر موقع معروف للمركبة. يمكنك إلغاء هذا السلوك.

gRPC

لديك خيار تعيين موقع نتيجة المهمة عند تعيين المرجو. يؤدي ضبط الموقع إلى منع Fleet Engine من ضبطه على الإعداد التلقائي لآخر موقع المركبة. يمكنك أيضًا استبدال موقع نتيجة المهمة في Fleet Engine. تعيينه في وقت لاحق. لا يستبدل Fleet Engine موقع نتيجة المهمة مطلقًا التي تقدمها لا يمكنك تحديد موقع نتيجة مهمة لمهمة ما التي لم يتم تعيين نتيجة مهمة لها. يمكنك تعيين نتيجة المهمة وموقع نتيجة المهمة داخل نفس الطلب.

يوضح المثال التالي كيفية استخدام مكتبة Java gRPC لتعيين نتيجة المهمة إلى SUCCEEDED وتعيين الموقع الذي كانت فيه المهمة مكتمل:

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

// Task settings
String taskName = "providers/" + PROJECT_ID + "/tasks/" + TASK_ID;
Task task = Task.newBuilder()
  .setName(taskName)
  .setTaskOutcome(TaskOutcome.SUCCEEDED)
  .setTaskOutcomeTime(now())
  .setTaskOutcomeLocation(               // Grand Indonesia East Mall
    LocationInfo.newBuilder().setPoint(
      LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
  .build();

// Task request
UpdateTaskRequest updateTaskRequest =
  UpdateTaskRequest.newBuilder()  // No need for the header
      .setTask(task)
      .setUpdateMask(FieldMask.newBuilder().addPaths("task_outcome", "task_outcome_time", "task_outcome_location"))
      .build();

try {
  Task updatedTask = deliveryService.updateTask(updateTaskRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
     case NOT_FOUND:
       break;
     case PERMISSION_DENIED:
       break;
  }
  return;
}

راحة

لوضع علامة على مهمة باعتبارها مكتملة من بيئة خادم، إجراء استدعاء HTTP REST إلى UpdateTask:

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

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

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يحتوي نص الطلب على كيان Task:

  • الحقول المطلوبة:

    الحقلالقيمة
    taskOutcome Result.SUCCEEDED أو Result.تعذّر

  • الحقول الاختيارية:

    الحقلالقيمة
    taskOutcomeLocation الموقع الذي اكتملت فيه المهمة. في حال ترك السياسة بدون ضبط، سيتم ضبط Fleet Engine. تلقائيًا على الموقع الأخير للمركبة.
    taskOutcomeTime الطابع الزمني لوقت اكتمال المهمة.

ويتم تجاهل جميع الحقول الأخرى في العنصر لإجراء التحديث.

مثال على الطلب curl:

# Set JWT, PROJECT_ID, and TASK_ID in the local environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/tasks/${TASK_ID}?updateMask=taskOutcome,taskOutcomeTime,taskOutcomeLocation" \
  -H "Content-type: application/json" \
  -H "Authorization: Bearer ${JWT}" \
  --data-binary @- << EOM
{
  "taskOutcome": "SUCCEEDED",
  "taskOutcomeTime": "$(date -u --iso-8601=seconds)",
  "taskOutcomeLocation": {
    "point": {
      "latitude": -6.195139,
      "longitude": 106.820826
    }
  }
}
EOM

إعادة توجيه شحنة

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

استخدام مركبات تقديم التغذية ومركبات التسليم

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

حالة شحن المتجر ومعلومات وصفية أخرى

عند اكتمال مهمة الشحن، يتم تسجيل حالة المهمة ونتائجها في المهمة. على الرغم من ذلك، قد تحتاج إلى تعديل معلومات وصفية أخرى الخاصة بالشحنة. لتخزين معلومات وصفية أخرى يمكنك مرجع خارج خدمة Fleet Engine، فاستخدم عنصر التتبع_id المرتبط بالمهمة كمفتاح في جدول خارجي.

لمزيد من المعلومات، يُرجى الاطِّلاع على مدة مهمة.

البحث عن مركبة

يمكنك البحث عن مركبة إما من Driver SDK، أو من بيئة خادم باستخدام gRPC أو REST.

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 REST إلى GetVehicle:

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

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

&lt;vehicleId&gt; هو رقم تعريف المركبة المطلوب البحث عنها.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يكون نص الطلب فارغًا.

إذا اكتملت عملية البحث بنجاح، يعني ذلك أنّ نص الاستجابة يحتوي على كيان للمركبة.

مثال على الطلب curl:

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

البحث عن مهمة

يمكنك البحث عن مهمة من بيئة خادم باستخدام gRPC أو REST. لا تفعل حزمة تطوير البرامج (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 REST إلى GetTask:

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

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

&lt;taskId&gt; هو رقم تعريف المهمة المطلوب البحث عنها.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

يجب أن يكون نص الطلب فارغًا.

إذا كان البحث ناجحًا، سيحتوي نص الاستجابة على كيان مهمة.

مثال على الطلب curl:

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

البحث عن معلومات مهمة الشحن باستخدام رقم تعريف التتبّع

يمكنك البحث عن معلومات مهمة الشحن بالطرق التالية: ولكل منهما غرض منفصل:

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

يناقش هذا القسم البحث عن معلومات المهمة باستخدام رقم تعريف التتبع. إذا أردت للبحث عن مهمة حسب معرّف المهمة، انتقِل إلى البحث عن مهمة.

للبحث عن المعلومات من خلال رقم تعريف التتبّع، يمكنك استخدام أيّ مما يلي:

متطلبات البحث

  • التزام معلومات الشحن التي يقدّمها رقم تعريف التتبُّع بقواعد الاطّلاع على بيانات الشحن مذكور في التحكّم في مستوى رؤية المواقع الجغرافية التي يتم تتبّعها

  • استخدِم Fleet Engine للبحث عن معلومات الشحن من خلال رقم تعريف التتبُّع. السائق لا توفّر حزمة تطوير البرامج (SDK) عمليات البحث عن المعلومات من خلال رقم تعريف التتبّع. لإجراء ذلك باستخدام Fleet محرك البحث، يتم استخدام بيئة خادم أو متصفّح.

  • استخدِم أضيق رمز مميّز ممكن للحدّ من المخاطر الأمنية. على سبيل المثال، إذا استخدام الرمز المميز للمستهلك في التسليم، يتم إرجاع أي طلبات بيانات من واجهة برمجة التطبيقات Fleet Engine Deliveries API فقط المعلومات ذات الصلة بذلك المستخدم النهائي، مثل جهة الشحن أو مستلم الشحنة. ويتم إخفاء جميع المعلومات الأخرى في الردود. لمزيد من المعلومات حول الرموز المميزة، راجع إنشاء رمز JSON المميّز للويب (JWT) للتفويض:

عمليات البحث باستخدام Java باستخدام 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 REST إلى GetTaskTrackingInfo:

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

&lt;tracking_id&gt; هو رقم تعريف التتبع المرتبط بالمهمة.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الحامل <token>، حيث يكون <token> علامة الرمز المميّز الصادر عن مصنع الرموز المميّزة Fleet Engine

إذا كان البحث ناجحًا، يحتوي نص الاستجابة على taskTrackingInfo .

مثال على الطلب curl:

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

سرد المهام

يمكنك إدراج المهام من بيئة خادم أو متصفّح. لا تفعل حزمة تطوير البرامج (SDK) لبرنامج التشغيل دعم مهام القوائم.

تتطلب مهام القوائم وصولاً واسع النطاق إلى المهام. مهام القوائم مخصصة فقط المستخدمين الموثوق بهم. استخدام قارئ Fleet Reader أو مصادقة المستخدمين المميزين في خدمة التسليم الرموز المميزة عند إجراء طلبات مهام القائمة.

تم إخفاء الحقول التالية في المهام المدرَجة:

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

يمكن تصفية المهام المدرجة حسب معظم خصائص المهام. بالنسبة لبناء جملة استعلام عامل التصفية، راجِع AIP-160. تعرض القائمة التالية مهمة صالحة الخصائص التي يمكنك استخدامها للتصفية:

  • سمات
  • delivery_vehicle_id
  • الولاية
  • planned_location
  • task_duration
  • task_outcome
  • task_outcome_location
  • task_outcome_location_source
  • task_outcome_time
  • tracking_id
  • كتابة

استخدم تنسيقات الحقول التالية بناءً على اقتراحات تحسين واجهة برمجة تطبيقات Google:

نوع الحقل التنسيق مثال
الطابع الزمني RFC-3339 task_outcome_time = 2022-03-01T11:30:00-08:00
المدة عدد الثواني متبوعًا بـ s task_duration = 120s
Enum سلسلة state = CLOSED AND type = PICKUP
الموقع الجغرافي point.latitude وpoint.longitude planned_location.point.latitude > 36.1 AND planned_location.point.longitude < -122.0

راجِع AIP-160 للحصول على قائمة كاملة بفلاتر طلبات البحث. والمشغلات.

وإذا لم يتم تحديد طلب بحث للفلتر، سيتم سرد جميع المهام.

يتم تقسيم قوائم المهام إلى صفحات. يمكن تحديد حجم الصفحة في طلبات مهام القائمة. إذا تم تحديد حجم الصفحة، فلن يكون عدد المهام المعروضة أكبر مقارنةً بحجم الصفحة المحدّد في حالة عدم توفر حجم للصفحة، يتم استخدام المشروع. إذا تجاوز حجم الصفحة المطلوب قيمة قصوى داخلية، فسيتم استخدام الحد الأقصى الداخلي.

يمكن أن تتضمن قائمة المهام رمزًا مميزًا لقراءة الصفحة التالية من النتائج. استخدام الرمز المميز للصفحة مع طلب مماثل للطلب السابق طلب استرداد الصفحة التالية من المهام. عندما يظهر الرمز المميز للصفحة فارغ، لا تتوفر مهام أخرى للاسترجاع.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة Java gRPC لسرد المهام لـ deliveryVehicleId وسمة مهمة. تم إنشاء يمكن أن يكون الرد فارغًا. يشير الرد الفارغ إلى أنه لا توجد مهام مرتبط بمعرّف deliveryVehicleId المقدَّم.

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

DeliveryServiceBlockingStub deliveryService =
  DeliveryServiceGrpc.newBlockingStub(channel);

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

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

     case PERMISSION_DENIED:
       break;
  }
  return;
}

راحة

لإدراج المهام من المتصفّح، يمكنك إجراء استدعاء HTTP REST إلى ListTasks:

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

لتطبيق فلتر على المهام المدرجة، يمكنك تضمين "فلتر" مَعلمة عنوان URL تتضمّن طلب بحث يتضمّن إلغاءً للوصول إلى عنوان URL كقيمة له.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

إذا كان البحث ناجحًا، سيحتوي نص الاستجابة على بيانات بالبنية التالية:

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

يمكن أن يظل الرد الناجح فارغًا. تشير الإجابة الفارغة إلى أنه لا تم العثور على مهام تستوفي معايير الفلترة المحدّدة.

مثال على الطلب curl:

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

إدراج مركبات التسليم

يمكنك إدراج مركبات التسليم من بيئة خادم أو متصفّح. السائق لا تتيح حزمة تطوير البرامج (SDK) عرض بيانات مركبات التسليم.

تتطلب مركبات تسليم القوائم وصولاً واسع النطاق إلى مركبات التسليم مُخصصة للمستخدمين الموثوق بهم فقط. استخدام قارئ Fleet Reader أو Delivery Super الرموز المميزة لمصادقة المستخدم عند تقديم طلبات مركبات تسليم القوائم.

تم إخفاء الحقول التالية في مركبات التسليم المدرَجة بسبب تأثيرها على حجم الردّ:

  • CurrentRouteSegment
  • RemainingVehicleJourneySegments

يمكنك فلترة مركبات التسليم حسب السمة attributes. بالنسبة على سبيل المثال، لطلب بحث عن سمة تتضمّن المفتاح my_key والقيمة my_value، استخدِم attributes.my_key = my_value لإجراء طلب عن سمات متعدّدة، يمكنك ضم طلبات البحث باستخدام عاملي التشغيل AND وOR المنطقيين كما في attributes.key1 = value1 AND attributes.key2 = value2. راجع AIP-160 للاطلاع على وصف بنية طلب بحث الفلتر.

يمكنك فلترة مركبات التسليم المدرَجة حسب الموقع الجغرافي باستخدام طلب viewport. . تحدِّد مَعلمة طلب viewport إطارات العرض باستخدام حدودَين. الإحداثيات: خط عرض وخط طول high (شمال شرق) وlow (جنوب غربي) زوج الإحداثيات. يتم رفض الطلبات إذا كانت تحتوي على خط عرض عالٍ الذي يكون أقل جغرافيًا من خط عرض منخفض.

يتم تقسيم قوائم مركبات التسليم إلى صفحات تلقائيًا باستخدام حجم صفحة معقول. في حال حذف إذا حددت حجم صفحة، فسيعرض الطلب عدد المركبات فقط المحدد بواسطة الحد، أو أقل. إذا تجاوز حجم الصفحة المطلوب الحجم الداخلي الحد الأقصى للقيمة، يتم استخدام الحد الأقصى الداخلي. الصفحة الافتراضية والحد الأقصى بحجم 100 مركبة.

يمكن أن تتضمن قائمة مركبات التوصيل رمزًا مميزًا لقراءة الصفحة التالية من نتائجك. لا يتوفّر الرمز المميّز للصفحة في الردّ إلا عند توفّر المزيد من صفحات التسليم المركبات المتاحة للاسترجاع. لاسترداد الصفحة التالية من المهام، استخدم الرمز المميز للصفحة مع طلب مماثل لطلبك السابق طلبك.

gRPC

يوضح المثال التالي كيفية استخدام مكتبة 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 REST إلى ListDeliveryVehicles:

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

لتطبيق فلتر على المهام المدرجة، يمكنك تضمين "فلتر" معلَمة عنوان URL طلب البحث الذي تم استبعاده من عنوان URL كقيمة له.

يجب أن يحتوي عنوان الطلب على الحقل Authorize (تفويض) مع القيمة الرمز <token> للحامل، حيث الرمز <token> هو رمز مميّز صادر عن مصنع رموز مميّزة من Fleet Engine.

إذا كان البحث ناجحًا، سيحتوي نص الاستجابة على بيانات بالبنية التالية:

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

يمكن أن يظل الرد الناجح فارغًا. عندما يحدث ذلك، فهذا يعني أنه تم العثور على مركبات تسليم تستوفي طلب البحث وإطار العرض المحدّدَين.

مثال على الطلب curl:

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

تتبُّع الشحن

لديك خياران لاستخدام واجهة برمجة التطبيقات Fleet Engine Deliveries API لتفعيل تتبّع الشحنات:

  • مفضّل: يمكنك استخدام مكتبة "تتبُّع شحن JavaScript". تتيح لك المكتبة الاطّلاع على مواقع المركبات والمواقع الجغرافية التي تم تتبعها في Fleet Engine. تحتوي النتيجة على مكون خريطة JavaScript وهي بديل نقطة لكائن google.maps.Map، القياسي، ومكونات البيانات للاتصال بـ Fleet Engine. يتيح لك هذا المكون تقديم تجربة تتبع الشحنات المتحركة والقابلة للتخصيص من تطبيق الويب أو تطبيق الأجهزة الجوّالة.

  • يمكنك تنفيذ ميزة تتبُّع الشحنات الخاصة بك على واجهة Fleet Engine Deliveries API.

يكمن السر في البحث عن مهام الشحن من خلال رقم تعريف التتبّع.

إذا كنت تستخدم دور مستهلك في ميزة "التسليم"، سيتم تنفيذ أي طلبات بيانات من واجهة برمجة التطبيقات في Fleet Engine Deliveries API. إرجاع المعلومات ذات الصلة بجهة الشحن أو المستلم فقط. كل ما غير ذلك وتنقيح المعلومات الواردة في الردود. أنت مسؤول لمصادقة المستخدمين النهائيين. وإضافةً إلى ذلك، تتمّ فلترة معلومات الموقع الجغرافي. بناءً على المهمة التي يتم إنجازها بالفعل. أثناء مهمة عدم التوافر، عدم مشاركة أي معلومات عن الموقع الجغرافي مع المستخدم النهائي

التسجيل

يمكنك ضبط Fleet Engine لإرسال سجلات RPC إلى Cloud Logging. لمزيد من المعلومات، المعلومات، راجع التسجيل:

أدوار الأذونات والرموز المميزة

كما هو موضّح في مقالة إدارة دورة حياة المركبات والمهام وملاحظات التفويض لحالات الاستخدام الفردية، مما يجعل تتطلب طلبات البيانات إلى Fleet Engine المصادقة باستخدام رموز JSON المميّزة للويب التي تحتوي على تم توقيعها باستخدام بيانات اعتماد حساب الخدمة. حسابات الخدمة المستخدَمة لإصدار هذه الرموز المميزة دور واحد أو أكثر، وكل دور يمنحه مجموعة مختلفة من الأذونات.

لمزيد من المعلومات، يُرجى مراجعة المصادقة والتفويض.

تحديد المشاكل الشائعة وحلّها

راجِع الأقسام التالية للحصول على مساعدة إذا واجهت أي مشاكل.

المرونة

لا يُعتبر Fleet Engine مصدرًا للحقيقة. أنت مسؤول لاستعادة حالة نظامك، إذا لزم الأمر، بدون الاعتماد على Fleet Engine

حالة مفقودة في Fleet Engine

عند العمل مع Fleet Engine، يجب تنفيذ العملاء حتى يتعافى النظام نفسه إذا كان هناك إخفاق. على سبيل المثال، عندما يحاول Fleet Engine تحديث مركبة، فقد تستجيب الخدمة بعرض رسالة خطأ يشير إلى أن المركبة لا الموجودة. وعلى العميل بعد ذلك إعادة إنشاء المركبة في الحالة الجديدة. رغم نادرًا ما تحدث هذه المشكلة، لذا تأكَّد من أن نظامك مرن بدرجة كافية للتعامل مع هذه المشكلة. بها.

في سيناريو إخفاق Fleet Engine - الذي قد يكون مُستبعَدًا للغاية - قد تحتاج إلى إعادة إنشاء معظم المركبات والمهام أو كلها. إذا كان معدّل الإنشاء مرتفعة جدًا، فقد تخفق بعض الطلبات مرة أخرى بسبب مشكلات تتعلق بالحصة نظرًا عمليات التحقق من الحصة لتجنب هجمات الحرمان من الخدمة (DOS). في هذه الحالة، قم بإبطاء معدل إعادة الترفيه باستخدام استراتيجية تراجع للمحاولة.

حالة "فقدان الجهاز" في تطبيق السائق

إذا تعطّل تطبيق السائق، على التطبيق إعادة إنشاء الحالة الحالية. داخل حزمة تطوير البرامج (SDK) لبرنامج التشغيل. ينبغي أن يحاول التطبيق إعادة إنشاء المهام للتأكد الموجودة بالفعل واستعادة حالاتها الحالية. يجب على التطبيق أيضًا إعادة إنشاء قائمة محطات التوقف لـ Driver SDK وتعيينها بشكل صريح.

الأسئلة الشائعة

ماذا لو توقف السائق عن مهمة غير مرتبة؟

في هذه الحالة، قم أولاً بتحديث ترتيب المهام ثم المتابعة كالمعتاد، وتحديد الوصول إلى المحطة، وإنجاز المهمة، والتفاصيل الأخرى. إذا لم تقم بذلك، فقد يصبح النظام غير متسق، وقد تصبح الوقت المقدر للوصول غير صحيح، والأخطاء غير المتوقعة.