Antes de continuar con esta sección, si aún no lo hiciste, verifica los sistemas de micromovilidad admitidos para los que estás creando el feed.
En las siguientes secciones, cada encabezado tiene el siguiente formato:
Required|Optional|Conditionally required: Feed name (System supported)
. Se admiten los siguientes sistemas:
- Sistema asegurado
- Sistema sin estaciones
- Sistema con y sin estación de carga
Para lograr una integración exitosa con Google, proporciona solo los archivos necesarios para el sistema que describe tu feed y especifica los campos obligatorios incluidos en las secciones pertinentes. En el caso de los campos obligatorios de forma condicional, consulta la descripción del campo para obtener orientación. También puedes especificar campos opcionales que agreguen información y brinden una mejor experiencia del usuario.
Encabezado obligatorio para los feeds de micromovilidad
Los feeds de micromovilidad son feeds que contienen datos estructurados de micromovilidad con o sin estaciones, como se define en este artículo.
Todos los feeds siempre deben especificar los campos incluidos en la siguiente tabla en el nivel superior del objeto JSON, que se conoce colectivamente como el encabezado común de GBFS.
Nombre del campo | Tipo | Requisito | Descripción |
---|---|---|---|
last_updated |
Marca de tiempo | Obligatorio | Es una marca de tiempo POSIX que especifica una cantidad de segundos desde el 1 de enero de 1970 a las 00:00:00 UTC.
Se establece en la última vez que se actualizaron los datos del feed. |
ttl |
Número entero no negativo | Obligatorio | Es un número entero no negativo que representa la cantidad de segundos que quedan hasta que sea hora de actualizar el feed.
Si los datos deben actualizarse a una velocidad constante, establece este valor en |
data |
JSON | Obligatorio | Es el JSON que contiene los campos de datos del feed individual. |
Por ejemplo, un feed free_bike_status.json
agregado que especifica el encabezado común de GBFS podría ser el siguiente:
{
"ttl": 30,
"last_updated": 1576123774,
"data": {
"bikes": [ ... ] // GBFS free bike status objects.
}
}
Obligatorio: system_information.json (sistema con base y sin base)
Consulta la especificación de GBFS según sea necesario.
Este feed proporciona detalles sobre el operador del sistema.
Nombre del campo | Tipo | Requisito | Descripción |
---|---|---|---|
system_id |
ID | Obligatorio | Es un identificador único a nivel global para el sistema de uso compartido de vehículos. Este valor debe permanecer igual durante la vida útil del sistema. Cada sistema o área geográfica distintos en los que se operan los vehículos DEBE tener su propio system_id. Los IDs de los sistemas DEBEN ser reconocibles como pertenecientes a un sistema en particular, a diferencia de las cadenas aleatorias; por ejemplo, bcycle_austin o biketown_pdx. |
name |
String | Obligatorio | Es el nombre del sistema que se muestra a los clientes. |
rental_apps |
Objeto | Obligatorio | Es un objeto JSON que contiene la información de la app de alquiler para Android y iOS en sus respectivos campos. |
rental_apps.android |
Objeto | Condicionalmente obligatorio |
Contiene información sobre la descarga y el descubrimiento de la app de alquileres para la plataforma de Android en los campos store_uri y discovery_uri . Si el proveedor del sistema tiene una app de alquiler para Android, este campo es obligatorio.
|
rental_apps.android.store_uri |
URI | Obligatorio | Es el URI desde el que se puede descargar la app para Android de alquiler. Por lo general, se trata de un URI a una tienda de aplicaciones, como Google Play. Si el URI apunta a una tienda de aplicaciones, como Google Play, recomendamos que siga las prácticas recomendadas de Android para que la app de visualización pueda abrir directamente el URI a la app nativa de la tienda de aplicaciones en lugar de a un sitio web. |
rental_apps.android.discovery_uri |
URI | Obligatorio | Es el URI que tiene el formato your_custom_scheme://your/path/here .
PackageManager.queryIntentActivities() puede usar el URI para descubrir si la app para Android de alquiler está instalada en el dispositivo.
|
rental_apps.ios |
Objeto | Condicionalmente obligatorio | Contiene información sobre la descarga y el descubrimiento de la app de alquileres para la plataforma de iOS en los campos store_uri y discovery_uri . Este campo es obligatorio si el proveedor del sistema tiene una app de alquiler para iOS.
|
rental_apps.ios.store_uri |
URI | Obligatorio | Es el URI desde el que se puede descargar la app para iOS de alquiler. Por lo general, es un URI a una tienda de aplicaciones, como App Store de Apple. Si el URI apunta a una tienda de aplicaciones, como Apple App Store, te recomendamos que siga las prácticas recomendadas de iOS para que la app de visualización pueda abrir directamente el URI a la app nativa de la tienda de aplicaciones en lugar de a un sitio web. |
rental_apps.ios.discovery_uri |
URI | Obligatorio | Es el URI que tiene el formato your_custom_scheme:// . UIApplication canOpenURL: puede usar el URI para descubrir si la app para iOS de alquiler está instalada en el dispositivo.
|
Obligatorio: free_bike_status.json (sistema sin estaciones)
Consulta la especificación de GBFS según sea necesario.
En este feed, se definen las ubicaciones y los atributos de los vehículos independientes disponibles. Por motivos de privacidad, los vehículos que forman parte de un alquiler activo no deben aparecer en este feed.
Nombre del campo | Tipo | Requisito | Descripción |
---|---|---|---|
bikes |
Array | Obligatorio | Es un array de bicicletas detenidas y disponibles actualmente, en el que cada bicicleta es un objeto. |
bikes[].bike_id |
ID | Obligatorio | Es el identificador de una bicicleta.
Para proteger la privacidad, el ID se puede cambiar a una cadena aleatoria después de cada viaje. |
bikes[].lat |
Latitud | Obligatorio | Latitud WGS 84 de la bicicleta, en formato de grados decimales. |
bikes[].lon |
Longitud | Obligatorio | Longitud WGS 84 de la bicicleta, en formato de grados decimales. |
bikes[].is_reserved |
Booleano | Obligatorio | Indica si la bicicleta está reservada actualmente, de la siguiente manera:
|
bikes[].is_disabled |
Booleano | Obligatorio | Indica si la bicicleta está inhabilitada o dañada actualmente, de la siguiente manera:
|
bikes[].rental_uris |
Objeto | Obligatorio | Es un objeto JSON que contiene los URIs de alquiler para Android, iOS y la Web en sus respectivos campos. |
bikes[].rental_uris.android |
URI | Condicionalmente obligatorio | Es un URI que se puede pasar a una app para Android con un intent de Android android.intent.action.VIEW para admitir
vínculos directos de Android. El rental_uris proporcionado debe ser un
Android App Link para que la app de visualización no necesite administrar manualmente el redireccionamiento del usuario a Play Store en caso de que el usuario no tenga instalada la app del proveedor.
Este URI debe ser un vínculo directo específico para la bicicleta individual, no una página de alquiler general que incluya información de más de una bicicleta. El vínculo directo debe llevar al usuario directamente a la bicicleta sin avisos, páginas intersticiales ni registros. Asegúrate de que los usuarios puedan ver la bicicleta incluso si nunca abrieron la aplicación. No es necesario que los URIs incluyan el Este campo es obligatorio si el socio tiene una app de alquiler para Android. Ejemplo de Android App Link:
|
bikes[].rental_uris.ios |
URI | Condicionalmente obligatorio | Es un URI que se puede usar en iOS para iniciar la app de alquiler de bicicletas.
Para obtener más información, consulta el artículo de Apple sobre los
esquemas de URL personalizados de iOS.
El rental_uris proporcionado debe ser un
vínculo universal de iOS para que la app de visualización no necesite administrar manualmente el redireccionamiento del usuario a la App Store en caso de que el usuario no tenga instalada la app del proveedor.
Este URI debe ser un vínculo directo específico para la bicicleta individual, no una página de alquiler general que incluya información de más de una bicicleta. El vínculo directo debe llevar al usuario directamente a la bicicleta sin avisos, páginas intersticiales ni registros. Asegúrate de que los usuarios puedan ver la bicicleta incluso si nunca abrieron la aplicación. No es necesario que los URIs incluyan el bike_id de la bicicleta, siempre y cuando el socio tenga otros medios para identificar la bicicleta correspondiente. Por ejemplo, la app de alquiler puede usar otros identificadores dentro del URI para identificar de forma única la bicicleta. Este campo es obligatorio si el socio tiene una app de alquiler para iOS. Ejemplo de vínculo universal de iOS:
|
bikes[].rental_uris.web |
URL | Opcional | Es una URL que puede usar un navegador web para mostrar más información sobre el alquiler de un vehículo en esta ubicación. Esta URL debe ser un vínculo directo específico para la bicicleta individual, no una página de alquiler general que incluya información de más de una bicicleta. El vínculo directo debe llevar al usuario directamente a la bicicleta sin avisos, páginas intersticiales ni registros. Asegúrate de que los usuarios puedan ver la bicicleta incluso si nunca abrieron la aplicación. No es necesario que las URLs incluyan Si este campo no está configurado, significa que el navegador web no admite vínculos directos. Ejemplo de valor:
|
bikes[].vehicle_type_id |
ID | Obligatorio | El vehicle_type_id del vehículo, como se describe en la sección
vehicle_types.json .
|
bikes[].pricing_plan_id |
ID | Obligatorio | Es el identificador del plan de precios que se aplica cuando se alquila este tipo de vehículo, como se describe en la sección system_pricing_plans.json .
|
bikes[].current_range_meters |
Punto flotante no negativo | Condicionalmente obligatorio | Si la definición de vehicle_type que corresponde al vehículo tiene un motor, este campo es obligatorio.
Se establece en la distancia más lejana en metros que el vehículo puede recorrer sin necesidad de recargarse o reabastecerse de combustible, dado el nivel actual de carga o combustible del vehículo. |
bikes[].last_reported |
Marca de tiempo | Opcional | Se establece en la última vez que el vehículo informó su estado al backend del operador. |
A continuación, se muestra un ejemplo de 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
}
]
Obligatorio: vehicle_types.json (sistema con estaciones y sin estaciones)
Consulta la especificación de GBFS según sea necesario.
Este feed define los detalles de los tipos de vehículos individuales, como se menciona en la sección free_bike_status.json
.
Nombre del campo | Tipo | Requisito | Descripción |
---|---|---|---|
vehicle_types |
Array | Obligatorio | Es un array de objetos, en el que cada objeto define un tipo de vehículo distinto en el catálogo del proveedor. Solo puede haber un objeto para un tipo de vehículo determinado. |
vehicle_types[].vehicle_type_id |
ID | Obligatorio | Es un identificador único para un tipo de vehículo determinado. |
vehicle_types[].form_factor |
Enum | Obligatorio | Es una enumeración que representa el factor de forma general del vehículo, según la siguiente lista de valores válidos actualmente:
|
vehicle_types[].propulsion_type |
Enum | Obligatorio | Es una enumeración que representa el tipo de propulsión principal del vehículo, según la siguiente lista de valores válidos actualmente:
|
vehicle_types[].max_range_meters |
Punto flotante no negativo | Condicionalmente obligatorio | Si propulsion_type no está establecido en human , el vehículo tiene un motor y, por lo tanto, este campo es obligatorio.
Se establece en la distancia más lejana en metros que el vehículo puede recorrer sin necesidad de recargarse o reabastecerse de combustible, cuando el vehículo está completamente cargado o con el tanque lleno. |
A continuación, se muestra un ejemplo de 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
}
]
Obligatorio: system_pricing_plans.json (sistema sin estaciones)
Consulta la especificación de GBFS según sea necesario.
Este feed define los planes de precios para los vehículos independientes. Exigimos que los proveedores muestren información de precios para los vehículos independientes.
Nombre del campo | Tipo | Requisito | Descripción |
---|---|---|---|
plans |
Array | Obligatorio | Es un array de objetos en el que cada objeto define un plan de precios determinado. |
plans[].plan_id |
ID | Obligatorio | Es una cadena que representa un identificador único para el plan de precios determinado que ofrece el proveedor. |
plans[].url |
URL | Opcional | Es la URL que dirige a los usuarios finales a más información sobre el plan de precios. |
plans[].currency |
String | Obligatorio | Estándar ISO 4217 para el plan de precios. |
plans[].price |
Punto flotante no negativo | Obligatorio |
El plan de precios debe definirse como un plan de precios sin tarifa o como un plan de precios con tarifa:
|
plans[].per_km_pricing |
Array | Condicionalmente obligatorio |
Si el precio es una función de la distancia recorrida, que se muestra en kilómetros, este campo es obligatorio. Es un array de objetos en el que cada objeto define un segmento dividido por una distancia determinada. El valor de Para determinar el precio total del plan determinado, agrega el valor Si no se configura este campo, no habrá precios variables según la distancia y, por lo tanto, no se incluirán en el precio total. |
plans[].per_km_pricing[].start |
Número entero no negativo | Obligatorio |
Es la cantidad de kilómetros a partir de la cual se comienza a cobrar la tarifa del tramo.
Este campo se establece en el valor inclusivo que inicia el rango del segmento. Por lo tanto, una vez que se hayan recorrido los kilómetros, se cobrará el rate una vez.
|
plans[].per_km_pricing[].rate |
Número de punto flotante | Obligatorio | Es la tarifa que se cobra por cada interval , que comienza en el start inclusivo del segmento. Si este campo se establece en un número negativo, el viajero recibe un descuento.
|
plans[].per_km_pricing[].interval |
Número entero no negativo | Obligatorio |
Es el intervalo en kilómetros en el que se vuelve a aplicar el El Si el Si este campo se establece en |
plans[].per_km_pricing[].end |
Número entero no negativo | Opcional |
Es la cantidad de kilómetros en la que ya no se aplica el Si este campo no se configura o está vacío, se cobra el |
plans[].per_min_pricing |
Array | Condicionalmente obligatorio |
Si el precio es una función del tiempo transcurrido, que se muestra en minutos, este campo es obligatorio. Es un array de objetos en el que cada objeto define un segmento dividido por un período determinado. El valor de Para determinar el precio total del plan determinado, agrega el valor Si este campo no está configurado, no hay precios variables basados en el tiempo y, por lo tanto, no se incluyen como parte del precio total. |
plans[].per_min_pricing[].start |
Número de punto flotante | Obligatorio |
Cantidad de minutos a partir de los cuales se comienza a cobrar la tarifa del segmento.
Este campo se establece en el valor inclusivo que inicia el rango del segmento. Por lo tanto, una vez que transcurre la cantidad de minutos establecida, se cobra el rate una vez.
|
plans[].per_min_pricing[].rate |
Número de punto flotante | Obligatorio | Es la tarifa que se cobra por cada interval . La tarifa comienza en el start inclusivo del segmento. Si este campo se establece en un número negativo, el viajero recibe un descuento.
|
plans[].per_min_pricing[].interval |
Número entero no negativo | Obligatorio |
Intervalo en minutos en el que se vuelve a aplicar el El Si el Si este campo se establece en |
plans[].per_min_pricing[].end |
Número entero no negativo | Opcional |
Es la cantidad de minutos en la que ya no se aplica el Si este campo no se configura o está vacío, se cobra el |
Ejemplos de system_pricing_plans.json
En esta sección, se proporcionan muestras de código system_pricing_plans.json
informativas. También se proporcionan los detalles y los resultados pertinentes de cada ejemplo.
Ejemplo 1 de system_pricing_plans.json
En el siguiente ejemplo de código del plan de precios, se muestran los cargos según el tiempo de viaje para los siguientes intervalos:
- [0,1): USD 2
- Si el viaje dura menos de un minuto, el usuario paga USD 2.
- Ejemplo: Viaje de 59 s
- [1,2): USD 3
- Si el viaje dura un minuto o más, pero menos de dos, el usuario paga USD 2 + USD 1 = USD 3.
- Ejemplos: Viaje de 1 minuto; viaje de 1 minuto y 45 segundos
- Cantidad de minutos x, donde x es mayor o igual a 2:
USD 3 + ((USD 2 + USD 1) * (x - 2 + 1))
USD
- Si el viaje dura dos minutos o más, el usuario paga USD 3 por la parte del viaje que dura menos de dos minutos y (USD 1 [continuando desde la primera entrada de la lista de
per_min_pricing
] + USD 2 [la segunda entrada de la lista deper_min_pricing
]) por cada minuto posterior a los dos minutos inclusive. - Ejemplos:
- El viaje de 2 minutos cuesta USD 3 + (USD 2 + USD 1) = USD 6.
- El viaje de 2 minutos y 30 segundos cuesta USD 3 + (USD 2 + USD 1) = USD 6.
- El viaje de 3 minutos cuesta USD 3 + ((USD 2 + USD 1) * 2) = USD 9.
- El costo de un viaje de 10 minutos es de USD 3 + ((USD 2 + USD 1) * 9) = USD 30.
- Si el viaje dura dos minutos o más, el usuario paga USD 3 por la parte del viaje que dura menos de dos minutos y (USD 1 [continuando desde la primera entrada de la lista de
{
"plans": {
"plan_id": "plan1",
"currency": "USD",
"price": 2,
"per_min_pricing": [
{
"interval": 1,
"rate": 1,
"start": 1
},
{
"interval": 1,
"rate": 2,
"start": 2
}
],
}
}
Ejemplo 2 de system_pricing_plans.json
En este ejemplo, mostramos una muestra de código para un plan de precios que se cobra a una tarifa por minutos y kilómetros:
- Específicamente, al usuario final se le cobra USD 0.25 por km y USD 0.50 por minuto.
- Ambas tasas ocurren de forma simultánea y no dependen una de la otra.
- Por lo tanto, un viaje de un kilómetro que dura 10 minutos cuesta USD 9. El desglose del costo es el siguiente:
- USD 3, precio base
- USD 0.25 * 2, que se cobra una vez al inicio del viaje y otra vez en la marca de 1 km.
- USD 0.5 * 11, que se cobra una vez al comienzo de cada minuto. Los cargos comienzan a los 0 segundos y el último intervalo se cobra a los 10 minutos.
{
"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
}]
}
}
Obligatorio de forma condicional: geofencing_zones.json (sistema con y sin estaciones de carga)
Consulta la especificación de GBFS según sea necesario.
Este feed define los datos de la delimitación geográfica para los vehículos independientes. Los datos de perímetro virtual incluyen los límites geográficos que especifican dónde se permite que los vehículos comiencen y finalicen el viaje, junto con la velocidad a la que pueden circular. Esta velocidad es la velocidad máxima del vehículo o el límite de velocidad de la ruta por la que circula el vehículo, la que sea menor. Los conductores deben cumplir con las leyes y ordenanzas locales.
Usamos estos datos para que, cuando un usuario busque una ruta determinada, si el final del viaje se encuentra fuera de las geocercas específicas, se filtre el resultado de micromovilidad. Si no se proporcionan geocercas, Google considera que el servicio no tiene restricciones de límites.
Nombre del campo | Tipo | Requisito | Descripción |
---|---|---|---|
geofencing_zones |
Objeto | Obligatorio | Un objeto FeatureCollection , según lo describe la
RFC 7946 de IETF, es un objeto que tiene un campo llamado features . El valor de features es un array JSON.
Cada elemento del array JSON es un objeto Feature .
Cada zona delimitada geográficamente, sus reglas y atributos asociados, y las
definiciones de |
geofencing_zones.type |
String | Obligatorio | Se establece en FeatureCollection , como se describe en
IETF RFC 7946. |
geofencing_zones.features |
Array | Obligatorio | Es un array JSON, en el que cada elemento es un objeto Feature . |
geofencing_zones.features[].type |
String | Obligatorio | Se establece en Feature , como se describe en
IETF RFC 7946. |
geofencing_zones.features[].geometry |
Multipolígono de GeoJSON | Obligatorio | Es un objeto Multipolígono de GeoJSON que describe dónde no se pueden iniciar, finalizar ni realizar viajes, además de otras limitaciones. Una disposición de puntos en el sentido de las agujas del reloj define el área encerrada por el polígono, mientras que un orden en el sentido contrario a las agujas del reloj define el área fuera del polígono. Para obtener más información, consulta la regla de la mano derecha. |
geofencing_zones.features[].properties |
Objeto | Obligatorio | Es un objeto que define las asignaciones y limitaciones de viaje. |
geofencing_zones.features[].properties.rules |
Array | Opcional | Es un array de objetos, en el que cada objeto define una sola regla. Si dos o más reglas se superponen, chocan o entran en conflicto de alguna otra manera, prevalece la regla definida más temprano en el orden del archivo JSON. |
geofencing_zones.features[].properties.rules[].vehicle_type_id |
Array | Opcional | Es un array de IDs de tipo de vehículo, en el que cada elemento es un vehicle_type_id , para el que se deben aplicar restricciones.
Si no se especifica ningún vehicle_type_id , las restricciones se aplican a todos los tipos de vehículos. |
geofencing_zones.features[].properties.rules[].ride_allowed |
Booleano | Obligatorio | Indica si el viaje en bicicleta independiente "sin anclaje" puede comenzar y finalizar en la zona, de la siguiente manera:
|
A continuación, se muestra un ejemplo de 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]
]]]
}
}]
}
Obligatorio: station_information.json (sistema con estaciones de carga)
Consulta la especificación de GBFS según sea necesario.
Este feed define la información general sobre las estaciones de bicicletas públicas.
Nombre del campo | Tipo | Requisito | Descripción |
---|---|---|---|
stations |
Array | Obligatorio | Es un array de objetos en el que cada objeto define una sola estación. |
stations[].station_id |
String | Obligatorio | Es el identificador de la estación. |
stations[].name |
String | Obligatorio |
Nombre público de la estación en el idioma local de la ciudad en la que se encuentra. El campo name debe cumplir con lo que se usa en la señalización de la estación, cuando esté disponible, o debe reflejar la ubicación de la estación a través del uso de una intersección o un punto de referencia local.
No uses abreviaturas como "Av." para "Avenida", a menos que se use de forma explícita en la señalización, y el name debe estar en mayúsculas y minúsculas, según las convenciones locales para el uso de mayúsculas en nombres de lugares, y no en mayúsculas sostenidas.
|
stations[].lat |
Latitud | Obligatorio | Latitud WGS 84 de la estación, en formato de grados decimales. |
stations[].lon |
Longitud | Obligatorio | Longitud WGS 84 de la estación, en formato de grados decimales. |
stations[].capacity |
Número entero no negativo | Opcional | Es un número entero no negativo que representa la cantidad total de puntos de anclaje instalados en la estación, tanto disponibles como no disponibles. |
stations[].rental_uris |
Objeto | Obligatorio |
Un objeto JSON que contiene los URIs de alquiler para Android, iOS y la Web en sus respectivos campos. Si se especifican estos URIs, se anularán los vínculos directos predeterminados que se establecieron cuando se incorporó el proveedor. |
stations[].rental_uris.android |
URI | Condicionalmente obligatorio |
Es un URI que se puede pasar a una app para Android con un intent de Android Este URI debe ser un vínculo directo específico de la estación individual, no una página de alquiler general que incluya información de más de una estación. El vínculo directo debe llevar al usuario directamente a la estación sin avisos, páginas intersticiales ni registros. Asegúrate de que los usuarios puedan ver la estación incluso si nunca abrieron la aplicación. No es necesario que los URIs incluyan el Este campo es obligatorio si el socio tiene una app de alquiler para Android. Ejemplo de Android App Link:
|
stations[].rental_uris.ios |
URI | Condicionalmente obligatorio |
Es un URI que se puede usar en iOS para iniciar la app de alquiler de la estación.
Para obtener más información, consulta el artículo de Apple sobre los esquemas de URL personalizados de iOS.
El Este URI debe ser un vínculo directo específico de la estación individual, no una página de alquiler general que incluya información de más de una estación. El vínculo directo debe llevar al usuario directamente a la estación sin avisos, páginas intersticiales ni registros. Asegúrate de que los usuarios puedan ver la estación incluso si nunca abrieron la aplicación. No es necesario que los URIs incluyan el Este campo es obligatorio si el socio tiene una app de alquiler para iOS. Ejemplo de vínculo universal de iOS:
|
stations[].rental_uris.web |
URL | Opcional | Es una URL que puede usar un navegador web para mostrar más información sobre cómo alquilar un vehículo en esta estación. Esta URL debe ser un vínculo directo específico para la estación individual, no una página de alquiler general que incluya información de más de una estación. El vínculo directo debe llevar al usuario directamente a la estación sin avisos, páginas intersticiales ni registros. Asegúrate de que los usuarios puedan ver la estación incluso si nunca abrieron la aplicación. No es necesario que las URLs incluyan Si este campo no está configurado, significa que el navegador web no admite vínculos directos. Ejemplo de valor:
|
A continuación, se muestra un ejemplo de 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"
}
},
]
Obligatorio: station_status.json (sistema con estaciones)
Consulta la especificación de GBFS según sea necesario.
Este feed define el estado actual y actualizado de las estaciones de bicicletas públicas compartidas.
Nombre del campo | Tipo | Requisito | Descripción |
---|---|---|---|
stations |
Array | Obligatorio | Es un array de objetos, en el que cada objeto define una sola estación. |
stations[].station_id |
String | Obligatorio | Es el identificador de la estación. |
stations[].num_bikes_available |
Número entero no negativo | Obligatorio |
Es un número entero no negativo que representa la cantidad de bicicletas funcionales que se encuentran físicamente en la estación y que se pueden ofrecer para alquiler. Para determinar si la estación alquila bicicletas actualmente, debes inspeccionar el campo |
stations[].vehicle_types_available |
Array | Opcional |
Es un array de objetos que define la cantidad total de vehículos, categorizados por el tipo de vehículo individual disponible en una estación. Cada objeto modela la cantidad total de vehículos para el tipo de vehículo asociado. La cantidad total de vehículos de cada uno de estos objetos debe coincidir con el valor especificado en el campo |
stations[].vehicle_types_available[].vehicle_type_id |
ID | Obligatorio |
El |
stations[].vehicle_types_available[].count |
Número entero no negativo | Obligatorio |
Es la cantidad total de vehículos disponibles para el |
stations[].num_docks_available |
Número entero no negativo | Condicionalmente obligatorio |
El campo es obligatorio, a menos que la estación tenga capacidad de acoplamiento ilimitada. Por ejemplo, las estaciones virtuales tienen capacidades de acoplamiento ilimitadas y el campo no es obligatorio. Es un número entero no negativo que representa la cantidad total de estaciones de acoplamiento funcionales disponibles físicamente en la estación que pueden aceptar la devolución de vehículos. Para determinar si la estación acepta devoluciones de bicicletas en este momento, debes inspeccionar el campo |
stations[].is_installed |
Booleano | Obligatorio |
Es un valor booleano que indica si la estación está actualmente en la calle y está instalada. Si la estación está instalada en la calle, configúrala en Si la estación no está instalada en la calle, se establece en |
stations[].is_renting |
Booleano | Obligatorio |
Es un valor booleano que indica si es verdadero que la estación actualmente alquila bicicletas. Si la estación actualmente alquila bicicletas, se establece en Si la estación no alquila bicicletas en este momento, se debe establecer en |
stations[].is_returning |
Booleano | Obligatorio |
Es un valor booleano que indica si es verdadero que la estación actualmente acepta devoluciones de bicicletas. Si la estación acepta devoluciones de bicicletas, se establece en Si la estación no acepta devoluciones de bicicletas en este momento, se debe establecer en |
A continuación, se muestra un ejemplo de 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
},
]