Build a Voice Shopping Assistant for Your Store
Let customers search products, add to cart and move through checkout by speaking — built on the store functions your site already has.
By Voxide

Online shopping is a lot of clicking. Open filters, pick a size, close filters, scroll, open a product, check stock, back, compare, add to cart, find the cart, apply a code, check out. Every step is a place to lose someone.
A voice shopping assistant collapses that into a sentence — but only if it can actually operate the store, not just talk about it.
Register what the store can do
ai.register({
searchProducts: {
description: "Search the catalogue. Supports free text plus optional size, colour and price ceiling.",
params: {
query: { type: "string", required: true },
size: { type: "string" },
colour: { type: "string" },
maxPrice: { type: "number" },
},
handler: async (args) => {
const results = await catalogue.search(args);
return results.slice(0, 5).map((p) => ({
id: p.id, name: p.name, price: p.price, inStock: p.stock > 0,
}));
},
},
addToCart: {
description: "Add a product to the cart by id, with an optional quantity.",
params: {
itemId: { type: "string", required: true },
qty: { type: "number" },
},
handler: async ({ itemId, qty = 1 }) => {
await cart.add(itemId, qty);
return { status: "added", items: cart.count, total: cart.total };
},
},
checkStock: {
description: "Check remaining stock for a product and size.",
params: {
itemId: { type: "string", required: true },
size: { type: "string" },
},
handler: async ({ itemId, size }) => ({ remaining: await stock.get(itemId, size) }),
},
});
Notice searchProducts returns a trimmed result — five items, four fields each. That is deliberate. The model does not need your full product objects, and sending them makes replies slower and vaguer.
Bind the shopping context
"Add the blue one in medium" only resolves if the agent knows what is on screen:
ai.bindState(() => ({
route: location.pathname,
visibleProducts: shownProducts.slice(0, 10).map((p) => ({
id: p.id, name: p.name, colour: p.colour, price: p.price,
})),
cart: cart.items.map((i) => ({ id: i.id, name: i.name, qty: i.qty })),
currency: store.currency,
}));
Now the conversation works the way customers actually talk: pronouns, references to what they can see, and follow-ups that assume you were listening.
Let it answer questions, not just act
The highest-value moment in voice commerce is usually a question, not a command. "Will this arrive before Friday?" "Is this true to size?" Those answers live in your shipping rules and product copy, so attach them as a knowledge base — relevant passages get retrieved and used as context, and the agent answers from your content instead of improvising.
Guard the money
ai.register({
placeOrder: {
description: "Place the order using the saved payment method.",
dangerous: true, // confirm before charging anything
handler: async () => checkout.submit(),
},
});
Anything that charges, cancels or refunds should be dangerous: true. You can swap the default confirm for your own modal with ai.onConfirmation() so it matches your checkout design.
And keep the server honest: the agent calls the same endpoints your buttons do, with the same authentication and the same price and inventory validation. Never trust an amount that came out of a conversation.
Protect what customers say out loud
Checkout means names, addresses and phone numbers spoken aloud. Mark those parameters:
ai.register({
setDeliveryAddress: {
description: "Set the delivery address for this order.",
params: {
fullName: { type: "string", sensitive: true },
street: { type: "string", sensitive: true },
phone: { type: "string", sensitive: true },
postcode: { type: "string" },
},
handler: async (args) => checkout.setAddress(args),
},
});
Card numbers, emails and phone numbers are already stripped from transcripts automatically. sensitive: true covers what pattern matching cannot reliably catch — names and street addresses. Your handler still gets the real values.
Hand off when it stops being a shopping question
"Where is my order, it was supposed to arrive Tuesday" is a support conversation. The agent can recognise the boundary, offer to connect the customer to a person, and file the request with the transcript attached — see human handoff.
Start small
Three capabilities — search, check stock, add to cart — cover a large share of what people actually ask for. Ship those, watch real transcripts, and register the next three based on what customers tried and could not do.
More patterns by vertical on the use cases page.
