[API Planes de Rutas] Cómo usar la API de Planes de Rutas

API de Planes de Rutas


En Optiroute los planes de rutas corresponden a un conjunto de rutas que son administradas conjuntamente. Dicho de otra manera, un plan de rutas puede contener distintas rutas, una por cada vehículo ingresado (considerando que es posible que algunos vehículos no sean considerados con pedidos, dependiendo de la configuración de optimización).

La API de planes de rutas de Optiroute permite administrarlos desde tu sistema a través del siguiente endpoint:

https://testing.optiroute.cl/api/v1/route-plans/


Estados de planes de rutas


Los planes de rutas tienen estados que son actualizados por los eventos realizados por los conductores de las rutas a medida que estas se va efectuando. Estos estados están determinados por números enteros y equivalen a los siguientes:


Nombre del estado

Número de estado

Descripción

CANCELLED

-1

El plan de rutas fue cancelado

ENTERED

0

El plan de rutas fue creado y aún ninguna ruta es empezada

STARTED

1

Alguna de las rutas del plan de rutas fue iniciada

COMPLETED

2

Todas las rutas del plan de rutas fueron completadas

DELETED

3

El plan de rutas y sus rutas fueron eliminados


Objetos


Para interactuar con este endpoint se deben utilizar las estructuras de datos que se describirán a continuación.

Objeto plan de rutas de entrada

El objeto plan de rutas de entrada es un hash que se ocupa para crear un plan de rutas.

Propiedad

Tipo

Descripción

Requerido

name

String

Nombre del plan de rutas

Requerido

finish_datetime

Fecha con formato %Y-%m-%dT%H:%M:%S %z

Fecha límite del plan de rutas

Requerido

departure_datetime

Fecha con formato %Y-%m-%dT%H:%M:%S %z

Fecha inicial del plan de rutas

Requerido


Objeto plan de rutas de respuesta

El objeto plan de rutas de respuesta es un hash de cada plan de rutas y sus propiedades, donde la clave es su propiedad id, que corresponde al Identificador único del pedido en Optiroute. Este tipo de objeto se ocupa cuando el sistema retorna información respecto a un plan de rutas consultado.

Propiedad

Tipo

Descripción

id

Número

Identificador único del plan de rutas provisto por Optiroute

name

Texto

Nombre del plan de rutas

fleet_kind

Número

0 si corresponde a un plan de rutas de vehículos y 1 si corresponde a bicicletas

departure_datetime

Fecha con formato %Y-%m-%dT%H:%M:%S %z

Fecha límite inicial del plan de rutas

end_datetime

Fecha con formato %Y-%m-%dT%H:%M:%S %z

Fecha límite final del plan de rutas

distance

Número

Distancia de todas las rutas en metros

routes

Arreglo de objetos rutas

Rutas que integran el plan de rutas

dropped_route

Objetos ruta

Corresponde a la ruta con los pedidos descartados

first_departure_datetime

Fecha con formato %Y-%m-%dT%H:%M:%S %z

Fecha de la primera ruta en iniciar según la programación

last_arrival_datetime

Fecha con formato %Y-%m-%dT%H:%M:%S %z

Fecha de la última ruta en finalizar según la programación

status

Número

Número del estado del plan de rutas

solution_found

Booleano

Verdadero si la última optimización encontró una solución

is_optimizing

Booleano

Verdadero si el plan de rutas o una de sus rutas se encuentra en proceso de optimización

is_editing

Booleano

Verdadero si el plan de rutas o una de sus rutas se encuentra en proceso de edición

is_importing

Booleano

Verdadero si el plan de rutas o una de sus rutas se encuentra en proceso de importación de pedidos

use_custom_search_time

Booleano

Configuración de optimización. Verdadero si la optimización ocupa un tiempo personalizado para búsqueda de soluciones

search_time

Número

Configuración de optimización. Corresponde al tiempo en minutos de la última optimización del plan de rutas. Puede ser la sugerida o personalizada


Objeto pedido de entrada

El objeto pedido de entrada es un hash de cada pedido y sus propiedades, donde la clave es la propiedad id del pedido, que corresponde a su identificador único en Optiroute.


Propiedad

Tipo

Descripción

Requerido

id

Número

Identificador único del pedido provisto por Optiroute

Requerido


Objeto lista de pedidos para carga masiva

El objeto lista de pedidos para carga masiva es un hash que contiene el arreglo de pedidos de entrada que serán agregados a Optiroute.

Propiedad

Tipo

Descripción

Requerido

service_requests

Arreglo de objetos de pedidos de entrada

Arreglo con todos los pedidos de entrada que serán procesados en el input de pedido

Requerido




Objeto vehículo de entrada

El objeto vehículo de entrada es un hash de cada vehículo y sus propiedades, donde la clave es la propiedad id del vehículo, que corresponde su identificador único en Optiroute.


Propiedad

Tipo

Descripción

Requerido

id

Número

Identificador único del vehículo provisto por Optiroute

Requerido



Objeto ruta de respuesta

El objeto ruta de respuesta es un hash de cada ruta que contiene únicamente el id de la ruta, que corresponde su identificador único en Optiroute.

Propiedad

Tipo

Descripción

Requerido

id

Número

Identificador único de la ruta provisto por Optiroute

Requerido


Para obtener el resto de datos de la ruta es necesario utilizar la API de rutas.


Objeto configuración de un plan de rutas


El objeto configuración de un plan de rutas es un hash que contiene las distintas configuraciones para optimizar el plan de rutas en general o cada una de sus rutas individualmente. Todas las propiedades son opcionales.

Propiedad

Tipo

Descripción

name

Texto

Nombre del plan de rutas

optimization_type

Texto

Ingresa time si deseas buscar rutas que demoren menos tiempo o distance si prefieres que juntas recorran menor distancia.

departure_date

Fecha con formato %Y-%m-%dT%H:%M:%S %z

Fecha inicial del plan de rutas

start_time

Hora con formato %H:%M:%S

Horario inicial del plan de rutas

end_time

Hora con formato %H:%M:%S

Horario final del plan de rutas

use_load_balance

Booleano

Verdadero para buscar rutas que distribuyan la demanda de manera homogénea entre conductores, considerándolos a todos

use_time_balance

Booleano

Verdadero para buscar rutas con la duración más parecida como sea posible. Esta opción no garantiza que todos los vehículos sean considerados

use_distance_balance

Booleano

Verdadero para buscar rutas con una distancia recorrida similar. Esta opción no garantiza que todos los vehículos sean considerados

minimize_fleet

Booleano

Verdadero para buscar rutas que usen la menor cantidad de vehículos posible.


force_use_all_vehicles

Booleano

Verdadero para buscar rutas que usan todos los vehículos ingresados. Esta opción no garantiza que las rutas sean similares en tiempo o distancia.

use_time_windows

Booleano

Verdadero para buscar rutas que consideren la información de disponibilidad horaria (ventansas de tiempo) de los clientes.

use_capacity

Booleano

Verdadero para buscar rutas considerando la información de capacidad de los vehículos y la demanda solicitada.

optimize_start_time

Booleano

Verdadero para buscar rutas que empiecen en cualquier horario óptimo dentro del rango de tiempo del plan de rutas. Cuando está desactivado busca rutas que comienzan justo al inicio de ese rango de tiempo.

use_open_routes

Booleano

Verdadero si el último punto de la ruta puede ser un cliente y no la bodega de finalización

speed_factor

Booleano

Selecciona el factor que se aplicará a la velocidad promedio entre puntos. Esta opción es utilizable cuando quieres ajustar los tiempos de llegada en los diferentes destinos de la ruta

delivery_time

Número

Tiempo, en minutos, destinado para la entrega del servicio, desde que se detiene el vehículo hasta que inicia la ruta al siguiente destino, para aquellos puntos que no lo tengan definido individualmente.

merge_service_times

Booleano

Verdadero si es necesario fusionar los tiempos de servicio de pedidos consecutivos que son entregados en la misma dirección. El tiempo de servicio más largo se dividirá entre los destinos.

same_address_in_same_vehicle

Booleano

Verdadero si es necesario asignar pedidos con igual dirección al mismo vehículo.


use_costs

Booleano

Verdadero si deseas encontrar rutas con la menor cantidad de vehículos posible utilizando primero los vehículos con menos costo

use_profitability_percentage

Booleano

Verdadero para buscar rutas intentando satisfacer el límite de relación entre el coste del vehículo y la suma total de los precios de la carga. El precio de los pedidos cuyo valor no ha sido ingresado será 0.

maximum_waiting_time

Número

Tiempo máximo en minutos que el conductor puede esperar antes de un destino

use_quick_optimization

Booleano

Verdadero para obtener una solución lo más rápido posible, devolviendo la primera que cumpla con todas las restricciones configuradas. Esta opción prioriza el tiempo dedicado a la búsqueda sobre la calidad de la solución

search_time

Número

Tiempo de búsqueda personalizado, en minutos, para el proceso de búsqueda de ruta


Flujo para la creación de rutas


A continuación se describen los pasos para crear rutas optimizadas para un plan de rutas

  1. Crear el plan de rutas. En este punto indicas la fecha en que realizarás la entrega del servicio con las rutas además del nombre del plan de rutas
  2. Agregar pedidos. Como en este punto aún no tienes rutas optimizadas debes agregar los pedidos directamente al plan de rutas. Estos pedidos deben haber sido ingresados a Optiroute a través de cualquier medio de ingreso (importación, API de integración, formulario de creación) y estar en un estado permitido. Puedes volver a agregar pedidos al plan de rutas en cualquier otro momento.
  3. Agregar vehículos. Debes agregar los vehículos que usarás para el reparto del servicio. Cada vez que agregues un vehículo se creará una ruta asociada a él. La configuración por defecto almacenada en cada vehículo será la que se ocupará para optimizar su ruta asociada. Dependiendo de tu configuración de optimización se agregarán los pedidos a estos vehículos generando rutas. Puede que algunos vehículos no sean considerados con pedidos. Se puede volver a agregar vehículos en cualquier otro momento.
  4. Configurar un pedido particular (opcional). Es posible que quieras actualizar las opciones de cada pedido antes de optimizar. Para esto debes usar la API de integración de pedidos
  5. Configurar ruta particular (opcional). Es posible que quieras actualizar las opciones de cada ruta antes de optimizar. Para esto se debe usar la API de rutas.
  6. Eliminar pedido (opcional). Puedes eliminar un pedido que ya no será parte del plan de rutas en cualquier momento.
  7. Eliminar vehículo (opcional). Puedes eliminar un vehículo que ya no será parte del plan de rutas en cualquier momento.
  8. Optimizar un plan de rutas. Se debe usar el endpoint para optimizar el plan de rutas en esta API. De acuerdo a las opciones de optimización utilizada se asignarán pedidos a las rutas de los vehículos ingresados. Es posible que algunos pedidos no sean considerados en alguno de los vehículos ingresados y sean agregados a la ruta de descartados. Se puede volver a optimizar el plan de rutas en cualquier otro momento y cuantas veces se necesite.
  9. Notificar a los conductores (opcional). Si las rutas obtenidas satisfacen las necesidades logísticas puedes notificar a los conductores para que puedan completar los destinos de la ruta ocupando la aplicación Optiroute Driver.
  10. Notificar a los clientes (opcional). Si las rutas obtenidas satisfacen las necesidades logísticas puedes notificar a los clientes por correo sobre el rango de entrega de su servicio.
Además de este flujo por plan de rutas puedes realizar acciones directamente sobre una ruta particular con la API de rutas, luego de haber completado al menos una vez este flujo para la creación de rutas.

Acciones


A continuación se describen las distintas acciones que permiten administrar los planes de rutas y permitir optimizarlas para obtener rutas de reparto en base a la configuración asignada. 


Las acciones de tipo POST para los planes de ruta ya creados se ejecutarán siempre y cuando en el plan de ruta:


    • no haya sido eliminado
    • no haya sido completado
    • no se encuentre en proceso de edición
    • no se encuentre en proceso de optimización de rutas
    • no se encuentre en proceso de importación de pedidos

    Crear planes de ruta

    Para crear planes de rutas en Optiroute debes realizar una llamada tipo POST en el endpoint de la API de planes de rutas, añadiendo a ella el objeto tipo plan de ruta de entrada que deseas crear.

    Un ejemplo del contenido de la llamada es el siguiente:

    {
    	'name': 'Plan de rutas',
    	'departure_datetime': '2024-11-08T08:00-03:00'
    	'finish_datetime': '2024-11-08T18:00-03:00'
    }

    Si la creación fue realizada correctamente la API deberá retornar un objeto tipo plan de ruta de respuesta con la información recién ingresada.

    En caso de cualquier error de validación la API entregará la descripción apropiada.

    Obtener lista de planes de ruta

    Para obtener la lista de planes de rutas desde Optiroute debes realizar una llamada tipo GET al endpoint de la API de planes de rutas.

    Obtener plan de ruta particular

    Para obtener el detalle del plan de rutas desde Optiroute debes realizar una llamada tipo GET en el endpoint de la API de planes de rutas agregando el id del plan de rutas al final de la URL, de la siguiente manera:

    https://app.optiroute.cl/api/v1/route-plans/{id}/

    Si la llamada fue realizada correctamente la API deberá retornar un objeto de tipo plan de rutas de respuesta.

    Borrar plan de ruta particular

    Para eliminar un plan de rutas desde Optiroute debes realizar una llamada tipo DELETE en el endpoint de la API de planes de rutas agregando el id del pedido al final de la URL, de la siguiente manera:

    https://app.optiroute.cl/api/v1/route-plans/{id}/

    Los planes de rutas no son efectivamente borrados del sistema, sólo su estado es actualizado al estado DELETED.

    Agregar pedidos a un plan de rutas

    Para agregar pedidos a un plan de rutas se debe ingresar como atributo un objeto de tipo objeto lista de pedidos para carga masiva en el siguiente endpoint, agregando el ID del plan de rutas a la URL, como por ejemplo:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/add_service_requests

    Un ejemplo del contenido de la llamada es el siguiente:

    {
    'service_requests': [12345678, 12345679, 923485843],
    }

    Cuando un plan de rutas aún no ha sido optimizado este no posee rutas. Cuando un pedido posee rutas los pedidos asignados al plan de rutas serán agregados a la ruta de descartados (dropped_route en las propiedades del plan de rutas).

    Sacar pedidos de un plan de rutas

    Para desasignar un pedido de un plan de rutas se debe ingresar como atributo el id del pedido en el siguiente endpoint, agregando el ID del plan de rutas a la URL, como por ejemplo:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/remove_service_request/

    Un ejemplo del contenido de la llamada es el siguiente:

    {
    'service_request_id': 12345678,
    }


    Agregar vehículos a un plan de rutas

    Este proceso permite agregar vehículos al plan de rutas. Es posible que no todos los vehículos ingresados sean asignados pedidos luego de la optimización, en este caso no será considerada una ruta para este.

    Para agregar vehículos a un plan de rutas se debe ingresar como atributo un objeto de tipo vehículo en el siguiente endpoint, agregando el ID del plan de rutas a la URL, como por ejemplo:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/add_vehicle/

    Un ejemplo del contenido de la llamada es el siguiente:

    {
    'id': 8765323
    }

    Sacar vehículos de un plan de rutas

    Este proceso permite sacar un vehículo del plan de rutas. Si el vehículo luego de optimizarse tenía pedidos asignados a él en una ruta, la ruta será eliminada.
     
    Para desasignar un vehículo de un plan de rutas (y borrar su ruta) se debe ingresar como atributo un objeto de tipo vehículo en el siguiente endpoint, agregando el ID del plan de rutas a la URL, como por ejemplo:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/remove_vehicle/

    Un ejemplo del contenido de la llamada es el siguiente:

    {
    'id': 8765323
    }


    Actualizar la configuración de un plan de rutas

    Para actualizar la configuración de optimización de un plan de rutas se debe realizar una llamada de tipo POST ingresando como atributo un objeto de tipo configuración de planes de ruta en el siguiente endpoint, agregando el ID del plan de rutas a la URL, como por ejemplo:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/update_configuration/
    Un ejemplo del contenido de la llamada es el siguiente:

    {
    'name': 'Plan de rutas',
    'start_time': '08:00'
    'end_time': '18:00',
    'optimization_type': 'distance',
    'speed_factor': 1.05,
    'use_load_balance': true,
    'optimize_start_time': false
    }


    Optimizar un plan de rutas

    El proceso de optimización de un plan de rutas corresponde a la asignación de pedidos a los distintos vehículos asignados de manera de satisfacer la configuración de optimización agregada al plan de rutas.

    Es posible que en este proceso no todos los vehículos asignados al plan de rutas sean considerados, dependiendo de las opciones de optimización.

    Es posible que algunos pedidos no sean asignados a algún vehículo, por lo que serán agregados a la ruta de descartados o (dropped_route en los atributos del plan de rutas).

    Puedes realizar el número de optimizaciones que quieras. Si encuentras que la optimización encontrada no satisface tus requerimientos puedes actualizar la configuración del plan de rutas y optimizar nuevamente.

    Para optimizar un plan de rutas se debe agregar el ID del plan de rutas a la URL, como por ejemplo:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/optimize/

    Cancelar una optimización en curso

    Para cancelar un proceso de optimización de un plan de rutas que se encuentra en curso se debe realizar una llamada de tipo POST, agregando el ID del plan de rutas a la URL, en el siguiente endpoint:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/stop_optimization/

    Notificar a todos los conductores

    Optiroute Driver es la aplicación móvil con la cual los conductores pueden recorrer y completar los puntos de la ruta que tienen asignada.

    Para notificar a todos los conductores en Optiroute Driver respecto a la ruta que tienen asignada dentro del plan de rutas creado se debe realizar una llamada de tipo POST, agregando el ID del plan de rutas a la URL, en el siguiente endpoint:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/notify_all_drivers/

    Desnotificar a todos los conductores

    Para desnotificar a todos los conductores en Optiroute Driver se debe realizar una llamada de tipo POST, agregando el ID del plan de rutas a la URL, en el siguiente endpoint:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/denotify_all_drivers/

    Con esta acción el conductor dejará de ver la ruta previamente notificada en la aplicación móvil Optiroute Driver.

    Activar la notificaciones a los clientes

    Optiroute permite notificar a los clientes respecto al horario de llegada de su servicio a través de correo electrónico. Si el pedido está asociado a un cliente con correo correctamente configurado se le informará el rango de horario de llegada.

    Es posible configurar los distintos eventos bajo los cuales se notificará el rango de llegada al cliente en tu cuenta Optiroute en la pestaña Correos dentro de la sección Configuración en el menú de Notificaciones a clientes.
     
    Para activar la notificación de todos los clientes respecto al rango de horario de llegada de su servicio se debe realizar una llamada de tipo POST, agregando el ID del plan de rutas a la URL, en el siguiente endpoint:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/notify_all_customers/

    Desactivar las notificaciones a los clientes

    Para desactivar las notificaciones por correo a todos los clientes de todas las rutas se debe realizar una llamada de tipo POST, agregando el ID del plan de rutas a la URL, en el siguiente endpoint:

    https://testing.optiroute.cl/api/v1/route-plans/{id}/denotify_all_customers/