[API Pedidos] Cómo usar la API de integración de pedidos

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_dataTexto 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_timeTexto con formato [DD] [HH:[MM:]]ss[.uuuuuu]
Tiempo configurado para realizar la entrega del servicio. Si se ingresa un entero será considerado como los segundosOpcional

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

waypointObjeto destinoEste 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

noteTexto
Comentarios del conductor al momento de la entrega
started_atTexto con formato %Y-%m-%d %H:%M
Fecha de inicio del viaje al destino del pedido
completed_atTexto con formato %Y-%m-%d %H:%M
Fecha en que se marcó como entregado o saltalto el pedido
arrived_atTexto con formato %Y-%m-%d %H:%M
Fecha de llegada del viaje al destino del pedido
finished_atTexto 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úmeroNúmero del estado del pedido
reference
TextoIdentificador ú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.