Koru Shipday
Integra VTEX con Shipday: carga masiva de tarifas por código postal, alta automática de órdenes en la flota de reparto y actualización del tracking y la entrega en VTEX.
Identificador de instalación en pre-release
Koru Shipday funciona actualmente de manera interna como pardosit.koru-shipday
solamente para desarrollo. El App ID VTEX público definitivo reemplazará
{vendor}.koru-shipday en todos los comandos antes de hacer publish o release. No uses
la cuenta de desarrollo para una instalación productiva.
Koru Shipday es una VTEX Admin App que conecta una tienda VTEX con Shipday, el software de gestión de última milla con flota propia. Cubre el circuito completo de un envío: cargar las tarifas de envío por código postal en VTEX, dar de alta cada orden pagada en Shipday para que salga a reparto, y devolver a VTEX la referencia de seguimiento y la confirmación de entrega.
La app se organiza en tres módulos, más una capa transversal de configuración, diagnóstico y auditoría:
- Tarifas — reemplaza la tabla de tarifas por código postal de una o varias políticas de envío desde una única planilla, en una sola operación con respaldo automático.
- Órdenes — detecta las órdenes con pago aprobado cuya política de envío está habilitada, calcula los bultos y las crea en Shipday sin duplicarlas.
- Eventos — recibe el webhook de Shipday y refleja en VTEX la referencia de seguimiento y la entrega confirmada.
Qué no hace Koru Shipday
Koru Shipday no crea, edita ni elimina políticas de envío, muelles, almacenes ni transportadoras: opera sobre las que ya existen en la cuenta. Tampoco factura órdenes (asume que la orden ya está facturada cuando llega a Shipday), no propaga a VTEX los estados intermedios del reparto, no gestiona repartidores ni rutas dentro de Shipday, y no reemplaza al ERP como fuente de verdad de la operación.
Antes de empezar
Responsables recomendados
| Tarea | Responsable habitual |
|---|---|
| Instalar la app y validar cuenta/workspace | Agencia VTEX, desarrollador o líder técnico |
| Activar la app para el sitio en Koru Suite | Red Clover / administrador de Koru Suite |
| Obtener la API Key de Shipday y configurar el webhook | Responsable de la cuenta de Shipday |
| Crear el atributo de bultos en el catálogo de VTEX | Responsable de catálogo |
| Cargar las tarifas por código postal | Ecommerce manager o responsable de logística |
| Revisar órdenes con error y reintentarlas | Operador de logística o ecommerce |
| Auditar los eventos recibidos desde Shipday | Responsable operativo designado |
Una misma persona puede cubrir varios roles en una tienda chica.
Accesos necesarios
Antes de instalar, verificá que contás con:
- Una sesión válida de VTEX Admin en la cuenta de la tienda.
- Un rol de License Manager con acceso al módulo Logistics. Sin ese acceso, el módulo de Tarifas queda bloqueado: la escritura de tarifas se hace con la sesión del administrador, no con la identidad de la app.
- La VTEX CLI oficial instalada y actualizada.
- Permisos para instalar apps en el workspace elegido y para modificar los settings de la app.
- El Website ID del ecommerce en Koru Suite y la app Koru Shipday activa para ese sitio.
- Una cuenta de Shipday con su API Key (dashboard de Shipday → My Account → Integrations → API Credentials).
- Al menos una política de envío ya configurada en VTEX para asociar a Shipday.
Koru Shipday no crea un rol VTEX propio. El acceso a Logistics se administra con los controles disponibles en VTEX License Manager.
Identificadores que vas a encontrar
| Identificador | Ejemplo | Quién lo define | ¿Se configura? |
|---|---|---|---|
| Cuenta VTEX de la tienda | mi-tienda | Merchant | Se usa para iniciar sesión con la CLI |
| Workspace VTEX | master o shipday-qa | Merchant/agencia | Determina dónde se instala y valida |
| App ID VTEX | {vendor}.koru-shipday | Publicador de la app | Se usa en vtex install |
| Website ID de Koru | UUID del sitio | Koru Suite | Sí, una vez por tienda |
| App ID de Koru | UUID interno de Koru Shipday | Build de la app | No; vive en el código y una tienda no puede cambiarlo |
| API Key de Shipday | Cadena secreta | Shipday | Sí, una vez por tienda |
| Token del webhook | Hasta 32 caracteres, lo elegís vos | Merchant | Sí, en la app y en Shipday |
No confundas las dos cuentas
La cuenta de la tienda, usada en vtex login, no necesariamente coincide con
{vendor}, que representa a la cuenta publicadora de Koru Shipday.
Instalación con VTEX CLI
La instalación usa la VTEX CLI oficial. Es una Admin App standalone: no requiere modificar el Store Theme ni declarar bloques de storefront.
Instalar primero en un workspace de validación
Si la tienda tiene un proceso de QA, instalá y configurá primero en un workspace de desarrollo. Reemplazá los valores entre llaves:
Iniciá sesión en la cuenta de la tienda
vtex login {store-account}Seleccioná el workspace de validación
vtex use {store-account}/{workspace}Confirmá el contexto antes de instalar
vtex whoamiLa salida debe mostrar la cuenta y el workspace que esperás. No continúes si el contexto es incorrecto.
Instalá Koru Shipday
vtex install {vendor}.koru-shipday@0.xEl rango 0.x instala la última versión disponible mientras la app está en pre-release.
La app registra sus procesos automáticos al instalarse
Durante la instalación, Koru Shipday registra sus disparadores en el Scheduler de VTEX (envío de órdenes, conciliación y reintento de tracking). Si el registro no llegó a completarse, se repara solo la primera vez que ejecutás un proceso manualmente desde la pantalla de Resumen.
Abrir la app en VTEX Admin
Podés abrir Koru Shipday desde la sección de configuración de la tienda en VTEX Admin (menú lateral) o navegar directamente:
https://{workspace}--{store-account}.myvtex.com/admin/koru-shipdayPara master, usá el dominio principal de Admin de la cuenta:
https://{store-account}.myvtex.com/admin/koru-shipdaySi la app no aparece en la navegación, confirmá vtex list, recargá VTEX Admin y
verificá que estés mirando la misma cuenta y el mismo workspace donde la instalaste.
Instalar en master
Una vez validado el setup en el workspace correspondiente, seleccioná master,
reconfirmá el contexto y repetí la instalación:
vtex use {store-account}/master
vtex whoami
vtex install {vendor}.koru-shipday@0.x
vtex listLos settings son por instalación/workspace. Verificá el Website ID, la API Key de Shipday, el token del webhook y las políticas habilitadas en el ambiente definitivo aunque ya los hayas probado en otro workspace.
La URL del webhook cambia con el workspace
La URL que Shipday tiene configurada apunta a un workspace concreto. Al pasar a master
tenés que copiar la URL nueva desde Configuración → Webhook de Shipday y actualizarla
en el dashboard de Shipday, o los eventos van a seguir llegando al workspace de prueba.
Actualización y desinstalación
Actualizar
Seleccioná la cuenta/workspace correcto, confirmalo y volvé a instalar el rango:
vtex whoami
vtex install {vendor}.koru-shipday@0.x
vtex listDespués de actualizar, abrí la app y verificá licencia, verificaciones principales, políticas habilitadas y el estado de las automatizaciones. No asumas que una actualización de código reemplaza la validación operativa.
Desinstalar
La desinstalación se aplica al workspace actual:
vtex whoami
vtex uninstall {vendor}.koru-shipday
vtex listQué pasa con lo que ya se sincronizó
Desinstalar no borra de Shipday las órdenes ya creadas ni revierte las tarifas ya cargadas en VTEX: solo detiene la integración. Si el objetivo es una pausa, alcanza con apagar Integración activa en Configuración, que detiene la operación sin perder la configuración. Antes de desinstalar, desactivá también el webhook en el dashboard de Shipday para que deje de apuntar a una app que ya no está.
Activación y primer acceso
Obtener el Website ID
Antes del primer uso, Red Clover debe activar Koru Shipday para el website correspondiente en Koru Suite. El Website ID se obtiene desde Koru Suite o se entrega durante la activación.
El Website ID:
- Identifica al ecommerce dentro de Koru Suite.
- No es una contraseña ni un secreto.
- Debe pertenecer a la misma tienda VTEX donde instalaste la app.
- Es el único identificador Koru que el merchant ingresa manualmente: el App ID de Koru vive en el código de la app y no puede modificarse desde la tienda.
Conectar la tienda
En el primer acceso, la app muestra Conectar esta tienda con Koru Suite:
Pegá el Website ID
Ingresá el valor completo, sin espacios adicionales.
Guardá y continuá
La app persiste el valor en sus settings de VTEX. También puede administrarse desde
Admin → Apps → Koru Shipday, usando la propiedad koruWebsiteId.
Confirmá la licencia
La pantalla principal debe mostrar la licencia activa. Si aparece una pantalla de licencia no activa, no continúes con el setup operativo: primero verificá el Website ID y la activación en Koru Suite.
La app no solicita un login adicional de Koru. La persona ya está autenticada en VTEX Admin; Koru Suite solamente valida que la combinación Website ID + Koru Shipday tenga una licencia activa.
Puesta a punto recomendada
Seguí este orden: cada paso habilita al siguiente, y los dos módulos operativos se desbloquean recién cuando sus verificaciones están en verde.
Confirmá el Website ID y la licencia activa
Verificá que la app quede habilitada antes de continuar con cualquier configuración operativa.
Cargá la API Key de Shipday y probá la conexión
En Configuración → Conexión con Shipday, pegá la API Key y usá Probar conexión. Si el resultado es negativo, no sigas: ninguna orden va a poder crearse en Shipday.
Verificá los permisos de VTEX
En Configuración → Permisos de VTEX, usá Verificar permisos. Son dos chequeos independientes: el rol de Logistics de tu usuario (habilita Tarifas) y las policies de la app (habilitan Órdenes). Uno no reemplaza al otro.
Configurá el webhook en Shipday
Elegí un token (hasta 32 caracteres), guardalo en Configuración → Webhook de Shipday y cargá en el dashboard de Shipday la URL que muestra la app junto con ese mismo token.
Completá el punto de retiro
Nombre y dirección del depósito o tienda desde donde sale el envío. Es el origen que se informa a Shipday en cada orden.
Prepará el atributo de bultos en el catálogo
Creá en VTEX la especificación de SKU que indica cuántos bultos ocupa cada unidad, cargá su nombre y grupo en la app, y verificá contra un SKU de muestra. Si son muchos SKUs, usá la carga masiva de bultos.
Seleccioná las políticas de envío habilitadas
Solo se envían a Shipday las órdenes cuya política de envío esté marcada acá. Sin al menos una, el módulo de Órdenes queda bloqueado.
Cargá las tarifas por código postal
Desde el módulo Tarifas, con una carga chica primero para validar el formato de la planilla antes de reemplazar una tabla completa.
Activá la integración y recién después las automatizaciones
Encendé Integración activa, probá una corrida manual desde Resumen → Automatizaciones, revisá el resultado en Órdenes y recién ahí activá la búsqueda automática, la conciliación diaria y el reintento de tracking.
La app tiene un tour guiado
Cada pantalla incluye un botón Ver tour que recorre sus secciones y explica para qué sirve cada una. Es la forma más rápida de que alguien nuevo entienda la pantalla sin leer toda esta página.
Qué habilita cada módulo
Tarifas y Órdenes no se habilitan solos: dependen de verificaciones distintas, porque operan con identidades distintas.
| Módulo | Qué necesita | Por qué |
|---|---|---|
| Tarifas | Rol de Logistics del usuario logueado | La escritura de tarifas se hace con la sesión del administrador que está mirando la pantalla. |
| Órdenes | Conexión con Shipday válida + permiso de la app sobre VTEX + integración activa + al menos una política habilitada | Las órdenes se crean desde procesos automáticos, con la identidad de la app, no con la de una persona. |
| Eventos | Nada bloquea la pantalla | Muestra lo que llegó desde Shipday, aunque el resto todavía no esté configurado. |
Cuando una verificación falla, la app muestra un código de diagnóstico:
| Código | Qué significa | Cómo se resuelve |
|---|---|---|
CFG-001 | El usuario no tiene el rol de Logistics en License Manager. | Un administrador de VTEX debe agregar el rol. |
CFG-002 | Shipday rechazó la API Key. | Verificar que sea la de esta cuenta y que no esté revocada. |
CFG-003 | La app no tiene permiso sobre Logistics en esta cuenta. | Reinstalar la app para que se acepten sus policies. |
CFG-004 | El servicio no respondió (timeout, 429, 5xx). | Es temporal: reintentar en unos minutos. |
CFG-005 | Falta la API Key de Shipday. | Cargarla en Configuración. |
CFG-006 | La integración está desactivada. | Encender Integración activa. |
CFG-007 | No hay ninguna política de envío seleccionada. | Marcar al menos una en Configuración. |
El resultado de las verificaciones se guarda unos minutos para no repetir llamadas en cada carga de pantalla. Después de corregir algo, usá Verificar permisos o Actualizar estado para forzar una revisión nueva en vez de esperar a que venza el caché.
Configuración completa
Toda la configuración vive en los app settings de VTEX y se administra desde la pantalla Configuración de la app (o desde Admin → Apps → Koru Shipday). Los cambios no se aplican hasta tocar Guardar cambios.
General y licencia
| Campo | Clave | Default | Comportamiento |
|---|---|---|---|
| Koru Website ID | koruWebsiteId | — | Conecta la tienda con la licencia Koru. Sin él, la app queda en la pantalla de setup. |
| Integración activa | integrationEnabled | false | Interruptor general. Apagado, no se envían órdenes ni se procesan eventos, pero la configuración se conserva. |
| Zona horaria | timezone | America/Argentina/Buenos_Aires | Zona horaria de la operación logística; se usa para fechas y ventanas de entrega. |
Conexión con Shipday
| Campo | Clave | Default | Comportamiento |
|---|---|---|---|
| API Key de Shipday | shipdayApiKey | — | Único secreto de la app. Se obtiene en Shipday → My Account → Integrations → API Credentials. |
| Token del webhook | shipdayWebhookToken | — | Máximo 32 caracteres. Valida que cada evento entrante venga de tu cuenta de Shipday. |
Operación
| Campo | Clave | Default | Comportamiento |
|---|---|---|---|
| Nombre del punto de retiro | pickupName | — | Origen del envío informado a Shipday. |
| Dirección del punto de retiro | pickupAddress | — | Dirección completa y legible del punto de despacho: calle, número, localidad, provincia y código postal. |
| Políticas de envío habilitadas | enabledShippingPolicies | vacío | Solo se envían a Shipday las órdenes cuya política esté en esta lista. |
El punto de retiro es único para toda la cuenta: todas las órdenes se informan a Shipday con el mismo origen. Un punto de retiro por política de envío no está implementado.
Atributo de bultos
| Campo | Clave | Default | Comportamiento |
|---|---|---|---|
| Nombre del atributo de bultos | packagesSpecificationName | Cantidad de bultos | Especificación de SKU en VTEX con la cantidad de bultos por unidad. |
| Grupo del atributo en VTEX | packagesSpecificationGroup | Logística | Grupo de especificaciones al que pertenece el atributo en el catálogo. |
| Si un SKU no tiene el atributo | packagesMissingBehavior | fallback-one | fallback-one asume 1 bulto y deja una advertencia auditada; block marca la orden con error de datos. |
Automatización
| Campo | Clave | Default | Comportamiento |
|---|---|---|---|
| Buscar órdenes nuevas automáticamente | ordersSyncEnabled | false | Habilita la detección automática de órdenes. Apagado, el envío manual sigue disponible. |
| Cada cuánto buscar órdenes nuevas | ordersSyncIntervalMinutes | 10 | Intervalo funcional en minutos entre corridas automáticas. |
| Conciliación diaria | reconcileEnabled | false | Revisa una vez por día las órdenes pendientes o en reintento contra Shipday. |
| Reintento automático de tracking | trackingRetryEnabled | false | Reintenta cada 10 minutos registrar el tracking o confirmar la entrega de las órdenes que quedaron esperando. |
Módulo Tarifas
Reemplaza la tabla de tarifas por código postal de una o varias políticas de envío desde una única planilla. No crea ni modifica políticas, muelles ni almacenes: opera sobre la tabla de valores de flete de las políticas que ya existen.
Cómo se usa
Seleccioná las políticas
Podés marcar varias: la misma planilla se aplica a todas en una única operación.
Descargá la plantilla
La plantilla trae los encabezados exactos y una versión embebida. Descargala siempre desde el módulo; no reutilices una planilla vieja.
Completala y subila
Al subirla, la app la lee, la valida contra VTEX y muestra un resumen: cuántas filas son válidas, cuántas tienen error y cuáles son los primeros errores.
Revisá y aplicá
El botón Aplicar carga se habilita solo si la carga pasa la revisión. Antes de escribir, la app respalda la tabla anterior de cada política.
Columnas de la plantilla
| Columna | Requerida | Detalle |
|---|---|---|
Codigo postal inicial | Sí | Se normaliza a 8 dígitos con ceros a la izquierda, igual que lo guarda VTEX. |
Codigo postal final | No | Vacío = mismo valor que el inicial (fila de un solo CP). Nunca menor al inicial. |
Peso inicial (kg) | Sí | Acepta coma o punto decimal. |
Peso final (kg) | Sí | No puede ser menor al peso inicial. |
Costo de envio | Sí | Número mayor o igual a 0. |
Plazo de entrega (dias) | Sí | Entero de días. VTEX admite un único plazo por fila, no un rango. |
Pais | No | Default ARG. |
Costo porcentual (%) | No | Default 0. |
Costo por peso extra | No | Default 0. |
Volumen maximo | No | Default 0. |
Seguro minimo | No | Default 0. |
Poligono | No | Vacío por defecto. |
Validaciones
| Código | Cuándo aparece |
|---|---|
RATE-001 | La plantilla no corresponde a una versión válida, o los encabezados no coinciden. Se rechaza el archivo completo, sin mirar una sola fila. |
RATE-002 | Error en una fila puntual: falta un campo requerido, un rango de CP o de peso es inválido, un costo o plazo es negativo, o la fila se superpone con otra anterior en el mismo rango de CP y peso. |
RATE-003 | Una política seleccionada dejó de estar disponible entre que se listó y se aplicó la carga. |
No reabras la plantilla con otra herramienta
La versión de la plantilla viaja en una hoja oculta. Abrir y volver a guardar el archivo
con algunas herramientas de planillas puede alterarla, y la carga se rechaza con
RATE-001 aunque los datos estén bien. Si pasa, descargá la plantilla de nuevo y volvé a
completarla.
Qué reemplaza exactamente una carga
La carga reemplaza solo los códigos postales incluidos en el archivo. Los códigos postales que no estén en la planilla conservan su tarifa anterior sin cambios: no es un borrado y recarga de la tabla completa.
Respaldo y reversión
- Antes de escribir sobre una política, la app respalda las tarifas actuales de los códigos postales que la carga va a tocar.
- Si la escritura falla a mitad de camino con varias políticas seleccionadas, la app revierte las que ya se habían aplicado usando ese respaldo.
- El respaldo automático está acotado a 300 códigos postales distintos por carga. Una planilla que supera ese techo se puede aplicar igual, pero la app pide una confirmación explícita: esa carga va sin respaldo y no se puede revertir automáticamente.
- Un código postal que hoy no tiene ninguna tarifa cargada no deja nada para respaldar: la reversión puede restaurar el valor anterior de un CP que ya existía, no "deshacer" el alta de un CP nuevo.
Estados de una carga
| Estado | Significado |
|---|---|
| Aplicando | La carga se está escribiendo en VTEX. |
| Revirtiendo | Algo falló y se está restaurando el respaldo de las políticas ya aplicadas. |
| Exitosa | Todas las políticas se aplicaron. |
| Fallida | No se aplicó ninguna política. |
| Revertida | Falló a mitad de camino y se restauró el estado anterior. |
| Requiere revisión manual | Falló y además la reversión no pudo completarse. Hay que revisar las tarifas a mano. |
VTEX puede tardar en reflejar las tarifas nuevas
Una carga exitosa no se ve inmediatamente en el simulador de envío: VTEX puede demorar desde minutos hasta más de un día en propagar tarifas nuevas. Es un comportamiento conocido de la plataforma, no un problema de la carga. Por eso la app informa la carga como aplicada y pendiente de confirmación por parte de VTEX, en vez de verificarla al instante.
Carga masiva de bultos
Está dentro de Configuración, no en una pestaña propia. Sirve para cargar la especificación de bultos en muchos SKUs de una vez, en lugar de completarla producto por producto en el catálogo.
| Columna | Requerida | Detalle |
|---|---|---|
SKU ID | Sí | ID del SKU en VTEX. No puede repetirse en la misma planilla. |
Cantidad de bultos | Sí | Entero entre 1 y 99. |
| Código | Cuándo aparece |
|---|---|
PKGBULK-001 | La plantilla no corresponde a una versión válida o los encabezados no coinciden. |
PKGBULK-002 | Falta el SKU ID, o la cantidad de bultos no es un entero entre 1 y 99. |
PKGBULK-003 | El SKU ya aparece en una fila anterior de la misma planilla. |
Cada fila se aplica por separado: una que falla no afecta a las demás, y el resultado muestra cuántas se aplicaron y cuántas quedaron con error. Máximo 300 filas por carga — una planilla más grande se rechaza pidiendo dividirla.
Esta carga no tiene respaldo ni reversión
A diferencia de Tarifas, la carga masiva de bultos no guarda un backup: un valor mal cargado se corrige con otra carga que lo pise, no con un revert.
Cómo tiene que estar creado el atributo en VTEX
VTEX solo admite especificaciones a nivel SKU de tipo Combo o Radio: no acepta un
campo numérico libre. El atributo de bultos tiene que crearse como una lista de opciones
(por ejemplo 1, 2, 3, 4), y su nombre y grupo tienen que coincidir exactamente con
los configurados en la app.
Módulo Órdenes
Cómo se detectan las órdenes
La app consulta periódicamente el OMS de VTEX en busca de órdenes nuevas y lleva un marcador de hasta dónde procesó, para no releer siempre lo mismo.
- La primera corrida en un workspace mira las últimas 24 horas.
- Cada corrida procesa hasta 20 páginas de 100 órdenes. Si hay más, el marcador no avanza más allá de lo procesado y la siguiente corrida sigue desde ahí: no se pierde ninguna orden, se reparte en más corridas.
- Si una orden falla al leerse, la corrida se corta ahí mismo sin avanzar el marcador, para no dejarla atrás.
Por qué polling y no el feed de órdenes
El Feed v3 y los Hooks de OMS admiten un solo consumidor por cuenta VTEX: usarlos podría robarle eventos al ERP del cliente. Por eso la detección se hace consultando el OMS, que es una lectura y no compite con nadie.
Cuándo una orden es elegible
Una orden se envía a Shipday cuando cumple todas estas condiciones:
| Código | Condición que no se cumplió |
|---|---|
ORD-001 | El pago todavía no está aprobado. |
ORD-002 | La política de envío de la orden no está habilitada para Shipday. |
ORD-003 | Faltan datos del destinatario: nombre, teléfono o dirección. |
ORD-004 | La orden está cancelada. |
PKG-001 | No se pudo calcular la cantidad de bultos y la configuración está en block. |
ORD-001 es el caso normal de una orden recién creada: se reevalúa sola en la siguiente
corrida, no requiere ninguna acción.
Estados de una orden
| Estado | Significado | ¿Se resuelve solo? |
|---|---|---|
| No elegible | No cumple alguna condición de elegibilidad. | Sí, se reevalúa en cada corrida. |
| Pendiente de envío | Es elegible y está por darse de alta en Shipday. | Sí. |
| Reintentando | El alta falló por algo transitorio (timeout, 429, 5xx). | Sí, con espera creciente entre intentos (de 1 minuto a 1 hora como máximo). |
| Sincronizada | Ya existe en Shipday. Estado final. | — |
| Error de datos | Shipday rechazó la orden por sus datos (400 y otros 4xx). | No: requiere corregir y reintentar a mano. |
| Error permanente | Shipday rechazó la credencial (401/403). | No: requiere revisar la API Key y reintentar a mano. |
Reintento manual
Las filas en Error de datos y Error permanente muestran el botón Reintentar. Son los dos únicos estados que la app nunca abandona sola, a propósito: reintentar en un loop una orden que Shipday va a seguir rechazando no arregla nada.
El reintento no duplica la orden: si un intento anterior terminó con una respuesta incierta, la app primero consulta a Shipday si la orden ya existe y, si la encuentra, solo registra la relación.
Qué se envía a Shipday
De cada orden se manda el número de orden de VTEX (que es lo que después permite matchear los eventos entrantes), los datos del destinatario, el punto de retiro configurado, el total, los ítems con precio y cantidad, la forma de pago normalizada y la cantidad de bultos calculada. No se envían datos de pago ni credenciales.
Módulo Eventos (tracking y entrega)
Shipday avisa por webhook cada cambio de estado del reparto. La app registra todos los eventos y refleja en VTEX únicamente dos cosas: la referencia de seguimiento y la confirmación de entrega.
Configurar el webhook
- Elegí un token de hasta 32 caracteres y guardalo en Configuración → Webhook de Shipday.
- Copiá la URL que muestra esa misma sección — tiene esta forma:
https://{store-account}.myvtex.com/_v/public/koru-shipday/webhook/shipday- Cargá la URL y el token en el dashboard de Shipday.
Sin token configurado no entra ningún evento
La app rechaza todo evento que no presente el token esperado. Si el token está vacío en la configuración, se rechazan todos: es deliberado, la URL es pública y el token es lo único que distingue un evento real de uno inventado.
Qué hace la app con cada evento
| Evento de Shipday | Acción en VTEX |
|---|---|
ORDER_INSERTED | Se registra, no se propaga. |
ORDER_ASSIGNED | Registra la referencia de seguimiento. |
ORDER_ACCEPTED_AND_STARTED | Registra la referencia de seguimiento. |
ORDER_PIKEDUP | Se registra, no se propaga. |
ORDER_ONTHEWAY | Se registra, no se propaga. |
ORDER_COMPLETED | Confirma la entrega en VTEX. |
ORDER_FAILED | Se registra como incidente. No marca entregado. |
ORDER_INCOMPLETE | Se registra como incidente. No marca entregado. |
El estado que trae el evento manda sobre el nombre del evento: Shipday a veces envía nombres de evento no documentados para una misma transición. Por eso la app decide qué hacer mirando el estado de la orden, que es la señal confiable.
Resultados que vas a ver en la pantalla
| Resultado | Significado |
|---|---|
| Procesado | El evento se aplicó en VTEX. |
| Duplicado | Shipday reenvió un evento ya procesado. No se hace nada dos veces. |
| Ignorado | Estado intermedio del reparto: queda registrado, no se propaga a VTEX. |
| Reintentando | No se pudo aplicar todavía (por ejemplo, la orden aún no está facturada) y se va a reintentar solo. |
| Con error | No se pudo aplicar. Requiere revisión. |
Shipday es flota propia, no un courier
Shipday no emite un número ni una URL de tracking de transportista. La referencia de seguimiento que se registra en VTEX es el ID de la orden en Shipday, que es lo que permite ubicar el envío en su dashboard.
Facturación y reintentos
Para registrar el tracking o confirmar la entrega, VTEX exige que la orden ya esté facturada. La app nunca factura: asume que la orden ya lo está cuando llega a Shipday (regla operativa: no se despacha sin factura) y solo lee el número de factura.
Si todavía no está facturada, el evento no se pierde: queda en Reintentando y el job de reintento de tracking vuelve a intentarlo cada 10 minutos, con espera creciente. Si el problema no es transitorio, la orden queda marcada para revisión manual.
Automatizaciones
Tres procesos automáticos, visibles en Resumen → Automatizaciones:
| Proceso | Con qué frecuencia se dispara | Intervalo funcional | Setting que lo activa |
|---|---|---|---|
| Envío de órdenes a Shipday | Cada 10 minutos | Configurable (10 minutos por defecto) | Buscar órdenes nuevas automáticamente |
| Conciliación con Shipday | Una vez por día (03:00) | Diario | Conciliación diaria |
| Reintento de tracking | Cada 10 minutos | Cada 10 minutos | Reintento automático de tracking |
El disparador técnico corre siempre; lo que decide si corresponde actuar es el interruptor y el intervalo configurados. La conciliación existe porque el polling normal ya no vuelve a mirar una orden vieja: barre las órdenes que quedaron pendientes o en reintento y las reprocesa, sin duplicar nunca una orden ya creada en Shipday.
Estados de una corrida
| Estado | Significado |
|---|---|
| Completado | Corrió y terminó bien. |
| No correspondía | El proceso está apagado o todavía no se cumplió el intervalo. |
| Ya estaba corriendo | Había otra corrida en curso; esta no se superpuso. |
| Bloqueado | No pasó los controles previos (sesión o licencia). |
| Con error | Corrió y falló. |
El botón Ejecutar ahora dispara la misma lógica de forma manual, sin esperar al horario, y funciona aunque el proceso automático esté apagado. Es la forma recomendada de probar un cambio de configuración de inmediato.
Pantallas
Estado general de la integración: cuenta VTEX, workspace y licencia; las tres verificaciones principales (Shipday, permiso del usuario, permiso de la app); el estado de la integración, la API Key y la URL del webhook; y el panel de Automatizaciones con el estado de cada proceso, su última corrida y el botón de disparo manual.
Licencia y seguridad
Validación de licencia
Todas las rutas operativas exigen:
- Sesión VTEX Admin válida.
- Licencia Koru activa para el Website ID y el App ID de Koru Shipday.
Para tolerar fallas transitorias de red o del servicio de licencias, una autorización positiva se conserva brevemente; una respuesta explícita de licencia revocada bloquea el uso de la app de inmediato. El webhook es la excepción: con la licencia revocada o la integración apagada, responde con éxito y descarta el evento dejando registro, en vez de hacer que Shipday reintente para siempre.
Datos y credenciales
- La app no pide ni guarda AppKey/AppToken del merchant. Para operar sobre VTEX usa la sesión del administrador logueado (acciones manuales) o su propia identidad de app (procesos automáticos).
- El único secreto de la app es la API Key de Shipday, guardada en los app settings de VTEX y nunca expuesta al navegador en claro.
- El navegador nunca llama directamente a las APIs de VTEX ni a Shipday: todo pasa por rutas propias de la app.
- Website ID y App ID identifican recursos, pero no son contraseñas.
- El estado de las órdenes, los eventos y el historial de cargas se persisten en el almacenamiento interno de la app, no en Master Data ni en las órdenes de VTEX.
- Cada acción lleva un identificador de correlación que permite seguir su rastro en los logs cuando hace falta soporte.
Resolución de problemas
La app no aparece después de instalar
- Ejecutá
vtex whoami. - Confirmá cuenta y workspace.
- Ejecutá
vtex listy buscá{vendor}.koru-shipday. - Recargá VTEX Admin.
- Probá la URL directa
/admin/koru-shipdayen el mismo dominio/workspace.
La licencia figura inactiva
- Compará el Website ID con el sitio correcto en Koru Suite.
- Confirmá que Koru Shipday esté activa para ese website.
- Verificá que no hayas copiado espacios.
- Reintentá la validación.
- Si persiste, informá Website ID, cuenta y workspace al soporte, sin enviar credenciales.
Tarifas está bloqueado
Es siempre CFG-001: tu usuario no tiene el rol de Logistics en License Manager. Pedile a
un administrador de VTEX que lo agregue y volvé a verificar los permisos.
Órdenes está bloqueado
Revisá las cuatro condiciones en Configuración: API Key de Shipday válida, permiso de la app en orden, Integración activa encendida y al menos una política de envío marcada. El aviso indica cuál falta.
La conexión con Shipday falla
- Confirmá que la API Key sea la de esta cuenta de Shipday y que no esté revocada.
- Si el error es temporal (
CFG-004), reintentá en unos minutos: no es un problema de configuración. - Recordá que Probar conexión puede estar probando un valor que todavía no guardaste; la app lo avisa.
No se está enviando ninguna orden
Revisá, en este orden:
- Que Integración activa esté encendida.
- Que Buscar órdenes nuevas automáticamente esté encendido, o disparalo a mano desde Resumen.
- Que la política de envío de esas órdenes esté marcada en Configuración.
- Que las órdenes tengan el pago aprobado.
- La pantalla Órdenes: la columna Detalle indica el motivo exacto por orden.
Una orden quedó en "Error de datos"
Es un rechazo de Shipday por los datos de la orden. Revisá que el destinatario tenga nombre, teléfono y dirección completos, y que el punto de retiro configurado sea una dirección legible. Corregido eso, usá Reintentar en esa fila.
No llega ningún evento de Shipday
- Confirmá que la URL cargada en Shipday sea la que muestra la app para este workspace.
- Confirmá que el token de Shipday sea idéntico al guardado en la app (hasta 32 caracteres, sin espacios).
- Verificá que Integración activa esté encendida: con la integración apagada los eventos se descartan.
- Revisá la pantalla Eventos: si hay eventos con resultado Ignorado, el webhook está llegando bien y lo que ves son estados intermedios que no se propagan.
La entrega no se refleja en VTEX
Mirá el evento en la pantalla Eventos:
- Reintentando con motivo de facturación: la orden todavía no está facturada en VTEX. Se resuelve solo cuando se factura, si el reintento automático de tracking está activo.
- Con error: la actualización en VTEX falló. Revisá que la orden exista, esté facturada y no esté cancelada.
- Sin ningún evento: el problema está en el webhook, no en el tracking. Ver el punto anterior.
La plantilla se rechaza aunque parezca correcta
Descargá la plantilla de nuevo desde la app y completala sin reabrir el archivo en otra
herramienta. Reabrir y volver a guardar un .xlsx puede alterar la hoja oculta donde viaja
la versión.
Las tarifas no aparecen en el simulador
Si la carga figura como exitosa, esperá: VTEX puede tardar de minutos a más de un día en propagar tarifas nuevas. Verificá primero el estado de la carga en el módulo Tarifas antes de volver a subir el archivo.
Límites funcionales
La versión actual:
- Asume una orden = un envío: no contempla órdenes de marketplace multi-seller que se despachan en más de un envío o factura.
- Usa un único punto de retiro para toda la cuenta, no uno por política de envío.
- Respalda automáticamente hasta 300 códigos postales por carga de tarifas; por encima de eso, la carga va sin respaldo y requiere confirmación explícita.
- Aplica hasta 300 filas por carga masiva de bultos, sin respaldo ni reversión.
- Procesa hasta 20 páginas de 100 órdenes por corrida de detección.
- No factura órdenes en VTEX: asume que ya vienen facturadas.
- No propaga a VTEX los estados intermedios del reparto ni las entregas fallidas: solo la referencia de seguimiento y la confirmación de entrega.
- No crea ni modifica políticas de envío, muelles, almacenes ni transportadoras.
- Opera siempre sobre la cuenta VTEX donde está instalada.
Checklist antes de operar
- Koru Shipday instalada en la cuenta y workspace correctos.
- Website ID verificado y licencia activa confirmada.
- API Key de Shipday cargada y Probar conexión en verde.
- Permisos de VTEX verificados: rol de Logistics del usuario y policies de la app.
- URL y token del webhook cargados en el dashboard de Shipday, para este workspace.
- Punto de retiro completo y legible.
- Atributo de bultos creado en el catálogo, configurado en la app y verificado contra un SKU de muestra.
- Políticas de envío habilitadas seleccionadas.
- Carga de tarifas de prueba aplicada y revisada antes de una carga grande.
- Integración activa encendida.
- Corrida manual de envío de órdenes ejecutada y revisada en la pantalla Órdenes.
- Automatizaciones activadas recién después de validar manualmente.
- Responsable definido para revisar órdenes con error y eventos periódicamente.
Datos útiles al pedir soporte
Informá cuenta VTEX, workspace, horario aproximado, el ID de la orden de VTEX involucrada y, si aplica, la fila concreta de la pantalla Órdenes o Eventos. Evitá enviar la API Key de Shipday, el token del webhook, credenciales o cookies.