Cupones Masivos
Genera y archiva cupones de VTEX en lote desde el Admin, con códigos únicos, reporte por cupón y exportación a CSV.
Identificador de instalación
Cupones Masivos se distribuye con el App ID VTEX oficial
soluciones4fpartnerar.cupones-masivos. La instalación es:
vtex install soluciones4fpartnerar.cupones-masivos@0.xCupones Masivos es una VTEX Admin App que resuelve una limitación del panel nativo
de VTEX: no permite generar cupones en lote. La app crea N cupones a partir de un código
base —con sufijo aleatorio o numeración secuencial—, los asocia a una utmSource /
utmCampaign y permite archivarlos en lote cuando la campaña termina. Cada operación
devuelve un reporte por cupón y, en la creación por lote, un CSV con los códigos
generados.
A diferencia de las apps de storefront de Koru, acá no se configura nada desde el panel de Koru y no se toca código del sitio. Koru Suite se usa únicamente para habilitar la licencia de la app en la tienda; toda la operación vive dentro del Admin de VTEX.
Precondición de VTEX: el cupón no define el descuento
En VTEX un cupón no aplica un descuento por sí mismo: solo activa las promociones
cuyo scope está configurado para responder a su utmSource / utmCampaign. Esta app
crea y archiva cupones; no crea promociones. Si no existe una promoción asociada a
esos UTM, los cupones se crean correctamente pero no descuentan nada en el checkout.
Qué no hace Cupones Masivos
No crea ni edita promociones, no lista ni busca los cupones existentes de la tienda, no sobrescribe cupones ya creados, no agrega nada al storefront y no tiene deshacer: revertir un archivado se hace desde el Admin de VTEX.
Antes de empezar
Responsables recomendados
| Tarea | Responsable habitual |
|---|---|
| Instalar la app y validar la 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 |
| Ingresar el Website ID | Líder técnico o project manager |
| Crear la promoción asociada a los UTM | Ecommerce manager o responsable de marketing |
| Definir prefijo, cantidad y UTM de cada campaña | Marketing o ecommerce |
| Ejecutar la creación y resguardar el CSV | Operador de campañas |
| Archivar los cupones al cerrar la campaña | Operador de campañas |
Una misma persona puede cubrir varios roles en una tienda pequeña.
Accesos necesarios
Antes de instalar, verificá que contás con:
- Una sesión válida de VTEX Admin en la cuenta de la tienda.
- La VTEX CLI oficial instalada y actualizada.
- Permisos para instalar apps en el workspace elegido.
- Permiso VTEX para operar cupones (módulo de Promociones y Cupones). Si el usuario logueado no lo tiene, cada cupón falla con "Sin permisos para operar cupones en VTEX."
- El Website ID del ecommerce en Koru Suite, con Cupones Masivos activa para ese sitio.
Cupones Masivos no crea un rol VTEX propio y no usa credenciales propias: opera con la identidad del administrador logueado. Los permisos humanos se administran con los controles de acceso de VTEX (License Manager).
No hay AppKey / AppToken de VTEX que cargar. El único dato que ingresa el merchant es el Website ID de Koru.
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 cupones-qa | Merchant/agencia | Determina dónde se instala y valida |
| App ID VTEX | soluciones4fpartnerar.cupones-masivos | Publicador de la app (Red Clover) | 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 Cupones Masivos | Build de la app | No; ya viene incorporado |
No confundas las dos cuentas
La cuenta de la tienda, usada en vtex login, es distinta de
soluciones4fpartnerar, que es la cuenta publicadora de Cupones Masivos. El vendor del
App ID nunca se reemplaza por la cuenta de la tienda.
Instalación con VTEX CLI
La instalación usa la
VTEX CLI oficial.
No requiere modificar el Store Theme, declarar bloques, pegar un <script> ni cargar
nada por Google Tag Manager: la app corre íntegramente en el Admin y en su propio
servicio Node.
Instalar primero en un workspace de validación
Si la tienda tiene un proceso de QA, instalá y probá 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á Cupones Masivos
vtex install soluciones4fpartnerar.cupones-masivos@0.xEl rango 0.x instala la última versión estable disponible de la major 0.
Verificá la instalación
vtex listBuscá soluciones4fpartnerar.cupones-masivos dentro de las apps instaladas.
Policies que declara la app
ADMIN_DS, outbound-access a portal.vtexcommercestable.com.br/api/license-manager/*
—validación de la sesión admin— y outbound-access a www.korusuite.com/api/auth/*
—validación de licencia—. No hay accesos adicionales.
Abrir la app en VTEX Admin
La app se registra en el menú de Configuración de la tienda con el ítem Cupones Masivos. También podés navegar directamente:
https://{workspace}--{store-account}.myvtex.com/admin/app/cupones-masivosPara master, usá el dominio principal de Admin de la cuenta:
https://{store-account}.myvtex.com/admin/app/cupones-masivosSi esa URL no resuelve en tu cuenta, probá /admin/cupones-masivos: según la versión
instalada, la app puede exponer la pantalla en cualquiera de las dos rutas. La vía
estable es siempre el ítem del menú del Admin.
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 soluciones4fpartnerar.cupones-masivos@0.x
vtex listLos settings son por instalación/workspace. Verificá el Website ID en el ambiente definitivo aunque ya lo hayas probado en otro workspace.
No crees cupones de prueba en master
Los cupones creados desde un workspace impactan sobre el catálogo de cupones real de la
cuenta. Para probar, usá prefijos identificables —por ejemplo QA-— y archivalos al
terminar.
Actualización y desinstalación
Actualizar dentro de la major actual
Seleccioná la cuenta/workspace correcto, confirmalo y volvé a instalar el rango:
vtex whoami
vtex install soluciones4fpartnerar.cupones-masivos@0.x
vtex listDespués de actualizar, abrí la app y verificá que la licencia siga activa y que el Website ID esté cargado.
Desinstalar
La desinstalación se aplica al workspace actual:
vtex whoami
vtex uninstall soluciones4fpartnerar.cupones-masivos
vtex listDesinstalar la app no archiva ni elimina los cupones ya creados: siguen existiendo en VTEX y se administran desde el módulo nativo de Promociones y Cupones.
Activación y primer acceso
Obtener el Website ID
Antes del primer uso, Red Clover debe activar Cupones Masivos 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.
Conectar la tienda
En el primer acceso, la app muestra Conecta esta tienda con Koru Suite:
Pegá el Website ID
Ingresá el valor completo, sin espacios adicionales. Es el Website ID, no el App ID.
Guardá y continuá
La app persiste el valor en sus settings de VTEX. También podés administrarlo desde los settings nativos de la app: Admin → Apps → Aplicaciones instaladas → Cupones Masivos → Configuración.
Confirmá la licencia
El encabezado debe mostrar Licencia activa. Si aparece Licencia Koru no activa, las operaciones quedan bloqueadas: verificá primero 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 + Cupones Masivos tenga una licencia activa.
App settings disponibles
| Setting | Título en el Admin | Obligatorio | Comportamiento |
|---|---|---|---|
koruWebsiteId | Koru Website ID | Sí | Conecta la tienda con la licencia Koru. |
koruAppId | Koru App ID (opcional) | No | Override del App ID de Koru. Dejalo vacío: la app ya trae el valor correcto embebido. Solo se completa si Koru indica migrar el App ID. |
koruAppId solo puede cargarse desde los settings nativos de VTEX; la pantalla de
conexión de la app escribe únicamente el Website ID.
Un koruAppId mal cargado produce exactamente el mismo error que una licencia
inactiva. Si no te lo indicó Koru explícitamente, dejalo vacío.
Verificar la licencia desde el navegador
Con la sesión de Admin abierta, en la misma pestaña y dominio:
GET https://{store-account}.myvtex.com/_v/private/cupones-masivos/health{
"ok": true,
"appId": "soluciones4fpartnerar.cupones-masivos",
"account": "{store-account}",
"workspace": "master",
"checkedAt": "2026-07-30T12:00:00.000Z",
"license": {
"configured": true,
"authorized": true,
"reason": "koru"
}
}Antes de crear el primer lote
En VTEX el descuento vive en la promoción, no en el cupón. El orden correcto es:
Creá la promoción en VTEX
Admin → Promociones → nueva promoción, con una condición de Parámetro UTM que apunte a la fuente y campaña que vas a usar.
Anotá la fuente y la campaña exactas
Los UTM se envían a VTEX en minúsculas (Mailing → mailing) y no admiten
espacios. La promoción debe escuchar esos mismos valores.
Generá los cupones con esos UTM
Recién ahí ejecutá la creación en Cupones Masivos. Cada cupón queda asociado a la
promoción por su utmSource / utmCampaign.
Probá un cupón en el checkout
Validá con un cupón del lote antes de repartir los demás. Si no descuenta, el problema está en la promoción, no en los cupones.
Crear cupones
Todo se maneja desde el Admin de VTEX → Configuración de la tienda → Cupones Masivos. La pantalla es única y tiene un selector Operación arriba a la derecha:
| Operación | Qué hace |
|---|---|
create — Crear | Genera cupones nuevos, individuales o en lote. |
archive — Archivar | Archiva cupones existentes, individuales o en lote. |
Estrategia de código
El campo codeStrategy define cómo se arma cada código: {prefijo}{separador}{sufijo}.
| Opción | Qué hace | Campos que usa | Ejemplo con prefijo RedClo |
|---|---|---|---|
plain — Solo texto | El código es el texto ingresado, tal cual. Siempre genera 1 cupón: ignora el modo lote y el toggle no se muestra. | couponCode | RedClo |
random — Prefijo + aleatorio | Prefijo + separador + sufijo aleatorio legible. Los códigos se deduplican dentro del lote. | couponCode, separator, suffixLength, quantity | RedClo-A3F7K, RedClo-T9QMX |
sequential — Prefijo + secuencial | Prefijo + separador + número incremental con relleno de ceros. Únicos por construcción. | couponCode, separator, suffixLength, sequenceStart, quantity | RedClo-00001, RedClo-00002 |
El sufijo aleatorio usa un alfabeto legible sin caracteres ambiguos:
ABCDEFGHJKMNPQRSTUVWXYZ23456789Se excluyen 0/O y 1/I/L para que el código pueda dictarse por teléfono o
transcribirse a mano sin errores.
Debajo de los campos, la app muestra una vista previa en vivo (Ejemplo: RedClo-00001) que se actualiza al cambiar prefijo, separador y longitud.
Parámetros del código
| Campo | Descripción |
|---|---|
batch — Creación en lote | Toggle. ON = genera quantity cupones; OFF = genera 1. Solo visible con random o sequential. Viene activado por defecto. |
quantity — Cantidad | Entero 1 a 500 por operación. Solo se pide con el lote activo. |
couponCode — Código / Prefijo | Obligatorio. Con plain es el código exacto; con random/sequential es el prefijo. Máximo 20 caracteres, solo letras, números y guion. |
separator — Separador | - o vacío, para concatenar directo (RedCloA3F7K). Default -. |
suffixLength — Longitud del sufijo | Con random: 1 a 12. Con sequential: 1 a 10 dígitos de relleno. Default 5. |
sequenceStart — Inicio de secuencia | Entero ≥ 0, default 1. Solo con sequential. Sirve para reanudar tandas: si ya creaste 00001–00005, arrancá en 6. Si un número supera el relleno no se trunca (relleno 2, inicio 99 → RedClo-99, RedClo-100). |
VTEX no admite punto ni guion bajo
El código de cupón solo acepta letras, números y guion (-). Cualquier otro
carácter se rechaza en la validación, antes de llamar a VTEX.
Parámetros del cupón
Se aplican por igual a todos los cupones del lote.
| Campo | Obligatorio | Descripción |
|---|---|---|
utmSource — Fuente UTM | Sí | Sin espacios. Se envía a VTEX en minúsculas. Es la mitad de la clave que la promoción debe estar escuchando. |
utmCampaign — Campaña UTM | Sí | Sin espacios. Se envía en minúsculas. |
maxItemsPerClient — Máximo de ítems por cliente | No | Entero ≥ 1. Si lo dejás vacío, la app no envía el campo y VTEX aplica su comportamiento por defecto. |
expirationIntervalPerUse — Intervalo de caducidad | No | Es un intervalo, no una fecha. Formato hh:mm:ss, con hh de 1 a 3 dígitos y mm/ss entre 00 y 59. Ej.: 24:00:00 = 24 h desde el uso. Vacío = sin caducidad por uso. |
El formulario muestra un aviso permanente: "El cupón solo aplica descuento si existe una promoción en VTEX asociada a esta Fuente y Campaña UTM."
Protección contra sobrescritura
Antes de crear cada cupón, el backend consulta si el código ya existe en VTEX. Si existe, no lo sobrescribe: ese ítem se reporta como error "El cupón ya existe." y el resto del lote continúa.
Es deliberado. El POST de cupones de VTEX es un upsert: sin esta verificación, una
campaña nueva podría pisar la configuración de un cupón vigente.
Archivar cupones
| Campo | Descripción |
|---|---|
batch — Archivado en lote | Toggle. OFF (default) = un solo código; ON = lista de códigos. |
code — Código del cupón | Con lote OFF. Código exacto a archivar. |
codes — Códigos del cupón | Con lote ON. Un código por línea o separados por coma. Se recortan espacios y se eliminan duplicados y vacíos, tanto en la UI como en el backend. |
El archivado usa el endpoint dedicado de VTEX, un cupón por request. Un código inexistente devuelve "El cupón no existe." para ese ítem, sin abortar el resto.
El archivado no tiene deshacer dentro de la app
Revertir un archivado se hace desde el módulo de Promociones y Cupones del Admin de VTEX. Antes de archivar un lote grande, confirmá la lista de códigos.
Resultados y exportación
Después de cada operación aparece un bloque de resultados:
| Elemento | Descripción |
|---|---|
| Contadores | Solicitados (requested), Exitosos (succeeded) y Fallidos (failed). |
| Tabla de detalle | Una fila por cupón: código, estado (OK / Error) y motivo, solo en error. |
| Exportar CSV | Aparece únicamente en creación por lote con al menos un éxito. Descarga cupones-{campaña}.csv con los cupones creados correctamente. |
Columnas del CSV: couponCode, utmSource, utmCampaign, maxItemsPerClient,
expirationIntervalPerUse.
Exportá el CSV siempre que uses `random`
Los sufijos aleatorios se generan en el momento y la app no guarda historial de lotes. Si cerrás la pantalla sin exportar, la única forma de recuperar los códigos es buscarlos en el módulo de Promociones y Cupones del Admin de VTEX.
Una operación de lote nunca falla completa por un cupón individual: cada uno se resuelve por separado y la respuesta agrega los contadores.
Límites de la operación
| Límite | Valor | Origen |
|---|---|---|
| Cupones por operación de creación | 500 | Validación del backend |
| Cupones procesados en paralelo | 8 | Pool de concurrencia del backend |
Reintentos por cupón ante 429 / 5xx de VTEX | 3 | Backoff exponencial con jitter, respetando Retry-After |
| Timeout del servicio | 60 s por request | Configuración del servicio Node |
| Tamaño máximo del body | 1 MB | Parser del handler |
| Longitud del prefijo / código base | 20 caracteres | Validación del backend |
El límite de 500 está validado en la creación. En el archivado, el backend solo exige al menos un código, pero conviene no pasar de unos cientos por operación: con 60 s de timeout y 8 en paralelo, un lote muy grande se corta por tiempo.
Para más de 500 cupones, ejecutá varias operaciones. Con sequential es directo: subí
sequenceStart al siguiente número de la tanda anterior —tanda 1 desde 1, tanda 2
desde 501—. Con random repetí la operación: los códigos se verifican contra la
tienda antes de crearse, así que no hay riesgo de colisión silenciosa.
Licencia y seguridad
Validación de licencia
Todas las rutas operativas exigen:
- Sesión VTEX Admin válida. Sin ella, el backend responde
401. - Licencia Koru activa para el Website ID y el App ID de Cupones Masivos.
El backend expone sus rutas bajo /_v/private/cupones-masivos/*. Son privadas: no son
consumibles desde el storefront ni desde un cliente externo sin sesión de admin.
Para tolerar fallas transitorias:
- Una autorización positiva se cachea 5 minutos; una revocación explícita, 60 segundos.
- Si Koru Suite no responde por red o error de servidor, una validación positiva previa puede mantener el acceso hasta 72 horas.
Estos tiempos son internos, no se configuran por tienda y no hay purga manual del caché: después de activar la licencia o corregir el Website ID, esperá el TTL y recargá la pantalla.
Datos y credenciales
- La app no solicita ni guarda AppKey/AppToken del merchant: opera con la identidad del administrador logueado.
- No hay secretos Koru en el browser; la validación de licencia se resuelve del lado del servidor.
- Los únicos datos que persiste son los settings
koruWebsiteIdykoruAppId—ninguno es secreto— y un registro interno de la última validación positiva. - No guarda datos de clientes ni historial de lotes.
- No inyecta JavaScript, CSS ni bloques en el storefront, y no participa del render de las páginas públicas ni del checkout: no afecta la performance de la tienda.
Resolución de problemas
La app no aparece después de instalar
- Ejecutá
vtex listy buscásoluciones4fpartnerar.cupones-masivos. - Ejecutá
vtex whoamiy confirmá cuenta y workspace. Si la app se linkeó en un workspace de desarrollo, no aparece enmaster. - Recargá VTEX Admin: el menú se cachea del lado del navegador.
- Entrá por URL directa a
/admin/app/cupones-masivoso/admin/cupones-masivos.
La app dice "Licencia Koru no activa"
Koru respondió que esa combinación de website_id + app_id no tiene la app
habilitada. Verificá:
- Que el
koruWebsiteIdcorresponda a este ecommerce. Es el error más frecuente: pegar el Website ID de otra tienda del mismo cliente. - Que la app figure activa para ese website en Koru Suite.
- Que no hayas copiado espacios.
- Que
koruAppIdesté vacío, salvo indicación explícita de Koru.
La app dice "No pudimos verificar la licencia"
Es un estado transitorio de disponibilidad, no una prueba de revocación. El backend tolera cortes de red: si hubo una validación positiva en las últimas 72 horas, sigue habilitando la operación. Reintentá en unos instantes.
Activé la licencia y la app sigue bloqueada
La validación se cachea. Esperá el TTL correspondiente —5 minutos para una licencia activa, 60 segundos para una revocada— y recargá la pantalla del Admin. No existe endpoint de purga manual.
Los cupones se crearon pero no descuentan nada
No es un problema de la app. En VTEX el cupón solo activa promociones cuyo scope
escucha su utmSource / utmCampaign. Creá en Admin → Promociones una promoción
con la condición de Parámetro UTM apuntando a la misma fuente y campaña, en
minúsculas.
Un cupón salió con error "El cupón ya existe."
El código ya está en la tienda y la app no sobrescribe cupones existentes por diseño.
Cambiá el prefijo, subí el sequenceStart o aumentá la longitud del sufijo aleatorio.
Pedí 100 cupones y se crearon menos, sin errores
Pasa con random y sufijos muy cortos: el espacio de combinaciones se agota. El
alfabeto tiene 30 símbolos, así que un sufijo de 1 carácter da como máximo 30 códigos
distintos. La app deduplica y crea solo los códigos únicos que logró generar.
Solución: aumentá suffixLength o reducí quantity. Compará siempre la cantidad
pedida con el contador Solicitados del resultado.
Varios cupones fallaron con "Límite de velocidad de VTEX alcanzado."
La API de cupones aplicó rate limit y se agotaron los 3 reintentos. Reintentá más tarde con esos códigos o dividí en lotes más chicos.
Todos los cupones fallan con "Sin permisos para operar cupones en VTEX."
El usuario admin logueado no tiene permiso sobre el módulo de Promociones y Cupones. La app opera con su identidad, no con credenciales propias: pedí el rol correspondiente en License Manager y volvé a entrar.
Aparecen identificadores crudos en pantalla
Si ves textos como create.title en lugar de una etiqueta, el catálogo de mensajes del
workspace quedó desactualizado. Re-linkeá o reinstalá la app.
Para soporte técnico en producción:
vtex logs soluciones4fpartnerar.cupones-masivosNo compartas tokens, cookies ni información personal innecesaria.
Límites funcionales
La versión actual:
- Crea y archiva cupones; no crea ni edita promociones.
- No lista, busca ni exporta los cupones existentes de la tienda: se opera por código.
- No sobrescribe cupones existentes.
- No guarda historial de lotes generados.
- No deshace un archivado.
- Admite hasta 500 cupones por operación de creación.
- Solo admite letras, números y guion en el código.
- Solo acepta
hh:mm:ssen el intervalo de caducidad. - Es una única pantalla de Admin por cuenta: no admite múltiples instancias.
- Está disponible en español, inglés y portugués, siguiendo el idioma del Admin de VTEX; no tiene setting de idioma propio.
Checklist antes de operar
- Cupones Masivos instalada en la cuenta y workspace correctos.
- Website ID de la tienda verificado y
koruAppIdvacío. - Licencia activa visible en el encabezado.
- Usuario admin con permiso sobre Promociones y Cupones.
- Promoción creada en VTEX con la condición de Parámetro UTM.
-
utmSourceyutmCampaignacordados, sin espacios y en minúsculas. - Estrategia de código elegida y vista previa revisada.
-
quantitydentro del límite de 500 por operación. -
suffixLengthsuficiente para la cantidad pedida, si usásrandom. - Contador Solicitados comparado con la cantidad pedida.
- CSV exportado y resguardado antes de cerrar la pantalla.
- Un cupón del lote probado en el checkout.
- Responsable definido para archivar los cupones al cerrar la campaña.
Datos útiles al pedir soporte
Informá cuenta VTEX, workspace, horario aproximado, operación ejecutada, estrategia de
código, utmSource / utmCampaign, algún código afectado y el mensaje de error visible.
Evitá enviar credenciales o cookies.