Crear viajes seguidos

En este documento, se describe cómo crear un viaje consecutivo, establecer los campos correctos y asignarlo a un vehículo para que lo complete. Se supone que configuraste Fleet Engine, creaste vehículos, tienes una app para conductores en funcionamiento y, de manera opcional, una app para consumidores. También debes conocer las diversas situaciones de viaje disponibles para los viajes on demand. Consulta las siguientes guías relacionadas para obtener más información:

Conceptos básicos de la creación de viajes

En esta sección, se describen los detalles de la solicitud necesarios para crear un viaje en Fleet Engine. Emite una solicitud de creación con gRPC y REST.

  • Método CreateTrip(): gRPC o REST
  • Mensaje CreateTripRequest: solo gRPC

Campos de viaje

Usa los siguientes campos para crear un viaje en Fleet Engine. Puedes usar diferentes campos para los distintos tipos de viajes: de destino único o múltiple, consecutivos o de viajes compartidos. Puedes proporcionar los campos opcionales cuando creas el viaje o puedes establecerlos más adelante cuando lo actualices.

Campos de viaje
Nombre ¿Obligatorio? Descripción
parent Sí Es una cadena que incluye el ID del proyecto. Este ID debe ser el mismo que se usa en toda la integración de Fleet Engine, con los mismos roles de cuenta de servicio.
trip_id Sí Es una cadena que creas y que identifica este viaje de forma inequívoca. Los IDs de viaje tienen ciertas restricciones, como se indica en la referencia.
trip_type Sí Establece el TripType en los siguientes valores para el tipo de viaje que estás creando:
  • Destino único: Se establece en SHARED o EXCLUSIVE.
  • Destino múltiple: Se establece en EXCLUSIVE.
  • Consecutivos: Se establece en EXCLUSIVE.
  • Agrupación compartida: Se establece en SHARED.
pickup_point Sí Es el punto de origen del viaje.
Destinos intermedios Sí

Solo para viajes con varios destinos: Es la lista de destinos intermedios que visita el conductor entre el punto de partida y el de llegada. Al igual que con dropoff_point, este campo también se puede configurar más adelante llamando a UpdateTrip, pero un viaje con varios destinos, por definición, contiene destinos intermedios.

vehicle_waypoints Sí

Solo viajes de uso compartido: Este campo admite la intercalación de puntos de referencia de varios viajes. Contiene todos los puntos de referencia restantes para el vehículo asignado, así como los puntos de referencia de retiro y llegada de este viaje. Puedes establecer este campo llamando a CreateTrip o UpdateTrip. También puedes actualizar los puntos de referencia del vehículo a través del campo waypoints con una llamada a UpdateVehicle. El servicio no devuelve esta información en las llamadas a GetTrip por motivos de privacidad.

number_of_passengers No Es la cantidad de pasajeros del viaje.
dropoff_point No Es el destino del viaje.
vehicle_id No Es el ID del vehículo asignado al viaje.

Ejemplo: Crea un viaje consecutivo

A continuación, se muestra cómo crear un viaje consecutivo y asignarlo a un vehículo. En este caso, la creación del viaje es la misma que para un viaje con un solo destino. Solo más adelante, crearás otro viaje y lo asignarás a un vehículo con un viaje ya activo.

// A vehicle with ID 'my-vehicle' is already created and it is assigned to a trip with ID 'current-trip'.

static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String VEHICLE_ID =" my-vehicle";
static final String TRIP_ID = "back-to-back-trip");

TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);

String parent = "providers/" + PROJECT_ID;

Trip trip = Trip.newBuilder()
    .setTripType(TripType.EXCLUSIVE)
    .setPickupPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.195139).setLongitude(106.820826)))
    .setDropoffPoint(
        TerminalLocation.newBuilder().setPoint(
            LatLng.newBuilder()
                .setLatitude(-6.1275).setLongitude(106.6537)))
    .setVehicleId(VEHICLE_ID)
    .build();

// Create trip request
CreateTripRequest createTripRequest = CreateTripRequest.newBuilder()
    .setParent(parent)
    .setTripId(TRIP_ID)
    .setTrip(trip)
    .build();

// Error handling.
try {
  // Fleet Engine automatically assigns a 'waypoints' list to the trip containing
  // the vehicle's current trip waypoints.
  Trip createdTrip =
      tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
  Status s = e.getStatus();
  switch (s.getCode()) {
    case ALREADY_EXISTS:
      break;
    case PERMISSION_DENIED:
      break;
  }
  return;
}

Actualiza los viajes consecutivos

Cuando asignas un vehículo para un viaje consecutivo, le asignas un viaje a un vehículo, incluso si ya se le asignó uno.

Cualquier viaje creado en Fleet Engine debe asignarse a un vehículo para que Fleet Engine calcule las horas estimadas de llegada del viaje y realice un seguimiento de él. Puedes hacerlo durante la creación del viaje o más adelante, cuando lo actualices.

Después de asignar el viaje a un vehículo, Fleet Engine agrega automáticamente los puntos de referencia asociados con los viajes consecutivos al campo de puntos de referencia del vehículo. El campo remainingWaypoints de un viaje contiene una lista de todos los puntos de referencia, incluidos los de otros viajes que se visitarán antes de que finalice el viaje.

Por ejemplo, considera dos viajes consecutivos: el viaje A y el viaje B. El vehículo recogió al consumidor para el viaje A y, mientras se dirige a la ubicación de llegada, el conductor recibe una solicitud para recoger a otro consumidor para el próximo viaje, el viaje B.

  • Llamar a getVehicle() devuelve remainingWaypoints que contiene lo siguiente:
    A Descenso → B Retiro → B Descenso.
  • getTrip() o la devolución de llamada onTripRemainingWaypointsUpdated para el viaje A devuelven remainingWaypoints que contiene lo siguiente:
    Un destino.
  • La devolución de llamada getTrip() o onTripRemainingWaypointsUpdated para el viaje B devuelve remainingWaypoints que contiene lo siguiente:
    Destino de A → Punto de partida de B → y destino de B.

¿Qué sigue?