Conoce las herramientas que tenemos disponibles en Multivende para que puedas registrar tus ventas desde la plataforma hacia tu sistema
Para registrar las ventas desde Multivende hacia un sistema tenemos a disposición dos herramientas:
- Webhooks: Son notificaciones en tiempo real que se generan cuando ocurre un evento en Multivende y se envían a la aplicación por medio del Callback_URL.
- Polling: Es un proceso de consulta de ventas que funciona como complemento del webhook.
¿Cómo realizar esta implementación?
Consultar ventas
Se debe consultar las ventas de un rango de fechas cada M (Frecuencia de ejecución) horas, estableciendo lo siguiente:
- from = fecha y hora de la última vez que se ejecutó correctamente el polling (si no se ha ejecutado, desde que fecha y hora se deben consultar las ventas).
- to = la fecha y la hora actual.
- M = frecuencia de ejecución (recomendamos usar M = 1 -2 horas).
Deberas usar el endpoint Get checkouts light para realizar el sondeo de las órdenes desde Multivende.
Modos de consulta según funcionalidad a integrar
- Sistemas que intervienen en la operación de la orden. Por ejemplo: generación de etiquetas, documentos tributarios, entre otros.
- _updated_at_from (buscar en fecha de última actualización en Multivende).
- _updated_at_to (buscar hasta la fecha de última actualización en Multivende).
-
_marketplace_connection_id (opcional, filtra por Marketplace).
- Sistemas que no intervienen en la operación de la orden. Por ejemplo: reportería, herramientas de BI.
- _sold_at_from (buscar en Fecha de venta en el mercado).
- _sold_at_to (buscar hasta la fecha de venta en el Marketplace).
- _sold_at_order (opcional, ordenar ASC o DESC).
- _marketplace_connection_id (opcional, filtra por Marketplace).
Importante: Ésta opción no es recomendada para sistemas del punto 1, ya que puede haber desfase de fechas y horas en las que el marketplace y Multivende registraron la venta, debido a validaciones en los pagos u algo similar. |
Se pueden consultar las ventas cada M = 1 hora, por ejemplo, pasando en los parámetros a continuación:
_updated_at_from: from.
_updated_at_to: to.
Estos parámetros tienen el formato y la zona horaria en UTC, es decir: "YYYY-mm-dd hh:mm:ss".
Ejemplo:
Si la fecha actual es “2020-03-18 20:30”, el request sería de la siguiente manera:
curl --location --request GET
'http://app.multivende.com/api/m/b4bbbbbb-fff2-45b1-99989-0afc7xx32xxx/checkouts/light/p/1?_updated_at_from=2020-03-18 18: 30 & _updated_at_to = 2020-03-18 20:30 '\
--header' Autorización: Baerer eyJ0eXAiOiJKV1QiLCJhbGcixxxxxxxxxxxJ9.e ………… .. '
En donde este sería el Response:
{
"entries": [
{
"_id": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"status": "created",
"verifyStatus": "verificado",
"paymentStatus": "completado",
"soldAt" : "2019-10-10T16: 12: 59.000Z",
"createdAt": "2019-10-10T16: 13: 01.000Z",
"updatedAt": "2019-10-31T22: 01: 09.000Z",
"BillingAddressId ": null,
" DeliveryTypeId ": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
" MerchantId ": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
},
],
" paginación ": {
"desplazamiento": 0,
"limit": 50,
"total_pages": 1,
"current_page": 1,
"next_page": 0,
"previous_page": 0,
"total_items": 11
}
}
Recomendamos registrar en su sistema los campos updatedAt (Fecha de última actualización en Multivende), soldAt (Fecha de la venta en el canal), y "_id" (identificador de la venta en Multivende), ya que con estos campos se puede comparar en sus registros y validar si es una nueva venta o se debe actualizar.
Consultar detalle de venta por "_id"
Una vez se tenga el "_id" de la venta (response anterior), se consulta su detalle con el endpoint Get Checkout.
Cuando el response tiene el campo:
-
DeliveryOrdersInCheckouts: Se refiere a la venta con despachos, el cual es un arreglo que detalla toda la información de los despachos de la venta.
- Cada despacho viene dentro de un objeto que se llama DeliverOrder. En el objeto se encuentra la dirección de despacho dentro del objeto ShippingAddress.
- PickUpOrders: Se refiere a la venta con retiro en tienda, el cual es un arreglo que detalla toda la información del retiro en tienda para la venta.
Importante:
- Multivende mantiene la misma estructura, pero los datos pueden variar según el canal. Por ejemplo:
-
Los campos DeliveryOrdersInCheckouts y PickUpOrders son arrays dado que una venta puede tener más de un despacho o retiro en tienda asociado.
- Una venta puede contener tanto “DeliveryOrdersInCheckouts” (Despachos) como “PickUpOrders” (Retiros en tienda) esto siempre y cuando el canal lo permita.
-
Get delivery order types: Tipos de entrega para una orden.
Ejemplos:
1. El campo country puede tener el valor CL o Chile.
2. El campo indication puede llegar el detalle de la calle y casa y en otra venta llegar separado en el campo calle y número.
- Entrega con despacho
Podemos consultar el detalle de la orden para tomar la data relevante para la operación logística mediante el endpoint delivery order.
- Entrega con retiro en tienda
Podemos consultar el detalle de la orden para tomar la data relevante para la operación logística mediante el endpoint pickup order.
- Entrega Mixta
Se consultan ambos endpoints de acuerdo al tipo de entrega de cada producto.
Consideraciones importantes
- A través de los webhooks las apps resultan más eficientes, porque identifican cuando se produce un cambio en tiempo real y entonces, puede hacer las solicitudes periódicas en un rango de tiempo más amplio a la API para obtener el contenido actualizado.
- Los webhooks se deben complementar con un polling para disminuir la probabilidad de pérdida de datos. (Actualmente no estamos realizando re intentos que aseguren el delivery de la notificación).
- Si al consultar el detalle de la venta con el CheckoutId el response es con status 404, se debe a que se trata de una venta que presentó error en el registro de Multivende la cual no queda registrada.
- Deben validar siempre desde webhooks y polling que el id de la venta informado ya se encuentre registrado en tu sistema para ver si la creas o actualizas.
- Validar para actualizar si la fecha de updateAt es diferente a la que tienes registrada.
Ventas con errores:
Es posible consultar los ids de las ventas que no se registraron en Multivende por motivos de error durante el registro, esto puede funcionar como una auditoría. Para realizar la consulta de estos ids pueden realizar un request al endpoint Get checkouts with error
La respuesta de la api dará una descripción del error que causó el no registro correspondiente de la orden. Recordar que cuando la orden es corregida, se lleva a cabo el registro de la misma con un id diferente.
{
"entries": [
{
"_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"externalId": "XXXXXXX",
"externalContent": null,
"error": "StatusCodeError: 404 - {\"cause\":\"\",\"message\":\"Order do not exists\",
\"error\":\"order_not_found\",\"status\":404}\n at new StatusCodeError
(/app/node_modules/request-promise/lib/errors.js:32:15)\n at Request.RP$callback
[as _callback] (/app/node_modules/request-promise/lib/rp.js:77:29)\n at
Request.self.callback (/app/node_modules/request/request.js:185:22)\n
at Request.emit (node:events:513:28)\n at Request.emit (node:domain:489:12)\n
at Request.<anonymous> (/app/node_modules/request/request.js:1154:10)\n
at Request.emit (node:events:513:28)\n at Request.emit (node:domain:489:12)\n
at IncomingMessage.<anonymous> (/app/node_modules/request/request.js:1076:12)\n
at Object.onceWrapper (node:events:627:28)\n at IncomingMessage.emit
(node:events:525:35)\n at IncomingMessage.emit (node:domain:489:12)\n at
endReadableNT (node:internal/streams/readable:1358:12)\n at
processTicksAndRejections (node:internal/process/task_queues:83:21)",
"archived": "disabled",
"count": 0,
"status": null,
"eventStatus": "error",
"type": null,
"createdAt": "2021-05-22T04:29:46.000Z",
"updatedAt": "2021-05-22T04:29:46.000Z",
"MerchantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"MarketplaceConnectionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"CreatedById": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"UpdatedById": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
},
{
"_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"externalId": "XXXXXXX",
"externalContent": null,
"error": "StatusCodeError: 404 - {\"cause\":\"\",\"message\":\"Order do not exists\",
\"error\":\"order_not_found\",\"status\":404}\n at new StatusCodeError
(/app/node_modules/request-promise/lib/errors.js:32:15)\n at Request.RP$callback
[as _callback] (/app/node_modules/request-promise/lib/rp.js:77:29)\n at
Request.self.callback (/app/node_modules/request/request.js:185:22)\n
at Request.emit (node:events:513:28)\n at Request.emit (node:domain:489:12)\n
at Request.<anonymous> (/app/node_modules/request/request.js:1154:10)\n
at Request.emit (node:events:513:28)\n at Request.emit (node:domain:489:12)\n
at IncomingMessage.<anonymous> (/app/node_modules/request/request.js:1076:12)\n
at Object.onceWrapper (node:events:627:28)\n at IncomingMessage.emit
(node:events:525:35)\n at IncomingMessage.emit (node:domain:489:12)\n at
endReadableNT (node:internal/streams/readable:1358:12)\n at
processTicksAndRejections (node:internal/process/task_queues:83:21)",
"archived": "disabled",
"count": 0,
"status": null,
"eventStatus": "error",
"type": null,
"createdAt": "2021-05-22T04:11:37.000Z",
"updatedAt": "2021-05-22T04:11:37.000Z",
"MerchantId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"MarketplaceConnectionId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"CreatedById": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx",
"UpdatedById": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"
}
Si se consultan los id's asociados a las ventas con error en la api de Get checkout esta dará un 404 debido a que las ventas con error no quedan guardadas en Multivende.
Flujo de la consulta
Si tienes dudas o necesitas asistencia, puedes escalar un ticket a través de este enlace y nuestro equipo estará encantado de ayudarte.
Equipo Integraciones API Multivende