API de pedidos
La API de pedidos de Optiroute permite integrar los pedidos desde tu sistema a Optiroute a través del siguiente endpoint:
https://app.optiroute.cl/api/v1/integration-service-requests/
Estados de Objetos de la API
Pedidos y direcciones tienen estado relacionados con la operación de las rutas. A continuación detallaremos cuales son esos estados y bajo que condiciones se aplican.
Estados de pedidos
Los pedidos tienen estados que son actualizados por los eventos realizados por el conductor a medida que la ruta 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 |
DELETED | -4 | El pedido fue borrado en el sistema |
TEMPORARY | -3 | El pedido es temporal (uso interno) |
IMPORTED | -2 | El pedido fue importado (uso interno) |
CANCELLED | -1 | El pedido fue cancelado, su entrega no debe realizarse |
REVIEWING | 0 | El pedido ingresó a Optiroute. Estado inicial |
SCHEDULED | 1 | El pedido fue asignado a un destino en algún Route Plan |
ONROUTE | 6 | El pedido está en una ruta que ya fue iniciada |
ONGOING | 2 | El conductor inició el viaje hacia el destino de entrega del pedido |
ARRIVED | 4 | El conductor llegó al lugar de entrega, pero aún no realiza la entrega |
DELIVERED | 3 | El pedido fue entregado al cliente |
SKIPPED | 5 | El pedido fue marcado como saltado por el conductor |
Para interactuar con este endpoint se deben utilizar las estructuras de datos que se describirán a continuación.
Estados de direcciones
Cada pedido agregado a Optiroute debe tener asociada una dirección la cual será geocodificada en el sistema con la finalidad de obtener la mayor información sobre ella para garantizar el correcto enrutamiento de la entrega.
Para agregar una dirección a Optiroute a través de la API de integración existen dos modalidades:
- A través de la definición del texto de la dirección el sistema realiza un proceso de geocodificación para obtener las coordenadas geográficas de la dirección ingresada.
- A través de la definición de las coordenadas geográficas el sistema realiza un proceso de geocodificación inversa en donde obtiene el texto de la dirección y comuna ingresada.
En ambos procesos la correcta codificación de la dirección depende de la precisión de los datos ingresados. En base a todas las posibilidades en este proceso se determina el estado de la dirección, los cuales son detallados a continuación.
Nombre del estado | Número de estado | Descripción |
ERROR | -1 | Existió un error en el proceso de geocodificación |
ENTERED | 0 | La dirección fue ingresada y aún no se realiza su geocodificación |
GEOCODED | 1 | La dirección fue geocodificada exitosamente, sin advertencias |
GEOCODED_WARNING | 2 | La dirección fue geocodificada pero con advertencias |
REVERSE_GEOCODED | 3 | La dirección fue geocodificada de manera inversa de exitosamente, sin advertencias |
GEOCODED_NUMBER_WARNING | 4 | La dirección fue geocodificada con advertencia debido a una ambigüedad en la numeración ingresada |
GEOCODED_MULTIPLE_WARNING | 5 | La dirección fue geocodificada con advertencia debido a que existen múltiples alternativas que calzan con la descripción además de la seleccionada por el sistema |
GEOCODED_ESTABLISHMENT | 6 | La dirección fue geocodificada con advertencia debido a que fue seleccionado un establecimiento comercial, no una dirección particular |
LOCATION_TYPE | 7 | La dirección fue geocodificada con advertencia debido a que fue seleccionado un establecimiento comercial, no una dirección particular |
COMMUNE_WARNING | 8 | La dirección fue geocodificada con advertencia debido a una ambigüedad en la determinación de la comuna |
Objetos de la API
Para interactuar con este endpoint se deben utilizar las estructuras de datos que se describirán a continuación.
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 al Identificador único del pedido en Optiroute.
Este tipo de objeto se ocupa para ingresar información al sistema.
Propiedad | Tipo | Descripción | Requerido |
customer | Objeto cliente | Cliente de la entrega | Requerido |
address | Objeto dirección | Dirección de la entrega | Requerido |
created_at | Texto con formato %Y-%m-%dT%H:%M:%S%z | Fecha de creación del pedido. Si no es agregada la fecha actual es considerada como la de creación | Opcional
|
delivery_data | Texto con formato %Y-%m-%dT%H:%M:%S%z
| Fecha de entrega del pedido. Si no es agregada la fecha de entrega queda como vacía
| Opcional
|
reference | Texto | Identificador único del pedido provisto por el usuario. Corresponde al ID del pedido en la plataforma a integrar | Opcional |
custom_fields | Objeto campo personalizado | Objeto de campo personalizado | Opcional |
configured_delivery_time | Texto con formato [DD] [HH:[MM:]]ss[.uuuuuu]
| Tiempo configurado para realizar la entrega del servicio. Si se ingresa un entero será considerado como los segundos | Opcional
|
Objeto cliente
El objeto cliente es un hash con la información del cliente que recibirá el pedido, que contiene sus propiedades.
Propiedad | Tipo | Descripción | Requerido |
name | Texto
| Nombre del cliente que recibirá el pedido | Requerido |
reference | Texto
| Identificador único provisto por el usuario. Puede ser el ID del cliente en la plataforma a integrar | Opcional |
email | Texto
| Correo del cliente que recibirá el cliente | Opcional |
demand_a | Número | Cantidad de items (cualquier tipo) por omisión que serán entregados para este cliente. Este valor será una sugerencia al momento de crear un pedido para este cliente | Opcional |
phone_number | Texto
| Teléfono del cliente | Opcional |
time_window_start | Texto con formato %H:%M | Hora de inicio de entrega por omisión del cliente | Opcional |
time_window_end | Texto con formato %H:%M | Hora de término de entrega por omisión del cliente | Opcional |
delivery_time | Texto con formato [DD] [HH:[MM:]]ss[.uuuuuu]
| Tiempo configurado para realizar la entrega del servicio. Si se ingresa un entero será considerado como los segundos
| Opcional |
Objeto dirección
El objeto dirección es un hash con la información de la dirección que recibirá el pedido, que contiene sus propiedades.
Propiedad | Tipo | Descripción | Requerido |
address_string | Texto
| Dirección de entrega del pedido, sin la comuna. El formato calle número | Requerido (sin latitude y longitude) |
commune_string | Texto
| Nombre de la comuna a la que corresponde la dirección de entrega | Opcional. Recomendado para mejorar resultado de búsqueda
|
address_more_info | Texto
| Información adicional sobre la dirección que sea útil en la entrega | Opcional |
apartment_number | Texto
| Descripción de la númeración de departamento, parcela, block de la dirección | Opcional |
latitude | Float | Latitud de la coordenadas geográficas de la dirección de entrega | Requerido (sin address_string) |
longitude | Float | Longitud de la coordenadas geográficas de la dirección de entrega | Requerido (sin address_string) |
Para agregar una dirección a Optiroute a través de la API de integración existen dos alternativas:
- A través de la definición en base a texto de la dirección, esto es definiendo las propiedades address_string y commune_string (opcional pero recomendada) el sistema realiza un proceso de geocodificación para obtener las coordenadas geográficas de la dirección ingresada.
- A través de la definición en base a las propiedades de latitude y longitude. En este caso el sistema realiza un proceso de geocodificación inversa en donde obtiene el texto de la dirección ingresada, además de la comuna en donde se encuentra.
Objeto pedido de respuesta
El objeto pedido de respuesta es un hash de cada pedido y sus propiedades, donde la clave es la propiedad id del pedido, que corresponde al Identificador único del pedido en Optiroute. Este tipo de objeto se ocupa cuando el sistema retorna información respecto a un pedido consultado.
Propiedad | Tipo | Descripción |
id | Número | Identificador único del pedido provisto por Optiroute |
reference | Texto
| Identificador único del pedido provisto por el usuario. El ID del pedido en la plataforma a integrar |
created_at | Texto con formato %Y-%m-%d %H:%M | Fecha de creación del pedido. Si no es agregada la fecha actual es considerada como la de creación
|
delivery_date | Texto con formato %Y-%m-%d %H:%M | Fecha de entrega del pedido |
status | Número | Corresponde al estado actual del pedido |
assigned_driver | Fecha con formato %Y-%m-%d %H:%M | Corresponde al último conductor asignado a la entrega del pedido |
delivery_details | Texto
| Corresponde a los comentarios que el conductor hizo cuando entregaba o saltaba el pedido |
tracking_url | Texto
| Corresponde a la URL que dirige a la página de seguimiento de Optiroute |
tracking | Texto
| Código de seguimiento. Es el código utilizado para hacer el seguimiento del pedido en el tracking Optiroute |
customer | Objeto cliente | Cliente de la entrega |
address | Objeto dirección | Dirección de la entrega |
waypoint | Objeto destino | Este tipo de objeto se ocupa para asignar el último destino de un route plan que fue asignado al pedido
|
Objeto destino
El objeto destino de respuesta es un hash del último destino asignado a este pedido, y sus propiedades, donde la clave es la propiedad id del destino.
Propiedad | Tipo | Descripción |
id | Número | Identificador único del pedido provisto por Optiroute |
name | Texto
| Nombre del destino, generalmente el nombre del cliente asignado al pedido |
created_at | Texto con formato %Y-%m-%d %H:%M | Fecha de creación del pedido
|
arrival_datetime | Texto con formato %Y-%m-%d %H:%M | Fecha de entrega programada del pedido |
order | Número | Orden del destino en la ruta |
customer_order | Número | Ordern del cliente en la ruta |
status | Texto
| Número del estado del pedido |
reason | Texto
| Razón de salto del destino |
images | Lista de Objetos Imagen | Lista de las imágenes obtenidas por el conductor al momento de la entrega del pedido |
reception_name | Texto
| Nombre del receptor del pedido |
reception_rut | Texto
| RUT del receptor del pedido |
note | Texto
| Comentarios del conductor al momento de la entrega |
started_at | Texto con formato %Y-%m-%d %H:%M
| Fecha de inicio del viaje al destino del pedido |
completed_at | Texto con formato %Y-%m-%d %H:%M
| Fecha en que se marcó como entregado o saltalto el pedido
|
arrived_at | Texto con formato %Y-%m-%d %H:%M
| Fecha de llegada del viaje al destino del pedido
|
finished_at | Texto con formato %Y-%m-%d %H:%M
| Fecha de inicio del viaje al siguiente destino (luego de haberlo completado o saltado)
|
Objeto Imagen
El objeto imagen de respuesta es un hash con la información respecto a la imágenes de entrega. Las imágenes serán almacenadas hasta 1 año desde que fueron obtenidas.
Es importante considerar que el vínculo de la imagen tiene una vigencia de 24 horas, luego de eso será generará por otro vínculo.
Propiedad | Tipo | Descripción |
url | Texto
| URL de la imagen |
thumbnal_url | Texto
| URL del thumbnal de la imagen
|
Agregar pedidos
Al agregar pedidos a Optiroute estos aparecerán disponibles en la plataforma y podrás generar tus rutas en base a ellos. Para ello debes realizar una llamada tipo POST en el endpoint de la API de pedidos, añadiendo a ella el objeto tipo pedido de entrada que deseas crear.
Si la creación fue realizada correctamente la API deberá retornar un objeto tipo pedido de respuesta con la información del pedido recién creado.
En caso de cualquier error de validación la API entregará la descripción apropiada.
Un ejemplo del contenido de la llamada para agregar pedidos es la siguiente:
{
'address': {
'apartment_number': '5',
'address_more_info': 'Villa',
'latitude': '-71.5508119'
},
'customer': {
'name': 'test',
'email': 'test@test.com',
'phone_number': '987654321',
'demand_a': 1
},
}
Actualizar pedidos
Para actualizar pedidos en Optiroute debes realizar una llamada tipo PUT o PATCH en el endpoint de la API de pedido agregando El ID del pedido en la plataforma a integrar (reference en propiedad del objeto entrada de pedido) al final de la URL, como por ejemplo:
https://app.optiroute.cl/api/v1/integration-service-requests/{id}/
Debes adjuntar a la llamada los parámetros del objeto de tipo pedido de entrada que deseas actualizar.
Los parámetros de un pedido que pueden ser actualizados son los siguientes:
Propiedad | Tipo | Descripción |
customer
| Objeto cliente
| Cliente de la entrega |
address
| Objeto dirección
| Dirección de la entrega
|
delivery_date
| Fecha con formato %Y-%m-%d %H:%M
| Fecha estipulada para la entrega del pedido. Esta fecha es solo referencial y no corresponde a la fecha de entrega asignada en el proceso de optimización de rutas.
|
created_at
| Fecha con formato %Y-%m-%d %H:%M
| Fecha de creación del pedido
|
scheduled_at
| Fecha con formato %Y-%m-%d %H:%M
| Fecha de notificación a los clientes
|
route_started_at
| Fecha con formato %Y-%m-%d %H:%M
| Fecha de inicio de la ruta que reparte el pedido
|
completed_at
| Fecha con formato %Y-%m-%d %H:%M
| Fecha en que el pedido fue completado, saltado o cancelado
|
cancelled_at
| Fecha con formato %Y-%m-%d %H:%M
| Fecha en que el pedido fue cancelado
|
status
| Número | Número del estado del pedido
|
reference
| Texto | Identificador único del pedido provisto por el usuario. Corresponde al ID del pedido en la plataforma a integrar
|
custom_fields
| Objeto campo personalizado
| Objeto de campo personalizado asignado al pedido
|
Si el estado del pedido es actualizado, las fechas de registro de estados posteriores al estado ingresado serán borradas. Por ejemplo: si el pedido es actualizado con estado REVIEWING, las fechas scheduled_at, route_started_at, completed_at y cancelled_at serán borradas.
Si el estado del pedido es actualizado se asignará a la fecha y hora actual a la fecha de registro correspondiente al estado ingresado, a menos que se especifique en la misma llamada la fecha correspondiente.
Si la llamada fue realizada correctamente la API deberá retornar un objeto de tipo pedido de respuesta.
Es posible actualizar el estado de un pedido aún cuando esté asignado a una ruta que aún no ha sido realizada o se está efectuando. La información de entrega permanece sin modificaciones desde que fue agregado a la ruta de despacho, por lo que cualquier modificación de estado será actualizada nuevamente cuando el conductor complete, salte o cancele el pedido.
En caso de cualquier error de validación la API entregará la descripción apropiada.
Obtener lista de pedidos
Para obtener la lista de pedidos desde Optiroute debes realizar una llamada tipo GET al endpoint de la API de pedidos.
Puedes filtrar la lista de objetos de tipo pedidos de respuesta obtenidos pueden utilizarse parámetros de consulta que deben ser agregados al final de la URL del endpoint como una serie de pares clave-valor, como por ejemplo:
https://app.optiroute.cl/api/v1/integration-service-requests/?per_page=25&creationStartDate=15-12-2024&creationEndDate=18-12-2024&statuses=0,1,2
Los parámetros que permiten filtrar esta llamada son los siguientes:
Propiedad | Tipo | Descripción |
per_page | Número | Cantidad de pedidos incluidos en cada página de la respuesta |
creationStartDate | Fecha con formato %Y-%m-%d | Fecha mínima de creación de los pedidos a obtener |
creationEndDate | Fecha con formato %Y-%m-%d | Fecha máxima de creación de los pedidos a obtener |
statuses | Lista de números separados por coma | Lista de números correspondientes a los estados de los pedidos Optiroute |
La API retorna la lista de objetos pedidos de respuesta de acuerdo a los filtros ingresados.
Obtener pedido particular
Para obtener el detalle del pedido desde Optiroute debes realizar una llamada tipo GET en el endpoint de la API de pedido agregando el id del pedido al final de la URL, de la siguiente manera:
https://app.optiroute.cl/api/v1/integration-service-requests/{id}/
Si la llamada fue realizada correctamente la API deberá retornar un objeto de tipo pedido de respuesta.
Borrar pedidos
Para eliminar un pedido desde Optiroute debes realizar una llamada tipo DELETE en el endpoint de la API de pedido agregando el id del pedido al final de la URL, de la siguiente manera:
https://app.optiroute.cl/api/v1/integration-service-requests/{id}/
Sólo los pedidos en estado REVIEWING pueden ser eliminados. Eliminar pedidos en cualquier otro estado puede provocar problemas de sincronización de datos mientras está siendo gestionado.
Los pedidos no son efectivamente borrados del sistema, sólo su estado es actualizado al estado DELETED.
Imágenes externas de pedidos
Es posible asignar a los pedidos imágenes que no fueron obtenidas utilizando la aplicación Optiroute Driver. Para esto se debe agregar la imagen a la llamada del siguiente endpoint:
https://app.optiroute.cl/api/v1/integration-service-requests/{id}/upload_image/
Si el proceso fue realizado con éxito la llamada retornará un objeto con la descripción del vínculo de la imágen, además de su ID único de identificación, que podrá ser utilizado para borrarla.
Para borrar determinada imágen externa asignada a un pedido es posible realizar una llamada tipo DELETE en el siguiente endpoint:
https://app.optiroute.cl/api/v1/external-images/{id}/
API para carga masiva de pedidos
Si deseas agregar múltiples pedidos a Optiroute en una sola llamada puedes utilizar nuestro endpoint de carga masiva de datos de pedidos:
https://app.optiroute.cl/api/v1/batch-service-request-creation-inputs/
Esta API creará una tarea de importación que se ejecutará de manera asíncrona a la llamada en nuestro sistema, la cual podrá ser monitoreada a través de las distintas llamadas del endpoint.
Objetos de la API
Para interactuar con este endpoint se deben utilizar las estructuras de datos que se describirán a continuación.
Objeto input de pedidos de entrada
El objeto pedido masivo de entrada es un hash que contiene el arreglo de pedidos de entrada que serán agregados a Optiroute.
Propiedad | Tipo | Descripción | Requerido |
data | Arreglo de objetos de pedidos de entrada | Arreglo con todos los pedidos de entrada que serán procesados en el input de pedido | Requerido |
Un ejemplo del contenido de la llamada para la carga masiva de datos de pedidos es el siguiente:
{
'data': [
{
'reference': '2301989790',
'address': {
'address_string': 'CARMEN BAJO 690',
'commune_string': 'IQUIQUE',
},
'customer': {
'name': 'NIBALDO TITO MAMANI MANINI',
'phone_number': '932321321',
'demand_a': 0,
'reference': '0649776'
},
},
{
'reference': '2301988831',
'address': {
'address_string': 'CARMEN BAJO 690',
'commune_string': 'IQUIQUE',
},
'customer': {
'name': 'CAMILA MARY MORI ESPINOZA',
'phone_number': '991111111',
'demand_a': 1,
'reference': '0975945'
},
}
]
}
Objeto input de pedidos de respuesta
Este objeto es un hash que contiene la información de un input de pedidos que es retornado en una respuesta a una llamada de alguno de los endpoints de esta API.
Propiedad | Tipo | Descripción |
creator | Objeto Usuario | Creador del input de pedido |
data | Arreglo de objetos de pedidos de entrada | Cliente de la entrega |
address | Objeto dirección | Arreglo con todos los pedidos de entrada que fueron procesados en el input de pedido |
Agregar pedidos en batch
Para agregar pedidos de forma masiva debes realizar una llamada tipo POST agregando el objeto de tipo pedido masivo de entrada.
Esta llamada creará todos los pedidos cuya referencia no haya sido encontrada en tu cuenta. Si el pedido ya existe sólo se actualizará si está en el estado REVIEWING o DELETED.
Si las propiedades id o reference de alguno de los pedidos ingresados está presente en alguno de los pedidos ingresados se efectuará una actualización del pedido (si es que existe en la plataforma).
Obtener estado de input de pedido
Si deseas obtener todos el estado de un input de pedidos particular, debes hacer una llamada tipo GET en el endpoint de la API de pedido agregando la referencia del objeto de tipo input de tipo pedido masivo de entrada creado en la plataforma (reference en propiedad del objeto) al final de la URL, como por ejemplo:
https://app.optiroute.cl/api/v1/batch-service-request-creation-inputs/{id}/
Si la llamada fue realizada correctamente la API deberá retornar un input de pedidos de respuesta.