Aggregator integration (Zomato + Swiggy)
Active POS can receive Zomato and Swiggy orders alongside walk-in counter sales and dine-in tables. Orders land in a unified Aggregators tab with sound + takeover modal, and the cashier accepts with one tap.
What you get
- Unified order tray — Pending, Preparing, Awaiting pickup lanes for both platforms
- One-tap accept with prep-time picker (15 / 25 / 35 min)
- Auto-accept timer when the cashier is busy — Zomato/Swiggy inaction penalties never fire
- KOT auto-print with
[ZMT-#]or[SWG-#]source prefix on the same counter printer that handles walk-in - Real-time menu sync when items run out at the counter
- Tactical pause (“kitchen overwhelmed → resume in 15 min”)
- Hours of operation — auto-pauses outside business hours
- GST bill upload to Swiggy after pickup (FSSAI compliance)
Onboarding sequence
┌─────────────────────────────────────────────────────────────┐
│ TENANT (BAKERY OWNER) ─────────────────────────────────────│
│ 1. Active POS already configured + printer paired │
│ 2. Catalog 100% veg/non-veg classified │
│ 3. Sign Zomato + Swiggy POS-vendor contracts │
│ 4. Hand outlet IDs + signed paperwork to ops │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ AEGIS OPS ────────────────────────────────────────────────-│
│ 5. Insert encrypted credentials (admin endpoint) │
│ 6. Flip pos_aggregator_orders_enabled = true │
│ 7. Verify entitlement endpoint returns enabled=true │
│ 8. Trigger initial menu sync │
│ 9. Run sandbox webhook smoke test │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TENANT (LIVE) ─────────────────────────────────────────────│
│ 10. Aggregators tab now visible in cashier-portal │
│ 11. First Zomato order arrives → takeover modal pops │
│ 12. Cashier accepts → KOT prints → kitchen prepares │
│ 13. Mark food ready → mark picked → bill auto-uploads │
└─────────────────────────────────────────────────────────────┘Cashier daily flow
When the bakery opens for the day:
- Open
pos.active-reach.ai. Top status bar shows● Online · ● Printer ready. - The Aggregators tab sits next to Counter and Tables. The badge number shows orders currently active across Zomato + Swiggy.
- New orders arrive via takeover modal (full-screen, sound chime, 30-second auto-accept countdown).
┌──────────────────────────────────────────────────────────────┐
│ ─── NEW ZOMATO ORDER · #ZMT-481 ───────────────── ⏱ 0:23 │
│ │
│ ₹620 · 3 items │
│ 1× Margherita Pizza Med │
│ 1× Pepperoni Pizza Med (no olives) │
│ 1× Coke 500ml │
│ │
│ R. Sharma · 2.4 km · Zomato Logistics │
│ │
│ ┌─ ACCEPT — Prep ready in ◯15 ●25 ◯35 min ──────────┐ │
│ │ │ │
│ │ [✓ Accept order · 25 min prep] │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ [Reject ▾] │
│ ⓘ Auto-accepting in 0:07 with default 25 min │
└──────────────────────────────────────────────────────────────┘- After accept: KOT prints automatically with platform-prefix:
┌────────────────────────────┐
│ *** KOT #481 *** │
│ Counter 1 · 14:32 │
│ Source: ZMT delivery │
│ ────────────────────────── │
│ [ZMT #481] │
│ Margherita Pizza × 1 │
│ Pepperoni Pizza × 1 │
│ no olives │
│ Coke 500ml × 1 │
│ ────────────────────────── │
│ FIRE: NOW │
│ ✂ ─ ─ ─ ─ ─ ─ ─ ─ ─ │
└────────────────────────────┘-
When food is ready, tap Mark food ready on the Aggregators card. Status pushes to the platform; rider is notified.
-
When the rider picks up, tap Mark picked. For Swiggy, the GST bill auto-uploads at this step (FSSAI compliance).
Day-to-day controls
Pause for 15 minutes (kitchen overwhelmed)
At the top of the Aggregators tab there’s a status pill. Tap it → choose 15 / 30 / 60 / 120 minutes. Both platforms auto-pause simultaneously and resume automatically when the timer expires.
┌─ ● Accepting orders · tap to pause ────────────────────────┐
│ │
│ Pause for… │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 15 minutes until 14:47 │ │
│ │ 30 minutes until 15:02 │ │
│ │ 60 minutes until 15:32 │ │
│ │ 120 minutes until 16:32 │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘86 an item that just ran out
Long-press a product tile on the Counter screen. A sheet asks whether to mark it unavailable everywhere (catalog + Zomato + Swiggy) or just on this terminal.
┌─ Mark out of stock ────────────────────────────────────────┐
│ ⚠ Pepperoni Pizza Med · ₹320 │
│ │
│ Where to apply? │
│ ◉ Everywhere — catalog + push to Zomato + Swiggy real-time│
│ ◯ This terminal only — catalog flag, no platform push │
│ │
│ [Cancel] [Mark out of stock] │
└──────────────────────────────────────────────────────────────┘The platforms reflect the change within seconds — no more “customer ordered an item we don’t have.”
Hours of operation
Settings → Hours of operation — set per weekday open/close times. The
hours-of-operation tick checks every 5 minutes and auto-pauses
aggregators outside hours. Tenants who don’t configure hours are
treated as 24/7 (opt-in).
Manual menu sync
Settings → Aggregators — tap “Sync menu now” to push the full
catalog to a platform. The periodic worker also runs every 5 minutes,
so this is mostly for after a major catalog edit when you want it
reflected immediately.
What ops needs from you (the tenant)
| Item | Where to find it |
|---|---|
| Zomato outlet ID | Zomato partner dashboard → Settings → Outlet info |
| Zomato API key + webhook secret | Zomato partner dashboard → API integration |
| Swiggy outlet ID | Swiggy partner dashboard → Restaurants |
| Swiggy API key + webhook secret | Swiggy partner dashboard → Integrations |
| GST registration certificate | For FSSAI bill upload compliance |
| FSSAI license number | Required by both platforms |
Email these to your Aegis account manager. Setup takes ~15 minutes once the platforms have provisioned your outlet for POS integration.
Limits + gotchas
- Inaction timeouts: Zomato auto-rejects orders if you don’t respond within ~60s. The cashier-portal’s auto-accept timer fires with default 25-min prep at 30s to leave headroom.
- Menu changes propagate within ~5 minutes via the periodic worker, or instantly via the “86 item” flow.
- Multi-outlet chains: each outlet has its own credentials row.
Currently single-counter terminals (
{location}:counter-1); multi -counter chains are on the roadmap. - iPhone Safari: WebUSB printer support requires Android tablet or Windows/macOS. Bills still send via SMS/WhatsApp on iOS but no thermal print.
Troubleshooting
| Symptom | First check | Likely cause |
|---|---|---|
| Aggregators tab missing | Refresh the page | Entitlement bootstrap not yet fetched |
| ”Paused — auto-rejecting” | Check Aggregators tab top pill | Manual pause or outside hours |
| KOT didn’t print | Settings → Counter Printer → “Test print” | Printer disconnected or paired terminal mismatched |
| Menu out of date on Zomato | Settings → Aggregators → “Sync now” | Worker hadn’t run since edit |
| Customer reports item not found | Long-press tile → “86 item · everywhere” | Catalog is_available drift |
Related guides
- POS integration — base setup
- Product catalog — catalog structure