October 20, 2021 8:50 pm

GBFS v2.3-RC está aquí para solucionar (algunos) de sus problemas

*You can find a version of this article in English here.*

*Vous pouvez trouver l’article en français ici.*

Nos encanta ver los feeds de GBFS v2.2 aparecer en todo el mundo, impulsando tantas nuevas integraciones de planificación de viajes y facilitando a los viajeros a encontrar su bicicleta, scooter, ciclomotor o automóvil compartido más cercano. 


Pero a pesar de que amamos la versión 2.2, el GBFS estaba listo para algunas mejoras. ¡Permítanos presentarle v2.3-RC!

Foto: Bicicleta de Capital Bikeshare con etiqueta de reparación. Crédito: Charles Hagman

En pocas palabras, v2.3-RC agrega información sobre:

  • Estaciones que tienen capacidad de carga,
  • Restricciones sobre dónde se puede devolver el vehículo,
  • Iconos de vehículos e información de la marca,
  • Tiempos de reserva del vehículo, y
  • Condiciones y política de privacidad.

Para hacer la vida un poco más fácil en los sistemas basados en estaciones, v2.3-RC también agrega la capacidad de presentar información de precios por tipo de vehículo en lugar de solo por vehículo individual.

¿Por qué quiere usted el GBFS v2.3-RC? v2.3-RC permite mejores descripciones de los servicios que están disponibles, ya que facilita a los productores y consumidores brindar a los viajeros la información que necesitan.

Vamos a profundizar un poco más en cada uno de los cambios. Después de eso, proporcionaremos ejemplos de datos para los desarrolladores.


Los cambios en detalle

Estaciones de carga

Las versiones anteriores de GBFS no tenían una forma de demostrar que una estación podía ofrecer carga de vehículos. Como era de esperarse, nos dimos cuenta de que los operadores habían agregado a los feeds del GBFS una variedad de soluciones diferentes y no estandarizadas. v2.3-RC ha agregado una forma sencilla de indicar si una estación proporciona carga de vehículos. En el futuro, esto facilitará la representación de programas que brinden incentivos para estacionarse en una estación de carga o que requieran que un alquiler se devuelva a una estación de carga.

Restricciones sobre dónde se puede devolver el vehículo

La mayoría de los servicios compartidos de bicicletas, scooters y ciclomotores permiten el alquiler de un punto a otro, a diferencia de, por ejemplo, los alquileres de automóviles tradicionales que se recogen y se dejan en el mismo lugar. Pero a medida que la comunidad propone extender el GBFS para representar el uso compartido de automóviles (con su universo de diferentes modelos operativos), y que los servicios de movilidad compartida incluyen cada vez más pilotos de vehículos adaptables (a menudo con reglas de alquiler más restrictivas), el GBFS necesitaba una forma de representar restricciones sobre dónde se puede finalizar un viaje y dejar un vehículo.

v2.3-RC permite a los proveedores de movilidad compartida definir si el requisito de devolución del vehículo es flotante libre (el vehículo debe devolverse en cualquier lugar dentro del área de servicio), viaje de ida y vuelta (el vehículo debe devolverse en la estación de alquiler original) o estación (el vehículo debe devolverse a cualquier estación dentro del área de servicio).

Gráfico: Un ejemplo de un viaje que requiere que el vehículo sea devuelto a su estación original.

Iconos y marcas

Los feeds públicos del GBFS facilitan a cualquier aplicación de planificación de viajes facilitar la búsqueda y el uso de los servicios de movilidad compartida. Pero las versiones anteriores del GBFS no proporcionaban una forma de representar gráficamente diferentes operadores o vehículos, lo que requería un trabajo adicional por parte de los productores y consumidores del GBFS. v2.3-RC agrega información sobre el logotipo del sistema de movilidad compartida y los colores de la marca y sobre los íconos del tipo de vehículo para ayudar a garantizar una representación gráfica consistente (¡y por lo tanto, un reconocimiento fácil por parte de los viajeros!).

Tiempos de reserva del vehículo

Muchos servicios de movilidad compartida permiten que un viajero reserve un vehículo inmediatamente antes de alquilarlo. El período de tiempo que se puede reservar el vehículo es típicamente de menos de 30 minutos. Durante este tiempo, el vehículo no puede ser alquilado por otro usuario. Si no se inicia un viaje antes de que transcurra el tiempo de reserva, el vehículo se libera y queda disponible para otros usuarios. Con la v2.3-RC, el GBFS puede representar cuánto tiempo de reserva se permite por tipo de vehículo, lo que facilita a las aplicaciones de planificación de viajes brindar a los viajeros opciones que pueden beneficiarlos y poder reservar un vehículo.

Captura de pantalla: aplicación Baywheels

Condiciones y política de privacidad

La v2.3-RC incluye campos para que un proveedor de movilidad compartida comparta sus términos y su política de privacidad, lo que facilita a los viajeros el acceso a esa información cuando están considerando un servicio.

Precios para sistemas basados en estaciones

Como dijimos anteriormente, ¡estamos encantados de ver la versión 2.2 tan ampliamente adoptada! v2.2 mejoró mucho la información de precios (vea nuestra discusión sobre eso aquí). Un cambio que trajo la v2.2 fue agregar una identificación de plan de precios a la información sobre una bicicleta disponible, asociando planes de precios con vehículos individuales. La idea era que al hacer esto a nivel del vehículo individual permitiría un precio dinámico basado en la ubicación del vehículo, ¡lo cual es así! Pero esa solución planteó un desafío para los sistemas basados en estaciones, ya que no están obligados a publicar el archivo con información sobre bicicletas individuales disponibles (en su lugar, pueden publicar esa información a nivel de la estación). También limitó los vehículos a un solo plan de precios.

La v2.3-RC permite que los planes de precios se representen para los tipos de vehículos, permite que se aplique más de un plan de precios a un tipo de vehículo y permite que el operador de movilidad compartida defina un plan de precios predeterminado para que lo utilicen los planificadores de viajes para calcular el costo de un solo viaje.

¿Quiere más detalles? ¡Vea las descripciones y los ejemplos de código a continuación!


Descripciones y ejemplos de código

Estaciones de carga

La v2.3-RC agrega un campo booleano opcional is_charging_station a station_information.json. Esto indica si una estación admite la carga de vehículos eléctricos. Vea el ejemplo a continuación en el bloque de código station_information.json.

Restricciones sobre dónde se puede devolver el vehículo

La v2.3-RC agrega un campo return_type opcional a vehicle_types.json que permite a los operadores definir si el vehículo es free_floating (el vehículo debe devolverse en cualquier lugar dentro del área de servicio), ida y vuelta (el vehículo debe devolverse en la estación de alquiler original) o en la estación (el vehículo debe devolverse a cualquier estación dentro del área de servicio). El campo se modela como una matriz para tener en cuenta los vehículos híbridos que tienen múltiples formas de ser devueltos. Vea el ejemplo a continuación en el bloque de código vehicle_types.json.

Además, para tener en cuenta los casos inusuales en los que un vehículo debe devolverse a una estación en particular que no es la estación original, se ha agregado un campo home_station_id a free_bike_status.json. Vea el siguiente ejemplo en el bloque de código free_bike_status.json.

Iconos de vehículos e información de marca

La v2.3-RC agrega campos a system_information.json y vehicle_types.json para respaldar la información de la marca y los íconos de vehículos.

En vehicle_types.json, se ha agregado un nuevo campo de objeto JSON opcional, vehicle_assets. Dentro de vehicle_assets, un operador puede compartir:

  • una URL para un archivo de icono de vehículo gráfico SVG v1.1 (icon_url),
  • una URL para un archivo de icono de vehículo gráfico SVG v1.1 para el modo oscuro (icon_url_dark), y
  • la última vez que se actualizaron los iconos referenciados (icon_last_modified).

Si se define vehicle_assets, icon_url e icon_last_modified se requieren condicionalmente. Vea el ejemplo a continuación en el bloque de código vehicle_types.json.

En system_information.json, se ha agregado un nuevo campo de objeto JSON opcional, brand_assets. Dentro de brand_assets, un operador puede compartir:

  • una URL para una imagen de marca gráfica SVG v1.1 (brand_image_url),
  • una URL para una imagen de marca gráfica SVG v1.1 para el modo oscuro (brand_image_url_dark),
  • la última vez que se actualizaron las imágenes referenciadas (brand_last_modified),
  • un color utilizado para representar la marca expresado como un código de color hexadecimal de seis dígitos, y
  • un enlace a los términos de licencia de los activos de marca (brand_terms_url).

Si se define brand_assets, brand_image_url y brand_last_modified se requieren condicionalmente. Vea el siguiente ejemplo en el bloque de código system_information.json.

Tiempos de retener el vehículo

La v2.3-RC agrega un campo opcional default_reserve_time a vehicle_types.json que contiene la duración máxima en minutos para la cual se puede reservar un vehículo antes del inicio de un alquiler. El nombre del campo se eligió para mantener la flexibilidad e incluir otros casos de uso en el futuro (por ejemplo, el tiempo máximo de reserva asociado con un plan de precios). Vea el ejemplo a continuación en el bloque de código vehicle_types.json.

Condiciones y política de privacidad

La v2.3-RC agrega cuatro nuevos campos opcionales a system_information.json. Un operador ahora puede compartir una URL (terms_url) que apunta a sus términos de servicio (también conocidos como “términos de uso” o “términos y condiciones”) y una URL (privacy_url) que apunta a su política de privacidad. Ambos campos nuevos están acompañados de dos campos nuevos para indicar la última vez que se actualizó la política en la URL: terms_last_updated y privacy_last_updated. Si se define privacy_url, se requiere privacy_last_updated. Del mismo modo, si se define terms_url, se requiere terms_last_updated. Vea el siguiente ejemplo en el bloque de código system_information.json.

Precios

La v2.3-RC agrega una matriz pricing_plan_ids a vehicle_types.json que contiene los ID del plan de todos los planes de precios aplicables para ese tipo de vehículo. También agrega un campo (default_pricing_plan_id) que define un plan de precios predeterminado que utilizarán los planificadores de viajes para calcular el costo de un solo viaje.

Se conserva la capacidad de definir planes de precios a nivel de vehículo individual, lo que permitirá establecer los precios en función de la ubicación del vehículo u otros factores. Cualquier plan de precios asignado a vehículos individuales en free_bike_status.json reemplaza el plan predeterminado definido en vehicle_types.json. Vea el ejemplo a continuación en el bloque de código vehicle_types.json.


Más detalles para los desarrolladores de movilidad compartida

–> vehicle_types.json

Ejemplo de representación de restricciones de entrega de vehículos, información de la marca y el icono del vehículo, tiempos de reserva del vehículo y precios por tipo de vehículo.

En este ejemplo, puede ver tres tipos de vehículos diferentes:

  • Una bicicleta no eléctrica que se puede reservar durante 30 minutos antes del inicio del viaje, que se puede devolver en cualquier estación o en cualquier lugar del área de servicio (o según lo restringido por geofencing_zones.json), que tiene iconos de vehículos disponibles para el modo normal y oscuro, y al que se pueden aplicar tres planes de precios diferentes (con uno identificado como el predeterminado).
  • Un scooter eléctrico que se puede reservar durante 30 minutos antes del inicio del viaje, con un alcance máximo de 12345 metros con una carga completa, que se puede devolver en cualquier lugar del área de servicio (o según lo restringido por geofencing_zones.json), que tiene iconos de vehículos disponible para el modo regular y oscuro, y al que se aplica un plan de precios.
  • Un sedán de cuatro puertas con motor de combustión que no se puede reservar antes del inicio del viaje, con un rango máximo de X con el tanque lleno, que debe devolverse a la estación de alquiler original, que tiene íconos de vehículos disponibles para el modo regular y oscuro, y al que se aplica un plan de precios..
{
  "last_updated": 1632269413,
  "ttl": 60,
  "version": "2.3",
  "data": {
    "vehicle_types": [
      {
        "vehicle_type_id": "abc123",
        "form_factor": "bicycle",
        "propulsion_type": "human",
        "name": "Example Basic Bike",
        "default_reserve_time": 30,
        "return_type": [
          "any_station",
          "free_floating"
        ],
        "vehicle_assets": {
          "icon_url": "https://www.example.com/assets/icon_bicycle.svg",
          "icon_url_dark": "https://www.example.com/assets/icon_bicycle_dark.svg",
          "icon_last_modified": "2021-06-15"
        },
        "default_pricing_plan_id": "bike_plan_1",
        "pricing_plan_ids": [
          "bike_plan_1",
          "bike_plan_2",
          "bike_plan_3"
        ]
      },
      {
        "vehicle_type_id": "def456",
        "form_factor": "bicycle",
        "propulsion_type": "electric",
        "name": "Example E-bike V2",
        "default_reserve_time": 30,
        "max_range_meters": 12345,
        "return_type": [
          "any_station"
        ],
        "vehicle_assets": {
          "icon_url": "https://www.example.com/assets/icon_ebike.svg",
          "icon_url_dark": "https://www.example.com/assets/icon_ebike_dark.svg",
          "icon_last_modified": "2021-06-15"
        },
        "default_pricing_plan_id": "ebike_plan_1"
      },
      {
        "vehicle_type_id": "car1",
        "form_factor": "car",
        "propulsion_type": "combustion",
        "name": "Four-door Sedan",
        "default_reserve_time": 0,
        "max_range_meters": 523992,
        "return_type": [
          "roundtrip_station"
        ],
        "vehicle_assets": {
          "icon_url": "https://www.example.com/assets/icon_car.svg",
          "icon_url_dark": "https://www.example.com/assets/icon_car_dark.svg",
          "icon_last_modified": "2021-06-15"
        },
        "default_pricing_plan_id": "car_plan_1"
      }
    ]
  }
}

–> free_bike_status.json

Ejemplo de representación de la restricción de entrega de vehículos en la que se requiere que un vehículo se entregue en una estación en particular que puede no ser la estación donde se recogió (home_station_id).

En este ejemplo, puede ver dos bicicletas, ambas disponibles para alquiler (para ambas, is_reserved e is_disabled son falsas). Una bicicleta es una bicicleta no eléctrica y la otra es una bicicleta eléctrica ubicada en una estación (station_id 86). La bicicleta eléctrica ubicada en la estación puede viajar 6543 metros con su carga actual, tiene un plan de precios aplicable y debe devolverse a una ubicación diferente (station_id 146) al final del viaje. Para este ejemplo, el archivo vehicle_types.json adjunto deberá definir vehicle_type_id como si tuviera al menos any_station return_type.

{
  "last_updated": 1609866247,
  "ttl": 0,
  "version": "3.0",
  "data": {
    "bikes": [
      {
        "bike_id": "ghi789",
        "last_reported": 1609866109,
        "lat": 12.345678,
        "lon": 56.789012,
        "is_reserved": false,
        "is_disabled": false,
        "vehicle_type_id": "abc123"
      },
      {
        "bike_id": "jkl012",
        "last_reported": 1609866204,
        "is_reserved": false,
        "is_disabled": false,
        "vehicle_type_id": "def456",
        "current_range_meters": 6543,
        "station_id": "86",
        "pricing_plan_id": "plan3",
        "home_station_id": "146"
      }
    ]
  }
}

–> system_information.json

Ejemplo de representación de condiciones y campos de política de privacidad y activos de marca.

En este ejemplo, puede ver un sistema que ha definido muchos campos opcionales, incluidos todos los campos nuevos agregados en la v2.3-RC: terms_url, terms_last_updated, privacy_url, privacy_last_updated y todos los campos disponibles en brand_assets (brand_last_modified, brand_image_url, brand_image_url_dark , color y terms_url).

{
  "last_updated": 1611598155,
  "ttl": 1800,
  "version": "3.0",
  "data": {
    "system_id": "example_cityname",
    "language": "en",
    "name": "Example Bike Rental",
    "short_name": "Example Bike",
    "operator": "Example Sharing, Inc",
    "url": "https://www.example.com",
    "purchase_url": "https://www.example.com/join",
    "start_date": "2010-06-10",
    "phone_number": "1-800-555-1234",
    "email": "[email protected]",
    "feed_contact_email": "[email protected]",
    "timezone": "US/Central",
    "license_url": "https://www.example.com/data-license.html",
    "terms_url": "https://www.example.com/terms-of-service.html",
    "terms_last_updated": "2021-09-23",
    "privacy_url": "https://www.example.com/privacy-policy.html",
    "privacy_last_updated": "2021-09-25",
    "brand_assets": {
        "brand_last_modified": "2021-06-15",
        "brand_image_url": "https://www.example.com/assets/brand_image.svg",
        "brand_image_url_dark": "https://www.example.com/assets/brand_image_dark.svg",
        "color": "#C2D32C",
        "terms_url": "https://www.example.com/assets/brand.pdf"
      }
      
  }
}