رحلات عند الطلب

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

أثناء قراءة هذه المستندات، يُرجى مراعاة ما يلي:

  • يمكنك إسناد الرحلات إلى المركبات كطريقة لتصميم الربط في العالم الواقعي بين الرحلة والسائق الذي يُكمل تلك الرحلة. يمكنك قراءة مقالة مقدّمة عن المركبات لفهم آلية عمل المركبات في "محرك الأسطول" بشكل أفضل.
  • يصف هذا المستند أيضًا بعض عناصر المركبات التي تنطبق فقط على الرحلات عند الطلب.
  • يستخدم Fleet Engine للرحلات عند الطلب مصدرَين: Trip و Vehicle. يوفّر Fleet Engine خدمة gRPC وواجهات REST:
    • TripService: gRPC وREST
    • VehicleService: gRPC وREST
    • للتبسيط، يستخدم هذا الدليل أمثلة على gRPC.

ما هي الرحلة عند الطلب؟

في Fleet Engine، تمثّل الرحلة رحلة عند الطلب يمكنها تحقيق مجموعة متنوعة من أهداف النقل. على سبيل المثال:

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

عناصر الرحلة

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

نموذج البيانات للرحلات

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

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

نموذج بيانات الرحلة

نموذج بيانات المركبة

أنواع الرحلات

عندما تنشئ خدمتك رحلة، يمكنها ضبط الحقل tripType على أيّ مما يلي: EXCLUSIVE أو SHARED.

رحلات حصرية

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

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

الرحلات المشترَكة

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

عادةً ما يتم استخدام رحلة مشترَكة لأحد سيناريوهات مشاركة التكاليف الموضَّحة في قسم سيناريوهات الرحلة.

نقاط الطريق في الرحلة

في "خرائط Google"، نقطة الطريق هي مكان على طول مسار، ويتم تحديدها عادةً من خلال إحداثي خط العرض/خط الطول. بالنسبة إلى الرحلات عند الطلب، يتم تمثيل نقطة الطريق باستخدام عنصر TripWaypoint الذي يحتوي على معلومات إضافية، مثل ما يلي:

  • رقم تعريف الرحلة
  • WaypointType، سواء كان نقطة استلام أو نقطة عبور أو نقطة تسليم
  • معلومات المسار والمسافة بين نقطة الطريق في الرحلة السابقة والنقطة الحالية
  • أحوال حركة المرور على طول المسار إلى نقطة الطريق في الرحلة
  • مدة الرحلة والوقت المقدَّر للوصول إلى نقطة الطريق

اطّلِع على المراجِع التالية:

أنواع نقاط المسار في الرحلة

يتم تحديد نقطة الطريق في الرحلة استنادًا إلى دورة حياة المركبة العامة:

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

قوائم نقاط الطريق للرحلة

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

  • نقاط التوقف المتبقية للمركبة: حقل يُسمى vehicle_waypoints. يحتوي على جميع نقاط التوقف المتبقية لجميع الرحلات التي تم إسنادها إلى المركبة.
  • نقاط الطريق المتبقية للرحلة: حقل باسم remaining_waypoints. يحتوي على نقاط طريق يجب أن تقطعها المركبة بالتسلسل قبل نقطة التسليم النهائية للرحلة. اطّلِع على السيناريوهات في سيناريوهات الرحلة.
    • بالنسبة إلى رحلة ذات وجهة واحدة تم إسنادها إلى مركبة بدون رحلات أخرى في جدولها الزمني، لن يتضمّن ذلك سوى موقعَي التحميل والتسليم ، بافتراض أنّ المركبة لم تغادر نقطة التحميل.
    • في أي سيناريو رحلة آخر يتم فيه أيضًا جدولة المركبة للقيام برحلة أخرى، ستشمل نقاط التوقف المتبقية لأي رحلة في برنامج الرحلة جميع نقاط التوقف من الرحلات الأخرى التي يجب أن تجتاز المركبة قبل الوصول إلى نقطة التوقف لتلك الرحلة. على سبيل المثال، في رحلة متتالية تسير فيها المركبة في طريقها إلى نقطة الاستلام للرحلة "أ"، ستتضمّن نقاط التوقف المتبقية للرحلة "ب" نقطة التوقف للرحلة "أ". يحسب Fleet Engine هذه المعلومات باستخدام الحقل vehicle_waypoints.

اطّلِع على مرجع عنصر Trip: gRPC أو REST.

سيناريوهات الرحلة

توضِّح الرسوم البيانية التالية مجموعة متنوعة من سيناريوهات الرحلات المتوافقة. في هذه السيناريوهات، تكون رحلة "تجميع المسارات" المشتركة فقط من النوع SHARED، وجميع الرحلات الأخرى من النوع EXCLUSIVE. تعرض المخططات البيانية أيضًا حالة الرحلة ونقاط الالتفاف المتبقية للمركبة التي تُجري الرحلة، وهي مفاهيم موضّحة لاحقًا في هذا الدليل.

رحلة إلى وجهة واحدة

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

الرحلات إلى وجهات متعددة

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

الرحلات المتتالية

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

لا يمكن إسناد هذه الرحلات إلا إلى المركبات التي تتيح تحديد جداول زمنية متتالية للرحلات. راجِع مرجع Vehicle REST، gRPC.

الرحلات المشتركة

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

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

حالة الرحلة ودورة حياتها

يوضّح هذا القسم حالة الرحلة وتأثيرها في المركبة والسيناريوهات المختلفة التي تواجهها عند تعيين الرحلات عند الطلب وإدارتها.

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

يسرد الجدول التالي حالة الرحلة حسب النوعَين "نشط" و"غير نشط".

حالات الرحلات النشطة حالات الرحلات غير النشطة
NEW
UNKNOWN_TRIP_STATUS
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
CANCELED

حالة الرحلة ونقاط الطريق المتبقية للمركبة

عند تعيين رحلات إضافية لمركبة تُجري رحلة حاليًا، يجب فهم العلاقة بين نقاط التوقف المتبقية للمركبة وتأثير حالة الرحلة في نقاط التوقف المتبقية.

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

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

  • ENROUTE_TO_INTERMEDIATE_DESTINATION
  • ENROUTE_TO_DROPOFF
  • مكتمل

عند تغيير حالة الرحلة إلى COMPLETED، يزيل Fleet Engine نقطة التوقف الأخيرة للرحلة من قائمة نقاط التوقف المتبقية للمركبة.

في المقابل، لا تؤثر عادةً تغييرات الحالة التي تشير إلى الوصول إلى نقطة طريق في قائمة نقاط الطريق المتبقية للمركبة:

  • ARRIVED_AT_PICKUP
  • ARRIVED_AT_INTERMEDIATE_DESTINATION
  • ARRIVED_AT_DROPOFF

للتوضيح باستخدام مثال على رحلة عند الطلب: لنفترض أنّ السائق ينقل العميل من محل إقامته إلى مكان ينتظر فيه العميل إكمال مهمة، ثم ينقل العميل مرة أخرى إلى محل إقامته. عند إنشائها في البداية، تحتوي الرحلة على ثلاث نقاط طريق: PICKUP INTERMEDIATE وDROPOFF. يوضّح الجدول التالي نتائج طلب نقاط الطريق المتبقية في حالات مختلفة من الرحلة:

حالة الرحلة نقاط التوقف المتبقية
ARRIVED_AT_PICKUP PICKUP
INTERMEDIATE
DROPOFF
ENROUTE_TO_INTERMEDIATE_DESTINATION PICKUP
INTERMEDIATE
DROPOFF
ARRIVED_AT_INTERMEDIATE_DESTINATION PICKUP
INTERMEDIATE
DROPOFF
ENROUTE_TO_DROPOFF PICKUP
INTERMEDIATE
DROPOFF
ARRIVED_AT_DROPOFF PICKUP
INTERMEDIATE
DROPOFF
COMPLETE PICKUP
INTERMEDIATE
DROPOFF

متطلبات الحالة للرحلات التي تم إعادة تعيينها أو إلغاؤها

قبل تنفيذ أيّ من الإجراءات التالية، يجب ضبط حالة الرحلة على NEW أو CANCELED.

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

نتائج البحث استنادًا إلى حالة الرحلة

عند استخدام خدمة SearchTrips لمركبة معيّنة، يتم عرض قائمة الرحلات النشطة في SearchTripsResponse. تظهر الرحلات النشطة أيضًا في الحقل active_trips لكيان Vehicle. راجِع SearchTripsResponse المرجع لمعرفة التفاصيل: gRPC أو REST.

لذلك، تظهر جميع الرحلات التي تحمل حالة "نشطة" في الحقل active_trips، ولكن لا تظهر الرحلات المكتملة أو المُلغاة.

الخطوات التالية