E-commerce
June 30, 2026
Offering a replenishment at the wrong time means losing the customer twice: they ignore the message, and then they buy from Amazon because your reminder arrived too early or too late. An effective repurchase chatbot does not rely on "do you want to reorder?" every time the widget is opened, but on when to propose, what to suggest, and when to keep quiet.
Replenit estimates that individual predictive timing converts at 2.4× the rate of fixed 30-day interval reminders (Replenit, Shopify replenishment 2026). SubSummit distinguishes between reorder agents (no commitment) and Subscribe & Save: the bot must serve both profiles without confusing them (SubSummit, Replenishment Playbook 2026).
This guide #310 covers the AI repurchase chatbot: timing windows, triggers, suppression, and flows. It complements the recurring sales support (#309) with a focus on the AI automation of the reorder proposal timing.
Summary
Why does timing matter more than copywriting on a repurchase bot?
Two clients buy the same 50 ml serum. One uses it in 35 days, the other in 52 days. A fixed D+30 reminder annoys the second and arrives too late for the first, who has already switched to a competitor.
Cost of Poor Timing
Too early: spam perception, snooze, replenishment flow unsubscriptions
Too late: customer has already repurchased elsewhere, window closed
Out of context chat: reorder proposal during a delivery dispute → loss of trust
How AI Changes Things
Bitontree describes the retention agent: week 7 reminder on an 8-week stock, not a generic day 30 (Bitontree, retention agent 2026). reOtter segments reorder reminder, at-risk, and winback based on deviation from the predicted date (reOtter, reorder prediction 2026).
Principle #310
The repurchase bot = window engine + guardrails. The recommendation only appears if the timing score exceeds the threshold and no suppression rule is active.
How does it differ from support #309, history #258, and cross-sell #152?
Five neighboring pieces of content, five bot responsibilities.
Recurring Support (#309)
Recurring Sales (#309): REORDER-INTENT, REORDER macros, human REORDER-POLICY. #310 automates timing and the decision to offer / wait / snooze.
Purchase History (#258)
Bot History (#258): auth, whitelist, trust. #310 uses history to calculate predicted_runout, not just WISMO lookup.
Cross-sell (#152)
Cross-sell (#152): session cart complement. #310: same SKU or consumable routine at run-out time.
Routine / refill
Routine Rec: product intervals. #310: proactive + reactive chat orchestration with suppressions.
Bot AOV (#305)
Bot AOV (#305): bundles, free shipping threshold. #310: reorder first, format upgrade or Subscribe only during peak window and with consent.
Promise #310
REORDER-TIMING model, REPEAT-BOT-INTENT, NO-REORDER-PRESSURE guardrails, triggers, REPEAT-BOT-01 prompt, KPIs.
What REPEAT-BOT-INTENT mapping for the repurchase chatbot?
The REPEAT-BOT-INTENT taxonomy separates customer requests, proactive suggestions, and refusal management.
12 bot repurchase intents
repeat_reorder_request: customer asks to reorderrepeat_suggest_proactive: bot suggests proactive reorder (peak window)repeat_timing_question: “when should I repurchase?”repeat_not_yet: “I still have some left” → snoozerepeat_snooze_chat: postpone reminder from chatrepeat_variant_change: same line, other variantrepeat_need_change: SKU pivot (evolving need)repeat_subscribe_offer: Subscribe upgrade after 2+ reordersrepeat_complement: routine complement (post-reorder only)repeat_decline_stop: stop proposing this SKUrepeat_multi_sku: multiple products due in same windowrepeat_handoff: dispute, recurring B2B, wholesale
Routing priority
Active customer service intent (WISMO, return, complaint) blocks repeat_suggest_proactive. repeat_reorder_request is always served, even outside the window.
How to build the REORDER-TIMING model to decide when to propose?
The REORDER-TIMING model calculates a window per customer × SKU replenishment pair.
Calculation inputs
last_order_date + line item SKU
days_supply: product metafield or category median (e.g., 42 days)
velocity_adjust: deviation vs median if 2+ orders of the same SKU (actual interval)
quantity_multiplier: purchasing 2 units = +100% days_supply
Lifecycle windows
pre_window: runout - 14 days to - 8 days (no proactive chat, soft email only)
peak_window: runout - 7 days to runout + 3 days → repeat_suggest_proactive allowed
late_window: runout + 4 days to + 21 days → winback tone, no aggressive upsell
dormant: + 21 days without purchase → at-risk, marketing handoff, no 3rd chat nudge
Timing score
Score 0-100: 80+ peak eligible proactive. Replenit: "not too early, not too late" window (Replenit, replenishment agent 2026). Simple formula without ML: score = 100 - abs(today - predicted_runout) × 5, capped at 0-100.
What deletion rules apply before any proactive suggestion?
The reorder suppression guardrails prevent the bot from offering at the wrong time.
10 mandatory suppressions
Same SKU order < 14 days: customer has just purchased
Active subscription on SKU: redirect to sub portal
snooze_until Klaviyo profile not expired
repeat_decline_stop on SKU: 180-day blacklist
Open customer service ticket with dispute / return tag
Recent return of same SKU 60 days
Timing score < 60: no proactive offering
Unauthenticated visitor: no "you often buy..." messages
Non-replenishment SKU: fashion, durable, one-shot
2 proactive repeat / 30 days max per customer: frequency cap
NO-REORDER-PRESSURE
Guardrails extension #305: never offer reorder after refusal in the same session. Never mix reorder + cross-sell in the same message. Always keep the "not now" option visible. Insider One: customer 51+ days without purchase (30-day cycle) = at-risk, soft nudge, no product reminder (Insider One, lifecycle chatbot 2026).
Which chat triggers to activate for repeat purchases: proactive vs. reactive?
The repurchase trigger orchestrator maps session context to bot action.
Proactive triggers (peak_window + suppressions OK)
Customer account /account: "Reorder {sku}" chip if score ≥ 80
Return visit D+35-50 post-purchased consumable: 1-line message after 15 s dwell
Post-WISMO resolved: if delivered + replenishment SKU + peak → "Need restock soon?"
Reactive triggers (always active)
"Reorder my last order" chip for any auth session
Incoming repeat_reorder_request intent
Replenishment email deep link → pre-filled SKU chat
rePete pattern
rePete sends an SMS/email/on-site nudge when the prediction is ready, with one-click cart (rePete, reorder agent 2026). Chat #310 uses the same SKU and timing, without duplicating the message at the same time as Klaviyo (min 4 h delay between channels).
What conversational flow can be used to offer a repeat purchase without pressure?
The repurchase bot flow follows a fixed sequence of up to 4 steps.
repeat_suggest_proactive flow
Context: "You ordered {product} on {date}. Based on typical usage, you might run out soon."
Choice: buttons [Reorder] [Not yet] [Other product]
Reorder: pre-filled cart link + price + live stock
Not yet → repeat_snooze_chat 2 weeks / 1 month
repeat_reorder_request flow
Skip step 1 if requested by the customer. Lookup last order → confirm SKU → add-to-cart. If variant OOS: repeat_variant_change or substitute.
Conditional Subscribe Upgrade
If SKU orders_count ≥ 3 and not subscribed: after clicking Reorder, non-blocking "Auto-delivery -10%?" footer. Ecommerce Circle: 15% convert on the 3rd reorder (Ecommerce Circle 2026).
How should the REPEAT-BOT-01 prompt and the data signals be structured?
System prompt block REPEAT-BOT-01 250-350 words, extension #163.
Prompt blocks
Role: repurchase assistant, not a pushy salesperson
Signals: predicted_runout, timing_score, window_name, snooze_until
REORDER-POLICY #309: SKU durations, sub upgrade, need_change pivot
Suppressions: list section 5, verify before proactive
NO-REORDER-PRESSURE: max 1 proactive suggestion / session
Handoff: repeat_handoff if wholesale or 3 cart link failures
Shopify sync bot Metafields
replenishment_days, replenishment_eligible, pairs_with_sku. AeroChat: post-purchase bot = usage tips + reorder reminders in the same support thread (AeroChat, repeat sales 2026).
How to synchronize the chatbot with Klaviyo and replenishment agents?
The sync bot ↔ ESP prevents double nudging and snooze inconsistency.
Data Architecture
Shopify orders → predicted_runout calculation (daily cron or Replenit/reOtter webhook)
Klaviyo Profile:
predicted_reorder_date,timing_score,snooze_untilBot reads the same properties via API or customer sync metafield
repeat_snooze_chat → webhook updates Klaviyo + cancels pending flow send
Channel Rule
Email peak D-5 → proactive chat only if email is unopened at D-2 AND score ≥ 85. Stormy AI: sequence T-5 email, T-3 SMS, T-1 push (Stormy AI, replenishment 2026). Chat = fallback channel or inquiry response, not parallel spam.
Subscriber Exclusion
Segment active_subscriber excluded from repeat_suggest_proactive triggers. Bot redirects to subscription support skip/pause intents.
Which edge cases should be handled: multi-SKU, gift, pivot need?
Repurchase bot edge cases require explicit branches in the orchestrator.
Multi-SKU same window
repeat_multi_sku : 2+ products due ± 5 days → one consolidated cart, one "Your complete routine" message. reOtter rollup single event.
Gift purchase
Shipping address ≠ billing or gift tag: do not proactive reorder. Ask "are you buying for yourself?" before suggesting (#258 edge case).
repeat_need_change
Use pivot tree #309 section 7. Bot: 2 questions → new SKU → update replenishment_sku profile → snooze old.
Stock OOS
SKU due but stock is 0: documented substitute + back-in-stock alert, no dead cart link. Replenit pauses OOS triggers automatically.
Which KPIs should be measured for the repurchase bot?
Measure timing and conversion, not the volume of suggestions.
Monthly KPIs
repeat_proactive_accept_rate: Recommend clicks / proactive suggestions
repeat_chat_cvr: chat repeat attributed orders / auth peak sessions
snooze_from_chat_rate: repeat_not_yet + snooze (timing signal to recalibrate if > 30%)
repeat_decline_stop_rate: SKU opt-out (suggestion quality)
subscribe_upgrade_from_chat: repeat_subscribe_offer conversions
suppression_hit_rate: % of sessions where proactive is blocked (rules audit)
second_purchase_rate_60d: overall impact of active bot cohort
W+4 Review
Compare repeat_chat_cvr peak vs. late window. Adjust pre/peak boundaries if snooze_rate is high in peak = predicted_runout too early.
How does Qstomy decide when to suggest a repurchase?
Qstomy runs REORDER-TIMING, REPEAT-BOT-INTENT and NO-REORDER-PRESSURE in real time.
Capabilities
Calculation of predicted_runout per SKU from Shopify history
Orchestrator for 10 rules of deletions in section 5
repeat_suggest_proactive and repeat_reorder_request flows
Snooze chat → sync Klaviyo profile
Pre-filled cart + live stock API
Non-blocking Subscribe CTA post-reorder
Quantified DTC Scenario
DTC pet care brand, 8 replenishment SKUs. Before Qstomy: fixed chat reminder at D+30, repeat_proactive_accept_rate 4.2%, repeat_decline_stop_rate 9%. After REORDER-TIMING + deletions: accept_rate 11.8%, repeat_chat_cvr +62%, snooze_from_chat 14% (vs 38%), second_purchase_rate_60d +11 pts over 10 weeks.
See sales agent, Shopify, demo.

Enzo
June 30, 2026





