discount-inquiry
Sales, deals, and promo codes. Trigger on the quick-reply buttons the widget ships — "Discount codes" and "What's on sale?" — and on "any discounts?", "do you have a coupon", or a question about deals inside a specific category. Read the full body first — codes may only come from GET_ACTIVE_DISCOUNTS, never from memory.
name: discount-inquiry description: Sales, deals, and promo codes. Trigger on the quick-reply buttons the widget ships — "Discount codes" and "What's on sale?" — and on "any discounts?", "do you have a coupon", or a question about deals inside a specific category. Read the full body first — codes may only come from GET_ACTIVE_DISCOUNTS, never from memory. tags: [internal, concierge, requires-yepai-tools] license: MIT-0
Sales, deals and promo codes
Merges the sales-discount and active-promo-codes journeys. They were split
because the old state machine needed two entry points; a shopper asking "any
deals?" should get one consistent answer, so there is one skill.
The one rule that cannot bend
Every promo code you say comes from GET_ACTIVE_DISCOUNTS in this conversation.
Never reconstruct a code from memory, never guess a pattern like SAVE10, never
repeat a code a shopper claims to have seen. An invented code fails at checkout and
the merchant deals with the fallout — this is the worst thing you can do here.
The same holds for discounted prices: they come from SEARCH_CATALOG results.
Two shapes of question
"What's on sale?" — discounted products
Offer the two ways in:
NOTIFY_MESSAGE(message_type='text')— a short friendly lead-inNOTIFY_MESSAGE(message_type='suggestionQuestion')— "Biggest Sale of the Year" and "Browse Deals by Category"
Biggest deals across the store:
SEARCH_CATALOG(query='on sale best deals', context='biggest discounts across all products', on_sale=True, limit=10)
Take the top discounts, but keep some collection variety — ten near-identical items
is a worse answer than eight varied ones.
By category:
NOTIFY_MESSAGE(message_type='text')— ask which categoryNOTIFY_MESSAGE(message_type='collection')— 3–5 collections that actually have sale items, with human-readable names
Then for the chosen one:
SEARCH_CATALOG(query='on sale deals', context='discounted products in collection', collection=<name>, on_sale=True, limit=5)
They already named a category ("what's on sale in shoes?") — skip the menu. Acknowledge briefly, then search that collection directly.
No discounted products found — say so plainly, no apology, and offer to show what is popular instead.
"Do you have a promo code?" — codes
GET_ACTIVE_DISCOUNTS, then present by volume:
- Up to ~6 codes — show them all with
NOTIFY_MESSAGE(message_type='discountCodeList') - More than ~6 — group them first:
NOTIFY_MESSAGE(message_type='text')asking which kind, thensuggestionQuestionwith the categories, then thediscountCodeListfor the one they pick, prefaced by "Here are the codes for {category}:"
No active codes — say so directly. Do not soften it into something that sounds like a code might exist.
After a code
A code is only useful on something they want to buy. Once a shopper takes one,
offer to show products it applies to — carry any constraint (minimum spend,
eligible collections) into that search, and switch to the
product-recommendation skill for the presentation sequence.
Download
ZIP package — ready to use
Skill Info
- Creator
- Yepai
- License
- MIT-0
- Downloads
- 0
- Published
- Oct 26, 2026
- Updated
- Oct 29, 2026