Combora

Combora — Manuale utente

La guida completa all'app di bundle e sconti per Shopify: gli 8 tipi di offerta, ogni opzione di configurazione, ciò che il Suo cliente vede sul negozio online, e un'appendice tecnica per gli sviluppatori. Ogni screenshot proviene dal negozio demo pubblico di Combora — lo stesso che può provare Lei stesso — catturato ad agosto 2026, e gli screenshot dell'app mostrano l'interfaccia nella lingua di questo manuale.

1Che cos'è Combora

Combora crea bundle e offerte automatiche nel Suo negozio Shopify: raggruppa i prodotti, applica lo sconto corretto nel carrello e al checkout, e mostra l'offerta nel Suo tema tramite blocchi già pronti. Lei configura l'offerta nell'admin, e lo sconto viene calcolato da una Shopify Function all'interno del checkout stesso — il prezzo addebitato è quello che calcola la piattaforma stessa, non uno script nel browser.

Esistono 8 tipi di bundle. Questa tabella La aiuta a scegliere:

TipoCosa faQuando usarlo
Bundle fissoUn insieme chiuso di prodotti con un prezzo bundle o uno sconto. Crea un prodotto acquistabile con un clic nel Suo catalogo.Kit e set curati: "il duo", "il kit di partenza".
Mix & matchIl cliente sceglie N articoli da un gruppo e ottiene uno sconto."Scegli 3 t-shirt e risparmia il 20%".
Sconto per volumeFasce: più ne compra, più risparmia (2+ → 10%, 4+ → 20%…).Aumentare le unità per ordine di un prodotto o gruppo.
Compra X ricevi Y (BOGO)Compra X unità e le successive Y arrivano con un premio (gratis, % di sconto o prezzo fisso)."Buy 2, get 1 free".
Regalo con l'acquisto (GWP)Aggiunge automaticamente un regalo gratuito quando il carrello soddisfa una condizione."Regalo a sorpresa per ordini superiori a $50".
Componi la scatolaIl cliente riempie una scatola di dimensione fissa; viene addebitata con uno sconto o a un prezzo scatola.Scatole da 4, 6, 12… snack, candele, birre.
Complementi (FBT)"Acquistati spesso insieme": un prodotto principale suggerisce prodotti aggiuntivi scontati.Cross-sell nella pagina prodotto.
ComboCombina due o più delle offerte sopra in un unico bundle; all'interno di un combo si sommano.Campagne: "volume + regalo a partire da $1,000".
La regola d'oro tra bundle diversi: ogni articolo del carrello riceve solo la migliore offerta — i bundle non si sommano mai tra loro. L'unica eccezione è il combo, le cui sotto-offerte si sommano tra loro. Dettagli completi nella sezione 14.
1 · Configuri la Sua offerta nell'editor di Combora, poi prema Pubblica 2 · Un'unica configurazione pubblicata la stessa fonte per tutto ciò che segue 🎨 Il Suo tema — MOSTRA i widget disegnano l'offerta: prezzo del bundle, fasce, barra del regalo… (solo informativo — non addebita mai) 🔒 Il checkout di Shopify — ADDEBITA una Shopify Function calcola lo sconto all'interno del checkout stesso, senza script nel browser = il prezzo pubblicizzato e quello addebitato COINCIDONO SEMPRE
Entrambi i percorsi della Sua offerta provengono dalla stessa configurazione pubblicata: il tema la mostra e il checkout la addebita. Per progettazione non possono conteggiare cose diverse — il reclamo numero uno per questa categoria di app ("lo sconto non corrispondeva al checkout") semplicemente non può accadere qui.

Se è indeciso tra i tipi, l'app stessa offre una guida: sotto Crea bundle, il link "Non è sicuro di quale scegliere?" apre una procedura guidata, e ogni tipo ha un pannello "Guarda come funziona" con esempi.

Finestra Non è sicuro di quale scegliere? con consigli in base all'obiettivo
Non è sicuro di quale scegliere? La procedura guidata della galleria consiglia un tipo in base al Suo obiettivo.
Pannello laterale Guarda come funziona per il Bundle fisso
Ogni tipo ha il proprio pannello "Guarda come funziona" con un esempio concreto.

2Primi passi

2.1 Cosa crea l'app all'installazione

Installare Combora non cambia nulla di visibile nel Suo negozio. In background l'app prepara le strutture dati dove pubblicherà i Suoi bundle (metaobject e metafield con il prefisso combora — il dettaglio tecnico è nell'appendice per sviluppatori) più un unico sconto automatico chiamato "Combora" sotto Sconti, che è quello che applica ogni prezzo. Non lo elimini né lo modifichi manualmente: l'app lo mantiene da sola.

2.2 Attivare il motore dei regali (app embed)

Se intende usare Regalo con l'acquisto (o combo con un regalo), attivi l'app embed Combora Gift: Negozio online → Personalizza → Impostazioni tema → App embed → Combora Gift. È il componente che aggiunge e rimuove il regalo dal carrello automaticamente. Senza di esso lo sconto sul regalo sarebbe comunque corretto, ma il prodotto regalo non si aggiungerebbe da solo.

2.3 Aggiungere i blocchi al Suo tema

Ogni tipo di bundle viene mostrato sul negozio online tramite un blocco del tema. Li aggiunge una sola volta sotto Negozio online → Personalizza, nel template corrispondente:

BloccoTipi che mostraDove aggiungerlo
Combora bundleBundle fisso e Combo ("Available bundles")Template prodotto
Combora mix & matchMix & match · Componi la scatolaTemplate prodotto
Combora volume tableVolume · Compra X ricevi YTemplate prodotto
Combora complementsComplementiTemplate prodotto (e carrello)
Combora gift offerRegalo con l'acquisto (l'offerta stessa)Template prodotto
Combora gift progressBarra di progresso del regaloTemplate carrello
Combora Gift (app embed)Il motore che aggiunge/rimuove il regaloApp embed (intero negozio)

Non deve memorizzarlo: ogni editor di bundle ha una scheda "Dove viene mostrato" che indica il blocco giusto, più un link "Anteprima sul Suo tema live" che apre l'editor del tema con quel blocco già pronto per l'inserimento nel template corretto.

Stile: l'aspetto dei widget si progetta dall'app, nello studio di design (sezione 13): preset, ordine degli elementi e stile per elemento, con un'anteprima live. Le impostazioni del blocco stesso nell'editor del tema (colore accento e raggio degli angoli) continuano a funzionare e sono ciò che prevale con il preset "Editor del tema". Ciò che si configura solo sul blocco è dove appare e il numero massimo di offerte da mostrare nei blocchi prodotto (1–8, predefinito 3).

3Tour dell'app

L'app si trova sotto App → Combora. Il menu ha sei voci — Home, Bundle, Statistiche, Piani, Aiuto e Impostazioni — più la chat di assistenza, presente in ogni schermata:

Home

La schermata di benvenuto e il polso della Sua installazione. Mentre sta ancora configurando mostra una checklist in tre passaggi — creare il primo bundle, pubblicarlo e (se la Sua offerta è un regalo con l'acquisto) attivare il motore dei regali nel Suo tema. La checklist non è decorativa: ogni passaggio si spunta da solo solo quando è effettivamente avvenuto nel Suo negozio, il pulsante d'azione compare solo sul passaggio in sospeso, e se in seguito annulla la pubblicazione di tutto la checklist torna a riflettere la realtà. A completamento avvenuto, Home festeggia con un link diretto per visualizzare il Suo negozio (può chiudere l'avviso quando vuole).

Sotto la checklist: i Suoi bundle più recenti con il loro stato, una fascia di attenzione se un bundle necessita revisione (per esempio perché ha archiviato un prodotto che ne faceva parte — l'app lo rileva da sola e lo segnala senza annullare la pubblicazione di nulla), e una striscia con il Suo piano attuale.

Schermata Home con la checklist di configurazione
La scheda Home con la configurazione a metà: il passaggio 1 (creare) e il passaggio 3 (attivare il motore dei regali) sono già completati, e il passaggio 2 (pubblicare) mostra il suo pulsante d'azione. Sotto, i bundle recenti con il loro stato reale.

Bundle

L'elenco di tutti i Suoi bundle: ricerca per nome, filtro per stato (Pubblicato / Bozza), azioni per riga (duplica, pubblica/sposta in bozza, elimina) e selezione multipla con azioni in blocco. Tutto viene creato da qui con Crea bundle.

Elenco bundle con stati e azioni
La scheda Bundle: ogni riga mostra tipo, stato e ultimo aggiornamento (la data ha un tooltip), più le azioni di riga. Un bundle pubblicato in modalità test aggiunge il badge Modalità test accanto al suo stato.

Statistiche

Metriche di rendimento dei Suoi bundle sugli ordini reali: fatturato attribuito, % di ordini con un bundle, risparmio erogato, valore medio dell'ordine e un grafico temporale. Dettagli nella sezione 17.

Piani

Il Suo piano attuale e le opzioni di aggiornamento. Il piano Gratuito consente 3 bundle pubblicati alla volta; i piani a pagamento non hanno limiti (sezione 18).

Pagina Piani
La scheda Piani: il Suo piano attuale in alto, la promessa di prezzo fisso, e il confronto Gratuito ($0) · Pro ($14.99) · Plus ($39.99) con ciò che include ciascuno.

Aiuto

Domande frequenti e spiegazioni dei concetti (arbitraggio tra bundle, regali, blocchi).

Pagina Aiuto
La scheda Aiuto.

Diagnostica (una scheda dentro Aiuto)

Il pannello di salute e assistenza si trova come scheda dentro Aiuto (selettore "Guide | Diagnostica" in alto): controlli live dell'intera installazione, il registro eventi e il rapporto di assistenza che copia quando qualcosa va storto (sezione 19).

Chat di assistenza (bolla fluttuante)

Nell'angolo in basso a destra di ogni schermata c'è una bolla della chat 💬 per parlare con l'assistenza direttamente: conversazioni per argomento, cronologia, e un avviso se l'assistenza è disponibile o assente. Viene condiviso solo ciò che scrive Lei — mai i dati dei Suoi clienti.

Impostazioni

Lingua dell'app (7 lingue), Design del widget (il modello di stile per l'intero negozio — sezione 13), sincronizzazione manuale degli sconti e accesso sviluppatori.

Pagina Impostazioni
La scheda Impostazioni: lingua dell'app, Design del widget e sincronizzazione sconti. In alto, l'avviso informativo che nel negozio esiste un altro sconto automatico.

4Anatomia dell'editor

Ogni tipo condivide lo stesso editor; cambia solo la sezione dei prodotti e del prezzo. Un bundle appena creato ha questo aspetto:

Galleria dei tipi durante la creazione di un bundle
Crea bundle: la galleria degli 8 tipi, con i punti di accesso alla creazione in blocco in alto.
Editor vuoto con la checklist Prima di pubblicare
L'editor appena aperto: la barra laterale destra mostra lo stato e la checklist "Prima di pubblicare o salvare questo bundle" con ciò che manca; finché non è completa, Pubblica e Salva sono disabilitati.

4.1 Informazioni di base

Nome del bundle
Interno. Lo vede solo Lei; serve per trovarlo nel Suo elenco.
Titolo sul negozio online
Ciò che il cliente vede come nome dell'offerta nel carrello e al checkout. È traducibile. È anche il testo della riga di sconto (troncato a 100 caratteri).
Testo del badge
Un badge breve facoltativo ("Miglior valore") che il Suo tema può mostrare come evidenza.

4.2 Pianificazione

Date di inizio e fine facoltative. Vuote = l'offerta va live alla pubblicazione e non scade mai. Un bundle pubblicato fuori dalla sua finestra smette di applicare lo sconto automaticamente e lo applica di nuovo una volta rientrato nella finestra, senza che Lei debba toccare nulla.

4.3 Prodotti

A seconda del tipo sceglie prodotti specifici (e, all'interno di ciascun prodotto, può selezionare solo alcune sue varianti) oppure una collezione. L'ambito "qualsiasi prodotto del negozio" esiste solo nel regalo con l'acquisto, come condizione. Il selettore è quello standard di Shopify:

Selettore prodotti standard di Shopify
Il selettore standard di prodotti/varianti di Shopify all'interno dell'editor.
Collezioni: un bundle che punta a una collezione si aggiorna da solo, a due velocità che vale la pena conoscere: il prezzo è sempre live — un prodotto che entra oggi nella collezione ottiene già lo sconto al checkout, senza attese — e l'elenco visibile nel widget (le opzioni che il cliente vede tra cui scegliere, e quali pagine prodotto mostrano il blocco) si aggiorna automaticamente ogni notte, oppure istantaneamente se ripubblica il bundle con il pulsante "Aggiorna bundle". Un prezzo diverso da quello addebitato non viene mai pubblicizzato. Massimo 100 collezioni per selettore.

4.4 Prezzo

Ogni tipo ha la propria sezione (percentuale, importo, prezzo fisso, fasce, premio…). È documentata nel capitolo di ciascun tipo. In ogni caso il prezzo addebitato viene calcolato da Shopify al checkout a partire dalla configurazione pubblicata: ciò che mostrano i blocchi è informativo.

4.5 Abbonamenti

Per impostazione predefinita un cliente non può acquistare un articolo del bundle in abbonamento (questo protegge il checkout da prezzi di abbonamento mescolati con sconti bundle). Nei tipi in cui ha senso (mix & match, componi la scatola e regalo con l'acquisto) c'è un'opzione avanzata, "Consenti abbonamenti in questo bundle (avanzato)"; attivandola l'editor mostra un avviso che ricorda cosa implica.

4.6 La barra laterale destra (e due sezioni del corpo)

Oltre a Salva (e Salva come bozza su un bundle non ancora pubblicato), con la barra Modifiche non salvate / Salva / Annulla in alto, l'editor organizza il resto così:

Stato + azione (barra laterale)
Pubblica (o Aggiorna bundle se è già pubblicato) e Sposta in bozza. Pubblicare rende l'offerta live; spostare in bozza la ritira mantenendo intatta l'intera configurazione.
Modalità test (corpo)
Selezioni "Pubblica in modalità test" per provare il bundle senza esporlo ai Suoi clienti. I widget si mostrano solo nell'editor del tema — apra lì il modello di prodotto e il bundle appare esattamente dove starà. Nel Suo negozio non compaiono mai, nemmeno tramite il link di anteprima di un tema bozza. Mentre il bundle è in modalità test lo sconto viene calcolato solo per i clienti con il tag combora-test; per tutti gli altri il bundle potrebbe anche non esistere. Per percorrere l'intero checkout, aggiunga quel tag al Suo cliente di prova (Admin → Clienti) e acceda al negozio online come lui. Deselezioni la casella e prema Aggiorna bundle e diventa live, applicandosi a chiunque soddisfi le condizioni. Nell'elenco, un bundle in modalità test porta il badge Modalità test.
Visibilità nel catalogo (corpo)
Solo bundle fissi: se il prodotto padre del bundle appare nel Suo catalogo o no (sezione 5).
Prima di pubblicare (barra laterale)
La checklist che blocca la pubblicazione finché non sono completati gli elementi essenziali (titolo, prodotti, prezzo…).
Cosa vede il Suo cliente (barra laterale)
Finché all'offerta manca ancora qualcosa, questa scheda spiega cosa manca e mostra un'anteprima del contenuto. Una volta completata l'offerta, la scheda lascia il posto alla vera anteprima del widget sotto Vedi anteprima. L'aspetto finale dipende dal Suo tema.
Stile anteprima (barra laterale, solo su bundle già creati)
Indica il design del widget attivo per questo bundle e offre Vedi anteprima (il widget a grandezza naturale in una finestra modale) e Personalizza design (lo studio di design di questo bundle: preset, ordine degli elementi e stile per elemento — sezione 13). Su un bundle appena creato compare dopo il primo salvataggio.
Dove viene mostrato (barra laterale)
Il blocco del tema che rende questo tipo e il link diretto all'editor del tema.

Un bundle con pianificazione mostra anche il badge della sua finestra (Pianificato / Attivo / Terminato) e il pulsante Rimuovi pianificazione per tornare ad "attivo alla pubblicazione".

4.7 Avvisi che l'editor può mostrare

  • Sovrapposizione: se i prodotti del bundle sono già presenti in altri bundle pubblicati, un banner avverte: "Al checkout si applica solo la migliore offerta per riga: i bundle non si sommano". Non è un errore — è un'informazione (vedi sezione 14).
  • Nessun risparmio / prezzo 0: in un bundle fisso con un prezzo bundle, se il prezzo scelto non fa risparmiare nulla (o è 0), l'editor lo segnala prima che Lei pubblichi.
  • Gruppo vuoto: una collezione senza prodotti idonei viene mostrata come nota nell'anteprima e, se prova a pubblicare, come errore con la spiegazione.

4.8 Modificare un bundle pubblicato

Quando modifica un bundle pubblicato, le Sue modifiche vengono salvate senza raggiungere il Suo negozio. L'editor mostra la Sua modifica, i Suoi clienti continuano a vedere la versione pubblicata al prezzo pubblicato, e il bundle è contrassegnato come Modifiche non pubblicate nella Sua lista. Prema “Aggiorna bundle” per pubblicarle, o le scarti dall'avviso nell'editor. In questo modo può preparare le modifiche con calma. "Sposta in bozza" ritira l'offerta dal negozio online immediatamente; pubblicarla di nuovo la ripristina esattamente com'era.

5Bundle fisso

Un insieme chiuso di prodotti venduto come una singola unità. È l'unico tipo che crea anche un prodotto acquistabile con un clic nel Suo catalogo: un prodotto "padre" (un bundle nativo di Shopify) i cui componenti si espandono automaticamente al checkout.

5.1 Configurazione

  1. Prodotti: aggiunga i componenti (varianti specifiche) e la quantità di ciascuno. Massimo 30 componenti per bundle.
  2. Prezzo — due modalità che si escludono a vicenda:
    • Prezzo bundle fisso: digita il prezzo totale (per es. $1,299.00). Il risparmio viene calcolato rispetto alla somma dei componenti.
    • Applica uno sconto: una percentuale o un importo sulla somma dei componenti.
  3. Visibilità nel catalogo: i bundle fissi sono prodotti Shopify reali, quindi decide se il bundle appare anche nel Suo catalogo oppure è raggiungibile solo dal widget:
    • Nascosto — solo dal widget (predefinito): il bundle non compare nelle collezioni, nella ricerca del negozio online o nei consigliati. La sua pagina prodotto resta attiva affinché il pulsante del widget funzioni.
    • Visibile — un normale prodotto del catalogo: compare nelle collezioni e nella ricerca come qualsiasi altro prodotto.
  4. Pubblica. Alla pubblicazione, Combora crea (o aggiorna) il prodotto padre nel Suo catalogo — e, se il pack non ha ancora un'immagine, vi copia quella del primo componente, in ENTRAMBE le modalità di visibilità (un pack nascosto compare comunque nel carrello, al checkout e nelle email dell'ordine). Non sovrascrive mai un'immagine impostata da Lei; può cambiarla in qualsiasi momento sotto Admin → Prodotti.
Vende tramite POS? Scelga Visibile: un bundle nascosto non compare nemmeno al punto vendita.
Modalità test e Visibilità nel catalogo nell'editor del bundle fisso
Visibilità nel catalogo (solo bundle fissi), subito sotto Modalità test. A destra, la barra laterale con Vedi anteprima e Personalizza design.
Editor del bundle fisso: componenti e prezzo bundle
I componenti con la loro quantità e la sezione Prezzo in modalità "Imposta un prezzo bundle" ($1,299.00 per due snowboard che sommati fanno $1,600.00). L'altra modalità nel menu a tendina è "Applica uno sconto", con una percentuale o un importo.
Bundle fisso pubblicato
Dopo la pubblicazione: stato Pubblicato e il pulsante diventa "Aggiorna bundle".

5.2 Cosa vede il Suo cliente

Scheda Available bundles sulla pagina prodotto
Sulla pagina prodotto di qualsiasi componente, il blocco Combora bundle mostra la scheda del bundle: il contenuto con la relativa quantità come chip, il prezzo bundle ($1,299.00) con il totale barrato ($1,600.00), il risparmio come badge (Save $301.00) e il pulsante verso il prodotto padre.
Pagina del prodotto padre del bundle
Il prodotto padre: la pagina acquistabile del bundle stesso. Attenzione al prezzo che il tema disegna — è la somma dei componenti ($1,600.00); il prezzo bundle viene applicato dalla Function una volta raggiunto il carrello. Può modificarne immagine e descrizione come qualsiasi altro prodotto.
Bundle fisso nel carrello
Nel carrello il bundle è una singola riga: $1,600.00 → $1,299.00, con il badge del bundle. È lì che compare il prezzo bundle.
Checkout con il bundle espanso nei componenti
Al checkout il bundle si espande nei suoi componenti, con lo sconto applicato ed etichettato con il titolo del bundle.
Pagina dell'ordine completato
Un acquisto realmente completato nel negozio demo durante la stesura di questo manuale: $1,299.00 pagati tramite il gateway di test.

5.3 Dettagli e limiti di questo tipo

  • I componenti devono essere varianti con scorte disponibili; il prodotto padre eredita la disponibilità.
  • Il prodotto padre si gestisce da solo: spostare il bundle in bozza o eliminarlo lo ritira dal negozio online (verificato durante la stesura di questo manuale). Non lo elimini manualmente.
  • Per impostazione predefinita il padre è nascosto dal catalogo. Prima che esistesse questa opzione compariva in /collections/all come scheda senza immagine; i bundle già pubblicati sono stati portati automaticamente a "Nascosto". Se preferisce il comportamento precedente, lo imposti su Visibile.
  • Massimo 30 componenti. Il prezzo fisso viene ripartito tra i componenti con arrotondamento esatto (la somma delle parti è sempre uguale al totale).
  • Il bundle fisso si applica anche se il cliente aggiunge i componenti separatamente nelle quantità esatte — il checkout li raggruppa e sconta comunque allo stesso modo.

6Mix & match

Il cliente sceglie almeno N articoli da un gruppo e l'intero gruppo esce scontato.

6.1 Configurazione

  1. Prodotti: il gruppo idoneo può essere prodotti specifici — selezionando, se vuole, solo alcune varianti di ciascuno all'interno del selettore — oppure una collezione (che si aggiorna da sola).
  2. Quantità: il numero minimo di articoli per qualificarsi e, facoltativamente, un massimo (oltre il massimo, gli articoli in eccesso vengono pagati a prezzo pieno).
  3. Sconto: una percentuale o un importo, applicato a ogni articolo idoneo nel carrello una volta raggiunto il minimo.
Editor Mix and match
Editor Mix & match: gruppo idoneo e numero minimo di articoli.
Sezione prezzo del mix
La sezione Sconto del mix: percentuale o importo.
Il selettore visivo compare con ogni ambito. Con varianti specifiche mostra esattamente quelle caselle; con prodotti o una collezione, il blocco Combora mix & match risolve l'elenco delle opzioni al momento della pubblicazione (e lo aggiorna ogni notte, o subito se ripubblica — le due velocità spiegate nella sezione 4.3). Il cliente può anche comporre il bundle aggiungendo prodotti al carrello come al solito: lo sconto scatta al raggiungimento del minimo, che abbia usato o meno il selettore.

6.2 Cosa vede il Suo cliente

Selettore mix con l'elenco delle opzioni e il pulsante disabilitato
Il selettore sulla pagina prodotto: l'elenco delle opzioni con scorrimento proprio e il pulsante disabilitato finché non si raggiunge il minimo.
Selettore mix con 3 selezionati e il pulsante attivo
Al raggiungimento del minimo, le opzioni scelte vengono contrassegnate con un anello accento e la CTA diventa attiva.
Il bundle in questo screenshot ha un design proprio (sezione 13): il pulsante è stato spostato in alto e il contatore di progresso è nascosto. Con il design predefinito, il contatore si trova sopra l'elenco e il pulsante sotto.
Carrello con lo sconto mix applicato su ogni riga idonea
Nel carrello, ogni riga idonea mostra il prezzo ridotto con il badge del bundle ($400.00 → $320.00 e così via, 20% di sconto su ciascuno). Misurato nel negozio demo: tre snowboard, $1,050.00 → $840.00. Un altro bundle può applicarsi nello stesso carrello allo stesso tempo, sulle sue righe — vedi sezione 14.

6.3 Dettagli di questo tipo

  • Un carrello sotto il minimo non viene bloccato: il cliente paga il prezzo pieno finché non si qualifica.
  • Con un massimo impostato, il selettore smette di accettare selezioni una volta raggiunto il limite, e nel carrello solo le prime unità fino al massimo vengono scontate.
  • Le quantità si contano per unità: 3 unità dello stesso prodotto idoneo si qualificano anche per un minimo di 3.

7Sconto per volume

Fasce di prezzo per quantità: "compra almeno 2 → 10%, almeno 4 → 20%". La fascia viene decisa per prodotto: la quantità di ogni prodotto idoneo nel carrello determina la propria fascia, e la fascia raggiunta si applica alle unità di quel prodotto. Esempio con "4+ → 20%": 4 unità dello stesso snowboard → 20% di sconto su tutte e 4; ma 2 unità di uno snowboard + 2 di un altro → ogni prodotto rientra nella fascia 2+ (10%), non nella 4+. Le quantità di prodotti diversi non si sommano tra loro.

7.1 Configurazione

  1. Prodotti: prodotti specifici o una collezione (come nel mix). Se vuole solo alcune varianti di un prodotto, le selezioni all'interno del selettore quando lo sceglie.
  2. Fasce: ogni fascia è "Compra almeno N" + uno sconto (percentuale o importo). Ne aggiunga quante ne servono con "Aggiungi fascia" (fino a 50).
Editor volume con due fasce
Due fasce: 2+ → 10% e 4+ → 20%. L'editor stesso lo spiega: la quantità di ogni prodotto nel carrello ne decide la fascia.

7.2 Cosa vede il Suo cliente

Tabella volume sulla pagina prodotto
Il blocco Combora volume table sulla pagina prodotto: la scala delle fasce, una riga per fascia con il risparmio come badge accento e la fascia più alta evidenziata con un anello.
Carrello con 4 unità e 20% applicato
Con 4 unità nel carrello si applica la fascia del 20%: $4,000.00 → $3,200.00, con il badge del bundle sulla riga.

7.3 Dettagli di questo tipo

  • Si applica solo la fascia più alta raggiunta (le fasce non si sommano).
  • Le fasce possono mescolare tipi di valore (alcune %, altre importo).
  • Un importo di sconto fisso viene ripartito tra le righe in modo proporzionale ed esatto.

8Compra X ricevi Y (BOGO)

Compra X unità e le successive Y unità arrivano con un premio. Il premio può essere gratuito (100%), una percentuale, un importo di sconto o un prezzo fisso per unità.

8.1 Configurazione

Editor BOGO — informazioni di base
L'editor BOGO: il prodotto su cui gira l'offerta e, a destra, la barra laterale con stato e anteprima. Se quei prodotti fossero anche in un altro bundle, in alto comparirebbe l'avviso di sovrapposizione — informativo, non bloccante.
Editor BOGO — quantità da comprare, da ricevere e il premio
Quantità da comprare = 2, quantità da ricevere = 1 e un premio del 100% ("compra 2, ricevi 1 gratis"). Il selettore del premio offre percentuale, importo o prezzo fisso.

8.2 Cosa vede il Suo cliente

Carrello con 3 unità e 1 gratis
Con 3 unità ($300.00 ciascuna): $900.00 → $600.00 — un'unità risulta gratuita, con il badge "Buy 2, get 1 free" sulla riga.

8.3 Dettagli di questo tipo

  • L'offerta si ripete a blocchi interi: con "2+1", 6 unità = 2 gratis; 5 unità = 1 gratis.
  • Il blocco del tema che lo rende è Combora volume table (presenta il "compra X ricevi Y" come una tabella di risparmio).
  • Il premio "prezzo fisso" addebita esattamente quel prezzo per ogni unità premiata.

9Regalo con l'acquisto (GWP)

Aggiunge automaticamente un prodotto regalo (a $0.00) quando il carrello soddisfa la condizione, e lo rimuove se smette di soddisfarla. È il tipo più automatizzato: l'app embed Combora Gift gestisce il regalo senza che il cliente debba fare nulla.

🛒 Il carrello cambia aggiunta, rimozione, quantità… Condizione soddisfatta? spesa · unità · entrambe · combinazione esatta sì 🎁 Regalo dentro si aggiunge da solo, a $0.00, contrassegnato come regalo no ✋ Regalo fuori si rimuove da solo appena la condizione viene meno Se il regalo esaurisce le scorte, l'offerta smette di essere pubblicizzata (mai promettere ciò che non si ha)
Il ciclo automatico del regalo: a ogni cambiamento del carrello il motore rivaluta la condizione e aggiunge o rimuove il regalo senza che né Lei né il cliente debbano fare nulla. E se il regalo esaurisce le scorte, la scheda dell'offerta si nasconde da sola.

9.1 Configurazione

  1. Il regalo: una variante specifica che si aggiunge quando il cliente si qualifica.
  2. Condizione di sblocco — quattro opzioni:
    • Per spesa minima: il carrello raggiunge un importo (per es. $1,000).
    • Per numero di articoli: raggiunge N unità.
    • Spesa e quantità (entrambe): sono richieste entrambe.
    • Portando una combinazione di prodotti: un elenco specifico di articoli (da 2 a 5; un'unità di ciascuno) che devono trovarsi tutti nel carrello.
  3. Cosa conta ai fini della condizione: qualsiasi prodotto del negozio, prodotti specifici, o collezioni.
Editor GWP con la condizione di spesa minima e i prodotti che contano
L'editor: il regalo scelto (una cera da sci da $20.00), la condizione "Per spesa minima" con la soglia a $1,000 e "Cosa conta ai fini della condizione" ristretto a un singolo snowboard, così che solo le sue unità riempiano la barra. Scegliendo invece Qualsiasi prodotto, l'editor aggiunge la casella "Mostra questa offerta regalo su ogni pagina prodotto".

9.2 Cosa vede il Suo cliente

Barra di progresso del regalo sotto la soglia
La barra del blocco Combora gift progress è una scheda con un'icona regalo: dice quanto manca ($650.00 in più su un carrello con uno snowboard da $350.00, quindi la barra è al 35%) e si riempie man mano che il carrello cresce.
Regalo aggiunto automaticamente a $0.00
Al raggiungimento della soglia, il regalo si aggiunge da solo a $0.00 con il badge del bundle, e la barra lo festeggia con l'anello accento. Misurato nel negozio demo: tre di quegli snowboard fanno $1,050.00, superano la soglia di $1,000 e la cera da $20.00 entra gratis — $1,070.00 → $1,050.00. Se il carrello scende sotto la soglia, il regalo si rimuove da solo.

La barra ha quattro stati e, già dal carrello vuoto, nomina il regalo e ciò che conta: prima che il cliente inizi enuncia la regola ("spendi $1,000 su quello snowboard e ricevi la cera gratis"), a metà strada dice cosa manca, al superamento della soglia annuncia il regalo per nome, e se il cliente lo toglie a mano lo dice invece di restare su "in applicazione". Quando contano più di tre prodotti, la barra dice prodotti idonei e aggiunge un pannello "Quali prodotti contano?" che li elenca.

Il testo della barra può scriverlo Lei. L'editor del regalo ha una sezione Messaggio del carrello con tre campi facoltativi: carrello vuoto, a metà strada e regalo sbloccato. Se lascia un campo vuoto, quello stato mantiene il testo standard; se lo compila, il Suo lo sostituisce, con segnaposto da inserire: {{ amount }} (quanto manca), {{ qty }} (articoli mancanti), {{ scope }} (i prodotti che contano), {{ gift }} (il nome del regalo) e {{ threshold }} (la soglia completa). L'editor mostra l'anteprima con le cifre del Suo bundle e non lascia pubblicare un segnaposto sconosciuto o un messaggio oltre 160 caratteri.

9.3 Dettagli e protezioni di questo tipo

  • Il regalo stesso non conta ai fini della spesa qualificante.
  • La soglia si misura sul prezzo di listino di ciò che conta, non su quello che il cliente finisce per pagare: un'altra offerta che sconta quelle stesse righe non la intacca mai. Barra, regalo automatico e checkout leggono lo stesso numero.
  • Se il cliente rimuove il regalo a mano, l'app rispetta la scelta e non lo riaggiunge in quella sessione; la barra del carrello lo dice esattamente ("Regalo rimosso") invece di restare su "in applicazione".
  • Se ritira l'offerta (sposta in bozza, fine della finestra) mentre ci sono carrelli aperti che già avevano il regalo, il motore rimuove da solo quella riga orfana non appena il carrello si aggiorna di nuovo — non si trasforma mai in un addebito.
  • Se il regalo esaurisce le scorte, l'offerta semplicemente non lo aggiunge (non blocca l'acquisto).
  • Protezione anti-addebito: una validazione al checkout impedisce di pagare per un regalo che è contrassegnato come tale ma è arrivato con un prezzo — il cliente non paga mai per errore un articolo segnato come regalo. La validazione agisce solo al checkout, mai durante la navigazione.
  • Quando "cosa conta" sono le collezioni, l'app risolve i prodotti della collezione al momento della pubblicazione (e li aggiorna ogni notte, o subito se ripubblica — le due velocità della sezione 4.3), così la barra di progresso e il regalo automatico funzionano proprio come con prodotti specifici. L'unica eccezione: una collezione enorme (oltre ~150 prodotti) non può essere prevista dal browser — la barra non viene mostrata per quell'offerta, ma il regalo e il prezzo restano corretti (li decide il server).
  • Un regalo il cui "cosa conta" è qualsiasi prodotto del negozio può essere pubblicizzato con il blocco Combora gift offer su ogni pagina prodotto: quando sceglie quell'ambito, l'editor mostra la casella "Mostra questa offerta regalo su ogni pagina prodotto". Disattivata (l'impostazione predefinita), l'offerta è visibile solo nel carrello — la barra di progresso e il regalo automatico funzionano allo stesso modo; attivata, viene anche pubblicizzata con una scheda su ogni pagina prodotto (l'offerta non ha prodotti specifici da selezionare, quindi il blocco la legge dall'indice pubblicato del negozio). L'eccezione deliberata resta la pagina del prodotto regalo stesso: un premio non è un'esca.

10Componi la scatola

Il cliente riempie una scatola di dimensione fissa (per es. 3 articoli) con ciò che sceglie da un gruppo. Ogni scatola completa viene addebitata con uno sconto o a un prezzo scatola chiuso.

10.1 Configurazione

Editor Componi la scatola con un prezzo scatola
Dimensione scatola = 3 su cinque varianti di uno snowboard, con prezzo "Imposta un prezzo scatola" = $1,749.00 (da $2,100.00, quindi $351.00 di sconto — $583.00 per articolo). L'altra modalità nel menu a tendina è una semplice percentuale o importo. Un carrello sotto la dimensione non viene bloccato: si paga il prezzo pieno finché la scatola non è completa.

10.2 Cosa vede il Suo cliente

Usa lo stesso blocco Combora mix & match e lo stesso selettore con contatore della sezione 6: "seleziona 3", un contatore di progresso, una CTA con la quantità. La differenza è il calcolo: qui le scatole vengono addebitate per scatola completa — con una scatola da 3, sei articoli sono due scatole; sette articoli sono due scatole più un articolo a prezzo pieno.

10.3 Dettagli di questo tipo

  • Gruppo idoneo: prodotti specifici (con le loro varianti, se ne seleziona solo alcune) o una collezione (il selettore visivo compare con ogni ambito, come nel mix — con le collezioni l'elenco viene risolto al momento della pubblicazione e aggiornato ogni notte).
  • Il prezzo scatola viene ripartito tra gli articoli in modo esatto; con valute a 0 decimali (JPY) o a 3 decimali (BHD) la ripartizione rispetta la valuta.
  • Supporta l'opzione abbonamenti (sezione 4.5).

11Complementi (acquistati spesso insieme)

Un prodotto principale suggerisce prodotti complementari; se il cliente prende l'insieme, ottiene uno sconto. È il classico "acquistati spesso insieme" sulla pagina prodotto.

11.1 Configurazione

Editor Complementi con prodotto principale e suggerimenti
L'editor: il prodotto principale (l'ancora dove appare l'offerta), i prodotti complementari e lo sconto (25%). La barra laterale mostra l'anteprima del widget con la sua CTA.

11.2 Cosa vede il Suo cliente

Blocco Complementi sulla pagina del prodotto principale
Sulla pagina del prodotto principale, il blocco Combora complements: il prodotto stesso contrassegnato come "This item", i complementi con una casella e un prezzo, il risparmio ("Save 25%") e la CTA che indica la selezione ("Add 3 to cart"). Gli articoli sono separati da divisori "+", e le righe selezionate sono contrassegnate con un anello accento. Misurato nel negozio demo con tutti e tre nel carrello: $800.00 → $600.00 ($500.00 → $375.00, $180.00 → $135.00, $120.00 → $90.00).

11.3 Dettagli di questo tipo

  • Lo sconto si applica una volta che il prodotto principale e almeno un complemento sono nel carrello; copre le righe dell'insieme.
  • Il blocco può essere aggiunto anche al template del carrello come ultimo spunto di cross-sell.
  • I complementi esauriti appaiono disabilitati con il relativo avviso, e non sono mai preselezionati.

12Combo

Il tipo avanzato: combina due o più sotto-offerte (di qualsiasi altro tipo) in un unico bundle. La differenza chiave rispetto alla pubblicazione di bundle separati: all'interno di un combo le sotto-offerte si sommano — il cliente può ottenere lo sconto per volume e il regalo allo stesso tempo.

12.1 Configurazione

Editor combo con due sotto-offerte pronte
L'editor combo: ogni sotto-offerta è una riga a fisarmonica con il proprio stato (Pronta). L'anteprima riepiloga le offerte e il budget utilizzato ("Uses 1 of 50 product entries").

Ogni riga si espande sul posto con lo chevron, e la sotto-offerta si modifica in linea: i suoi prodotti, le sue fasce o il suo premio. Ogni sotto-offerta influisce solo sui propri prodotti.

12.2 Cosa vede il Suo cliente

Un combo non viene promosso come scheda nel blocco Combora bundle: quel blocco elenca i bundle fissi, che hanno un prezzo e un pulsante, e un combo non ha né l'uno né l'altro. Ogni sotto-offerta viene promossa dal proprio blocco — la tabella volume per una sotto-offerta di volume, la barra regalo per una di regalo — e il combo mostra il suo effetto completo nel carrello, dove ogni parte agisce con il proprio badge: lo sconto per volume sulle sue righe e il regalo aggiunto automaticamente a $0.00.

Misurato nel negozio demo su un combo che somma "2 o più di questo snowboard → 15% di sconto" e "un berretto in regalo appena si arriva a $900.00 di quello snowboard": due snowboard passano da $1,040.00 a $850.00 — il 15% e il berretto a $0.00 — e tre passano da $1,540.00 a $1,275.00. Due bundle separati non farebbero mai entrambe le cose sulla stessa riga; dentro un combo le sotto-offerte si sommano (sezione 14).

12.3 Dettagli di questo tipo

  • Le sotto-offerte si sommano all'interno del combo, ma il combo compete come un tutt'uno contro gli altri bundle secondo la regola della migliore offerta per riga.
  • Il regalo in una sotto-offerta GWP usa lo stesso motore di aggiunta automatica del tipo regalo.
  • Limite di dimensione: l'insieme appiattito dei prodotti del combo non può superare 50 voci (l'editor lo mostra: "Uses X of 50").
  • L'editor ha una finestra modale "Come funzionano i combo" con un esempio guidato, e ogni sotto-offerta definisce "Prodotti a cui si applica questa offerta" — una sotto-offerta senza prodotti specifici mostra un avviso perché non potrà applicare alcun prezzo.
  • Una sotto-offerta BOGO all'interno di un combo offre un premio in percentuale o importo (il "prezzo fisso per unità" è esclusivo del BOGO autonomo).

13Progettare il widget

I blocchi di Combora vengono forniti con un aspetto adatto a qualsiasi tema, ma può progettarli dall'app, senza toccare il CSS: scegliere uno stile, riordinare e nascondere elementi, e regolare colori, dimensioni e forme elemento per elemento. Il tutto con un'anteprima che usa lo stesso motore di rendering del Suo negozio online, quindi ciò che vede è ciò che viene pubblicato.

Il design riguarda solo l'aspetto: non cambia mai il prezzo. Può regolarlo sapendo che non tocca nemmeno una regola dell'offerta.

13.1 Due luoghi in cui progettare

DoveAmbitoQuando usarlo
Impostazioni → Design del widget → Modifica template widget Il template per l'intero negozio: ogni bundle lo eredita. Il caso normale. Definisce il Suo stile una volta e ogni bundle lo segue.
Editor del bundle → Personalizza design Solo quel bundle. Ciò che imposta qui prevale sul template, campo per campo. Un bundle che deve risaltare (una campagna, un colore diverso).

Un bundle che non ha ancora toccato nulla mostra l'avviso "Questo bundle segue il template widget del Suo negozio". Non appena sceglie lì un preset, quel bundle prende una strada propria.

Studio di design: il template widget per l'intero negozio
Impostazioni → Design del widget: gli stili a sinistra, il simulatore d'ambiente a destra e, sotto, l'anteprima del widget. Il selettore Anteprima widget in alto cambia quale tipo di widget sta guardando.
Salvare il template risincronizza i Suoi bundle pubblicati in modo che il nuovo stile raggiunga il negozio online: può richiedere un minuto per comparire. Il pannello stesso Le dice quanti bundle verranno risincronizzati.

13.2 Gli stili (preset)

Template del negozio
Solo nel design di un bundle: segue quanto definito in Impostazioni. È il valore di partenza. Se non esiste ancora un template, si applicano le impostazioni del blocco nell'editor del tema.
Editor del tema
Prevalgono le impostazioni proprie del blocco nel Suo editor del tema (accento, angoli, modalità stile). Questo è il comportamento classico, quello che aveva prima che esistesse lo studio.
Combora
Il look curato di Combora: una scheda con sfondo, bordi e ombre propri. Coerente in qualsiasi tema.
Come il tema
Decorazione minima: dominano la tipografia e i colori del Suo tema. Per temi con una forte personalità.
Senza stile
Markup pulito, nessuna decorazione, così il Suo sviluppatore può scrivere il proprio CSS (editor del tema → CSS personalizzato). Gli aggancio sono la classe .combora-w e le variabili --combora-*.
Personalizzato
Apre i controlli sottostanti: layout, stile globale e regolazione fine per elemento.

13.3 Layout: riordinare e nascondere

Con il preset Personalizzato, compare Layout: un elenco degli elementi del widget che può trascinare (o spostare con le frecce) per cambiarne l'ordine, più un'icona a occhio per nascondere quelli facoltativi.

Gli elementi dipendono dal tipo di bundle, perché ogni tipo disegna un widget diverso:

Tipo di bundleElementi riordinabili
Bundle fisso · ComboTitolo · Prodotti inclusi · Prezzo · Risparmio · Pulsante
Mix & match · Componi la scatolaTitolo · Contatore di progresso · Elenco opzioni · Nota · Pulsante
Sconto per volumeTitolo · Scala delle fasce
Compra X ricevi YTitolo · Regola dell'offerta
Regalo con l'acquistoTitolo · Regalo · Condizione di sblocco
ComplementiTitolo · Elenco articoli · Risparmio · Pulsante
Ciò che serve al cliente non si può nascondere. I selettori, gli elenchi articoli, la scala delle fasce, il regalo e i pulsanti non hanno deliberatamente l'icona a occhio: senza di essi il widget non direbbe nulla. Riordinarli, sì.
Preset Personalizzato: layout, stile globale e regolazione fine per elemento
Con il preset Personalizzato: Layout (trascini le righe, l'occhio nasconde quelli facoltativi), Stile globale e Regolazione fine per elemento. L'anteprima a destra si aggiorna a ogni modifica.

13.4 Stile globale e regolazione fine

Stile globale è ciò che cambia l'intero widget in una volta: colore accento, sfondo scheda, colore testo, angoli (netti / morbidi / arrotondati), ombra (nessuna / leggera / media) e densità.

Regolazione fine per elemento apre ogni elemento separatamente — titolo, prezzo, risparmio, badge, pulsante, scheda, miniature, etichette — con ciò che ha senso per ciascuno: dimensione, peso, colore, maiuscolo, padding, forma, colore del bordo, colore del prezzo barrato… Ogni controllo ha un "Torna al tema" per annullare solo quella regolazione, e in fondo c'è un "Ripristina tutta la personalizzazione".

  • Se non definisce il Risparmio, segue lo stile del Badge.
  • Il colore del testo del pulsante non è selezionabile: viene derivato automaticamente per contrasto rispetto allo sfondo scelto, così non può mai risultare illeggibile.
  • I valori sono limitati a intervalli sensati: non può digitare una dimensione che rompa il widget su mobile.

13.5 L'anteprima (e cosa NON è)

A destra c'è un pannello contrassegnato "Solo anteprima". La differenza conta:

  • Sinistra = il Suo design. Ciò che regola lì viene salvato e va al negozio online.
  • Destra = la lente. Sfondo dell'anteprima (chiaro / scuro / un colore personalizzato), dimensione base del testo, larghezza dello slot (una colonna prodotto stretta rispetto a una sezione ampia) e un'approssimazione della Sua tipografia. Serve a verificare che il Suo design regga in luoghi diversi. Non cambia nulla nel Suo negozio o nel Suo design.

E nella barra laterale dell'editor del bundle, la scheda "Stile anteprima" Le dice quale design è attivo ("Active design: Combora") e offre due pulsanti: Vedi anteprima, che apre il widget a grandezza naturale in una finestra modale ("This is how it will look in your store"), e Personalizza design, che entra nello studio di questo bundle. La tipografia e lo sfondo reali provengono dal Suo tema, quindi per il via libera definitivo guardi il widget nell'editor del tema.

L'anteprima usa lo stesso codice del negozio online, ma il tema è il Suo: se il Suo tema definisce font o sfondi molto particolari, il risultato finale potrebbe apparire diverso dall'anteprima. Questo è l'unico margine.

14Combinare i bundle tra loro

Può pubblicare tutti i bundle che il Suo piano consente, anche sugli stessi prodotti. Le regole di convivenza sono fisse e prevedibili:

  1. La migliore offerta per riga. Per ogni articolo del carrello, Shopify applica l'offerta che sconta di più quell'articolo. Due bundle non si sommano mai sulla stessa riga.
  2. Bundle diversi possono coesistere nello stesso carrello — ciascuno sulle proprie righe. Uno sconto mix sugli snowboard e un regalo basato sulla spesa possono applicarsi contemporaneamente perché agiscono su righe diverse.
  3. In caso di parità, vince il bundle più vecchio (il primo che ha creato).
  4. L'eccezione è il combo: le sue sotto-offerte si sommano tra loro (sezione 12).

E gli sconti che non sono di Combora? La regola sopra governa i pack di Combora tra loro. Con gli sconti di terzi decide Shopify, e lo abbiamo verificato in un negozio reale: due sconti prodotto (un pack Combora e un Suo sconto automatico o codice prodotto) non si sommano mai sullo stesso articolo — Shopify applica solo il maggiore dei due, anche se entrambi sono marcati come combinabili; possono convivere su righe diverse dello stesso ordine. Uno sconto ordine (per esempio un codice del −10% su tutto l'ordine) si sottrae invece dopo, sui prezzi già scontati — il comportamento standard di Shopify con qualsiasi app.

Carrello con lo sconto mix su ogni riga idonea
Ogni riga coperta da un'offerta porta il suo sconto e il suo badge — qui il 20% mix su tre snowboard, $1,050.00 → $840.00. Un altro bundle i cui prodotti siano anch'essi in questo carrello si applica alle sue righe, nello stesso carrello, senza che le due si incontrino mai su una sola riga.
L'avviso di sovrapposizione nell'editor esiste per questo: quando pubblica un bundle i cui prodotti sono già presenti in altri bundle, Le ricorda che al checkout si applicherà solo la migliore offerta per riga. Pubblichi senza timore — il cliente non vedrà mai un doppio sconto o un prezzo sbagliato.

Un esempio numerico reale (verificato nel negozio)

CarrelloOfferte candidateRisultato
3 × Cascade Freeride ($300.00)BOGO 2+1 gratis$900.00 → $600.00 (un'unità gratis)
4 × Oxygen ($1,000.00)Volume 4+ → 20%$4,000.00 → $3,200.00
2 × OxygenVolume 2+ → 10% (il livello 4+ non viene raggiunto)$2,000.00 → $1,800.00
3 snowboard idoneiMix & match, minimo 3 → 20%$1,050.00 → $840.00 ($400.00 → $320.00, e così via)
3 × lo snowboard a cui è legato un regalo ($1,050.00)Regalo oltre $1,000 di quello snowboardLa cera da $20.00 entra a $0.00: $1,070.00 → $1,050.00
2 × lo snowboard del comboDentro un combo: volume 15% e regaloSi applicano entrambi: $1,040.00 → $850.00

Nel negozio demo un prodotto appartiene di proposito a due bundle: lo snowboard che è componente del bundle fisso è anche il soggetto di quello per volume. Da solo prende il livello di volume che la sua quantità gli vale; insieme all'altro componente del bundle fisso, nelle quantità esatte, anche il bundle fisso entra come candidato e la riga si tiene la migliore delle due. Stesso prodotto, due bundle, un prezzo per riga — mai entrambi.

15Creazione in blocco

Dalla galleria Crea bundle ci sono due flussi per creare molti bundle in una volta. Entrambi creano bozze: nulla raggiunge il negozio online finché non le rivede e pubblica.

15.1 Genera da una collezione

  1. Scelga la collezione.
  2. Scelga il template: "Un multipack per prodotto" (un bundle fisso da N unità per ogni prodotto) oppure "Un unico bundle per l'intera collezione".
  3. Configuri unità e sconto, poi prema Crea bozze.
Generatore configurato con una collezione e un template
Il generatore: il template multipack, 3 unità per pack e 15% di sconto. La collezione viene scelta con il selettore proprio di Shopify tramite Seleziona collezione.

Che cosa crea davvero ciascun template

Un multipack per prodotto percorre la collezione e crea una bozza di bundle fisso per prodotto: N unità della prima variante di quel prodotto (ordine di posizione), con lo sconto scelto applicato alla somma. Ogni bozza è un normale bundle fisso — la apra per cambiare la variante, passare a un prezzo bundle chiuso, aggiungere un badge… — e quando la pubblica diventa a sua volta un prodotto acquistabile con un clic, come qualsiasi bundle fisso (sezione 5).

Un unico bundle per l'intera collezione crea esattamente una bozza del tipo flessibile che Lei sceglie (volume, mix & match, componi la scatola o compra X ricevi Y) il cui gruppo idoneo è la collezione stessa. L'appartenenza segue il Suo catalogo: il gruppo viene risolto quando pubblica e aggiornato ogni notte (o subito se ripubblica), così i prodotti che aggiunge alla collezione in seguito entrano nell'offerta senza toccare il bundle.

I prodotti vengono saltati, e il banner del risultato glielo comunica, quando non sono Attivi nel Suo catalogo, quando non hanno nessuna variante acquistabile — e quando sono essi stessi prodotti pack di Combora: un pack generato non annida mai un altro pack.

Esempi svolti

La stessa schermata, sette configurazioni ed esattamente ciò che ciascuna produce:

ConfigurazioneChe cosa viene creato
Collezione di 12 prodotti · multipack · 3 unità · 15%12 bozze, una per prodotto, chiamate "Prodotto — confezione da 3". Ognuna contiene 3× la prima variante del prodotto e, una volta pubblicata, addebita (3 × prezzo) − 15% al checkout.
Lo stesso, ma sconto = importo fisso 512 bozze in cui ogni pack addebita (3 × prezzo) − 5 nella valuta del Suo negozio. Se un prodotto è così economico che lo sconto ne assorbe il prezzo, riveda quella bozza prima di pubblicare.
Collezione di 9 in cui un prodotto è un pack di Combora e un altro non è Attivo7 bozze; il banner segnala quelli saltati e il motivo di ciascuno.
Rieseguire la stessa identica configurazione il mese successivoSolo i prodotti nuovi nella collezione ricevono una bozza; ogni prodotto che ha già un pack generato identico viene segnalato come duplicato e saltato. Rieseguire è sempre sicuro.
Collezione di 250 prodotti · multipackLe prime 100 bozze (il tetto per esecuzione) più un avviso; ne pubblichi o elimini alcune ed esegua di nuovo la generazione per il resto.
Template a bundle unico · volume · quantità minima 3 · 15%Una bozza "Sconto quantità {collection}": 3 o più unità della stessa variante ottengono il 15% di sconto — ogni prodotto della collezione scala per conto proprio (il volume conta per riga, sezione 7). Per premiare chi mescola prodotti diversi, usi invece il mix & match: il suo minimo conta sull'intera selezione.
Template a bundle unico · compra X ricevi Y · compra 2, ricevi 1 · premio 100%Una bozza: ogni 2 unità acquistate dalla collezione, l'unità successiva è gratis. Con un premio del 50% sarebbe invece a metà prezzo.
Limite: fino a 100 bozze per generazione. Le bozze sono gratuite su ogni piano — il limite di 3 bundle pubblicati del piano Gratuito si applica quando pubblica, non quando genera.

15.2 Importa da un CSV

Per cataloghi ampi o per migrare da un'altra app. La pagina include il riferimento completo del formato, un template scaricabile con un esempio per tipo e un pulsante di esportazione (scarica tutti i Suoi bundle nello stesso formato, pronti per essere reimportati in un altro negozio).

Pagina di importazione CSV con il riferimento delle colonne
La pagina di importazione: colonne type, title, discount_kind, discount_value, components, collection, min_qty, min_items, slots, buy_qty, get_qty. Può caricare un file oppure incollare il CSV direttamente.
  • Tipi importabili: fixed, volume, mix_and_match, build_a_box, bogo (i tipi con un regalo, un'ancora o sotto-offerte si creano nell'editor).
  • Riferimenti per handle di prodotto o collezione, o per GID di Shopify.
  • In components (solo fisso): handle:quantity separati da |.
  • Fino a 200 righe per importazione; un file più grande viene troncato e l'app glielo comunica.
Importazione con errori per riga
Con un CSV difettoso nulla viene scartato silenziosamente: ogni riga fallita viene segnalata con il suo motivo (nessun componente, sconto fuori intervallo, tipo sconosciuto).
Elenco filtrato per bozze dopo i flussi in blocco
Le bozze create da entrambi i flussi, filtrando l'elenco per lo stato Bozza. Le pubblichi una per una o con le azioni in blocco.

16Gestione quotidiana

16.1 L'elenco

Ricerca per nome, filtro per stato e, su ogni riga: Duplica (crea una copia in bozza), Pubblica / Sposta in bozza ed Elimina. La data su ogni riga è l'ultimo aggiornamento (al passaggio del mouse compare il tooltip).

16.2 Azioni in blocco

Barra delle azioni in blocco con 10 selezionati
Selezionando le righe (o Seleziona tutto) compare la barra in blocco: Pubblica · Sposta in bozza · Elimina.
Conferma in linea per l'eliminazione in blocco
Eliminare richiede una conferma esplicita: Eliminare 10 bundle? … Questa azione non può essere annullata. Durante l'operazione vede il progresso (Elaborazione 6 di 10…).

16.3 Il ciclo di vita di un bundle

Bozza
Invisibile per il negozio online. Modificabile senza limiti.
Pubblicato
L'offerta è attiva (entro la sua finestra di pianificazione). Modificarla non cambia nulla in tempo reale finché non preme Aggiorna bundle.
Sposta in bozza
Ritira l'offerta immediatamente; la configurazione resta intatta così può ripubblicarla.
Elimina
Elimina il bundle e ritira il suo sconto (e il prodotto padre, se era un bundle fisso). Non può essere annullato. Le statistiche sugli ordini passati vengono mantenute.

16.4 Cosa fa Combora da sola, mentre Lei dorme

Quattro processi automatici mantengono il Suo negozio aggiornato senza che Lei debba fare nulla. Non deve configurarli né sorvegliarli — sono documentati qui perché sappia perché le cose si sistemano da sole:

⏰ ogni 15 min finestre di pianificazione 💳 03:00 aggiornamento piano 📦 04:00 gruppi collezioni 🧹 04:30 pulizia e autoriparazione
I quattro processi automatici (UTC). Nessuno di essi richiede configurazione.
ProcessoQuandoCosa fa per Lei
Finestre di pianificazioneogni 15 minAttiva e disattiva i bundle pianificati al momento giusto (nel Suo fuso orario) e mantiene aggiornato il catalogo pubblico. Un bundle attivo dall'1 al 15 inizia e finisce da solo.
Aggiornamento piano03:00Conferma il Suo piano reale con Shopify (aggiornamento, cancellazione, fine della prova gratuita) così i limiti e il badge riflettono sempre la verità.
Gruppi delle collezioni04:00Aggiorna l'elenco visibile dei bundle che puntano a una collezione con i prodotti entrati o usciti (il prezzo per quei prodotti era già corretto fin dal primo momento — sezione 4.3).
Pulizia e autoriparazione04:30Elimina i dati scaduti (chat chiuse da 90 giorni, log tecnici), rimuove i residui dei bundle eliminati, e ripara il contratto pubblico: se qualcuno ha alterato per errore gli schemi dati che usano gli sviluppatori, o il badge del piano, li ripristina e registra ciò che è successo.

17Statistiche

Statistiche con ordini reali
La scheda Statistiche con dati reali dal negozio demo (intervallo 7 / 30 / 90 giorni): le sette metriche in alto — qui un unico ordine reale da $1,299.00, quindi tasso di aggancio 100% e 1 su 1 ordini con bundle — e i tre grafici sotto.
MetricaCosa misura esattamente
Fatturato attribuitoIl fatturato delle righe d'ordine che hanno avuto uno sconto Combora (non il totale dell'ordine).
% di ordini con un bundleLa quota di ordini nell'intervallo che includevano almeno un bundle.
Ordini con un bundleLa frazione letterale: ordini con un bundle / ordini totali.
Risparmio erogatoLo sconto totale che i Suoi bundle hanno dato ai clienti.
Valore medio dell'ordineSu tutti gli ordini nell'intervallo.
Valore dell'ordine con bundleLa media solo degli ordini che avevano un bundle — la confronti con la precedente per vedere l'effetto delle Sue offerte.
Ordini con un regaloOrdini che includevano un regalo gratuito (GWP o combo).

Se vende in più valute, un selettore di valuta si trova accanto alle metriche: gli importi vengono mostrati nella valuta scelta (i contatori degli ordini sono globali).

Sotto le metriche ci sono tre grafici per l'intervallo scelto, tutti con un punto al giorno e un tooltip:

  • Ordini con un bundle nel tempo — barre, con il valore stampato sopra le barre che hanno dati.
  • Fatturato attribuito al giorno — una linea, per vedere la tendenza.
  • Risparmio erogato al giorno — barre: quanto sconto hanno dato i Suoi bundle ogni giorno.
L'attribuzione viene registrata al momento dell'ordine: eliminare in seguito un bundle non cancella la sua cronologia in Statistiche.

18Impostazioni e piani

18.1 Impostazioni

  • Lingua dell'app: 7 lingue (inglese, spagnolo, francese, tedesco, italiano, portoghese, olandese). Riguarda l'admin; ciò che vede il Suo cliente segue la lingua del Suo tema/mercato.
  • Design del widget: Modifica template widget apre lo studio di design per l'intero negozio — lo stile che ogni bundle eredita (sezione 13). Salvare qui risincronizza i bundle pubblicati.
  • Sincronizza sconti: non deve premerlo — tutto si sincronizza da solo quando pubblica. È presente come rete di sicurezza: se un bundle smettesse di scontare, questo rigenera lo sconto Shopify da tutti i Suoi bundle pubblicati. È sicuro usarlo quanto vuole, e se non c'era nulla da correggere lo dice: Tutto era già aggiornato.
  • Accesso sviluppatori: i dati pubblici che il Suo tema può leggere (appendice 22). La documentazione del contratto è aperta su ogni piano.

18.2 Piani

Prezzi fissi: non prendiamo mai una percentuale delle Sue vendite, e il prezzo non dipende dal Suo piano Shopify — un negozio Basic e un negozio Plus pagano lo stesso.

  • Gratuito ($0/mese): fino a 3 bundle pubblicati alla volta (le bozze non contano) con tutti gli 8 tipi inclusi. Quando prova a pubblicare il 4°, l'app lo blocca con l'avviso corrispondente: ne sposti un altro in bozza o passi a un piano superiore. Nel piano gratuito, i blocchi mostrano un discreto badge Powered by Combora.
  • Pro ($14.99/mese): bundle pubblicati illimitati e nessun badge.
  • Plus ($39.99/mese): tutto ciò che offre Pro, più assistenza prioritaria, importazione/esportazione CSV in blocco (fino a 200 bundle per file) e supporto all'integrazione diretta per il Suo sviluppatore (negozi headless e temi personalizzati).

La fatturazione passa da Shopify (Managed Pricing) — si gestisce e si annulla dalla pagina Piani stessa. I piani a pagamento includono una prova gratuita di 7 giorni, e se annulla mantiene il piano fino alla fine del ciclo già pagato. I negozi fondatori (le prime 100 installazioni) mantengono il prodotto completo gratis per sempre.

19Diagnostica e assistenza

Diagnostica (la seconda scheda di Aiuto) è la prima tappa quando qualcosa non torna — ed è ciò che l'assistenza Le chiederà se apre un ticket. Combora registra automaticamente, per ogni negozio, tutto ciò che fallisce sotto il cofano (sul server e nel Suo negozio online) anche quando il cliente non lo vede mai, e questo pannello lo rende accessibile. Non memorizza alcun dato dei clienti.

Scheda Diagnostica con controlli di salute, log e rapporto
La scheda Diagnostica: i controlli di salute in alto, il registro eventi con filtri al centro e il rapporto di assistenza in basso.

19.1 Controlli di salute

Lo stato live di ciò che l'assistenza chiede per prima cosa, verificato con Shopify a ogni caricamento:

ControlloCosa verifica
BundleErrori di sincronizzazione e bundle pubblicati con modifiche non pubblicate (ha modificato e non ha premuto Aggiorna bundle).
Sconto automatico in ShopifyChe lo sconto Combora esista e sia ATTIVO — è quello che addebita i prezzi al checkout.
Indice pubblicato del negozioChe i dati pubblici letti dai blocchi del Suo tema siano aggiornati (bundle live rispetto a quelli attesi).
App embed Combora GiftChe il motore dei regali sia attivo nel Suo tema.
Sconto applicato sugli ordini recentiOrdini degli ultimi 7 giorni con un bundle: se TUTTI sono arrivati senza sconto, qualcosa non va al checkout.
Canale errori del negozio onlineChe i Suoi blocchi del negozio online possano segnalare qui i guasti (data dell'ultimo evento ricevuto).
Job in backgroundJob notturni falliti.
Sconosciuto non è un allarme: significa che quel controllo non ha potuto essere verificato ora (per esempio, il canale del negozio online prima di ricevere il suo primo evento). Un problema reale viene segnalato in rosso.

19.2 Registro eventi

Ogni voce è qualcosa che è successo ed è stato registrato: un errore durante la pubblicazione, un regalo che Shopify ha rifiutato di aggiungere (con il motivo esatto), uno sconto in collisione con un altro, un webhook fallito… Filtri per livello (Informazione = previsto ma rilevante, come il limite del piano; Avviso; Errore) e per area (pubblicazione, sconti, piano e fatturazione, negozio online, sincronizzazione…). Un registro vuoto è un buon segno: si riempie solo quando qualcosa va storto. Gli eventi vengono conservati per 30 giorni.

Privacy — cosa viene registrato e cosa no. Il registro memorizza solo codici di errore tecnici: lo stato HTTP, il bundle e la variante interessati, e il motivo restituito da Shopify. I dati dei Suoi clienti non vengono mai registrati: nessun indirizzo IP, nessun nome, nessuna email, nessun identificatore di navigazione o cookie — un cliente che acquista senza problemi non genera alcuna voce di registro. Esistono anche limiti automatici (un massimo giornaliero per negozio) e tutto si elimina da solo dopo 30 giorni. Se il Suo negozio riceve una richiesta di cancellazione dati (GDPR), questo registro non contiene nulla da cancellare, e disinstallare l'app lo elimina completamente insieme al resto dei Suoi dati.

19.3 Il rapporto di assistenza

Un unico documento con tutto il necessario per diagnosticare il Suo negozio in un colpo solo: i controlli di salute, il Suo piano e la configurazione (senza dati sensibili), lo stato di pubblicazione di ogni bundle e gli eventi più recenti. Quando contatta l'assistenza, prema Copia rapporto (o Scarica come file) e lo allega al ticket — con questo, chi La assiste vede esattamente cosa è successo senza chiedere screenshot o accesso.

  • Il rapporto non include nessun dato dei clienti né chiavi: solo lo stato, la configurazione dei bundle e gli eventi tecnici.
  • Se il pulsante di copia non funziona nel Suo browser, il testo resta selezionato — prema Ctrl+C (Cmd+C su Mac) — oppure usi lo scarico.
Per gli sviluppatori: i blocchi del negozio online segnalano i loro guasti a /apps/combora/log (un App Proxy firmato da Shopify). È un canale di assistenza interno con un catalogo chiuso di codici e un limite giornaliero — non fa parte del contratto pubblico nell' appendice 22.

20Limiti e regole importanti

Il riferimento unico per i limiti, verificato rispetto al codice dell'app:

Limite / regolaValoreCosa succede quando lo raggiunge
Bundle pubblicati (piano Gratuito)3Pubblicare il 4° viene bloccato con un avviso. Le bozze non contano.
Componenti in un bundle fisso30L'editor non Le permetterà di aggiungerne altri.
Prodotti in un combo (appiattito)50 vociL'editor mostra l'utilizzo (Uses X of 50) e blocca l'eccesso.
Collezioni per selettore100Validato al salvataggio.
Combinazione regalo (GWP)2–5 articoliValidato al salvataggio.
Titolo come messaggio di sconto100 caratteriIl testo mostrato al checkout viene troncato (il titolo completo viene conservato).
Genera da una collezione100 bozzeTroncato, e l'app glielo comunica.
Importazione CSV200 righeTroncato, e Le dice di dividere il file.
Offerte visibili per blocco1–8 (predefinito 3)Regolabile su ogni blocco del tema; dà priorità alle offerte che dichiarano un prezzo/risparmio.
Configurazione pubblicata totale≈19.8 KB (2 blocchi di 9.9 KB)Con moltissimi bundle enormi contemporaneamente, i più recenti finirebbero per essere pubblicati senza un prezzo attivo finché non si libera spazio (un caso estremo; l'app dà priorità ai bundle più vecchi e divide automaticamente la configurazione in due blocchi).

Regole sul denaro (sempre esatte)

  • Le percentuali troncano lo sconto per difetto (non viene mai arrotondato a favore di un addebito maggiore).
  • Gli importi e i prezzi fissi vengono ripartiti tra le righe con un resto esatto: la somma delle parti è sempre uguale al totale.
  • I decimali dipendono dalla valuta del Suo negozio (JPY senza decimali, BHD con tre…) — due decimali non vengono mai dati per scontati.
  • Il prezzo addebitato viene calcolato da Shopify al checkout a partire dalla configurazione pubblicata. Ciò che mostrano i blocchi del tema è informativo.

Multi-valuta (Shopify Markets)

Se vende in più valute, non c'è nulla da configurare: definisce prezzi, soglie e sconti nella valuta del Suo negozio, e Combora fa il resto. Un cliente che acquista in un'altra valuta vede gli importi del widget convertiti nella propria (la soglia del regalo, il prezzo bundle, il risparmio di ogni fascia), e al checkout lo sconto viene convertito al tasso di cambio di Shopify del momento — lo stesso che converte i prezzi dei Suoi prodotti. La regola d'oro resta valida: ciò che il cliente vede pubblicizzato è esattamente ciò che il checkout gli addebita, nella sua valuta.

Altre regole

  • Gli abbonamenti sono bloccati sulle righe bundle a meno che non attivi esplicitamente l'opzione (sezione 4.5).
  • Un regalo GWP non viene pubblicizzato sulla pagina del prodotto regalo stesso (un premio non è un'esca).
  • I bundle pubblicati fuori dalla loro finestra di pianificazione non applicano alcuno sconto (si riattivano da soli).

21Risoluzione dei problemi

Non riesco a vedere l'offerta sul mio negozio online
① Il bundle è Pubblicato (non una bozza) ed entro la sua finestra di date? ② Ha aggiunto il blocco giusto al template (la scheda Dove viene mostrato nell'editor)? ③ Se ha modificato un bundle pubblicato, ha premuto Aggiorna bundle?
Il regalo non si aggiunge da solo
① L'app embed Combora Gift è attivata? ② Il carrello soddisfa la condizione contando solo ciò che si qualifica (il regalo non conta)? ③ Il cliente lo ha rimosso a mano in questa sessione? ④ Il regalo è disponibile?
Lo sconto nel carrello non è quello che mi aspettavo
Ricordi la regola: solo la migliore offerta per riga. Se due bundle competono per lo stesso articolo, vince quello che sconta di più (e in caso di parità, il più vecchio). La somma avviene solo all'interno di un combo.
L'app dice: Hai un altro sconto automatico attivo
Questa è un'informazione, non un errore. Significa che ha propri sconti automatici sui prodotti in Shopify. Dove un bundle Combora e uno di quegli sconti ricadono sullo stesso prodotto, Shopify applica solo il migliore dei due — sommare due sconti prodotto sullo stesso articolo richiede Shopify Plus. Questa è una regola di Shopify, non di Combora. I Suoi bundle si combinano con i Suoi sconti su ordine e spedizione, e con gli sconti prodotto che ricadono su altri prodotti. L'avviso indica lo sconto sovrapposto specifico così sa quale controllare.
Ho pubblicato e dice limite del piano
Il piano Gratuito consente 3 bundle pubblicati alla volta. Ne sposti un altro in bozza o passi a un piano superiore.
La barra di progresso del regalo non appare
Viene renderizzata nel template del carrello (il blocco Combora gift progress) e solo per offerte il cui criterio può essere valutato nel browser. Con le collezioni come ciò che conta funziona comunque, perché l'app risolve i prodotti della collezione quando pubblica; l'unica eccezione è una collezione molto grande (oltre ~150 prodotti), dove la barra non viene mostrata anche se il regalo funziona comunque.
Il selettore con caselle non appare in mix / scatola
Il selettore compare con qualsiasi ambito: con varianti specifiche mostra esattamente quelle caselle, e con prodotti o una collezione l'elenco viene risolto quando pubblica (e aggiornato ogni notte, o subito se ripubblica). Se resta comunque vuoto, il gruppo idoneo non ha prodotti acquistabili — controlli la nota di anteprima nell'editor. In ogni caso il cliente può aggiungere prodotti come al solito e lo sconto scatta al qualificarsi.
Errori durante l'importazione di un CSV
Ogni riga fallita viene elencata con il suo motivo. Corregga quelle righe e riesegua solo con quelle — le righe corrette sono già state create.
Sospetto che uno sconto sia rimasto orfano
Impostazioni → Sincronizza sconti ripara lo stato. Non modifichi mai manualmente lo sconto Combora nella sezione Sconti di Shopify.

22Appendice per sviluppatori: il contratto pubblico

Combora pubblica i dati dei Suoi bundle nel Suo negozio come metaobject e metafield sotto il namespace combora, leggibili pubblicamente dal negozio online. Qualsiasi sviluppatore può costruire una UI completamente personalizzata leggendo questi dati da Liquid o dalla Storefront API — senza chiamare nessuna delle API dell'app. Questo contratto è versionato e solo additivo (versione attuale: public.v1): i campi esistenti non vengono mai rinominati o ritipizzati.

22.1 Cosa viene creato all'installazione

L'installazione predispone le definizioni (gli schemi) — visibili sotto Impostazioni → Metafield e metaobject e sotto Contenuto → Metaobject:

  • Metaobject: combora_bundle (il bundle), combora_component (ogni riga componente) e combora_tier (ogni fascia di volume/soglia). Tutti e tre con accesso PUBLIC_READ dal negozio online, pubblicabili e traducibili.
  • Metafield del negozio: combora.index e combora.manifest (JSON, lettura pubblica), e combora.all_pdp_gwps (list.metaobject_reference → combora_bundle): i regali per l'intero negozio che hanno scelto di essere pubblicizzati su ogni pagina prodotto.
  • Metafield prodotto: combora.bundles (list.metaobject_reference → combora_bundle) — l'indice inverso prodotto → i suoi bundle.
⚠️ Una limitazione di Liquid con i riferimenti a livello negozio: un list.metaobject_reference del negozio (come all_pdp_gwps) non si risolve in metaobject nel Liquid del tema (quello di prodotto sì; anche il JSON del negozio sì). Per renderizzare quei regali in Liquid, legga le voci di index con "all_pdp": true e risolva ogni bundle per handle: metaobjects['combora_bundle'][entry.handle]. Sulla Storefront GraphQL API il riferimento si risolve normalmente.
Contenuto → Metaobject con le tre definizioni Combora
Contenuto → Metaobject: le tre definizioni, aggiunte da Combora, con le loro voci.
Definizione del metafield prodotto Combora bundles
Il metafield prodotto Combora bundles (tipo Metaobject), in uso sui prodotti che partecipano ai bundle.
Indice delle definizioni dei metafield negozio e manifest
I metafield negozio Combora bundle index e Combora contract manifest (JSON); da agosto 2026 si aggiunge Combora store-wide gift offers (all_pdp_gwps).

22.2 Cosa succede alla pubblicazione / aggiornamento / ritiro

EventoEffetto sul contratto
Pubblica un bundleI suoi metaobject vengono creati/aggiornati (prima i figli, poi il padre, con handle deterministici), combora.index e combora.manifest vengono rigenerati, il metafield combora.bundles di ogni prodotto partecipante viene scritto, e vengono seminate le traduzioni dei campi traducibili (le lingue abilitate nel Suo negozio tra le 7 fornite dall'app; non sovrascrive mai una traduzione che ha personalizzato in Translate & Adapt). L'indice non annuncia mai un bundle la cui scrittura è fallita.
Aggiorna bundleUna riproiezione completa e idempotente: riscrive la proiezione del bundle a partire dalla configurazione (motivo per cui funziona anche come riparazione). L'elenco di riferimenti del padre viene riscritto nello stesso passaggio — il negozio online non vede mai un riferimento pendente — e gli eventuali metaobject figli rimasti indietro vengono rimossi dalla scansione notturna.
Sposta in bozzaIl metaobject passa allo stato bozza (smette di risolversi sul negozio online), il bundle esce dall'indice e il suo prezzo si disattiva. La configurazione viene mantenuta.
EliminaI suoi metaobject vengono eliminati, combora.bundles viene ripulito sui suoi prodotti e, se era un bundle fisso, il prodotto padre viene ritirato.
Disinstalla l'appI metaobject e i metafield combora appartengono al negozio e restano (il Suo tema non si rompe; i dati restano congelati nel loro ultimo stato). I metafield privati $app:* vengono rimossi automaticamente da Shopify e lo sconto Combora diventa inerte. Alla reinstallazione, l'app riutilizza e riconcilia tutto — nulla viene duplicato.

22.3 combora_bundle campo per campo

CampoTipoTraducibileContenuto
titletestosìTitolo sul negozio online (obbligatorio).
descriptionrich textsì⚠️ La definizione esiste ma l'app non scrive ancora questo campo: oggi arriva sempre vuoto — renderizzi tollerando blank.
badge_labeltestosìIl badge (Miglior valore).
testbooleanonoModalità test. "true" ⇒ i widget renderizzano questo bundle solo nell'editor del tema e nei temi il cui ruolo non è quello pubblicato. Assente o "false" ⇒ live.
stylejsonnoStile precompilato del widget (studio di design): {"v":1,"source":"app","vars":"--combora-…","mode_class":"combora-w--styled","model":{…}}. Copi vars nell'attributo style della Sua radice e mode_class come classe. Con "source":"block" (o il campo assente) prevalgono le impostazioni del blocco nell'editor del tema.
cta_labeltestosìTesto del pulsante (facoltativo).
disclaimerrich textsì⚠️ Come description: definito ma ancora senza contenuto — tolleri blank.
bundle_typetesto (scelte)noUno tra: fixed · mix_and_match · volume · bogo · gwp · build_a_box · fbt · combo.
min_items / max_itemsinteronoMix (min/max) e componi la scatola (dimensione in min_items).
thresholdinteronoLa soglia GWP in unità minori (centesimi), sempre nella valuta del negozio — vedi la regola multi-valuta in 22.9.
discount_valuejsonno{"kind":"percentage","bps":1500} (basis point: 1500 = 15%) o {"kind":"fixed_amount","amount":500} (unità minori).
configjsonnoValori scalari per tipo: price (fisso in modalità prezzo), buy_qty/get_qty (bogo), gift_variant/threshold/min_qty/combination/qualify (gwp — la condizione completa vive qui: spesa in unità minori, unità minime, entrambe, o una combinazione), slots/box_price (scatola), anchor_variant (fbt), eligible (il descrittore del gruppo), of (combo).
componentselenco di riferimenti—→ combora_component (variante, quantità, ruolo: component/option/anchor/gift/suggestion, posizione, etichetta…).
tierselenco di riferimenti—→ combora_tier (min_qty, discount_value, posizione, tier_label…).
productriferimento prodottonoProdotto ancora (il padre di un bundle fisso, il prodotto principale di un FBT).
imageriferimento filenoMedia facoltativo del bundle.
revision / contract_versionintero / testonoRevisione pubblicata e versione del contratto (public.v1).
Voce combora_bundle nell'admin
Una voce reale combora_bundle sotto Contenuto → Metaobject: titolo, stato Attivo, handle deterministico combora-bundle-{id}.
Campi discount_value, components, anchor, contract version
La stessa voce: discount_value come JSON in basis point, i riferimenti componente, il prodotto ancora e contract_version = public.v1.
Non modifichi queste voci manualmente. Sono una proiezione della configurazione dell'app. La sincronizzazione notturna ripara le definizioni (gli schemi) e riafferma il badge del piano; il contenuto di una voce modificata manualmente viene ripristinato alla successiva pubblicazione/aggiornamento di quel bundle — fino ad allora, ciò che ha scritto a mano resta com'è (e potrebbe non corrispondere a ciò che l'app addebita).

22.4 Il descrittore eligible

Il gruppo idoneo del bundle, con la stessa struttura per ogni tipo:

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

Sono incluse solo le liste non vuote. Le tre chiavi di risoluzione sono informative (sui gruppi di collezione dicono quanti membri sono stati materializzati e se lo snapshot è stato troncato) — può ignorarle. Attenzione alla convenzione: il config del metaobject usa snake_case (gift_variant, min_qty), mentre l'oggetto gwp nell' index usa camelCase (giftVariant, minQty) — gli stessi dati su due superfici diverse.

Attenzione: i figli role:"option" di un gruppo di collezione sono uno snapshot preso al momento della pubblicazione; l'appartenenza live (e il prezzo) viene sempre risolta dalla Function al checkout.

22.5 combora.index e combora.manifest

shop.metafields.combora.index — la tabella di instradamento dei bundle pubblicati (esiste perché Lei non debba mai iterare metaobjects.combora_bundle.values, che Liquid tronca silenziosamente a 50):

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

id è un identificatore testuale, non un numero. Vengono annunciati solo i bundle pubblicati ed entro la loro finestra di pianificazione, così l'indice resta allineato al prezzo del checkout. Alcune voci portano campi extra: gwp (l'offerta regalo, solo sui bundle di tipo regalo), gwps (le offerte regalo di un combo, nell'ordine delle sotto-offerte) e test (true se il bundle è in modalità test: il JS del negozio online lo salta sul tema pubblicato).

shop.metafields.combora.manifest — il descrittore del contratto che uno strumento legge una volta sola: contract_version, schema_version, il contatore dei bundle e i GID delle tre definizioni. Può portare powered_by_badge: true, che è ciò che accende il badge Powered by Combora nei blocchi (solo sui negozi con piano Gratuito; altrove il campo viene omesso).

22.6 Leggerlo da Liquid

{%- comment -%} On a product page: the bundles for THIS product {%- 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 -%}
      {%- comment -%} label is optional: if missing, it falls back to the variant title and
          then to the product title. CAREFUL: if the product is NOT published to the Online
          Store channel, its reference does not resolve in Liquid and ALL the fallbacks
          return blank — guard the final name or you will render an empty "1× ". {%- endcomment -%}
      {%- assign name = component.label.value -%}
      {%- if name == blank -%}{%- assign name = component.variant.value.title -%}{%- endif -%}
      {%- if name == blank or name == 'Default Title' -%}{%- assign name = component.variant.value.product.title -%}{%- endif -%}
      {%- if name != blank -%}
        <li>{{ component.quantity.value }}× {{ name | escape }}</li>
      {%- endif -%}
    {%- endfor -%}
  </ul>
{%- endfor -%}

{%- comment -%} Or by direct handle, in any template {%- endcomment -%}
{%- assign bundle = metaobjects.combora_bundle['combora-bundle-{id}'] -%}

Entrambe le vie sono letture delimitate (l'elenco proprio del prodotto, o un handle diretto) — mai il .values globale. Due insidie di Liquid che Le fanno risparmiare un pomeriggio: (1) un for su un elenco di riferimenti tronca silenziosamente a 50 — i bundle di Combora non ci arrivano mai (il limite più alto è di 50 voci totali), ma non iteri le collezioni altrui dando per scontato di vederle tutte; (2) i campi facoltativi (label, badge_label, cta_label) spesso arrivano vuoti — protegga con != blank come sopra.

22.7 Leggerlo dalla Storefront API (localizzata)

query BundleByHandle @inContext(language: FR) {
  metaobject(handle: { type: "combora_bundle", handle: "combora-bundle-{id}" }) {
    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 restituisce le traduzioni seminate dall'app; ciò che non è tradotto ricade automaticamente sulla lingua di base.

22.8 Cosa può costruire con questo

  • Una UI bundle completamente personalizzata nel tema, senza i blocchi di Combora, leggendo titolo, badge, componenti e risparmio dal metaobject.
  • Una landing page di campagna: una pagina che elenca i bundle attivi da combora.index e ne renderizza ognuno per handle.
  • Headless / Hydrogen: la stessa lettura sulla Storefront API con localizzazione per mercato.
  • Integrazioni (feed, app di raccomandazione): il manifest dichiara la versione del contratto e dove si trova tutto.

22.9 Regole per lo sviluppatore

  • Il prezzo appartiene alla Function. I campi del metaobject servono per la visualizzazione: non sommi il discount_value di un combo né ricalcoli i prezzi nel tema — il checkout è l'autorità.
  • Solo additivo: possono comparire nuovi campi; quelli esistenti non cambiano. Scriva letture che tollerino campi sconosciuti.
  • Combo: raggruppi i figli per position diviso 1000 (ogni sotto-offerta occupa una fascia di 1000) o per config.of[].index — mai per role, che può ripetersi.
  • Stile: se costruisce la propria UI, ignori style e scriva il Suo CSS. Se invece vuole rispettare il design che il commerciante ha scelto nell'app, copi style.vars nell'attributo style della Sua radice e style.mode_class come classe; il preset Senza stile dello studio esiste esattamente per il caso opposto (markup pulito, il Suo CSS, con .combora-w e le variabili --combora-* come aggancio).
  • Privato ≠ contratto: i metafield $app:runtime, $app:fnvars e $app:validation dello sconto sono interni alle Function, non hanno accesso dal negozio online, e la loro struttura può cambiare senza preavviso. Non ci costruisca sopra.
  • Multi-valuta (Shopify Markets): ogni importo nel contratto — config.price, threshold, fixed_amount.amount, box_price — è sempre nella valuta del negozio, in unità minori. Se il Suo negozio vende in più valute, converta al momento della presentazione (in Liquid, moltiplichi per cart.currency.rate; in JS, per Shopify.currency.rate) prima di formattare; renderizzare il numero grezzo con la valuta di presentazione dell'acquirente mostra un prezzo sbagliato. Lo sconto reale al checkout viene calcolato dall'app ed è sempre corretto — questa regola riguarda solo ciò che il Suo widget mostra.
  • Non scriva nel namespace combora. Shopify Le dà accesso in scrittura (è il Suo negozio), ma l'app lo rigenera a ogni pubblicazione e una revisione notturna ripristina i campi che governano il piano. Ciò che è Suo va nel Suo namespace.
  • Questa appendice è il riferimento completo del contratto per gli sviluppatori esterni. Se manca qualcosa e Le serve, ci scriva tramite la chat dell'app o all'assistenza e lo documenteremo.

23Appendice per sviluppatori: un widget per tipo, in Liquid

L'appendice precedente descrive che cosa contiene il contratto; questa mostra come renderizzare ogni tipo di bundle con esso. Tutto il codice qui sotto legge soltanto il contratto pubblico — nessuna API dell'app, nessuno dei blocchi propri di Combora — quindi può incollarlo in uno snippet o in un blocco Liquid personalizzato nel template di prodotto e adattare il markup liberamente. Tre regole valgono per tutto ciò che c'è in questa pagina:

  • Il prezzo appartiene alla Function. Tutto ciò che vede qui è visualizzazione; l'importo effettivamente addebitato viene calcolato dalla Shopify Function di Combora al checkout. Non ricalcoli mai un totale presentandolo come il prezzo.
  • Gli importi sono unità minori nella valuta del negozio. Moltiplichi per cart.currency.rate prima di formattare, o un acquirente che naviga in un'altra valuta vedrà un numero sbagliato.
  • I campi facoltativi arrivano spesso vuoti. Protegga con != blank — compreso il nome del componente dopo i suoi fallback (vedi 22.6).

23.1 Lo scheletro in cui si innesta ogni esempio

Una card per ogni bundle del prodotto corrente, con titolo, badge e il risparmio così come il bundle lo esprime (discount_value in basis point o unità minori). Ogni tipo renderizza poi il proprio corpo dentro il case:

{%- liquid
  assign bundles = product.metafields.combora.bundles.value
  assign rate = cart.currency.rate | default: 1
-%}

{%- if bundles != blank -%}
  {%- for bundle in bundles -%}
    {%- liquid
      assign type = bundle.bundle_type.value
      assign dv = bundle.discount_value.value
      assign cfg = bundle.config.value
    -%}
    <article class="cx__card">
      <h3>{{ bundle.title.value | escape }}</h3>
      {%- if bundle.badge_label.value != blank -%}
        <span class="cx__badge">{{ bundle.badge_label.value | escape }}</span>
      {%- endif -%}

      {%- comment -%} Il risparmio, così come questo bundle lo esprime {%- endcomment -%}
      {%- if dv.kind == 'percentage' -%}
        <p>Risparmia {{ dv.bps | divided_by: 100 }}%</p>
      {%- elsif dv.kind == 'fixed_amount' -%}
        <p>Risparmia {{ dv.amount | times: rate | money }}</p>
      {%- endif -%}

      {%- case type -%}
        {%- comment -%} un blocco per tipo — qui vanno le sezioni da 23.2 a 23.7 {%- endcomment -%}
      {%- endcase -%}
    </article>
  {%- endfor -%}
{%- endif -%}

23.2 Bundle fisso

Elenchi i figli con role == 'component' usando la catena di fallback del nome, mostri il prezzo del bundle quando il bundle usa la modalità prezzo (config.price, unità minori), e colleghi al prodotto padre acquistabile:

{%- when 'fixed' -%}
  <ul>
    {%- for c in bundle.components.value -%}
      {%- if c.role.value == 'component' -%}
        {%- liquid
          assign name = c.label.value
          if name == blank
            assign name = c.variant.value.title
          endif
          if name == blank or name == 'Default Title'
            assign name = c.variant.value.product.title
          endif
        -%}
        {%- if name != blank -%}
          <li>{{ c.quantity.value }}× {{ name | escape }}</li>
        {%- endif -%}
      {%- endif -%}
    {%- endfor -%}
  </ul>
  {%- if cfg.price -%}
    <p class="cx__price">{{ cfg.price | times: rate | money }}</p>
  {%- endif -%}
  {%- if bundle.product.value != blank -%}
    <a href="{{ bundle.product.value.url }}">Acquista questo bundle</a>
  {%- endif -%}

Un bundle fisso in modalità prezzo porta config.price e nessun discount_value; in modalità sconto è il contrario — la riga del risparmio dello scheletro copre già il secondo caso.

In un prodotto con una sola variante il titolo della variante è il segnaposto di Shopify «Default Title»: la catena di fallback lo salta e usa il titolo del prodotto (a questo serve la condizione aggiuntiva).

23.3 Sconto per volume

La scala vive in tiers (ordinati per position), ogni fascia con i propri min_qty e discount_value:

{%- when 'volume' -%}
  <table>
    {%- for t in bundle.tiers.value -%}
      {%- assign tv = t.discount_value.value -%}
      <tr>
        <td>Compra {{ t.min_qty.value }}+</td>
        <td>
          {%- if tv.kind == 'percentage' -%}
            {{ tv.bps | divided_by: 100 }}% di sconto
          {%- else -%}
            {{ tv.amount | times: rate | money }} di sconto
          {%- endif -%}
        </td>
      </tr>
    {%- endfor -%}
  </table>

23.4 Compra X ricevi Y

La regola è due scalari in config; una percentuale del 100% (bps == 10000) significa che gli articoli premio sono gratis:

{%- when 'bogo' -%}
  <p>Compra {{ cfg.buy_qty }}, ricevi {{ cfg.get_qty }}
    {%- if dv.kind == 'percentage' and dv.bps == 10000 %} gratis{% else %} scontati{% endif -%}.</p>

23.5 Mix & match e componi la scatola

Entrambe sono offerte del tipo "raggiungi una quantità": il mix legge il min_items del metaobject, la scatola legge config.slots (e config.box_price quando la scatola addebita un prezzo chiuso). Il gruppo idoneo è in config.eligible (vedi 22.4):

{%- when 'mix_and_match' -%}
  <p>Scegli {{ bundle.min_items.value }} o più dalla selezione.</p>
{%- when 'build_a_box' -%}
  <p>Componi una scatola da {{ cfg.slots }}.
    {%- if cfg.box_price %} Prezzo della scatola {{ cfg.box_price | times: rate | money }}.{% endif -%}</p>

23.6 Complementi (FBT)

I componenti portano ruoli: l'anchor è il prodotto principale, i figli suggestion sono i complementi:

{%- when 'fbt' -%}
  <ul>
    {%- for c in bundle.components.value -%}
      {%- if c.role.value == 'suggestion' or c.role.value == 'anchor' -%}
        <li>
          {{ c.variant.value.product.title | default: c.label.value | escape }}
          {%- if c.role.value == 'anchor' %} <em>(questo articolo)</em>{% endif -%}
        </li>
      {%- endif -%}
    {%- endfor -%}
  </ul>

23.7 Combo

Un combo annida sotto-offerte. Raggruppi i suoi figli per position diviso 1000 (ogni sotto-offerta occupa una fascia di 1000) o percorra config.of[] — mai raggruppare per role, che si ripete tra le sotto-offerte:

{%- when 'combo' -%}
  <ol>
    {%- for sub in cfg.of -%}
      <li>{{ sub.type | replace: '_', ' ' }}</li>
    {%- endfor -%}
  </ol>

23.8 Offerte regalo per l'intero negozio, su qualsiasi pagina

I regali pubblicizzati su ogni pagina prodotto vivono su un metafield del negozio, e il Liquid del tema non risolve un elenco di metaobject a livello negozio (22.1). Legga invece il JSON index e risolva ogni bundle per handle:

{%- assign index = shop.metafields.combora.index.value -%}
{%- if index != blank -%}
  {%- for entry in index.bundles -%}
    {%- if entry.all_pdp and entry.status == 'active' -%}
      {%- assign gift = metaobjects['combora_bundle'][entry.handle] -%}
      {%- if gift != blank -%}
        <aside class="cx__gift">
          <strong>{{ gift.title.value | escape }}</strong>
          {%- assign gcfg = gift.config.value -%}
          {%- if gcfg.threshold -%}
            <span>Spendi {{ gcfg.threshold | times: rate | money }} per sbloccarlo.</span>
          {%- endif -%}
        </aside>
      {%- endif -%}
    {%- endif -%}
  {%- endfor -%}
{%- endif -%}

23.9 Lo snippet completo

Tutto quanto sopra assemblato in un unico file funzionante — lo scheletro, i sei corpi per tipo, i regali per l'intero negozio e un CSS minimo perché sia leggibile fin da subito: scarichi combora-custom-bundle.liquid. Lo salvi come snippets/combora-custom-bundle.liquid nel Suo tema e lo renderizzi dal template di prodotto con {% render 'combora-custom-bundle', product: product %}. Il GWP non è nel case di proposito: un regalo viene pubblicizzato (23.8 o i blocchi propri dell'app) e aggiunto automaticamente dall'app — non c'è nulla che un widget di scheda prodotto debba vendere.

24Cronologia di questa edizione

Ogni flusso in questo manuale è stato testato in un negozio reale. Ecco la traccia di quando è stato verificato e cosa è cambiato in seguito, così sa quanto è aggiornato ciò che sta leggendo.

DataCosa è stato fatto
15 agosto 2026Prima edizione completa, verificata end to end sul negozio di sviluppo app-bundle-6pofnlbj, con acquisti di prova reali (gateway Bogus). Sono state trovate due deviazioni (I-01: il gruppo idoneo per il regalo escludeva troppo; I-02: i motivi degli errori CSV erano rimasti non tradotti) ed entrambe sono state corrette, con un test di regressione.
21 agosto 2026Revisione rispetto al codice e all'app live. Aggiunta la sezione 13 (Progettare il widget); la visibilità nel catalogo del bundle fisso (5.1); i tre grafici di Statistiche; l'avviso un altro sconto automatico è attivo in Risoluzione dei problemi; il regalo per l'intero negozio sulle pagine prodotto (9.3); e nell'appendice, i campi test e style, più powered_by_badge e i campi extra dell'indice. Il testo della modalità test è stato affinato e la numerazione dell'appendice corretta.
21 agosto 2026
(screenshot)
Dopo il shopify app deploy che ha portato il redesign del widget nel negozio, gli screenshot del negozio online sono stati ripresi dal negozio reale: la scala delle fasce del volume, i separatori + nei complementi, il selettore mix & match, la scheda combo con i suoi chip di quantità, la barra del regalo (bloccata e sbloccata), i carrelli di volume, mix e BOGO, e i tre del bundle fisso (scheda, prodotto padre e carrello). Riprendendo quest'ultimo è stato corretto un errore sostanziale: la didascalia del prodotto padre diceva che la sua pagina mostra il suo prezzo bundle, quando ciò che disegna il tema è la somma dei componenti — il prezzo bundle viene applicato dalla Function al raggiungimento del carrello.
24 agosto 2026Ogni screenshot è stato ripreso dal negozio demo pubblico di Combora, costruito per l'occasione con un bundle pubblicato per tipo e nomi presentabili, e il testo è stato adattato alle cifre che mostrano quegli screenshot. Gli screenshot dell'interfaccia dell'app ora esistono in tutte e 7 le lingue. Ogni prezzo citato da qui in poi è stato misurato su un carrello reale in quel negozio, non calcolato. Il negozio online usa il tema Horizon di Shopify.
10 settembre 2026L'intero catalogo del negozio demo è stato riprezzato a numeri tondi e ogni tipo è stato spostato su prodotti propri, perché ogni esempio misuri una sola offerta e non l'arbitraggio tra più offerte. Le cifre di questo manuale sono poi state rimisurate carrello per carrello; per questo differiscono dalle voci qui sopra: il bundle fisso ($1,600.00 → $1,299.00), il volume a 2 e a 4 unità ($2,000.00 → $1,800.00 e $4,000.00 → $3,200.00), il BOGO a 3 ($900.00 → $600.00), il mix a 3 ($1,050.00 → $840.00), la scatola da 3 ($2,100.00 → $1,749.00), i complementi ($800.00 → $600.00), il regalo oltre $1,000 ($1,070.00 → $1,050.00) e il combo a 2 unità ($1,040.00 → $850.00). Due didascalie descrivevano comportamenti che non esistono più e sono state corrette: un combo non viene mostrato come scheda sulla pagina prodotto (ogni sotto-offerta viene promossa dal proprio blocco, e il combo si vede nel carrello), e la barra del regalo ora nomina il regalo e ciò che conta in quattro stati, con un messaggio proprio facoltativo per stato (sezione 9.2). La soglia del regalo si misura sul prezzo di listino.
23 agosto 2026Il manuale è diventato multilingue: ora viene generato da un guscio condiviso più una fonte di contenuto per lingua, con un selettore di lingua nel pannello sinistro e alternative hreflang. L'inglese è la versione canonica. Durante la traduzione, è stata trovata e corretta una contraddizione in Risoluzione dei problemi: affermava che il selettore con caselle compare solo con varianti specifiche, mentre la 6.1 documenta correttamente che compare con ogni ambito.

Gli screenshot si trovano in app/combora/public/manual/img/ nel repository: quelli dell'interfaccia dell'app sotto img/<language>/, un set per lingua, e quelli del negozio online e dell'admin Shopify nella radice, perché questi seguono il Suo tema e il Suo admin anziché la lingua dell'app. Vengono ripresi dal negozio demo; vedi docs/manual/CAPTURAS.md per lo stato richiesto per ciascuno.