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

TareaResponsable habitual
Instalar la app y validar cuenta/workspaceAgencia VTEX, desarrollador o líder técnico
Activar la app para el sitio en Koru SuiteRed Clover / administrador de Koru Suite
Obtener la API Key de Shipday y configurar el webhookResponsable de la cuenta de Shipday
Crear el atributo de bultos en el catálogo de VTEXResponsable de catálogo
Cargar las tarifas por código postalEcommerce manager o responsable de logística
Revisar órdenes con error y reintentarlasOperador de logística o ecommerce
Auditar los eventos recibidos desde ShipdayResponsable 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

IdentificadorEjemploQuién lo define¿Se configura?
Cuenta VTEX de la tiendami-tiendaMerchantSe usa para iniciar sesión con la CLI
Workspace VTEXmaster o shipday-qaMerchant/agenciaDetermina dónde se instala y valida
App ID VTEX{vendor}.koru-shipdayPublicador de la appSe usa en vtex install
Website ID de KoruUUID del sitioKoru SuiteSí, una vez por tienda
App ID de KoruUUID interno de Koru ShipdayBuild de la appNo; vive en el código y una tienda no puede cambiarlo
API Key de ShipdayCadena secretaShipdaySí, una vez por tienda
Token del webhookHasta 32 caracteres, lo elegís vosMerchantSí, 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:

Seleccioná el workspace de validación

vtex use {store-account}/{workspace}

Confirmá el contexto antes de instalar

vtex whoami

La 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.x

El rango 0.x instala la última versión disponible mientras la app está en pre-release.

Verificá la instalación

vtex list

Buscá {vendor}.koru-shipday dentro de las apps instaladas.

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-shipday

Para master, usá el dominio principal de Admin de la cuenta:

https://{store-account}.myvtex.com/admin/koru-shipday

Si 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 list

Los 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 list

Despué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 list

Qué 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.

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óduloQué necesitaPor qué
TarifasRol de Logistics del usuario logueadoLa escritura de tarifas se hace con la sesión del administrador que está mirando la pantalla.
ÓrdenesConexión con Shipday válida + permiso de la app sobre VTEX + integración activa + al menos una política habilitadaLas órdenes se crean desde procesos automáticos, con la identidad de la app, no con la de una persona.
EventosNada bloquea la pantallaMuestra 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ódigoQué significaCómo se resuelve
CFG-001El usuario no tiene el rol de Logistics en License Manager.Un administrador de VTEX debe agregar el rol.
CFG-002Shipday rechazó la API Key.Verificar que sea la de esta cuenta y que no esté revocada.
CFG-003La app no tiene permiso sobre Logistics en esta cuenta.Reinstalar la app para que se acepten sus policies.
CFG-004El servicio no respondió (timeout, 429, 5xx).Es temporal: reintentar en unos minutos.
CFG-005Falta la API Key de Shipday.Cargarla en Configuración.
CFG-006La integración está desactivada.Encender Integración activa.
CFG-007No 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

CampoClaveDefaultComportamiento
Koru Website IDkoruWebsiteIdConecta la tienda con la licencia Koru. Sin él, la app queda en la pantalla de setup.
Integración activaintegrationEnabledfalseInterruptor general. Apagado, no se envían órdenes ni se procesan eventos, pero la configuración se conserva.
Zona horariatimezoneAmerica/Argentina/Buenos_AiresZona horaria de la operación logística; se usa para fechas y ventanas de entrega.

Conexión con Shipday

CampoClaveDefaultComportamiento
API Key de ShipdayshipdayApiKeyÚnico secreto de la app. Se obtiene en Shipday → My Account → Integrations → API Credentials.
Token del webhookshipdayWebhookTokenMáximo 32 caracteres. Valida que cada evento entrante venga de tu cuenta de Shipday.

Operación

CampoClaveDefaultComportamiento
Nombre del punto de retiropickupNameOrigen del envío informado a Shipday.
Dirección del punto de retiropickupAddressDirección completa y legible del punto de despacho: calle, número, localidad, provincia y código postal.
Políticas de envío habilitadasenabledShippingPoliciesvacíoSolo 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

CampoClaveDefaultComportamiento
Nombre del atributo de bultospackagesSpecificationNameCantidad de bultosEspecificación de SKU en VTEX con la cantidad de bultos por unidad.
Grupo del atributo en VTEXpackagesSpecificationGroupLogísticaGrupo de especificaciones al que pertenece el atributo en el catálogo.
Si un SKU no tiene el atributopackagesMissingBehaviorfallback-onefallback-one asume 1 bulto y deja una advertencia auditada; block marca la orden con error de datos.

Automatización

CampoClaveDefaultComportamiento
Buscar órdenes nuevas automáticamenteordersSyncEnabledfalseHabilita la detección automática de órdenes. Apagado, el envío manual sigue disponible.
Cada cuánto buscar órdenes nuevasordersSyncIntervalMinutes10Intervalo funcional en minutos entre corridas automáticas.
Conciliación diariareconcileEnabledfalseRevisa una vez por día las órdenes pendientes o en reintento contra Shipday.
Reintento automático de trackingtrackingRetryEnabledfalseReintenta 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

ColumnaRequeridaDetalle
Codigo postal inicialSe normaliza a 8 dígitos con ceros a la izquierda, igual que lo guarda VTEX.
Codigo postal finalNoVacío = mismo valor que el inicial (fila de un solo CP). Nunca menor al inicial.
Peso inicial (kg)Acepta coma o punto decimal.
Peso final (kg)No puede ser menor al peso inicial.
Costo de envioNúmero mayor o igual a 0.
Plazo de entrega (dias)Entero de días. VTEX admite un único plazo por fila, no un rango.
PaisNoDefault ARG.
Costo porcentual (%)NoDefault 0.
Costo por peso extraNoDefault 0.
Volumen maximoNoDefault 0.
Seguro minimoNoDefault 0.
PoligonoNoVacío por defecto.

Validaciones

CódigoCuándo aparece
RATE-001La 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-002Error 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-003Una 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

EstadoSignificado
AplicandoLa carga se está escribiendo en VTEX.
RevirtiendoAlgo falló y se está restaurando el respaldo de las políticas ya aplicadas.
ExitosaTodas las políticas se aplicaron.
FallidaNo se aplicó ninguna política.
RevertidaFalló a mitad de camino y se restauró el estado anterior.
Requiere revisión manualFalló 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.

ColumnaRequeridaDetalle
SKU IDID del SKU en VTEX. No puede repetirse en la misma planilla.
Cantidad de bultosEntero entre 1 y 99.
CódigoCuándo aparece
PKGBULK-001La plantilla no corresponde a una versión válida o los encabezados no coinciden.
PKGBULK-002Falta el SKU ID, o la cantidad de bultos no es un entero entre 1 y 99.
PKGBULK-003El 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ódigoCondición que no se cumplió
ORD-001El pago todavía no está aprobado.
ORD-002La política de envío de la orden no está habilitada para Shipday.
ORD-003Faltan datos del destinatario: nombre, teléfono o dirección.
ORD-004La orden está cancelada.
PKG-001No 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

EstadoSignificado¿Se resuelve solo?
No elegibleNo cumple alguna condición de elegibilidad.Sí, se reevalúa en cada corrida.
Pendiente de envíoEs elegible y está por darse de alta en Shipday.Sí.
ReintentandoEl alta falló por algo transitorio (timeout, 429, 5xx).Sí, con espera creciente entre intentos (de 1 minuto a 1 hora como máximo).
SincronizadaYa existe en Shipday. Estado final.
Error de datosShipday rechazó la orden por sus datos (400 y otros 4xx).No: requiere corregir y reintentar a mano.
Error permanenteShipday 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

  1. Elegí un token de hasta 32 caracteres y guardalo en Configuración → Webhook de Shipday.
  2. Copiá la URL que muestra esa misma sección — tiene esta forma:
https://{store-account}.myvtex.com/_v/public/koru-shipday/webhook/shipday
  1. 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 ShipdayAcción en VTEX
ORDER_INSERTEDSe registra, no se propaga.
ORDER_ASSIGNEDRegistra la referencia de seguimiento.
ORDER_ACCEPTED_AND_STARTEDRegistra la referencia de seguimiento.
ORDER_PIKEDUPSe registra, no se propaga.
ORDER_ONTHEWAYSe registra, no se propaga.
ORDER_COMPLETEDConfirma la entrega en VTEX.
ORDER_FAILEDSe registra como incidente. No marca entregado.
ORDER_INCOMPLETESe 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

ResultadoSignificado
ProcesadoEl evento se aplicó en VTEX.
DuplicadoShipday reenvió un evento ya procesado. No se hace nada dos veces.
IgnoradoEstado intermedio del reparto: queda registrado, no se propaga a VTEX.
ReintentandoNo se pudo aplicar todavía (por ejemplo, la orden aún no está facturada) y se va a reintentar solo.
Con errorNo 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:

ProcesoCon qué frecuencia se disparaIntervalo funcionalSetting que lo activa
Envío de órdenes a ShipdayCada 10 minutosConfigurable (10 minutos por defecto)Buscar órdenes nuevas automáticamente
Conciliación con ShipdayUna vez por día (03:00)DiarioConciliación diaria
Reintento de trackingCada 10 minutosCada 10 minutosReintento 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

EstadoSignificado
CompletadoCorrió y terminó bien.
No correspondíaEl proceso está apagado o todavía no se cumplió el intervalo.
Ya estaba corriendoHabía otra corrida en curso; esta no se superpuso.
BloqueadoNo pasó los controles previos (sesión o licencia).
Con errorCorrió 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:

  1. Sesión VTEX Admin válida.
  2. 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

  1. Ejecutá vtex whoami.
  2. Confirmá cuenta y workspace.
  3. Ejecutá vtex list y buscá {vendor}.koru-shipday.
  4. Recargá VTEX Admin.
  5. Probá la URL directa /admin/koru-shipday en el mismo dominio/workspace.

La licencia figura inactiva

  1. Compará el Website ID con el sitio correcto en Koru Suite.
  2. Confirmá que Koru Shipday esté activa para ese website.
  3. Verificá que no hayas copiado espacios.
  4. Reintentá la validación.
  5. 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:

  1. Que Integración activa esté encendida.
  2. Que Buscar órdenes nuevas automáticamente esté encendido, o disparalo a mano desde Resumen.
  3. Que la política de envío de esas órdenes esté marcada en Configuración.
  4. Que las órdenes tengan el pago aprobado.
  5. 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

  1. Confirmá que la URL cargada en Shipday sea la que muestra la app para este workspace.
  2. Confirmá que el token de Shipday sea idéntico al guardado en la app (hasta 32 caracteres, sin espacios).
  3. Verificá que Integración activa esté encendida: con la integración apagada los eventos se descartan.
  4. 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.