Flete dinámico

La función de flete dinámico tiene como objetivo agilizar y democratizar la selección de precios y plazos de flete para los sellers que utilizan la modalidad ME1, a fin de mejorar la experiencia del comprador mediante la información más precisa de los plazos del flete aplicados por cada vendedor.
También se propone ampliar el catálogo de los vendedores que cuentan con más de un centro de distribución, esperando que esto genere un aumento en las ventas y el GMV.
Nota: Inicialmente, solo estará disponible para vendedores de MLB (Brasil) y Argentina (MLA).


Contenidos

Dinámica de integración

Este proyecto posee una dinámica diferente de toda la API de Mercado Libre. En este caso, el seller/integrador deberá poner a disposición un endpoint, en el cual Mercado Libre hará el request para obtener la información del flete que se muestra en la plataforma al momento de la compra.
Tanto el vendedor (desarrollo inhouse), el integrador o el socio que esté integrado a transportistas podrán disponibilizar el endpoint.

Tiempo de respuesta

Un aspecto muy importante de este proyecto es el tiempo de respuesta del endpoint, que no podrá superar los 400 ms. Antes de activar el endpoint, habrá varias validaciones, entre ellas, la validación de carga para evaluar el tiempo de respuesta. Y el resultado será compartido con el integrador, pues, en caso de superar el tiempo límite, la integración no será aprobada y no podrá ser activada para los vendedores.
Nota: La actual infraestructura de flete dinámico está ubicada en la región este de EE.UU. (Virginia).

Evento

Al comienzo, utilizaremos para el flete dinámico la solución actual de ME1 como evento contingente, pero, a medida que la solución se consolide en producción, el evento contingente pasará a ser responsabilidad del integrador/vendedor.
El evento contingente actual se activará en las siguientes situaciones:

  • errores/falta de disponibilidad del integrador.

  • tasa de timeouts muy alta (en caso de superar los 400 ms).

  • cuando se devuelva -1 al error_code no response.

Contrato de la API

Request Para la creación del endpoint, deben seguirse las reglas del contrato, como se indica a continuación:
El nombre del endpoint estará a cargo del integrador, y solo bastará respetar el “contrato” estipulado para los request y responses.
El request permite el envío de más de un producto, aunque sean de diferentes negocios (pero garantizando que pertenecen a la misma integración).
A continuación, se presenta la descripción de cada uno de los ítems admitidos en el payload:
destination (string)​: obligatorio. Es el Código Postal del comprador, donde se entregarán los productos. Para Argentina, debe ser de 4 dígitos.
buyer_id (int64): opcional. Es el identificador del usuario que está comprando en Mercado Libre. Solo está disponible cuando el usuario que realiza la cotización está logueado en la plataforma Mercado Libre.
items (array)​​: obligatorio. Es una lista de ítems que están siendo comprados.
seller_id (string)​​: obligatorio. Es la identificación de la cuenta dentro de Mercado Libre.
item_id (string): opcional. Es la identificación del item registrado en Mercado Libre.
store_id (string)​​: opcional. Es la identificación del negocio dentro de Mercado Libre. Esta información solo está disponible para aquellos que poseen más de un negocio bajo la misma cuenta.
sku (string)​​: obligatorio. Es la identificación del producto al ser comprado.
quantity (int)​​: obligatorio. Es la cantidad que será comprada de un mismo item.
origin (string)​​: opcional. Es el Código Postal registrado por el vendedor. Para Argentina, debe ser de 4 dígitos.
price (float)​​: opcional. Es el precio unitario del producto multiplicado por la cantidad elegida por el comprador, al momento de la cotización.
dimensions (object)​​: opcional. Es la lista de medidas de un producto.
length (float)​​: obligatorio en el caso de que existan dimensions. Es el largo del producto (en centímetros).
width (float)​​: obligatorio en el caso de que existan dimensions. Es el ancho del producto (en centímetros).
height (float)​​: obligatorio en el caso de que existan dimensions. Es el alto del producto (en centímetros).
weight (float)​​: obligatorio en el caso de que existan dimensions. Es el peso del producto (en kilogramos).

Ejemplo:

{  
   "destination":"13295000",
   "items":[  
      {  
         "seller_id":"89540000",
         "sku":"0001166000",
         "quantity":1,
         "origin":"5000",
         "price":316,
         "dimensions":{  
            "length":1,
            "height":1,
            "width":1,
            "weight":1
         }
      }
   ]
}

Respuesta: El response debe devolver las cotizaciones correspondientes a los ítems comprados, separados por “paquetes”. Este tipo de respuesta permite que los vendedores que cuenten con más de un centro de distribución puedan enviar cotizaciones del flete a partir de los Cds en los que se encuentra cada uno de los productos.
La creación de más de un “paquete” queda a criterio de cada vendedor; sin embargo, se espera como mínimo uno con todos los productos que se enviaron a través del request.
Debe haber, como máximo, 2 (dos) cotizaciones por paquete, teniendo como caption los nombres Normal o Expreso.
Todos los valores de la respuesta son obligatorios.
A continuación, se presenta la descripción de cada uno de los ítems admitidos en el payload:
packages (array)​​: Es la lista de paquetes creada por el vendedor.
items (array)​​: Es la lista de ítems dentro de un mismo paquete.
sku (string)​​: Es la identificación del item que será comprado.
seller_id (string)​​: Es la identificación de la cuenta que está vendiendo el producto. Generalmente, es una copia de la información ya dada en el request.
store_id (string)​​: opcional. Es la identificación del negocio que está vendiendo el producto. Generalmente, es una copia de la información ya dada en el request.
quantity (int)​​: Es la cantidad del producto que se enviará en el paquete. Es posible que, por razones de disponibilidad en stock, una parte del producto sea enviada desde un CD y la otra parte desde otro CD (por lo tanto, dos “paquetes” distintos).
stock (int)​​: Es la disponibilidad del producto en stock por CD. En el caso de que esa información no esté disponible, debe devolverse el valor -1.
error_code (int)​​: Es el código que identificará el tipo de error relacionado con el producto. La lista de los códigos admitidos será presentada en las siguientes secciones.
quotations (array)​​: Es la lista de cotización del flete para un paquete.
cost (float)​​: Es el costo real del flete. En el caso de no disponer de esa información, debe devolverse el mismo valor de price.
price (float)​​: Es el precio del flete que será presentado al comprador. Esta información difiere de cost, ya que existe la posibilidad de que el flete sea subvencionado parcial o totalmente (flete gratis).
handling_time (int)​​: Es el tiempo, en días hábiles, que se utilizará para separar y embalar el producto. Abarca todos los procesos previos al envío efectivo del paquete. En el caso de que esa información no esté disponible, debe devolverse el valor 0.
shipping_time (int)​​: Es el tiempo, en días hábiles, de tránsito del paquete (desde la entrada al camión hasta la entrega al comprador).
promise (int)​​: Es la suma de los valores de handling_time y shipping_time.
caption (string)​​: Es el nombre asignado a la cotización. La opción esperada es Normal

Ejemplo:

{
    "packages": [
        {
            "items": [
                {
                    "sku": "00266983118",
                    "seller_id": "207740981",
                    "quantity": 1,
                    "stock": -1,
                    "error_code": 0,
                    "store_id": null
                }
            ],
            "quotations": [
                {
                    "cost": 66.6,
                    "price": 66.6,
                    "handling_time": 0,
                    "shipping_time": 39,
                    "promise": 39,
                    "caption": "Normal"
                }
            ]
        }
    ]
}	


Errores

Como se mencionó anteriormente, los errores se presentan individualmente para cada item. El objetivo de este abordaje es no invalidar la cotización/compra de los demás ítems cuando solo una parte de los mismos presenta algún tipo de problema. La tasa de conversión tiende a ser mayor que si invalidamos todos los ítems.
A continuación, se presenta la lista de los códigos de errores válidos.

Código Situación
-1 Error inesperado (solamente utilizarlo en casos muy específicos)
0 Sin error
1 Cantidad no disponible en stock
2 Código Postal de destino inválido
3 Producto no disponible para el Código Postal de destino
4 Producto elegido inexistente


Nota: cuando se devuelva el error -1, se considerará un error interno en la aplicación del integrador y se enviará automáticamente a evento contingente.

Forma parte de nuestra comunidad