# Quote / confirm order

Compute a price quote from a fixed, built-in product-and-shipping catalog collected by earlier Ask a Question steps, then optionally record the order and send the customer a receipt.

## Getting here

**Automate → Workflows**, open a workflow, click **+** on the canvas, then pick **Quote / confirm order** under **Add Steps**.

## Before you start

- An **owner**, **admin** or **agent** can add this step and save the workflow. Publishing that workflow — the thing that makes it run on live conversations — is an **owner** or **admin** action.
- Building and running workflows depends on your plan; see [pricing](/pricing).
- A set of earlier **Ask a Question** steps that collect the product, an optional complement, a quantity and a shipping destination into `order.productId`, `order.complementId`, `order.qty` and `order.destination` — this step reads those fields, it does not ask for them itself.

## Set up

1. Build the ordering questions first: **Ask a Question** steps that save into `order.productId`, `order.complementId` (if the product needs one), `order.qty` and `order.destination`.
2. Add **Quote / confirm order** after them with **Confirm the quoted order** left off, to compute the total for a confirmation message — the totals are then available as `{{quote.grandTotal}}` and similar fields.
3. Send a message that shows the computed quote and asks the customer to confirm, then add a second **Quote / confirm order** step, this time with **Confirm the quoted order** turned on, on the path where they agreed.
4. Save the step, then publish the workflow.

## Fields

| Field | What it means | Default |
| --- | --- | --- |
| Confirm the quoted order | Off: only compute the quote and make its numbers available to later steps (the **Quote** entries in the Variable menu). On: also record the order and send the customer a receipt. | off |

## How it works

- The step reads `order.productId`, `order.complementId`, `order.qty` and `order.destination` from the run's fields — whatever earlier steps (typically a run of **Ask a Question** steps) saved there — and prices them against a fixed, built-in catalog of products, complements and shipping zones. This catalog is not something a workspace configures; it is the same one for every workspace running this step.
- With **Confirm the quoted order** off, a successful quote is written to the run's fields as `quote.productName`, `quote.qty`, `quote.destination`, `quote.shipping`, `quote.grandTotal` and `quote.text`, all readable by later steps and conditions, and NOTHING is sent to the customer — but only when the quote actually computes. An answer combination the catalog cannot price sends the customer a message regardless of this toggle (see the next point) — the toggle only silences the SUCCESS path.
- With it on, the same computation runs, and the order is additionally recorded as a line-item intent, then a receipt confirming the recorded order is sent to the customer through the ordinary send path.
- Recording the order always saves it inside Inchat first. Forwarding it onward to a connected order-management system happens only for a workspace that has that connection enabled; a workspace without it still has the order saved here, just not pushed anywhere else.
- Any answer combination the catalog cannot price — required fields still missing, an unrecognised product or destination, a quantity too small or oddly shaped, a product and complement that cannot be paired — does not fail the step: the customer instead receives a message naming the problem and pointing at **Need a person**, sent to the customer REGARDLESS of the **Confirm the quoted order** toggle, even with it off. **Need a person** is a menu option this text assumes exists — it is the label the prebuilt "Factory WhatsApp order" template's own Ask a Question steps use, not something this step adds on its own; a hand-built flow whose questions have no option by that name points the customer at a button that is not there.
- Recording the order can itself fail (a write error) even when the quote computed cleanly; that failure also reaches the customer as an apology naming that a teammate will follow up, rather than silence.

## When it fails

- The required answers are missing (no product, quantity or destination on the run yet — including a preview run placed right after only the first question or two): the step still reports success internally, but sends the customer the catalog's own "required" message together with the **Need a person** hint — with **Confirm the quoted order** on OR off, and with nothing recorded.
- The product, complement or destination named does not exist in the catalog, or the product and complement cannot be paired, or the quantity has no matching price break: the same pattern — a specific message naming the problem, plus **Need a person**, nothing recorded.
- Recording a confirmed order fails (a write problem after the quote already computed successfully): the customer is sent an apology saying a teammate will follow up, and the step reports failure.
- This step has no failure branch of its own; whatever happens, the run continues to the next step in the flow — the customer-facing message above is this step's way of surfacing a problem, not a branch an author configures.
- The reason (when one is logged beyond what the customer saw) is in the workflow's **Activity** tab, under **Execution log**, on this step's line.

## Limits

- The catalog is fixed and built into the product — a small, specific set of products, complements and shipping destinations. It is not a per-workspace product catalog like the one **Send Products (WhatsApp catalog)** reads from Commerce Manager, and a workspace cannot add its own products to it.
- It only ever prices the four fields it reads (product, complement, quantity, destination) — it has no concept of multiple line items in one order.
- With **Confirm the quoted order** off, a CLEANLY COMPUTED quote sends nothing to the customer — pair it with a **Send a Message** step that reads the `quote.*` fields if the point is to show them a confirmation prompt. A quote the catalog cannot price sends a message regardless of this toggle, so a preview run placed after only some of the ordering questions are answered can speak to the customer before you meant it to.
- An unrecognised answer combination is never a silent failure to the customer — they always get a specific message and the **Need a person** hint — but it is also never a branch a workflow author can react to differently; the same message shape covers every kind of mismatch.
- The **Need a person** hint in that message names a menu option, not a feature of this step — it only exists where the ordering flow's own Ask a Question steps define an option with that exact label, which is true of the prebuilt "Factory WhatsApp order" template and not guaranteed anywhere else.

## Best practices

- Add a **Need a person** option, with that exact label, to every question in the ordering sequence — this step's own error text assumes it exists, but nothing creates it for you outside the prebuilt template. Without it, a mismatched answer points the customer at a button they cannot find.
- Only place a preview (commit off) step after ALL of the ordering questions have been answered — placed earlier, it still speaks to the customer with the catalog's "required" message and the Need a person hint, not silence.
- Read `quote.text` for a ready-made summary line rather than rebuilding the same numbers by hand in your own message text.

## Use cases

- A pre-built ordering flow: ask product, complement, quantity and destination, quote the total, confirm, and record the order once the customer agrees.

## FAQ and troubleshooting

### Does this step work with our own product catalog?

No — it prices against a fixed, built-in catalog, not one your workspace configures. Send Products (WhatsApp catalog) is the step that reads your own Commerce Manager catalog.

### What happens if the customer's answers don't match anything in the catalog?

They receive a message naming the problem and a Need a person option — nothing is recorded, and the step does not fail the run.

### Does turning off Confirm the quoted order still tell the customer the price?

Only for a quote the catalog can actually price — then it computes into fields for later steps to use and says nothing itself, and you need a Send a Message step after it to show the customer anything. A quote the catalog CANNOT price (missing answers, an unrecognised product, a bad pairing) sends the customer a message either way — this toggle only silences the success path.

### If the order is recorded here, does it show up in our other order-management system?

Only if this workspace has that connection enabled. The order is always saved inside Inchat regardless; forwarding it onward depends on that separate setup.

## Related

- [Ask a Question](https://inchat.inseller.my/help/workflows/ask-a-question)
- [Send Products (WhatsApp catalog)](https://inchat.inseller.my/help/workflows/send-products-whatsapp-catalog)
- [Send a Message](https://inchat.inseller.my/help/workflows/send-a-message)
- [Escalate](https://inchat.inseller.my/help/workflows/escalate)
- [Workflows: how a flow runs](https://inchat.inseller.my/help/workflows/workflows-overview)

---

Source files: `src/lib/workflows/ai-builder/spec.ts`, `src/lib/workflows/canvas-model.ts`, `src/components/workflows/WorkflowStepConfigDrawer.tsx`, `src/lib/workflows/engine.ts`, `src/lib/commerce/quote-order-action.ts`, `src/lib/commerce/factory-catalog.ts`, `src/lib/commerce/order-flow.ts`, `src/lib/workflows/prebuilt-templates.ts`, `src/lib/commerce/quote.ts`, `src/lib/commerce/bind-quote.ts`, `src/lib/commerce/render-quote.ts`, `src/lib/commerce/confirm-quote.ts`, `src/lib/bridge/workspace-gate.ts`, `src/lib/workflows/condition-catalog.ts`, `src/lib/access/permissions.ts`
