Combora — Manual de usuario

Guía completa de la app de packs y descuentos para Shopify: los 8 tipos de oferta, cada opción de configuración, lo que ve tu cliente en la tienda, y un anexo técnico para desarrolladores. Todas las capturas provienen de una tienda real durante la elaboración de este manual (agosto 2026).

1Qué es Combora

Combora crea packs (bundles) y ofertas automáticas en tu tienda Shopify: agrupa productos, aplica el descuento correcto en el carrito y el checkout, y muestra la oferta en tu tema con bloques listos para usar. Tú configuras la oferta en el admin; Combora se encarga de que el precio cobrado sea siempre exacto — el descuento lo calcula una Shopify Function en el propio checkout, no un script en el navegador.

Hay 8 tipos de pack. Esta tabla te ayuda a elegir:

TipoQué haceCuándo usarlo
Pack fijoUn conjunto cerrado de productos con precio de pack o descuento. Crea un producto comprable de 1 clic en tu catálogo.Kits y sets curados: "el dúo", "el kit de iniciación".
Combina y ahorra (mix & match)El cliente elige N artículos de un grupo y recibe un descuento."Elige 3 camisetas y ahorra 20%".
Descuento por volumenNiveles: cuanto más compra, más ahorra (2+ → 10%, 4+ → 20%…).Subir unidades por pedido de un mismo producto o grupo.
Compra X, llévate Y (BOGO)Al comprar X unidades, las siguientes Y salen con recompensa (gratis, % o precio fijo)."Compra 2 y llévate 1 gratis".
Regalo por compra (GWP)Añade un regalo gratis automáticamente cuando el carrito cumple una condición."Regalo sorpresa en pedidos de $50+".
Arma tu caja (build-a-box)El cliente llena una caja de tamaño fijo; se cobra con descuento o a precio de caja.Cajas de 4, 6, 12… snacks, velas, cervezas.
Complementos (FBT)"Comprados juntos habitualmente": un producto principal sugiere añadidos con descuento.Cross-sell en la ficha de producto.
ComboApila dos o más de las ofertas anteriores en un solo pack; dentro del combo sí se suman.Campañas: "volumen + regalo a partir de $1,000".
La regla de oro entre packs distintos: a cada artículo del carrito se le aplica solo la mejor oferta — los packs no se acumulan entre sí. La única excepción es el combo, cuyas subofertas sí se suman entre ellas. Todo el detalle en la sección 13.

Si dudas entre tipos, la propia app trae una guía: en Crear pack, el enlace "¿No sabes cuál elegir?" abre un asistente, y cada tipo tiene un panel "Ver cómo funciona" con ejemplos.

Modal ¿Cuál debería usar? con recomendaciones por objetivo
¿No sabes cuál elegir? El asistente de la galería recomienda un tipo según tu objetivo.
Panel lateral Ver cómo funciona del Pack fijo
Cada tipo tiene su panel "Ver cómo funciona" con un ejemplo concreto.

2Primeros pasos

2.1 Qué crea la app al instalarse

Al instalar Combora no cambia nada visible en tu tienda. La app prepara en segundo plano las estructuras de datos donde publicará tus packs (metaobjetos y metafields con el prefijo combora — el detalle técnico está en el anexo para desarrolladores) y un único descuento automático llamado "Combora" en Descuentos, que es el que aplica todos los precios. No lo borres ni lo edites a mano: la app lo mantiene sola.

2.2 Activar el motor de regalos (app embed)

Si vas a usar Regalo por compra (o combos con regalo), activa el app embed Combora Gift: Tienda online → Personalizar → Configuración del tema → App embeds → Combora Gift. Es el componente que añade y retira el regalo del carrito automáticamente. Sin él, el descuento del regalo seguiría siendo correcto, pero el producto-regalo no se añadiría solo.

2.3 Añadir los bloques al tema

Cada tipo de pack se muestra en la tienda con un bloque de tema. Se añaden una sola vez en Tienda online → Personalizar, en la plantilla correspondiente:

BloqueTipos que muestraDónde añadirlo
Combora bundlePack fijo y Combo ("Available bundles")Plantilla de producto
Combora mix & matchCombina y ahorra · Arma tu cajaPlantilla de producto
Combora volume tableVolumen · Compra X llévate YPlantilla de producto
Combora complementsComplementosPlantilla de producto (y carrito)
Combora gift offerRegalo por compra (la oferta)Plantilla de producto
Combora gift progressBarra de progreso del regaloPlantilla del carrito
Combora Gift (app embed)El motor que añade/quita el regaloApp embeds (toda la tienda)

No hace falta memorizarlo: el editor de cada pack incluye una tarjeta "Dónde aparece" que nombra el bloque correcto y un enlace "Ver en tu tema publicado" que abre el editor de temas con ese bloque ya preparado para insertarse en la plantilla adecuada.

Estilo: los bloques heredan la tipografía y los colores de tu tema a propósito. Cada bloque acepta un color de acento (hex) y un radio de esquina (recto / suave / redondeado), y los bloques de producto un máximo de ofertas a mostrar (1–8, por defecto 3).

3Tour de la app

La app vive en Apps → Combora y tiene seis pestañas:

Packs

La lista de todos tus packs: búsqueda por nombre, filtro por estado (Publicado / Borrador), acciones por fila (duplicar, publicar/pasar a borrador, eliminar) y selección múltiple con acciones masivas. Desde aquí se crea todo con Crear pack.

Lista de packs con estados y acciones
La pestaña Packs: cada fila muestra tipo, estado y última actualización (la fecha lleva tooltip).

Analítica

Métricas de rendimiento de tus packs sobre pedidos reales: ingresos atribuidos, % de pedidos con pack, ahorro entregado, valor medio de pedido y un gráfico temporal. Detalle en la sección 16.

Planes

Tu plan actual y las opciones de upgrade. El plan Gratis permite 3 packs publicados simultáneamente; los planes de pago no tienen límite (sección 17).

Página de planes
La pestaña Planes. El plan Gratis muestra "$0 /mes" y su límite de 3 packs publicados.

Ayuda

Preguntas frecuentes y explicaciones de conceptos (arbitraje entre packs, regalos, bloques).

Página de ayuda
La pestaña Ayuda.

Diagnóstico (pestaña dentro de Ayuda)

El panel de salud y soporte vive como pestaña dentro de Ayuda (selector "Guías | Diagnóstico" arriba): chequeos en vivo de toda la instalación, el registro de eventos y el informe de soporte que copias cuando algo va mal (sección 18).

Chat de soporte (burbuja flotante)

En la esquina inferior derecha de todas las pantallas hay una burbuja de chat 💬 para hablar directamente con soporte: conversaciones por tema, historial, y aviso de si soporte está disponible o ausente. Solo se comparte lo que escribes — nunca datos de tus clientes.

Ajustes

Idioma de la app (7 idiomas), sincronización manual de descuentos y el acceso para desarrolladores.

Página de ajustes
La pestaña Ajustes, con la sincronización de descuentos.

4Anatomía del editor

Todos los tipos comparten el mismo editor; cambia solo la sección de productos y precio. Al crear un pack nuevo se ve así:

Galería de tipos al crear un pack
Crear pack: la galería de los 8 tipos, con los accesos a creación masiva arriba.
Editor vacío con checklist Antes de publicar
El editor recién abierto: el rail derecho muestra el estado y la checklist "Antes de publicar" con lo que falta para poder publicar.

4.1 Datos básicos

Nombre del pack
Interno. Solo tú lo ves; sirve para encontrarlo en tu lista.
Título en la tienda
Lo que ve el cliente como nombre de la oferta en el carrito y el checkout. Es traducible. También es el texto de la línea de descuento (recortado a 100 caracteres).
Texto de la etiqueta
Una insignia corta opcional ("Mejor valor") que tu tema puede mostrar como destacado.

4.2 Programación

Fechas de inicio y fin opcionales. Vacías = la oferta se activa al publicar y no caduca. Un pack publicado fuera de su ventana deja de aplicar el descuento automáticamente y vuelve a aplicarlo al entrar en ventana, sin tocar nada.

4.3 Productos

Según el tipo, eliges productos concretos, variantes, una colección o toda la tienda. El selector de Shopify es el estándar:

Selector de productos de Shopify
El selector estándar de productos/variantes de Shopify dentro del editor.
Colecciones: un pack dirigido a una colección se actualiza solo — los productos que entren o salgan de la colección entran o salen de la oferta sin republicar. Máximo 100 colecciones por selector.

4.4 Precio

Cada tipo tiene su propia sección (porcentaje, importe, precio fijo, niveles, recompensa…). Se documenta en el capítulo de cada tipo. En todos los casos el precio que se cobra lo calcula Shopify en el checkout con la configuración publicada: lo que muestran los bloques es informativo.

4.5 Suscripciones

Por defecto un cliente no puede comprar un artículo del pack como suscripción (protege el checkout de precios de suscripción mezclados con descuentos de pack). En los tipos donde tiene sentido (mix & match, arma tu caja y regalo por compra) hay un opt-in avanzado "Permitir suscripciones en este pack".

4.6 El rail derecho

Estado + acción
Publicar (o Actualizar pack si ya está publicado) y Pasar a borrador. Publicar pone la oferta en vivo; pasar a borrador la retira conservando toda la configuración.
Modo prueba
Marca "Publicar en modo prueba" para probar el pack sin riesgo: los bloques solo se muestran en el editor de temas y en las vistas previas (nunca en tu tema publicado), y el descuento solo se aplica a clientes con la etiqueta combora-test. Para recorrer el checkout completo, añade esa etiqueta a tu propio cliente de pruebas (Admin → Clientes) e inicia sesión con él en la tienda. Cuando todo se vea bien, desmarca la casilla y pulsa Actualizar pack — pasa a en vivo. En la lista, un pack en prueba lleva la insignia Modo prueba.
Antes de publicar
La checklist que bloquea la publicación hasta completar lo imprescindible (título, productos, precio…).
Lo que ve tu cliente
Vista previa del contenido de la oferta y el ahorro. El aspecto final depende de tu tema.
Estilo de la vista previa
Acento y radio de esquina — son los mismos ajustes que luego configuras en el bloque del tema.
Dónde aparece
El bloque de tema que muestra este tipo y el enlace directo al editor de temas.

4.7 Avisos que puede mostrar el editor

  • Solapamiento: si los productos del pack ya están en otros packs publicados, un banner avisa: "En el checkout solo se aplica la mejor oferta por línea: los packs no se acumulan". No es un error — es información (ver sección 13).
  • Sin ahorro / precio 0: si la configuración no produce ningún descuento (o produce un precio 0), el editor lo señala antes de publicar.
  • Pool vacío: una colección sin productos elegibles también se avisa.

4.8 Editar un pack publicado

Al editar un pack publicado, los cambios no salen a la tienda hasta que pulses "Actualizar pack". Así puedes preparar cambios con calma. "Pasar a borrador" retira la oferta de la tienda al momento; volver a publicar la restaura tal cual.

5Pack fijo

Un conjunto cerrado de productos que se vende como una unidad. Es el único tipo que además crea un producto comprable de 1 clic en tu catálogo: un producto "padre" (bundle nativo de Shopify) cuyos componentes se expanden automáticamente en el checkout.

5.1 Configuración

  1. Productos: añade los componentes (variantes concretas) y la cantidad de cada uno. Máximo 30 componentes por pack.
  2. Precio — dos modos excluyentes:
    • Precio fijo del pack: escribes el precio total (p. ej. $1,349.95). El ahorro se calcula contra la suma de los componentes.
    • Aplicar un descuento: porcentaje o importe sobre la suma de los componentes.
  3. Publica. Al publicar, Combora crea (o actualiza) el producto padre en tu catálogo.
Editor de pack fijo en modo descuento
Pack fijo en modo descuento: dos componentes y 15% — la vista previa muestra $724.90 → $616.17.
Pack fijo publicado
Tras publicar: estado Publicado y el botón pasa a "Actualizar pack".

5.2 Qué ve tu cliente

Card Available bundles en la ficha de producto
En la ficha de cualquier componente, el bloque Combora bundle muestra la card del pack con su contenido, precio y ahorro, y el enlace al producto padre.
Ficha del producto padre del pack
El producto padre: una ficha propia y comprable del pack, con su precio de pack. Puedes editar su imagen y descripción como en cualquier producto.
Pack fijo en el carrito
En el carrito el pack es una sola línea al precio del pack.
Checkout con el pack expandido en componentes
En el checkout el pack se expande en sus componentes, con el ahorro aplicado y etiquetado con el título del pack.
Página de pedido completado
Compra completada de verdad durante la elaboración del manual (pasarela de prueba).

5.3 Detalles y limitaciones del tipo

  • Los componentes deben ser variantes con stock; el producto padre hereda la disponibilidad.
  • El producto padre se gestiona solo: al pasar a borrador o eliminar el pack, se retira de la tienda (verificado durante este manual). No lo borres a mano.
  • Máximo 30 componentes. El precio fijo se reparte entre componentes con redondeo exacto (la suma de las partes siempre iguala el total).
  • El pack fijo también aplica si el cliente añade los componentes por separado en las cantidades exactas — el checkout agrupa y descuenta igual.

6Combina y ahorra (mix & match)

El cliente elige al menos N artículos de un grupo y todo el grupo sale con descuento.

6.1 Configuración

  1. Productos: el grupo elegible puede ser variantes específicas, productos, una colección (se actualiza sola) o toda la tienda.
  2. Cantidad: el mínimo de artículos para calificar, y opcionalmente un máximo (por encima del máximo, los artículos extra se pagan a precio normal).
  3. Descuento: porcentaje o importe, aplicado a todos los artículos elegibles del carrito cuando se alcanza el mínimo.
Editor de mix and match
Editor de Combina y ahorra: grupo elegible y mínimo de artículos.
Sección de precio del mix
La sección de precio: "Cómo fijar el precio" con porcentaje o importe.
El selector visual solo aparece con variantes específicas. Si el grupo es una colección o toda la tienda, el cliente compone el pack añadiendo productos al carrito como siempre y el descuento entra solo al llegar al mínimo. Con variantes específicas, el bloque Combora mix & match pinta un selector con casillas.

6.2 Qué ve tu cliente

Selector mix con 2 de 3 seleccionados
El selector en la ficha de producto: el contador dice "2 of 3 selected" mientras no llega al mínimo, y el botón se mantiene desactivado.
Selector mix con 3 seleccionados y botón activo
Al llegar al mínimo, el CTA se activa y nombra la cantidad ("Add 3 to cart").
Carrito con el descuento mix aplicado junto a dos regalos
En el carrito, cada línea elegible muestra el precio rebajado con la etiqueta del pack. (En esta captura conviven además dos regalos de otros packs — ver sección 13.)

6.3 Detalles del tipo

  • Un carrito por debajo del mínimo no se bloquea: el cliente paga precio completo hasta calificar.
  • Con máximo definido, el selector bloquea marcar más casillas al llegar al tope, y en el carrito solo las primeras unidades hasta el máximo reciben descuento.
  • Las cantidades cuentan por unidades: 3 unidades de un mismo producto elegible también califican un mínimo de 3.

7Descuento por volumen

Niveles de precio por cantidad: "compra al menos 2 → 10%, al menos 4 → 20%". La cantidad total de artículos elegibles en el carrito decide el nivel, y el descuento del nivel alcanzado se aplica a todos ellos.

7.1 Configuración

  1. Productos: variantes, productos, colección o toda la tienda (igual que mix).
  2. Niveles: cada nivel es "Compra al menos N" + descuento (porcentaje o importe). Añade tantos como quieras con "Agregar nivel".
Editor de volumen con dos niveles
Dos niveles: 2+ → 10% y 4+ → 20%. El texto lo aclara: "la cantidad total en el carrito decide su nivel".

7.2 Qué ve tu cliente

Tabla de volumen en la ficha de producto
El bloque Combora volume table en la ficha: la tabla de niveles con el ahorro por tramo.
Carrito con 4 unidades y 20% aplicado
Con 4 unidades en el carrito se aplica el nivel del 20%: $4,100.00 → $3,280.00.

7.3 Detalles del tipo

  • Solo aplica el nivel más alto alcanzado (no se suman niveles).
  • Los niveles pueden mezclar tipos de valor (unos %, otros importe).
  • El importe fijo de descuento se reparte entre las líneas de forma proporcional y exacta.

8Compra X, llévate Y (BOGO)

Al comprar X unidades, las siguientes Y unidades salen con recompensa. La recompensa puede ser gratis (100%), un porcentaje, un importe de descuento o un precio fijo por unidad.

8.1 Configuración

Editor BOGO — datos básicos con banner de solapamiento
El editor del BOGO. Arriba, el aviso de solapamiento porque estos productos están también en otros packs — informativo, no bloqueante.
Editor BOGO — cantidad a comprar, a llevar y recompensa
Cantidad a comprar = 2, cantidad a llevar = 1 y recompensa 100% ("compra 2 y llévate 1 gratis"). El selector de recompensa ofrece porcentaje, importe o precio fijo.

8.2 Qué ve tu cliente

Carrito con 3 unidades y 1 gratis
Con 3 unidades ($629.95 cada una): $1,889.85 → $1,259.90 — una unidad sale gratis, con la etiqueta "Compra 2 y llévate 1 gratis" en la línea. (Los dos regalos de arriba pertenecen a otros packs que también calificaron.)

8.3 Detalles del tipo

  • La oferta se repite por bloques completos: con "2+1", 6 unidades = 2 gratis; 5 unidades = 1 gratis.
  • El bloque de tema que la muestra es Combora volume table (presenta el "compra X, llévate Y" como una tabla de ahorro).
  • La recompensa "precio fijo" cobra ese precio exacto por cada unidad recompensada.

9Regalo por compra (GWP)

Añade un producto de regalo (a $0.00) automáticamente cuando el carrito cumple la condición, y lo retira si deja de cumplirla. Es el tipo con más automatismo: el app embed Combora Gift gestiona el regalo sin que el cliente haga nada.

9.1 Configuración

  1. El regalo: una variante concreta que se agrega cuando el cliente califica.
  2. Condición para desbloquear — cuatro opciones:
    • Por gasto mínimo: el carrito alcanza un importe (p. ej. $50).
    • Por cantidad de productos: alcanza N unidades.
    • Gasto y cantidad (ambas): se exigen las dos.
    • Por llevar una combinación de productos: una lista concreta (de 2 a 5 artículos con sus cantidades) que debe estar completa en el carrito.
  3. Qué cuenta para la condición: cualquier producto de la tienda, productos específicos o colecciones.
Editor GWP con la condición de gasto mínimo
El editor: el regalo elegido, la condición "Por gasto mínimo" con el umbral en $50, y "Qué cuenta para la condición" en Cualquier producto.

9.2 Qué ve tu cliente

Barra de progreso: faltan $25.05
Con $24.95 en el carrito, la barra del bloque Combora gift progress dice "Add $25.05 more to unlock your free gift" y se pinta a mitad.
Regalo auto-añadido a $0.00
Al superar los $50, el regalo se añade solo a $0.00 con la etiqueta del pack, y la barra celebra: "You've unlocked your free gift!". Si el carrito baja del umbral, el regalo se retira solo.

9.3 Detalles y protecciones del tipo

  • El propio regalo no cuenta para el gasto que califica.
  • Si el cliente elimina el regalo a mano, la app lo respeta y no lo vuelve a añadir en esa sesión.
  • Si el regalo se queda sin stock, la oferta simplemente no lo añade (no bloquea la compra).
  • Protección anticobro: una validación en el checkout impide pagar un regalo que figura como regalo pero llegó con precio — el comprador nunca paga por error un artículo marcado de regalo. La validación actúa solo en el checkout, nunca mientras se navega.
  • Cuando "qué cuenta" son colecciones, la barra de progreso del carrito no puede predecir la pertenencia desde el navegador y no se muestra para esa oferta; el regalo y el precio siguen siendo correctos (los decide el servidor).

10Arma tu caja (build-a-box)

El cliente llena una caja de tamaño fijo (p. ej. 3 artículos) con lo que elija de un grupo. Cada caja completa se cobra con descuento o a un precio de caja cerrado.

10.1 Configuración

Editor arma tu caja con descuento porcentual
Tamaño de la caja = 3 sobre una colección, con 15% de descuento. Un carrito por debajo del tamaño no se bloquea: se paga precio completo hasta completar la caja.
Editor arma tu caja en modo precio de caja
El segundo modo: "Fijar precio de la caja" — el precio total de una caja completa; la app muestra el ahorro resultante.

10.2 Qué ve tu cliente

Usa el mismo bloque Combora mix & match y el mismo selector con contador que la sección 6: "selecciona 3", contador de progreso, CTA con cantidad. La diferencia es la matemática: aquí las cajas se cobran por caja completa — con caja de 3, seis artículos son dos cajas; siete artículos son dos cajas y un artículo a precio normal.

10.3 Detalles del tipo

  • Grupo elegible: variantes, productos, colección o toda la tienda (el selector visual solo con variantes específicas, como en mix).
  • El precio de caja se reparte entre los artículos de forma exacta; con monedas sin decimales (JPY) o con tres decimales (BHD) el reparto respeta la moneda.
  • Admite el opt-in de suscripciones (apartado 4.5).

11Complementos (comprados juntos habitualmente)

Un producto principal sugiere productos complementarios; si el cliente se lleva el conjunto, recibe un descuento. Es el clásico "frequently bought together" de la ficha de producto.

11.1 Configuración

Editor de complementos con producto principal y sugerencias
El editor: producto principal (el ancla donde se muestra la oferta), los productos complementarios y el descuento (15%). El rail muestra la vista previa del widget con su CTA.

11.2 Qué ve tu cliente

Bloque Complements en la ficha del producto principal
En la ficha del producto principal, el bloque Combora complements: el propio producto marcado como "This item", los complementos con casilla y precio, el ahorro ("Save 15%") y el CTA que nombra la selección ("Add 4 to cart"). En esta tienda conviven en la misma ficha la card del pack fijo (arriba) y un selector mix (abajo).

11.3 Detalles del tipo

  • El descuento se aplica cuando el principal y al menos un complemento están en el carrito; cubre las líneas del conjunto.
  • El bloque también puede añadirse a la plantilla del carrito como último empujón de cross-sell.
  • Los complementos agotados aparecen deshabilitados con su aviso, nunca se pre-marcan.

12Combo

El tipo avanzado: apila dos o más subofertas (de cualquiera de los otros tipos) en un solo pack. La diferencia clave con publicar packs separados: dentro de un combo las subofertas se suman — el cliente puede recibir el descuento por volumen y el regalo a la vez.

12.1 Configuración

Editor de combo con dos subofertas listas
El editor del combo: cada suboferta es una fila del acordeón con su estado (Lista). La vista previa resume las ofertas y el consumo del límite ("Usa 1 de 50 entradas de producto").
Suboferta de volumen expandida dentro del combo
Cada suboferta se edita en línea al expandirla — aquí el volumen (2+ → 10%) con sus propios productos. Cada suboferta solo afecta a sus propios productos.

12.2 Qué ve tu cliente

Card del combo en la ficha de su producto
En la ficha de un producto del combo, el bloque Combora bundle muestra la card del combo con su contenido. La card aparece en los productos concretos que el combo referencia; si una suboferta apunta a una colección o a toda la tienda, esa parte se promociona con sus bloques propios (tabla de volumen, barra de regalo).

En el carrito, cada parte del combo actúa con su propia etiqueta: el descuento de volumen en sus líneas y el regalo auto-añadido a $0.00 (visible en la captura de la sección 13).

12.3 Detalles del tipo

  • Las subofertas se suman dentro del combo, pero el combo compite como un todo contra los demás packs por la regla de la mejor oferta por línea.
  • El regalo de una suboferta GWP usa el mismo motor auto-add que el tipo regalo.
  • Límite de tamaño: el conjunto aplanado de productos del combo no puede superar 50 entradas (el editor lo muestra: "Usa X de 50").

13Combinar packs entre sí

Puedes publicar tantos packs como tu plan permita, incluso sobre los mismos productos. Las reglas de convivencia son fijas y predecibles:

  1. La mejor oferta por línea. Para cada artículo del carrito, Shopify aplica la oferta que más le descuenta a ese artículo. Nunca se suman dos packs sobre la misma línea.
  2. Packs distintos pueden convivir en el mismo carrito — cada uno sobre sus líneas. Un descuento mix en las tablas y un regalo por gasto pueden aplicarse a la vez porque actúan sobre líneas distintas.
  3. En empate, gana el pack más antiguo (el primero que creaste).
  4. La excepción es el combo: sus subofertas sí se suman entre ellas (sección 12).
Carrito con tres ofertas conviviendo
Un carrito real con tres ofertas a la vez: el mix del 20% en las tablas, el regalo del combo a $0.00 y el regalo por gasto a $0.00 — cada una en sus propias líneas, subtotal $1,692.68 verificado contra la calculadora de precios de la app.
El aviso de solapamiento del editor existe para esto: cuando publicas un pack cuyos productos ya están en otros packs, te recuerda que en el checkout solo aplicará la mejor oferta por línea. Publica sin miedo — el cliente nunca verá un doble descuento ni un precio incorrecto.

Ejemplo numérico real (verificado en la tienda)

CarritoOfertas candidatasResultado
3 × Multi-managed ($629.95)BOGO 2+1 gratis$1,889.85 → $1,259.90 (una unidad gratis)
4 × Oxygen ($1,025.00)Volumen 4+ → 20%$4,100.00 → $3,280.00
3 tablas elegibles + regalosMix 20% + combo (regalo) + GWP (regalo)Las tres conviven: cada una en sus líneas

14Creación masiva

Desde la galería de Crear pack hay dos flujos para crear muchos packs de golpe. Ambos crean borradores: nada sale a la tienda hasta que revisas y publicas.

14.1 Generar desde una colección

  1. Elige la colección.
  2. Elige la plantilla: "Un multipack por cada producto" (un pack fijo de N unidades por cada producto) o "Un solo pack para toda la colección".
  3. Configura unidades y descuento, y pulsa Crear borradores.
Generador configurado con colección y plantilla
El generador con la colección elegida, plantilla multipack, 3 unidades y 15%.
Resultado: 8 packs creados como borradores
El resultado: "8 packs creados como borradores" a partir de una colección de 9 productos — el producto sin stock se excluyó solo (un pack fijo debe ser comprable).
Límite: hasta 100 borradores por generación.

14.2 Importar desde un CSV

Para catálogos grandes o para migrar de otra app. La página incluye la referencia completa del formato, una plantilla descargable con un ejemplo por tipo y un botón de exportación (baja todos tus packs en el mismo formato, listo para reimportar en otra tienda).

Página de importación CSV con la referencia de columnas
La página de importación: columnas type, title, discount_kind, discount_value, components, collection, min_qty, min_items, slots, buy_qty, get_qty. Se puede subir un archivo o pegar el CSV directamente.
  • Tipos importables: fixed, volume, mix_and_match, build_a_box, bogo (los tipos con regalo/ancla/subofertas se crean en el editor).
  • Referencias por handle de producto/colección o por GID de Shopify.
  • En components (solo fixed): handle:cantidad separados por |.
  • Hasta 200 filas por importación; un archivo mayor se recorta y lo avisa.
Importación correcta: 2 packs creados como borradores
Importación correcta: "2 packs creados como borradores".
Importación con errores por fila
Con un CSV defectuoso nada se descarta en silencio: cada fila fallida se informa con su motivo (sin componentes, descuento fuera de rango, tipo desconocido).
Lista filtrada por borradores tras los flujos masivos
Los borradores creados por ambos flujos, filtrando la lista por estado Borrador. Publícalos de uno en uno o con las acciones masivas.

15Gestión diaria

15.1 La lista

Búsqueda por nombre, filtro por estado y, en cada fila: Duplicar (crea una copia en borrador), Publicar / Pasar a borrador y Eliminar. La fecha de cada fila es la última actualización (tooltip al pasar el cursor).

15.2 Acciones masivas

Barra de acciones masivas con 10 seleccionados
Seleccionando filas (o "Seleccionar todo") aparece la barra masiva: Publicar · Pasar a borrador · Eliminar.
Confirmación inline de eliminación masiva
Eliminar pide confirmación explícita: "¿Eliminar 10 packs? … Esto no se puede deshacer." Durante la operación se ve el progreso ("Procesando 6 de 10…").

15.3 Ciclo de vida de un pack

Borrador
Invisible para la tienda. Se puede editar sin límite.
Publicado
Oferta activa (dentro de su ventana de programación). Editar no cambia nada en vivo hasta pulsar Actualizar pack.
Pasar a borrador
Retira la oferta al momento; la configuración se conserva íntegra para republicar.
Eliminar
Borra el pack y retira su descuento (y el producto padre, si era un pack fijo). No se puede deshacer. La analítica de pedidos pasados se conserva.

16Analítica

Analítica con pedidos reales
La pestaña Analítica con datos reales de esta tienda (rango 7 / 30 / 90 días).
MétricaQué mide exactamente
Ingresos atribuidosLos ingresos de las líneas de pedido que llevaron descuento de Combora (no el total del pedido).
% de pedidos con packPorcentaje de los pedidos del rango que incluyeron al menos un pack.
Pedidos con packLa fracción literal: pedidos con pack / pedidos totales.
Ahorro entregadoEl descuento total que tus packs dieron a los clientes.
Valor medio del pedidoSobre todos los pedidos del rango.
Valor del pedido con packEl promedio solo de los pedidos que llevaron pack — compáralo con el anterior para ver el efecto de tus ofertas.
Pedidos con regaloPedidos que incluyeron un regalo gratis (GWP o combo).

El gráfico "Pedidos con pack en el tiempo" muestra una barra por día del rango, con el valor impreso sobre las barras con datos y tooltip por barra.

La atribución se registra en el momento del pedido: eliminar un pack después no borra su historial en Analítica.

17Ajustes y planes

17.1 Ajustes

  • Idioma de la app: 7 idiomas (inglés, español, francés, alemán, italiano, portugués, neerlandés). Afecta al admin; lo que ve tu cliente sigue el idioma de tu tema/mercado.
  • Sincronizar descuentos: re-publica el estado de todos los packs hacia Shopify y limpia descuentos antiguos. Úsalo si sospechas que algo quedó desalineado (p. ej. tras restaurar un tema). Si no había nada que arreglar, lo dice: "Todo estaba ya al día."
  • Acceso para desarrolladores: los datos públicos que tu tema puede leer (anexo 20). La documentación in-app del contrato es parte del plan Plus.

17.2 Planes

Precios planos: nunca cobramos un porcentaje de tus ventas, y el precio no depende de tu plan de Shopify — una tienda Basic y una Plus pagan lo mismo.

  • Gratis ($0/mes): hasta 3 packs publicados a la vez (los borradores no cuentan) con los 8 tipos incluidos. Al intentar publicar el 4º, la app lo bloquea con el aviso correspondiente: pasa otro a borrador o mejora el plan. En el plan gratis, los bloques muestran una insignia discreta "Powered by Combora".
  • Pro ($14.99/mes): packs publicados ilimitados y sin insignia.
  • Plus ($39.99/mes): todo lo de Pro, más soporte prioritario, importación/exportación CSV masiva (hasta 200 packs por archivo) y el acceso para desarrolladores (documentación del contrato para storefronts headless y a medida).

La facturación va por Shopify (Managed Pricing) — se gestiona y cancela desde la propia página de Planes. Las tiendas fundadoras (las primeras 100 instalaciones) conservan el producto completo gratis para siempre.

18Diagnóstico y soporte

Diagnóstico (la segunda pestaña de Ayuda) es tu primera parada cuando algo no cuadra — y lo que soporte te pedirá si abres un ticket. Combora registra automáticamente, por tienda, todo lo que falla por debajo (en el servidor y en tu tienda online) aunque el cliente nunca lo vea, y este panel lo pone a tu alcance. No guarda ningún dato de tus clientes.

Pestaña Diagnóstico con chequeos de salud, registro e informe
La pestaña Diagnóstico: chequeos de salud arriba, el registro de eventos con filtros en medio y el informe de soporte abajo.

18.1 Chequeos de salud

El estado en vivo de lo que soporte pregunta primero, verificado contra Shopify en cada carga:

ChequeoQué verifica
PacksErrores de sincronización y packs publicados con cambios sin publicar (editaste y no pulsaste "Actualizar pack").
Descuento automático en ShopifyQue el descuento "Combora" existe y está ACTIVO — es el que cobra los precios en el checkout.
Índice publicado de la tiendaQue los datos públicos que leen los bloques del tema están al día (packs en vivo vs. esperados).
App embed Combora GiftQue el motor del regalo está activado en tu tema.
Descuento aplicado en pedidos recientesPedidos de los últimos 7 días con pack: si TODOS llegaran sin descuento, algo falla en el checkout.
Canal de errores de la tiendaQue los bloques de tu tienda pueden reportar fallos aquí (fecha del último evento recibido).
Tareas en segundo planoTrabajos nocturnos fallidos.
"Desconocido" no es una alarma: significa que ese chequeo no pudo verificarse en este momento (por ejemplo, el canal de la tienda antes de recibir su primer evento). Un problema real se marca en rojo.

18.2 Registro de eventos

Cada entrada es algo que pasó y quedó guardado: un fallo al publicar, un regalo que Shopify rechazó añadir (con el motivo exacto), un descuento que colisionó con otro, un webhook que falló… Filtra por nivel (Info = esperado pero relevante, como el límite del plan; Aviso; Error) y por área (publicación, descuentos, plan y facturación, tienda, sincronización…). Un registro vacío es buena señal: solo se llena cuando algo va mal. Los eventos se conservan 30 días.

Privacidad — qué se registra y qué no. El registro guarda únicamente códigos técnicos de error: el estado HTTP, el pack y la variante afectados y el motivo que devuelve Shopify. Nunca se registra información de tus clientes: ni direcciones IP, ni nombres, ni emails, ni identificadores de navegación ni cookies — un cliente que compra sin problemas no genera ningún registro. Además hay topes automáticos (máximo diario por tienda) y todo se borra solo a los 30 días. Si tu tienda recibe una solicitud de borrado de datos (GDPR), este registro no contiene nada que borrar, y al desinstalar la app se elimina íntegro junto con el resto de tus datos.

18.3 El informe de soporte

Un único documento con todo lo que hace falta para diagnosticar tu tienda de una pasada: los chequeos de salud, tu plan y configuración (sin datos sensibles), el estado de publicación de cada pack y los últimos eventos. Cuando contactes con soporte, pulsa Copiar informe (o Descargar como archivo) y adjúntalo al ticket — con eso, quien te atiende ve exactamente lo que pasó sin pedirte capturas ni accesos.

  • El informe no incluye datos de clientes ni claves: solo salud, configuración de packs y eventos técnicos.
  • Si el botón de copiar no funciona en tu navegador, el texto queda seleccionado — pulsa Ctrl+C (Cmd+C en Mac) — o usa la descarga.
Para desarrolladores: los bloques de la tienda reportan sus fallos a /apps/combora/log (App Proxy firmado por Shopify). Es un canal interno de soporte con catálogo cerrado de códigos y límite diario — no es parte del contrato público del anexo 21.

19Limitaciones y reglas importantes

La referencia única de límites, verificados contra el código de la app:

Límite / reglaValorQué pasa al tocarlo
Packs publicados (plan Gratis)3La publicación del 4º se bloquea con aviso. Los borradores no cuentan.
Componentes de un pack fijo30El editor no deja añadir más.
Productos de un combo (aplanados)50 entradasEl editor muestra el consumo ("Usa X de 50") y bloquea el exceso.
Colecciones por selector100Validación al guardar.
Combinación del regalo (GWP)2–5 artículosValidación al guardar.
Título como mensaje de descuento100 caracteresSe recorta el texto mostrado en el checkout (el título completo se conserva).
Generar desde colección100 borradoresSe recorta y lo avisa.
Importación CSV200 filasSe recorta y lo avisa para dividir el archivo.
Ofertas visibles por bloque1–8 (por defecto 3)Ajustable en cada bloque del tema; prioriza las ofertas que declaran precio/ahorro.
Configuración total publicada≈9,9 KBCon muchísimos packs enormes a la vez, los más nuevos quedarían publicados sin precio activo hasta liberar espacio (caso extremo; la app prioriza los packs más antiguos).

Reglas de dinero (siempre exactas)

  • Los porcentajes truncan hacia abajo el descuento (nunca se redondea a favor de cobrar de más).
  • Los importes y precios fijos se reparten entre líneas con resto exacto: la suma de las partes siempre iguala el total.
  • Los decimales dependen de la moneda de la tienda (JPY sin decimales, BHD con tres…) — nunca se asume "2 decimales".
  • El precio cobrado lo calcula Shopify en el checkout con la configuración publicada. Lo que muestran los bloques del tema es informativo.

Otras reglas

  • Las suscripciones están bloqueadas en líneas de pack salvo opt-in explícito (apartado 4.5).
  • El regalo de un GWP no se anuncia en la ficha del propio producto-regalo (un premio no es un gancho).
  • Los packs publicados fuera de su ventana de programación no aplican descuento (se reactivan solos).

20Solución de problemas

No veo la oferta en la tienda
① ¿El pack está Publicado (no borrador) y dentro de su ventana de fechas? ② ¿Añadiste el bloque correcto a la plantilla (tarjeta "Dónde aparece" del editor)? ③ Si editaste un pack publicado, ¿pulsaste Actualizar pack?
El regalo no se añade solo
① ¿Está activado el app embed Combora Gift? ② ¿El carrito cumple la condición contando solo lo que califica (el regalo no cuenta)? ③ ¿El cliente lo quitó a mano en esta sesión? ④ ¿El regalo tiene stock?
El descuento del carrito no coincide con lo que esperaba
Recuerda la regla: solo la mejor oferta por línea. Si dos packs compiten por el mismo artículo, gana el que más descuenta (y en empate, el más antiguo). Las sumas solo ocurren dentro de un combo.
Publiqué y dice "límite del plan"
El plan Gratis permite 3 packs publicados a la vez. Pasa otro a borrador o mejora el plan.
La barra de progreso del regalo no aparece
Se muestra en la plantilla del carrito (bloque Combora gift progress) y solo para ofertas cuyo criterio puede evaluarse en el navegador; con "qué cuenta = colecciones" no se muestra, aunque el regalo funciona igual.
El selector de casillas no aparece en mix / caja
Solo se pinta cuando el grupo elegible son variantes específicas. Con colección o toda la tienda, el cliente añade productos con normalidad y el descuento entra al calificar.
Errores al importar CSV
Cada fila fallida se lista con su motivo. Corrige esas filas y vuelve a ejecutar solo con ellas — las filas buenas ya se crearon.
Sospecho que un descuento quedó "huérfano"
Ajustes → Sincronizar descuentos repara el estado. Nunca edites a mano el descuento "Combora" en la sección Descuentos de Shopify.

21Anexo para desarrolladores: el contrato público

Combora publica los datos de tus packs en tu tienda como metaobjetos y metafields con el namespace combora, con lectura pública desde el storefront. Cualquier desarrollador puede construir una UI 100% propia leyendo estos datos desde Liquid o la Storefront API — sin llamar a ninguna API de la app. Este contrato es versionado y solo-aditivo (versión actual: public.v1): los campos existentes nunca se renombran ni se retipan.

20.1 Qué se crea al instalar

La instalación aprovisiona las definiciones (los "esquemas") — visibles en Configuración → Metafields y metaobjetos y en Contenido → Metaobjetos:

  • Metaobjetos: combora_bundle (el pack), combora_component (cada línea de componente) y combora_tier (cada nivel de volumen/umbral). Los tres con acceso storefront PUBLIC_READ, publicables y traducibles.
  • Metafields de tienda: combora.index y combora.manifest (JSON, lectura pública).
  • Metafield de producto: combora.bundles (list.metaobject_referencecombora_bundle) — el índice inverso producto → sus packs.
Contenido → Metaobjetos con las tres definiciones Combora
Contenido → Metaobjetos: las tres definiciones, "Added by Combora", con sus entradas.
Definición del metafield de producto Combora bundles
El metafield de producto Combora bundles (tipo Metaobject), en uso en los productos que participan en packs.
Definiciones de metafields de tienda index y manifest
Los dos metafields de tienda: Combora bundle index y Combora contract manifest (JSON).

20.2 Qué pasa al publicar / actualizar / retirar

EventoEfecto en el contrato
Publicar un packSe crean/actualizan sus metaobjetos (hijos primero, padre después, con handles deterministas), se escribe el metafield combora.bundles de cada producto participante, se siembran las traducciones de los campos traducibles en los 7 idiomas, y al final se regeneran combora.index y combora.manifest. El índice nunca anuncia un pack cuya escritura falló.
Actualizar packRe-sincronización idempotente controlada por revisión: solo escribe lo que cambió. Un componente eliminado se desengancha del padre antes de borrarse (el storefront nunca ve una referencia colgante).
Pasar a borradorEl metaobjeto pasa a estado draft (deja de resolverse en storefront), el pack sale del índice y su precio se apaga. La configuración se conserva.
EliminarSe borran sus metaobjetos, se limpia combora.bundles en sus productos y, si era un pack fijo, se retira el producto padre.
Desinstalar la appLos metaobjetos y metafields combora son propiedad de la tienda y permanecen (tu tema no se rompe; los datos quedan congelados en su último estado). Los metafields privados $app:* los elimina Shopify automáticamente y el descuento "Combora" queda inerte. Al reinstalar, la app reutiliza y reconcilia todo — no se duplica nada.

20.3 combora_bundle campo a campo

CampoTipoTraducibleContenido
titletextoTítulo en tienda (requerido).
descriptionrich textDescripción con formato (opcional).
badge_labeltextoLa etiqueta ("Mejor valor").
cta_labeltextoTexto del botón (opcional).
disclaimerrich textCondiciones (opcional).
bundle_typetexto (choices)noUno de: fixed · mix_and_match · volume · bogo · gwp · build_a_box · fbt · combo.
min_items / max_itemsenteronoMix (mín/máx) y arma-tu-caja (tamaño en min_items).
thresholdenteronoUmbral del GWP en unidades menores (centavos).
discount_valuejsonno{"kind":"percentage","bps":1500} (basis points: 1500 = 15%) o {"kind":"fixed_amount","amount":500} (unidades menores).
configjsonnoEscalares por tipo: price (fixed en modo precio), buy_qty/get_qty (bogo), gift_variant/combination/qualify (gwp), slots/box_price (caja), anchor_variant (fbt), eligible (descriptor del pool), of (combo).
componentslista de referenciascombora_component (variant, quantity, role: component/option/anchor/gift/suggestion, position, label…).
tierslista de referenciascombora_tier (min_qty, discount_value, position, tier_label…).
productreferencia a productonoProducto ancla (el padre del fixed, el principal del FBT).
revision / contract_versionentero / textonoRevisión publicada y versión del contrato (public.v1).
Entrada combora_bundle en el admin
Una entrada real de combora_bundle en Contenido → Metaobjetos: título, estado Active, handle determinista combora-bundle-{id}.
Campos discount_value, components, anchor, contract version
La misma entrada: discount_value como JSON en basis points, las referencias a componentes, el producto ancla y contract_version = public.v1.
No edites estas entradas a mano. Son una proyección de la configuración de la app: la sincronización nocturna detecta y repara cualquier cambio externo (entradas y definiciones).

20.4 El descriptor eligible

Cuando el pool de un pack no enumera variantes (colección o toda la tienda), config lleva un descriptor con la misma forma en todos los tipos:

{ "mode": "all" | "products" | "collections" | "variants",
  "variants":   ["gid://shopify/ProductVariant/…"],
  "products":   ["gid://shopify/Product/…"],
  "collections":["gid://shopify/Collection/…"] }

Ojo: los hijos role:"option" de un pool por colección son una foto tomada al publicar; la pertenencia viva (y el precio) la resuelve siempre la Function en el checkout.

20.5 combora.index y combora.manifest

shop.metafields.combora.index — la tabla de ruteo de packs publicados (existe para que nunca tengas que iterar metaobjects.combora_bundle.values, que Liquid recorta a 50 en silencio):

{ "schema": 1, "revision_highwater": 128, "generated_at": "…",
  "bundles": [
    { "id": 8123, "handle": "combora-bundle-8123", "type": "fixed",
      "gid": "gid://shopify/Metaobject/…", "status": "active", "revision": 42 }
  ] }

shop.metafields.combora.manifest — el descriptor del contrato que una herramienta lee una vez: contract_version, contadores y los GIDs de las tres definiciones.

20.6 Leerlo desde Liquid

{%- comment -%} En una ficha de producto: los packs de ESTE producto {%- endcomment -%}
{%- for bundle in product.metafields.combora.bundles.value -%}
  <h3>{{ bundle.title.value | escape }}</h3>
  {%- if bundle.badge_label.value != blank -%}
    <span class="badge">{{ bundle.badge_label.value | escape }}</span>
  {%- endif -%}
  <ul>
    {%- for component in bundle.components.value -%}
      <li>{{ component.quantity.value }}× {{ component.label.value | escape }}</li>
    {%- endfor -%}
  </ul>
{%- endfor -%}

{%- comment -%} O por handle directo, en cualquier plantilla {%- endcomment -%}
{%- assign bundle = metaobjects.combora_bundle['combora-bundle-8123'] -%}

Ambas rutas son lecturas acotadas (lista propia del producto o handle directo) — jamás el .values global.

20.7 Leerlo desde la Storefront API (localizado)

query BundleByHandle @inContext(language: FR) {
  metaobject(handle: { type: "combora_bundle", handle: "combora-bundle-8123" }) {
    title:       field(key: "title")       { value }
    badge_label: field(key: "badge_label") { value }
    components:  field(key: "components") {
      references(first: 25) {
        nodes { ... on Metaobject {
          label:    field(key: "label")    { value }
          quantity: field(key: "quantity") { value }
        } }
      }
    }
  }
}

@inContext devuelve las traducciones sembradas por la app; lo no traducido cae al idioma base automáticamente.

20.8 Usos posibles

  • UI de bundle 100% a medida en el tema, sin los bloques de Combora, leyendo título, badge, componentes y ahorro del metaobjeto.
  • Landing de campañas: una página que lista los packs activos desde combora.index y pinta cada uno por handle.
  • Headless / Hydrogen: misma lectura vía Storefront API con localización por mercado.
  • Integraciones (feeds, apps de recomendación): el manifest declara la versión del contrato y dónde está todo.

20.9 Reglas para el desarrollador

  • El precio es de la Function. Los campos del metaobjeto son display: no sumes discount_value de un combo ni recalcules precios en el tema — el checkout manda.
  • Solo-aditivo: pueden aparecer campos nuevos; los existentes no cambian. Programa lecturas tolerantes a campos desconocidos.
  • Combos: agrupa los hijos por position dividido entre 1000 (cada suboferta ocupa un tramo de 1000) o por config.of[].index — nunca por role, que puede repetirse.
  • Privado ≠ contrato: los metafields $app:runtime, $app:fnvars y $app:validation del descuento son internos de las Functions, sin acceso storefront, y su forma puede cambiar sin aviso. No construyas sobre ellos.
  • El detalle exhaustivo (definiciones JSON, semántica del sync, decisiones congeladas) está en docs/CONTRATO-PUBLICO.md del repositorio.

22Registro de incidencias de esta edición

Durante la elaboración del manual se probó cada flujo en una tienda real. Todo lo documentado arriba refleja el comportamiento verificado. Se detectaron dos desviaciones, anotadas aquí y pendientes de corrección (el manual describe el comportamiento correcto previsto):

#HallazgoImpactoEstado
I-01La barra de progreso del regalo (y el auto-add) excluyen del gasto que califica las líneas pagadas de un producto que casualmente es la variante-regalo de otra oferta. El cálculo de precios del checkout solo excluye el regalo de la propia oferta, así que en ese caso el progreso mostrado puede quedarse corto respecto al descuento real. Caso borde: solo si un cliente compra (pagando) un producto que es regalo de otra oferta activa. El precio cobrado siempre es correcto; lo afectado es la predicción visual/auto-add. Corregida: el pool calificante ahora excluye solo las líneas auto-regalo y la variante-regalo de la propia oferta (paridad con el cálculo del checkout). Activa en la tienda tras el siguiente shopify app deploy.
I-02En la importación CSV con el admin en español, el detalle de algunos errores por fila llega en inglés ("percentage \"250\" exceeds 100") dentro de la frase localizada. Cosmético. Corregida: los motivos del descuento inválido son ahora códigos traducidos en los 7 idiomas (y "archivo vacío" / "cabecera incompleta" también).

Manual elaborado y verificado el 15 de agosto de 2026 sobre la tienda de desarrollo app-bundle-6pofnlbj, con compras de prueba reales (pasarela Bogus). Las capturas están en docs/manual/img/.