تعريفات مواصفات الخلاصة العامة لمشاركة الدرّاجات (GBFS)

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

في الأقسام التالية، يتّبع كل عنوان التنسيق التالي: Required|Optional|Conditionally required: Feed name (System supported). تتوافق هذه الميزة مع الأنظمة التالية:

  • النظام المثبَّت على قاعدة الإرساء
  • نظام غير مزوّد بمحطات إرساء
  • النظام المستند إلى محطة شحن والنظام غير المستند إلى محطة شحن

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

عنوان العمود المطلوب لخلاصات وسائل النقل الصغيرة

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

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

اسم الحقل النوع المتطلبات الوصف
last_updated الطابع الزمني مطلوب طابع زمني بتنسيق POSIX يحدّد عدد الثواني منذ 1 يناير 1970 الساعة 00:00:00 بالتوقيت العالمي المنسَّق

يجب ضبطها على آخر مرة تم فيها تعديل البيانات في الخلاصة.

ttl عدد صحيح غير سالب مطلوب عدد صحيح غير سالب يمثّل عدد الثواني المتبقية حتى يحين وقت تعديل الخلاصة.

إذا كان يجب تعديل البيانات بمعدّل ثابت، اضبط هذه القيمة على 0.

data JSON مطلوب ملف JSON يحتوي على حقول البيانات الخاصة بالخلاصة الفردية

على سبيل المثال، قد تكون خلاصة free_bike_status.json المجمّعة التي تحدّد عنوان GBFS المشترك كما يلي:

{
    "ttl": 30,
    "last_updated": 1576123774,
    "data": {
        "bikes": [ ... ]  // GBFS free bike status objects.
    }
}

مطلوب: system_information.json (نظام مزوّد بقاعدة إرساء ونظام غير مزوّد بقاعدة إرساء)

يُرجى الرجوع إلى مواصفات GBFS حسب الحاجة.

تقدّم هذه الخلاصة تفاصيل بشأن مشغّل النظام.

اسم الحقل النوع المتطلبات الوصف
system_id رقم التعريف مطلوب تمثّل هذه السمة معرّفًا فريدًا عالميًا لنظام مشاركة المركبات. ومن المفترض أن تظل هذه القيمة ثابتة طوال فترة استخدام النظام. يجب أن يكون لكل نظام أو منطقة جغرافية مميزة يتم فيها تشغيل المركبات رقم تعريف نظام خاص بها. يجب أن تكون معرّفات الأنظمة قابلة للتمييز على أنّها تنتمي إلى نظام معيّن بدلاً من السلاسل العشوائية، مثل bcycle_austin أو biketown_pdx.
name سلسلة مطلوب اسم النظام الذي يظهر للعملاء
rental_apps عنصر مطلوب كائن JSON يحتوي على معلومات تطبيق التأجير لنظامَي التشغيل Android وiOS في الحقول الخاصة بكل منهما.
rental_apps.android عنصر مطلوب بشكل مشروط يحتوي على معلومات حول تنزيل تطبيقات التأجير واكتشاف التطبيقات على نظام التشغيل Android في الحقلَين store_uri وdiscovery_uri. يكون هذا الحقل مطلوبًا إذا كان موفّر النظام لديه تطبيق إيجار على Android.
rental_apps.android.store_uri معرّف الموارد المنتظم (URI) مطلوب معرّف الموارد المنتظم (URI) الذي يمكن تنزيل تطبيق Android الخاص بالاستئجار منه ويكون هذا عادةً معرّف موارد موحّد (URI) لمتجر تطبيقات، مثل Google Play. إذا كان معرّف الموارد المنتظم (URI) يشير إلى متجر تطبيقات، مثل Google Play، ننصح بأن يتّبع معرّف الموارد المنتظم أفضل الممارسات المتعلّقة بنظام التشغيل Android حتى يتمكّن تطبيق المشاهدة من فتح معرّف الموارد المنتظم مباشرةً في تطبيق متجر التطبيقات الأصلي بدلاً من موقع إلكتروني.
rental_apps.android.discovery_uri معرّف الموارد المنتظم (URI) مطلوب معرّف الموارد المنتظم (URI) الذي يتضمّن النموذج your_custom_scheme://your/path/here. يمكن أن يستخدم PackageManager.queryIntentActivities() معرّف الموارد المنتظم (URI) PackageManager.queryIntentActivities() لتحديد ما إذا كان تطبيق Android الخاص بالاستئجار مثبَّتًا على الجهاز.
rental_apps.ios عنصر مطلوب بشكل مشروط يحتوي على معلومات حول تنزيل تطبيقات التأجير واكتشاف التطبيقات على نظام التشغيل iOS في الحقلَين store_uri وdiscovery_uri. هذا الحقل مطلوب إذا كان لدى موفّر النظام تطبيق إيجار على iOS.
rental_apps.ios.store_uri معرّف الموارد المنتظم (URI) مطلوب معرّف الموارد المنتظم (URI) الذي يمكن تنزيل تطبيق تأجير الأجهزة على iOS منه ويكون ذلك عادةً معرّف موارد موحّد (URI) يؤدي إلى أحد متاجر التطبيقات، مثل Apple App Store. إذا كان معرّف الموارد المنتظم يشير إلى متجر تطبيقات، مثل Apple App Store، ننصح بأن يتّبع معرّف الموارد المنتظم أفضل الممارسات المتعلّقة بنظام التشغيل iOS حتى يتمكّن تطبيق المشاهدة من فتح معرّف الموارد المنتظم مباشرةً في تطبيق متجر التطبيقات الأصلي بدلاً من موقع إلكتروني.
rental_apps.ios.discovery_uri معرّف الموارد المنتظم (URI) مطلوب معرّف الموارد المنتظم (URI) الذي يتضمّن النموذج your_custom_scheme://. يمكن أن تستخدم UIApplication canOpenURL: معرّف الموارد الموحّد (URI) لمعرفة ما إذا كان تطبيق iOS الخاص بخدمة التأجير مثبّتًا على الجهاز.

مطلوب: free_bike_status.json (نظام غير مزوّد بمحطات)

يُرجى الرجوع إلى مواصفات GBFS حسب الحاجة.

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

اسم الحقل النوع المتطلبات الوصف
bikes مصفوفة مطلوب مصفوفة من الدراجات المتوقفة والمتاحة حاليًا، حيث تكون كل دراجة عبارة عن كائن.
bikes[].bike_id رقم التعريف مطلوب معرّف الدراجة

لحماية الخصوصية، يمكن تغيير المعرّف إلى سلسلة عشوائية بعد كل رحلة.

bikes[].lat خط العرض مطلوب خط عرض الدراجة بنظام WGS 84، بتنسيق الدرجات العشرية
bikes[].lon خط الطول مطلوب تمثّل هذه السمة خط طول الدراجة بنظام WGS 84، بتنسيق الدرجات العشرية.
bikes[].is_reserved منطقي مطلوب تُستخدَم لتحديد ما إذا كانت الدراجة محجوزة حاليًا، على النحو التالي:
  • إذا كانت الدراجة محجوزة حاليًا، اضبط القيمة على true.
  • إذا لم تكن الدراجة محجوزة حاليًا، اضبط القيمة على false.
bikes[].is_disabled منطقي مطلوب تحديد ما إذا كانت الدراجة متوقفة عن العمل أو معطّلة حاليًا، كما يلي:
  • إذا كانت الدراجة متوقّفة حاليًا، اضبط القيمة على true.
  • إذا لم تكن الدراجة غير مفعَّلة حاليًا، اضبطها على false.
bikes[].rental_uris عنصر مطلوب عنصر JSON يحتوي على معرّفات الموارد المنتظمة (URI) الخاصة بالاستئجار على Android وiOS والويب في الحقول الخاصة بكل منها.
bikes[].rental_uris.android معرّف الموارد المنتظم (URI) مطلوب بشكل مشروط معرّف URI يمكن تمريره إلى تطبيق Android باستخدام android.intent.action.VIEW Android intent لدعم الروابط لصفحات في التطبيق على Android. يجب أن يكون rental_uris المقدَّم رابطًا لتطبيق Android حتى لا يحتاج تطبيق العرض إلى إدارة عملية إعادة توجيه المستخدم إلى متجر التطبيقات يدويًا في حال لم يكن تطبيق مقدّم المحتوى مثبّتًا على جهاز المستخدم.

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

ليس من الضروري أن تتضمّن معرّفات الموارد الموحّدة (URI) السمة bike_id الخاصة بالدراجة، طالما أنّ الشريك لديه وسائل أخرى لتحديد الدراجة المعنية. على سبيل المثال، يمكن لتطبيق تأجير الدراجات استخدام معرّفات أخرى ضمن معرّف الموارد المنتظم (URI) لتحديد الدراجة بشكل فريد.

هذا الحقل مطلوب إذا كان الشريك لديه تطبيق إيجار على Android.

مثال على Android App Links:

https://www.example.com/app?sid=1234567890&platform=android

bikes[].rental_uris.ios معرّف الموارد المنتظم (URI) مطلوب بشكل مشروط عنوان URI يمكن استخدامه على أجهزة iOS لتشغيل تطبيق استئجار الدراجة لمزيد من المعلومات حول هذا الموضوع، يُرجى الرجوع إلى مقالة Apple حول مخططات عناوين URL المخصّصة في نظام التشغيل iOS. يجب أن يكون rental_uris المقدَّم iOS Universal Links حتى لا يحتاج تطبيق المشاهدة إلى إدارة عملية إعادة توجيه المستخدم إلى متجر التطبيقات يدويًا في حال لم يكن تطبيق مقدّم المحتوى مثبّتًا على جهاز المستخدم.

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

ليس من الضروري أن تتضمّن معرّفات الموارد المنتظمة (URI) السمة bike_id للدراجة، طالما أنّ الشريك لديه وسائل أخرى لتحديد الدراجة المعنية. على سبيل المثال، يمكن لتطبيق تأجير الدراجات استخدام معرّفات أخرى ضمن معرّف الموارد المنتظم (URI) لتحديد الدراجة بشكل فريد.

هذا الحقل مطلوب إذا كان لدى الشريك تطبيق إيجار على iOS.

مثال على الروابط العامة في iOS:

https://www.example.com/app?sid=1234567890&platform=ios

bikes[].rental_uris.web عنوان URL اختياري

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

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

ليس من الضروري أن تتضمّن عناوين URL السلسلة bike_id للدراجة أو أن تتّبع الاتفاقيات الدلالية لعناوين URL الخاصة بالاستئجار في Android أو iOS. يمكن لتطبيق تأجير الدراجات استخدام معرّفات أخرى ضمن عنوان URL تحدّد الدراجة بشكلٍ فريد.

إذا لم يتم ضبط هذا الحقل، يعني ذلك أنّ الروابط لصفحات في التطبيق غير متاحة لمتصفّح الويب.

مثال للقيمة:

https://www.example.com/app?sid=1234567890

bikes[].vehicle_type_id رقم التعريف مطلوب تمثّل هذه السمة vehicle_type_id للمركبة كما هو موضّح في قسم vehicle_types.json.
bikes[].pricing_plan_id رقم التعريف مطلوب معرّف خطة الأسعار التي يتم تطبيقها عند استئجار هذا النوع من المركبات كما هو موضّح في القسم system_pricing_plans.json.
bikes[].current_range_meters عدد عشري غير سالب مطلوب بشكل مشروط هذا الحقل مطلوب إذا كان تعريف vehicle_type الذي يتوافق مع المركبة يتضمّن محركًا.

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

bikes[].last_reported الطابع الزمني اختياري يتم ضبطها على آخر مرة أبلغت فيها المركبة مشغِّلها بحالتها.

في ما يلي مثال على free_bike_status.json:

"bikes": [{
    "bike_id": "xyz123",
    "lat": 12.34,
    "lon": 56.78,
    "is_reserved": true,
    "is_disabled": false,
    "rental_uris":{
      "android": "https://www.example.com/app?sid=1234567890&platform=android",
      "ios": "https://www.example.com/app?sid=1234567890&platform=ios",
      "web": "https://www.example.com/app?sid=1234567890"
    },
    "vehicle_type_id": "scooter_electric",
    "pricing_plan_id": "sydneyPlan1",
    "current_range_meters": 4500,
    "last_reported": 1434054678
},
{
    "bike_id": "abc123",
    "lat": 1.34,
    "lon": 146.78,
    "is_reserved": false,
    "is_disabled": true,
    "rental_uris":{
      "android": "https://www.example.com/app?sid=1234567890&platform=android",
      "ios": "https://www.example.com/app?sid=1234567890&platform=ios",
      "web": "https://www.example.com/app?sid=1234567890"
    },
    "vehicle_type_id": "bike_manual",
    "pricing_plan_id": "sydneyPlan1",
    "last_reported": 1434054241
}
]

مطلوب: vehicle_types.json (نظام ثابت المواقف ومتغيّر المواقف)

يُرجى الرجوع إلى مواصفات GBFS حسب الحاجة.

تحدّد هذه الخلاصة تفاصيل أنواع المركبات الفردية، كما هو موضّح في القسم free_bike_status.json.

اسم الحقل النوع المتطلبات الوصف
vehicle_types مصفوفة مطلوب مصفوفة من العناصر، يحدّد كل عنصر نوعًا مميزًا من المركبات في قائمة أعمال مقدّم الخدمة. يمكن أن يكون هناك عنصر واحد فقط لنوع مركبة معيّن.
vehicle_types[].vehicle_type_id رقم التعريف مطلوب معرّف فريد لنوع مركبة معيّن
vehicle_types[].form_factor Enum مطلوب تعداد يمثّل شكل المركبة العام، من القائمة التالية للقيم الصالحة حاليًا:
  • bicycle
  • scooter
  • other
vehicle_types[].propulsion_type Enum مطلوب تعداد يمثّل نوع الدفع الأساسي للمركبة، من قائمة القيم الصالحة حاليًا التالية:
  • human: الدفع بالقدم أو الدوّاسة
  • electric_assist: توفّر الطاقة فقط إلى جانب الدفع البشري
  • electric: تحتوي على وضع التحكّم في السرعة مع محرّك يعمل بالبطارية
  • combustion: يحتوي على وضع دواسة الوقود مع محرّك يعمل بمحرك احتراق داخلي
vehicle_types[].max_range_meters عدد عشري غير سالب مطلوب بشكل مشروط إذا لم يتم ضبط propulsion_type على human، يعني ذلك أنّ المركبة مزوّدة بمحرّك، وبالتالي يكون هذا الحقل مطلوبًا.

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

في ما يلي مثال على vehicle_types.json:

"vehicle_types": [
  {
    "vehicle_type_id": "bike_manual",
    "form_factor": "bicycle",
    "propulsion_type": "human"
  },
  {
    "vehicle_type_id": "scooter_electric",
    "form_factor": "scooter",
    "propulsion_type": "electric",
    "max_range_meters": 10000
  }
]

مطلوب: system_pricing_plans.json (نظام غير مزوّد بمحطة)

يُرجى الرجوع إلى مواصفات GBFS حسب الحاجة.

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

اسم الحقل النوع المتطلبات الوصف
plans مصفوفة مطلوب مصفوفة من العناصر يحدّد كل عنصر فيها خطة أسعار معيّنة.
plans[].plan_id رقم التعريف مطلوب تمثّل هذه السمة معرّفًا فريدًا لخطة الأسعار التي يقدّمها الموفّر.
plans[].url عنوان URL اختياري عنوان URL الذي يوجّه المستخدمين النهائيين إلى مزيد من المعلومات حول خطة الأسعار.
plans[].currency سلسلة مطلوب تمثّل هذه السمة معيار ISO 4217 لخطة الأسعار.
plans[].price عدد عشري غير سالب مطلوب

يجب تحديد خطة الأسعار إما كخطة أسعار غير مصنّفة أو كخطة أسعار مصنّفة:

خطة أسعار غير مصنّفة

هذه الخطة عبارة عن أجرة ثابتة واحدة.

اضبط الحقل التالي:

  • استبدِل price بالسعر الثابت للرحلة بأكملها.
خطة السعر المحدّد

هذه الخطة هي سعر معدّل خطي متقطع.

اضبط الحقل التالي:

  • استبدِل price بالسعر الأساسي الذي يتم تحصيله مرة واحدة فقط لكل رحلة.

اضبط أحد الحقلَين التاليَين أو كليهما:

  • استبدِل per_km_pricing: بسعر الرحلة المحدّد لكل كيلومتر.
  • per_min_pricing: سعر الرحلة المحدّد بالسعر لكل دقيقة.
plans[].per_km_pricing مصفوفة مطلوب بشكل مشروط

يكون هذا الحقل مطلوبًا إذا كان السعر مرتبطًا بالمسافة المقطوعة بالكيلومترات.

مصفوفة من العناصر يحدّد كل عنصر منها جزءًا مقسّمًا حسب المسافة. يجب أن تكون قيمة start لكل مقطع أقل من أو تساوي قيمة start للمقطع التالي.

لتحديد السعر الإجمالي للخطة المحدّدة، أضِف قيمة plans[].price الخاصة بالخطة المحدّدة إلى الأسعار المتراكمة للشرائح في plans[].per_km_pricing وplans[].per_min_pricing.

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

plans[].per_km_pricing[].start عدد صحيح غير سالب مطلوب عدد الكيلومترات التي يبدأ احتساب رسوم الشريحة عندها. يتم ضبط هذا الحقل على القيمة الشاملة التي تبدأ نطاق الشريحة. وبالتالي، عند استهلاك عدد الكيلومترات المحدّد، يتم تحصيل رسوم rate مرة واحدة.
plans[].per_km_pricing[].rate عدد عائم مطلوب السعر الذي يتم تحصيله مقابل كل interval، والذي يبدأ من start الشاملة في المقطع. إذا تم ضبط هذا الحقل على رقم سالب، سيحصل المسافر على خصم.
plans[].per_km_pricing[].interval عدد صحيح غير سالب مطلوب

الفاصل الزمني بالكيلومترات الذي يتم عنده إعادة تطبيق rate الخاص بالجزء إلى أجل غير مسمى ما لم يتم ضبط end الخاص بالجزء على أي عدد صحيح غير سالب

تتم إعادة تطبيق rate مرة واحدة في بداية كل interval، ولا يتم أخذ تقريب المسافة في الاعتبار.

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

إذا تم ضبط هذا الحقل على 0، سيتم تحصيل رسوم rate مرة واحدة بالضبط عند start من المقطع.

plans[].per_km_pricing[].end عدد صحيح غير سالب اختياري

عدد الكيلومترات التي لم يعُد عندها يتم تطبيق rate على الشريحة يتم ضبط هذا الحقل على القيمة الحصرية التي تنتهي بها شريحة النطاق. على سبيل المثال، إذا تم ضبط end على 40، لن ينطبق rate على مسافة 40 كيلومترًا.

إذا لم يتم ضبط هذا الحقل أو كان فارغًا، سيتم تحصيل رسوم rate مقابل المقطع إلى أن تنتهي الرحلة، بالإضافة إلى أي مقاطع إضافية تليها.

plans[].per_min_pricing مصفوفة مطلوب بشكل مشروط

إذا كان السعر مرتبطًا بالوقت المنقضي، ويتم عرضه بالدقائق، يكون هذا الحقل مطلوبًا.

مصفوفة من العناصر يحدّد كل عنصر منها شريحة مقسّمة حسب الوقت. يجب أن تكون قيمة start لكل مقطع أقل من أو تساوي قيمة start للمقطع التالي.

لتحديد السعر الإجمالي للخطة المحدّدة، أضِف قيمة plans[].price الخاصة بالخطة المحدّدة إلى الأسعار المتراكمة للشرائح في plans[].per_km_pricing وplans[].per_min_pricing.

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

plans[].per_min_pricing[].start عدد عائم مطلوب عدد الدقائق التي يبدأ احتساب رسوم الشريحة عندها. يتم ضبط هذا الحقل على القيمة الشاملة التي تبدأ نطاق الشريحة. وبالتالي، بعد انقضاء عدد الدقائق المحدّد، سيتم تحصيل رسوم rate مرة واحدة.
plans[].per_min_pricing[].rate عدد عائم مطلوب يشير هذا الرقم إلى السعر الذي يتم تحصيله مقابل كل interval. يبدأ المعدّل عند start الشاملة من المقطع. إذا تم ضبط هذا الحقل على رقم سالب، سيحصل المسافر على خصم.
plans[].per_min_pricing[].interval عدد صحيح غير سالب مطلوب

الفاصل الزمني بالدقائق الذي تتم فيه إعادة تطبيق rate للشريحة إلى أجل غير مسمى ما لم يتم ضبط end للشريحة على أي عدد صحيح غير سالب.

يتم إعادة تطبيق rate مرة واحدة في بداية كل interval، ولا يتم أخذ أي تقريب لوقت السفر في الاعتبار.

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

إذا تم ضبط هذا الحقل على 0، سيتم تحصيل رسوم rate مرة واحدة بالضبط عند start من المقطع.

plans[].per_min_pricing[].end عدد صحيح غير سالب اختياري

عدد الدقائق التي لم يعُد عندها يتم تطبيق rate على الشريحة. يتم ضبط هذا الحقل على القيمة الحصرية التي تنتهي بها شريحة النطاق. على سبيل المثال، إذا تم ضبط end على 20، لن ينطبق rate بعد 20 دقيقة.

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

أمثلة على ملف system_pricing_plans.json

يقدّم هذا القسم system_pricing_plans.json عيّنات تعليمات برمجية مفيدة. يتم أيضًا تقديم التفاصيل والنتائج ذات الصلة بكل مثال.

المثال 1 لملف system_pricing_plans.json

يعرض نموذج رمز خطة الأسعار التالي الرسوم استنادًا إلى مدة الرحلة للفواصل الزمنية التالية:

  • [0,1): $2 USD
    • إذا كانت الرحلة أقل من دقيقة، يدفع المستخدم دولارَين أمريكيَّين.
    • مثال: رحلة مدتها 59 ثانية
  • ‫[1,2): 3 دولار أمريكي
    • إذا كانت مدة الرحلة دقيقة واحدة أو أكثر ولكن أقل من دقيقتين، يدفع المستخدم 2 دولار أمريكي + 1 دولار أمريكي = 3 دولارات أمريكية.
    • أمثلة: رحلة لمدة دقيقة واحدة، رحلة لمدة دقيقة واحدة و45 ثانية
  • x عدد الدقائق التي يكون فيها x أكبر من أو يساوي 2: $3 + (($2 + $1) * (x - 2 + 1)) USD
    • إذا كانت مدة الرحلة دقيقتَين أو أكثر، يدفع المستخدم 3 دولار أمريكي مقابل جزء الرحلة الذي تقل مدته عن دقيقتَين، و (1 دولار أمريكي [متابعة من الإدخال الأول في القائمةper_min_pricing] + 2 دولار أمريكي [الإدخال الثاني في القائمةper_min_pricing]) مقابل كل دقيقة بعد دقيقتَين وضمنهما.
    • أمثلة:
      • تكلفة الرحلة التي تستغرق دقيقتَين هي 3 دولار أمريكي + (2 دولار أمريكي + 1 دولار أمريكي) = 6 دولار أمريكي
      • تكلفة الرحلة التي تستغرق دقيقتَين و30 ثانية: 3 دولار أمريكي + (2 دولار أمريكي + 1 دولار أمريكي) = 6 دولار أمريكي
      • تكلفة الرحلة التي تستغرق 3 دقائق هي 3 دولارات أمريكية + (2 دولار أمريكي + 1 دولار أمريكي) * 2 = 9 دولارات أمريكية
      • تكلفة رحلة مدتها 10 دقائق: 3 دولار أمريكي + (2 دولار أمريكي + 1 دولار أمريكي) * 9 = 30 دولار أمريكي
{
  "plans": {
    "plan_id": "plan1",
    "currency": "USD",
    "price": 2,
    "per_min_pricing": [
      {
          "interval": 1,
          "rate": 1,
          "start": 1
      },
      {
          "interval": 1,
          "rate": 2,
          "start": 2
      }
    ],
  }
}

المثال 2 على ملف system_pricing_plans.json

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

  • على وجه التحديد، يتم تحصيل 0.25 دولار كندي لكل كيلومتر و0.50 دولار كندي لكل دقيقة من المستخدم النهائي.
  • يحدث كلا المعدّلين في الوقت نفسه ولا يعتمد أحدهما على الآخر.
  • وبالتالي، تبلغ تكلفة رحلة بطول كيلومتر واحد تستغرق 10 دقائق 9 دولار كندي، ويمكن تقسيم التكلفة على النحو التالي:
    • ‫3 دولار أمريكي، السعر الأساسي
    • ‫0.25 دولار أمريكي × 2، يتم تحصيلها مرة واحدة في بداية الرحلة ومرة واحدة عند بلوغ مسافة كيلومتر واحد.
    • 0.5 دولار أمريكي * 11، يتم تحصيل الرسوم مرة واحدة في بداية كل دقيقة. تبدأ الرسوم عند 0 ثانية، ويتم تحصيل الرسوم عن الفاصل الزمني الأخير عند 10 دقائق.
{
  "plans": {
    "plan_id": "plan2",
    "currency": "CAD",
    "price": 3,
    "per_km_pricing": [{
      "start": 0,
      "rate": 0.25,
      "interval": 1
    }],
    "per_min_pricing": [{
      "start": 0,
      "rate": 0.50,
      "interval": 1
    }]
  }
}

مطلوب بشكل مشروط: geofencing_zones.json (نظام مزوّد بمحطة شحن وبدونها)

يُرجى الرجوع إلى مواصفات GBFS حسب الحاجة.

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

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

اسم الحقل النوع المتطلبات الوصف
geofencing_zones عنصر مطلوب عنصر FeatureCollection كما هو موضّح في IETF RFC 7946 هو عنصر يتضمّن حقلاً باسم features. قيمة features هي مصفوفة JSON. كل عنصر من مصفوفة JSON هو عنصر Feature.

يتم هنا تحديد كل منطقة محددة جغرافيًا والقواعد والسمات المرتبطة بها وتعريفات FeatureCollection كجزء من تعريفات خلاصة geofencing_zones.json.

geofencing_zones.type سلسلة مطلوب اضبط القيمة على FeatureCollection كما هو موضّح في IETF RFC 7946.
geofencing_zones.features مصفوفة مطلوب مصفوفة JSON، حيث يكون كل عنصر من عناصر مصفوفة JSON عبارة عن عنصر Feature.
geofencing_zones.features[].type سلسلة مطلوب اضبط القيمة على Feature كما هو موضّح في IETF RFC 7946.
geofencing_zones.features[].geometry GeoJSON Multipolygon مطلوب تمثّل هذه السمة مضلّعًا متعدّد الأضلاع بتنسيق GeoJSON يوضّح الأماكن التي لا يمكن فيها بدء الرحلات أو إنهاؤها أو المرور بها، بالإضافة إلى القيود الأخرى. يحدّد ترتيب النقاط في اتجاه عقارب الساعة المساحة المحاطة بالمضلّع، بينما يحدّد ترتيب النقاط في عكس اتجاه عقارب الساعة المساحة خارج المضلّع. لمزيد من المعلومات حول هذا الموضوع، يُرجى الرجوع إلى قاعدة اليد اليمنى.
geofencing_zones.features[].properties عنصر مطلوب تمثّل هذه السمة عنصرًا يحدّد بدلات السفر وقيوده.
geofencing_zones.features[].properties.rules مصفوفة اختياري مصفوفة من العناصر، يحدّد كل عنصر قاعدة واحدة فقط. في حال تداخل قاعدتين أو أكثر أو تعارضهما أو تضاربهما بأي شكل من الأشكال، تكون الأولوية للقاعدة الأولى المحدّدة في ترتيب ملف JSON.
geofencing_zones.features[].properties.rules[].vehicle_type_id مصفوفة اختياري مصفوفة من معرّفات أنواع المركبات، حيث يمثّل كل عنصر vehicle_type_id، ويجب تطبيق أي قيود عليه. في حال عدم تحديد vehicle_type_id، تنطبق القيود على جميع أنواع المركبات.
geofencing_zones.features[].properties.rules[].ride_allowed منطقي مطلوب تحدّد هذه السمة ما إذا كان يمكن بدء جولة الدراجة "غير المرتبطة بمحطة" وإنهاؤها في المنطقة، وذلك على النحو التالي:
  • إذا كان يمكن بدء رحلة الدراجة غير المركونة وإنهاؤها في المنطقة، اضبط القيمة على true.
  • إذا تعذّر بدء رحلة الدراجة غير المرتبطة بمحطة وإنهاؤها في المنطقة المحدّدة على أنّها false.

في ما يلي مثال على geofencing_zones.json:

"geofencing_zones":{
  "type":"FeatureCollection",
  "features":[{
    "type":"Feature",
    "properties":{
      "rules":[{
        "vehicle_type_id":"scooter",
        "ride_allowed": false
      }]
    },
    "geometry":{
      "type":"MultiPolygon",
      "coordinates":[[[
        [-122.66780376434326, 45.49896266763551],
        [-122.66810417175292, 45.49824825558575],
        [-122.66830801963805, 45.49632305799116],
        [-122.66780376434326, 45.49896266763551]
      ]]]
    }
  }]
}

مطلوب: station_information.json (نظام الإرساء)

يُرجى الرجوع إلى مواصفات GBFS حسب الحاجة.

تحدّد هذه الخلاصة المعلومات العامة حول محطات مشاركة الدراجات العامة.

اسم الحقل النوع المتطلبات الوصف
stations مصفوفة مطلوب مصفوفة من العناصر يحدّد كل عنصر فيها محطة واحدة فقط.
stations[].station_id سلسلة مطلوب معرّف المحطة
stations[].name سلسلة مطلوب تمثّل هذه السمة الاسم العلني للمحطة باللغة المحلية للمدينة التي تقع فيها المحطة. يجب أن يلتزم name بما هو مستخدَم في اللوحات الإرشادية في المحطة، حيثما كان ذلك متاحًا، أو يجب أن يعكس الموقع الجغرافي للمحطة من خلال استخدام شارع متقاطع أو معلم محلي. لا تستخدِم اختصارات مثل "شارع" بدلاً من "شارع" إلا إذا كانت مستخدَمة بشكل صريح في اللوحات الإرشادية، ويجب أن يكون name بأحرف مختلطة وفقًا للاتفاقيات المحلية بشأن استخدام الأحرف الكبيرة في أسماء الأماكن وليس بأحرف كبيرة بالكامل.
stations[].lat خط العرض مطلوب خط عرض المحطة بنظام WGS 84، بتنسيق الدرجات العشرية
stations[].lon خط الطول مطلوب تمثّل هذه السمة خط طول المحطة بنظام WGS 84، بتنسيق الدرجات العشرية.
stations[].capacity عدد صحيح غير سالب اختياري عدد صحيح غير سالب يمثّل إجمالي عدد نقاط الإرساء المثبّتة في المحطة، سواء كانت متاحة أو غير متاحة.
stations[].rental_uris عنصر مطلوب

عنصر JSON يحتوي على معرّفات الموارد المنتظمة (URI) الخاصة بالاستئجار على Android وiOS والويب في الحقول الخاصة بكل منها.

في حال تحديد معرّفات الموارد الموحّدة هذه، فإنّها تلغي الروابط لصفحات في التطبيق التلقائية التي تم ضبطها عند إعداد مقدّم الخدمة.

stations[].rental_uris.android معرّف الموارد المنتظم (URI) مطلوب بشكل مشروط

معرّف موارد منتظم (URI) يمكن تمريره إلى تطبيق Android باستخدام android.intent.action.VIEW Android intent لتوفير روابط لصفحات في التطبيق على Android يجب أن يكون rental_urisالمعرّف المقدَّم رابطًا لتطبيق Android كي لا يحتاج تطبيق العرض إلى إدارة عملية إعادة توجيه المستخدم إلى متجر التطبيقات يدويًا في حال لم يكن تطبيق مقدّم الخدمة مثبّتًا على الجهاز.

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

ليس من الضروري أن تتضمّن معرّفات الموارد الموحّدة station_id للمحطة، طالما أنّ الشريك لديه وسائل أخرى لتحديد المحطة المعنية. على سبيل المثال، يمكن لتطبيق تأجير الدراجات استخدام معرّفات أخرى ضمن معرّف الموارد المنتظم (URI) لتحديد المحطة بشكل فريد.

هذا الحقل مطلوب إذا كان الشريك لديه تطبيق إيجار على Android.

مثال على Android App Links:

https://www.example.com/app?sid=1234567890&platform=android

stations[].rental_uris.ios معرّف الموارد المنتظم (URI) مطلوب بشكل مشروط

معرّف موارد منتظم (URI) يمكن استخدامه على أجهزة iOS لتشغيل تطبيق الإيجار الخاص بالمحطة لمزيد من المعلومات حول هذا الموضوع، يُرجى الرجوع إلى مقالة Apple حول مخططات عناوين URL المخصّصة على نظام التشغيل iOS. يجب أن يكون rental_uris المقدَّم روابط عامة على iOS حتى لا يحتاج تطبيق المشاهدة إلى إدارة عملية إعادة توجيه المستخدم إلى متجر التطبيقات يدويًا في حال لم يكن تطبيق مقدِّم الخدمة مثبّتًا على الجهاز.

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

ليس من الضروري أن تتضمّن معرّفات الموارد المنتظمة station_id للمحطة. يمكن لتطبيق تأجير الدراجات استخدام معرّفات أخرى ضمن معرّف الموارد المنتظم (URI) لتحديد المحطة بشكل فريد.

هذا الحقل مطلوب إذا كان لدى الشريك تطبيق إيجار على iOS.

مثال على الروابط العامة في iOS:

https://www.example.com/app?sid=1234567890&platform=ios

stations[].rental_uris.web عنوان URL اختياري

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

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

ليس من الضروري أن تتضمّن عناوين URL السلسلة station_id الخاصة بالمحطة أو أن تتّبع الاتفاقيات الدلالية لعناوين URL الخاصة بالاستئجار على Android أو iOS. يمكن لتطبيق تأجير الدراجات استخدام معرّفات أخرى ضمن عنوان URL تحدّد المحطة بشكل فريد.

إذا لم يتم ضبط هذا الحقل، يعني ذلك أنّ الروابط لصفحات في التطبيق غير متاحة لمتصفّح الويب.

مثال للقيمة:

https://www.example.com/app?sid=1234567890

في ما يلي مثال على station_information.json:

"stations": [
  {
    "station_id": "597",
    "name": "Silverthorne Road, Battersea",
    "lat": 51.472865,
    "lon": -0.148059,
    "capacity": 10,
    "rental_uris": {
        "android": "https://www.example.com/app?sid=1234567890&platform=android",
        "ios": "https://www.exampleexample.com/app?sid=1234567890&platform=ios",
        "web": "https://www.example.com/app?sid=1234567890&platform=web"
    }
  },
]

مطلوب: station_status.json (نظام الإرساء)

يُرجى الرجوع إلى مواصفات GBFS حسب الحاجة.

يحدّد هذا الخلاصة الحالة الحالية والمحدّثة لمحطات مشاركة الدراجات العامة.

اسم الحقل النوع المتطلبات الوصف
stations مصفوفة مطلوب مصفوفة من العناصر، يحدّد كل عنصر منها محطة واحدة فقط.
stations[].station_id سلسلة مطلوب معرّف المحطة
stations[].num_bikes_available عدد صحيح غير سالب مطلوب

عدد الدراجات الوظيفية غير السالبة الموجودة فعليًا في المحطة والتي يمكن تأجيرها

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

stations[].vehicle_types_available مصفوفة اختياري

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

stations[].vehicle_types_available[].vehicle_type_id رقم التعريف مطلوب

تمثّل هذه السمة vehicle_type_id لكل نوع من أنواع المركبات المتوفّرة في المحطة كما هو موضّح في vehicle_types.json.

stations[].vehicle_types_available[].count عدد صحيح غير سالب مطلوب

تمثّل هذه السمة إجمالي عدد المركبات المتاحة في vehicle_type_id المحدّد في المحطة، وذلك وفقًا لما هو موضّح في vehicle_types.json.

stations[].num_docks_available عدد صحيح غير سالب مطلوب بشكل مشروط

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

عدد صحيح غير سالب يمثّل إجمالي عدد أرصفة الركن الوظيفية المتوفّرة في المحطة والتي يمكنها قبول عمليات إعادة المركبات

لتحديد ما إذا كانت المحطة تقبل حاليًا إعادة الدراجات، عليك فحص الحقل is_returning الخاص بالمحطة والعثور على القيمة المنطقية true.

stations[].is_installed منطقي مطلوب

قيمة منطقية تشير إلى ما إذا كانت المحطة متوفرة حاليًا في الشارع وتم تركيبها.

إذا كانت محطة الشحن مثبَّتة في الشارع، اضبطها على true.

إذا لم تكن محطة مشاركة الدراجات مثبّتة في الشارع، اضبطها على false.

stations[].is_renting منطقي مطلوب

قيمة منطقية تشير إلى ما إذا كانت المحطة تتيح حاليًا استئجار الدراجات.

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

إذا كانت المحطة لا تؤجّر دراجات حاليًا، اضبط القيمة على false.

stations[].is_returning منطقي مطلوب

قيمة منطقية تشير إلى ما إذا كانت المحطة تقبل حاليًا إعادة الدراجات.

إذا كانت المحطة تقبل حاليًا عمليات إعادة الدراجات، اضبط القيمة على true. حتى إذا كانت محطة الشحن ممتلئة، ولكنها ستسمح بالإرجاع إذا لم تكن ممتلئة، يتم ضبط is_returning على true.

إذا كانت المحطة لا تقبل حاليًا عمليات إرجاع الدراجات، اضبطها على false.

في ما يلي مثال على station_status.json:

"stations": [
        {
          "station_id": "2",
          "num_bikes_available": 6,
          "vehicle_types_available": [
            {
              "vehicle_type_id" : "scooter_electric",
              "count" : 2
            },
            {
              "vehicle_type_id" : "bike_manual",
              "count" : 4
            }
          ],
          "num_docks_available": 30,
          "is_installed": true,
          "is_renting": true,
          "is_returning": true,
          "last_reported": 1576119631
        },
]