Skip to content

Products

The Products module is where you define the items guests can order. Staff select products from this catalog when creating an Order inside a Conversation.

Product Fields

FieldRequiredDescription
NameDisplay name (e.g., “Pho Bo”, “Room Service Towels”)
DescriptionOptional details about the product
PriceBase price (decimal, e.g., 12.50)
DiscountPercentage (1–100%) or Fixed amount reduction
Sort OrderControls display order (lower = appears first)
LabelColored badge shown on product cards in the guest shop (e.g., “Hot”, “New”)
Is SpecialHighlights product in the top carousel on the guest shop page
Is FeaturedShows product in the featured section on the guest shop page
TagsCategorization labels (see below)
ImagesMultiple photos; the first becomes the cover image
Option GroupsCustomization options guests choose when ordering (e.g., Size, Sugar Level)
Statusactive — visible to staff; inactive — hidden

Discount System

EmberX supports two discount types, selectable per product:

TypeHow it worksExample
NoneNo discountPrice: $12.50 → Sale: $12.50
PercentageReduces price by X% (1–100)20% off $12.50 → $10.00
FixedReduces price by a fixed amount$2 off $12.50 → $10.50

A live preview shows the calculated sale price while you type.

Price Snapshot in Orders

When a staff member adds a product to an Order, the system stores a JSON snapshot of the product’s name and price at that moment. This means:

  • Changing a product’s price later does not affect existing orders.
  • Historical order data always reflects what the guest was actually charged.

Tags

Tags are flexible labels used to categorize products (e.g., food, beverage, spa, housekeeping).

  • Tags are shared across the system (stored in the Tag table, category product).
  • When adding a product, you can select existing tags or create new ones inline.
  • Tags also power the Feedback Routing system in Settings.

Label & Badge System

Each product can display a colored label badge on its card in the guest-facing shop page. This helps guests quickly identify featured or time-sensitive items.

Label Presets

LabelColor
(None)
Hot🔴 Red
New🔵 Blue
Must Try🟣 Purple
Popular🟠 Orange
Limited🌸 Rose
Best Seller🟢 Green

You can also type a custom label text and pick any color using the color picker. A live preview of the badge is shown while editing.

Promotional Flags

Two boolean flags control how a product appears in the guest shop layout:

FlagEffect
Is SpecialProduct appears in the top carousel (horizontal scroll) at the top of the shop page
Is FeaturedProduct appears in the Featured section below the carousel

Product Options (Customization)

Option Groups let guests customize their order — for example, choosing a size or sugar level. Each product can have multiple groups, and each group can have multiple options.

Structure

Product
└── Option Group (e.g., "Size") required: true
├── Option: "Small" priceAdjust: −1.00
├── Option: "Medium" priceAdjust: null (no change)
└── Option: "Large" priceAdjust: +2.00
└── Option Group (e.g., "Sugar Level") required: false
├── Option: "100%" priceAdjust: null
├── Option: "50%" priceAdjust: null
└── Option: "0%" priceAdjust: null

Option Group Fields

FieldDescription
Group NameLabel shown to guest (e.g., “Size”, “Ice Level”)
RequiredIf checked, guest must choose an option before submitting the order
OptionsList of selectable items within the group

Option Fields

FieldDescription
Option NameThe choice label (e.g., “Large”, “No Ice”)
Price AdjustAmount added to or subtracted from base price. Leave blank for no change. Use +2.00 to add, -1.00 to subtract.

Managing Option Groups

In the product form, scroll to Option Groups:

  • Click Add Group to add a new customization group.
  • Enter a group name and toggle Required as needed.
  • Click Add Option within a group to add individual choices.
  • Drag the grip handle (⠿) to reorder groups.
  • Click 🗑️ to remove a group or individual option.

Images

Products support multiple images. The upload component accepts common image formats. The first image in the list automatically becomes the imageUrl (cover image) used in order previews.

Adding a Product

  1. Go to Products in the sidebar.
  2. Click Add Product (top right).
  3. Fill in Name and Price (required).
  4. Optionally set Discount, Label, Is Special / Is Featured flags.
  5. Add Option Groups for customizable items (e.g., size, temperature).
  6. Add Tags and Images as needed.
  7. Set Sort Order to control display position.
  8. Set Status to active to make it available immediately.
  9. Click Create Product.

Editing a Product

Click the Edit button on any row to open the slide-over panel with pre-filled fields. Changes take effect immediately after saving.

Deactivating vs. Deleting

ActionEffect
Toggle InactiveHides the product from ordering; preserves history
DeletePermanently removes; existing order snapshots are unaffected

Currency

Product prices are stored in the currency configured in Settings → Shop. Supported currencies:

  • USD ($) — default
  • VND (₫) — Vietnamese Dong

Switching currencies triggers a conversion dialog that optionally bulk-converts all existing product prices.

Shop Visibility (Enable Shop)

The entire shop and ordering feature can be toggled on or off from Settings → Shop → Enable Shop.

  • When enabled: the menu button and shop page are visible to guests in the chat interface.
  • When disabled: the menu button and shop page are hidden from guests — useful during off-hours or menu maintenance.

See Settings for full configuration details.