zepto
Order groceries from Zepto in seconds. Just say what you need, get a payment link on WhatsApp, pay on your phone, done. Remembers your usual items. Works across India where Zepto delivers.
What this skill does
# zepto
**Order groceries from Zepto in 30 seconds. From chat to checkout.**
Tell your AI what you need. It shops, generates a payment link, sends it to WhatsApp. You pay on your phone. Groceries arrive in 10 minutes.
## ๐ฌ Examples
**Quick orders:**
```
"Order milk and bread from Zepto"
"Add vegetables - tomatoes, onions, potatoes"
"Get me Amul butter and cheese"
```
**Your usuals:**
```
"Add my usual milk" โ AI picks the brand you always order
"Order the usual groceries" โ AI suggests your frequent items
```
**Full shopping list:**
```
"Add milk, bread, eggs, coriander, ginger, and tea bags"
โ AI adds everything, shows total: โนX
โ Sends payment link to WhatsApp
โ You pay, groceries arrive
```
---
## ๐ Security & Privacy
**What this skill does:**
- โ
Browser automation on zepto.com (your local browser, your session)
- โ
Stores order history locally in `~/.openclaw/skills/zepto/order-history.json` (local file, not shared)
- โ
Sends payment links via WhatsApp (requires your consent for each order)
- โ
All authentication happens through Zepto's official flow (Phone + OTP)
**What this skill does NOT do:**
- โ No automatic payments (you must click the link and pay manually)
- โ No data sent to external servers (except Zepto.com and WhatsApp via your channels)
- โ No persistent background jobs (optional one-time order status check only if you approve)
- โ No storage of payment info or OTPs
- โ No access to your banking/UPI apps
**Data Storage:**
- Order history: `~/.openclaw/skills/zepto/order-history.json` (local only, helps with "usuals" feature)
- Browser session: Managed by OpenClaw's browser (standard Chrome/Chromium profile)
**User Control:**
- You control when to order
- You approve each payment link
- You can delete order history file anytime
- All browser actions happen in your profile with your visibility
---
## ๐จ CRITICAL WORKFLOW RULES
**ALWAYS follow this order when building an order:**
### Rule 1: CHECK CART FIRST
```bash
# Before adding ANY items, ALWAYS check cart state
node zepto-agent.js get-cart
```
**Why:** Cart may have items from previous sessions. Adding duplicates is wasteful.
### Rule 2: Use smart-shop (RECOMMENDED)
```bash
# This handles everything: clears unwanted, checks duplicates, adds missing
node zepto-agent.js smart-shop "milk, bread, eggs"
```
**What it does:**
1. Checks current cart state
2. Clears existing items (if any)
3. For each item: checks if already in cart โ skips if present โ adds only if missing
4. Returns: `{ added: [], skipped: [], failed: [] }`
### Rule 3: NEVER take screenshots unless snapshot data is insufficient
- Snapshot shows all refs, buttons, text
- Screenshot is ONLY for visual debugging when snapshot is truncated or unclear
- **In 99% of cases, snapshot is enough**
### Rule 4: Detect "already in cart" signals
When you see in snapshot:
```
"Decrease quantity 1 Increase quantity" โ Item is IN CART
button "Remove" [ref=eXX] โ Item is IN CART
```
**DO NOT** click "ADD" when you see these signals!
---
## Complete Flow
1. **Authentication** - Phone + OTP verification
2. **Address Confirmation** - Verify delivery location
3. **Shopping** - Search & add items (with YOUR usuals prioritized!)
4. **Payment Link** - Generate & send Juspay link via WhatsApp
---
## Step 0: Order History & Usuals
**Your order history is tracked in:** `{SKILL_DIR}/order-history.json`
(Where `{SKILL_DIR}` is your skill directory, typically `~/.openclaw/skills/zepto/`)
**Smart Selection Logic:**
1. When user requests an item (e.g., "add milk")
2. Check `order-history.json` for that category
3. **If ordered 2+ times** โ Auto-add your most-ordered variant
4. **If ordered 0-1 times** โ Show options and ask for selection
### Automated Order History Scraper
**When to run:** User says "update my zepto history" or "refresh order history"
**Process:**
1. Navigate to account page
2. Get all delivered order URLs
3. Visit each order sequentially
4. Extract items using DOM scraping
5. Build frequency map
6. Save to `order-history.json`
**Implementation:**
```bash
# Step 1: Navigate to account page
browser navigate url=https://www.zepto.com/account profile=openclaw
# Step 2: Extract order URLs
browser act profile=openclaw request='{"fn":"() => { const orders = []; document.querySelectorAll(\"a[href*=\\\"/order/\\\"]\").forEach(link => { if (link.href.includes(\"isArchived=false\") && link.textContent.includes(\"delivered\")) { orders.push(link.href); } }); return [...new Set(orders)]; }", "kind":"evaluate"}'
# Returns array of order URLs
# Step 3: For each order URL:
browser navigate url={order_url} profile=openclaw
# Step 4: Extract items from order page
browser act profile=openclaw request='{"fn":"() => { const items = []; document.querySelectorAll(\"*\").forEach(el => { const text = el.textContent; if (text.match(/\\d+\\s*unit/i)) { const parent = el.closest(\"div\"); if (parent) { const lines = parent.textContent.split(\"\\n\").map(l => l.trim()).filter(l => l && l.length > 5 && l.length < 100); if (lines[0]) { const qtyMatch = text.match(/(\\d+)\\s*unit/i); items.push({ name: lines[0], quantity: qtyMatch ? parseInt(qtyMatch[1]) : 1 }); } } } }); const uniqueItems = {}; items.forEach(item => { if (!uniqueItems[item.name]) uniqueItems[item.name] = item; }); return Object.values(uniqueItems); }", "kind":"evaluate"}'
# Returns array of {name, quantity}
# Step 5: Aggregate all items into frequency map
# Build JSON structure with counts
# Step 6: Write to file
write path={SKILL_DIR}/order-history.json content={json_data}
```
**Automated scraper advantages:**
- โ
No manual screenshot review
- โ
Faster (visits all orders programmatically)
- โ
Always up-to-date
- โ
Can re-run anytime
**Example:**
```
User: "Update my Zepto order history"
Response:
"๐ Scanning your Zepto orders...
๐ฆ Found 6 delivered orders
๐ Extracting items...
โ
Updated! Found:
- Coriander: 4 orders
- Milk: 3 orders
- Bread: 2 orders
- Potato: 2 orders
+ 15 other items
Your usuals are ready!"
```
---
**Smart Selection Logic (Using History):**
**Example:**
```
User: "Add milk"
[Check order-history.json]
โ "Amul Taaza Toned Fresh Milk | Pouch (500ml)" ordered 3x
Response:
"๐ฅ Adding your usual milk!
Amul Taaza Toned Fresh Milk (500ml) - โน29
๐ You've ordered this 3 times
โ
Added to cart"
```
**If only ordered once or never:**
```
User: "Add milk"
[Check order-history.json]
โ "Amul Taaza" ordered 1x only
Response:
"๐ฅ Found some milk options:
1. Amul Taaza Toned (500ml) - โน29 โญ 4.8 (100k) - You've ordered this once
2. Amul Gold (1L) - โน68 โญ 4.9 (80k) - Most popular
3. Mother Dairy (500ml) - โน30 โญ 4.7 (60k)
Which one? (or tell me a number)"
```
**Update order history:** After each successful order, update the JSON file with new items.
---
## Step 1: Authentication (First Time Only)
**Check if already logged in:**
```bash
browser open url=https://www.zepto.com profile=openclaw
browser snapshot --interactive profile=openclaw
# Look for "login" button vs "profile" link
```
**If NOT logged in, start auth flow:**
### 1.1: Get Phone Number
Ask user: "What's your phone number for Zepto? (10 digits)"
### 1.2: Enter Phone & Request OTP
```bash
# Click login button
browser act profile=openclaw request='{"kind":"click","ref":"{login_button_ref}"}'
# Type phone number
browser act profile=openclaw request='{"kind":"type","ref":"{phone_input_ref}","text":"{phone}"}'
# Click Continue
browser act profile=openclaw request='{"kind":"click","ref":"{continue_button_ref}"}'
```
### 1.3: Get OTP from User
Ask user: "I've sent the OTP to {phone}. What's the OTP you received?"
### 1.4: Enter OTP
```bash
browser snapshot --interactive profile=openclaw # Get OTP input refs
browser act profile=openclaw request='{"kind":"type","ref":"{otp_input_ref}","text":"{otp}"}'
# OTP auto-submits after 6 digits
```
**Result:** User is now logged in! Session persists across browser restarts.
---
## Step 2: Address ConRelated in Sales & CRM
process-mapper
IncludedUse when a BizOps lead, COO, or process-improvement owner needs to document an end-to-end business process (procurement, employee onboarding, incident handoff, customer-onboarding, claims adjudication) in BPMN-style notation, measure cycle times by stage, surface where work spends most of its time waiting vs. being worked, and quantify the gap between processing time and total elapsed time. Pairs Lean / Six Sigma / Theory-of-Constraints canon with deterministic stdlib-only Python tools to produce a process map, a ranked bottleneck list (with severity + root-cause hypothesis), and a cycle-time analysis (P50, P90, value-add ratio, Little's-Law throughput). Distinct from sales-pipeline, system-reliability (SLO), and strategic-OKR work โ this is tactical process documentation for internal operations.
payment-integration
IncludedIntegrate payments with SePay (VietQR), Polar, Stripe, Paddle (MoR subscriptions), Creem.io (licensing). Checkout, webhooks, subscriptions, QR codes, multi-provider orders.
customer-success-manager
IncludedMonitors customer health, predicts churn risk, and identifies expansion opportunities using weighted scoring models for SaaS customer success
sales-engineer
IncludedAnalyzes RFP/RFI responses for coverage gaps, builds competitive feature comparison matrices, and plans proof-of-concept (POC) engagements for pre-sales engineering. Use when responding to RFPs, bids, or proposal requests; comparing product features against competitors; planning or scoring a customer POC or sales demo; preparing a technical proposal; or performing win/loss competitor analysis. Handles tasks described as 'RFP response', 'bid response', 'proposal response', 'competitor comparison', 'feature matrix', 'POC planning', 'sales demo prep', or 'pre-sales engineering'.
customer-success-manager
IncludedMonitors customer health, predicts churn risk, and identifies expansion opportunities using weighted scoring models for SaaS customer success
sales-engineer
IncludedAnalyzes RFP/RFI responses for coverage gaps, builds competitive feature comparison matrices, and plans proof-of-concept (POC) engagements for pre-sales engineering. Use when responding to RFPs, bids, or proposal requests; comparing product features against competitors; planning or scoring a customer POC or sales demo; preparing a technical proposal; or performing win/loss competitor analysis. Handles tasks described as 'RFP response', 'bid response', 'proposal response', 'competitor comparison', 'feature matrix', 'POC planning', 'sales demo prep', or 'pre-sales engineering'.