Back to Projects
SHIPPED

IndieStay AI Receptionist

24/7 AI front desk for a boutique hotel on WhatsApp. A multi-agent receptionist answers guest questions instantly, creates housekeeping tickets, runs the booking flow, and hands off to humans when it matters.

What We Built

An AI receptionist — INDIE — that runs the WhatsApp front desk for IndieStay Kalina, Mumbai. Guests message the hotel like they always do; INDIE answers questions, takes service requests, guides bookings step by step, and loops in human staff the moment a conversation needs one.

It is not a chatbot bolted onto an FAQ page. It is a production platform: a NestJS gateway, a multi-agent brain built on Mastra AI, a retrieval-backed knowledge base, and conversation infrastructure engineered for real guests — sessions, memory, escalation, and security.

Guest Experience on WhatsApp

Instant answers, zero hold time

  • Guests ask about WiFi, check-in times, dining, parking, policies — and get instant, sourced answers in English, Hindi, or Hinglish
  • The receptionist mirrors the guest's language, including Romanized Hindi, without ever switching scripts uninvited

Rich, native interactions

  • Interactive buttons and scrollable list pickers instead of rigid keyword menus
  • Room cards with photos, capacity, bed size, and amenities rendered as proper WhatsApp media
  • Property gallery requests ("send hotel images") return categorized photo sets: facade, lobby, washrooms, dining

Service requests that actually happen

  • "Send 2 dental kits to room 303" becomes a structured ticket with items, quantities, and room number
  • Housekeeping and amenity requests flow to staff with full context — no phone tag

Multi-Agent Architecture

Every agent does exactly one job, and agents never guess.

Intent Classifier A structured-output agent classifies every inbound message into 12 intents (booking request, amenity request, complaint, check-in/out, WiFi, and more), extracts the room number, detects language, flags urgency, and decides whether a human should take over — with a hard 5-second timeout and a safe fallback.

Reception Agent INDIE answers only from tool results — never from imagination. Seven tools give it everything it needs: knowledge search, room catalog, property media, WiFi credentials, ticket creation, room-number extraction, and human escalation.

Booking Engine The booking flow is a pure TypeScript state machine — no LLM in the loop for state decisions. Check-in and check-out dates, adults, children, and contact details are collected through guided button taps and validated at every step. Drafts persist in MongoDB, so a guest who abandons mid-booking resumes exactly where they left off. Stale button taps from old messages can never corrupt an active draft.

Retrieval-Augmented Knowledge Base

Hotel facts live as curated markdown documents per property — profile, amenities, dining, FAQs, policies, WiFi, gallery — embedded into a MongoDB vector store via Mastra RAG. The receptionist retrieves top matches before answering, so pricing, policies, and facilities are always current and hallucination-free.

Knowledge is organized per property (Kalina today, Goa-ready tomorrow). Onboarding a new hotel means seeding its documents — not rewriting prompts.

Sessions, Memory & Continuity

  • Conversations idle out after 45 minutes; a sweeper cron expires stale sessions automatically
  • Returning guests get a resume prompt summarizing their last messages — continue or start fresh
  • Working memory tracks room number, language, last intent, name, and open requests across the thread
  • The last 20 messages of context ride along with every reply, so follow-ups like "and the bathroom?" just work

Human Handoff That Behaves

  • Complaints, refunds, urgency, or "let me talk to a person" trigger escalation tickets instantly
  • Guests receive a throttled holding reply: the team reaches out within 30 minutes, 7 AM–11 PM
  • Escalated threads auto-resume after 24 hours if unresolved
  • A Customer Service Window guard blocks any business-initiated message outside WhatsApp's 24-hour reply window — compliance enforced in code

Security & Operations

  • Timing-safe webhook secret verification on every inbound DoubleTick event
  • Guest text is wrapped as untrusted input before reaching any model — prompt injection has nothing to grip
  • Phone numbers masked in logs; Helmet, Joi environment validation, and a global exception filter lock down the surface
  • Pino structured logging across services; Docker Compose provisions MongoDB 7 and Redis 7 for reproducible deploys
  • 43 test suites cover unit and e2e paths, including webhook auth, booking state transitions, and session logic

Built to Scale Across Hotels

A pluggable PMS adapter interface abstracts property management systems behind one contract — availability, reservations, cancellations, invoices. HotelKey integration slots in first; Opera, Cloudbeds, or eZee slot in later without touching agent logic.

Same agents. Same flows. New hotel = new adapter + new knowledge docs.

Tech Stack

Backend: NestJS, TypeScript, Mongoose, BullMQ-ready queues, @nestjs/schedule crons

AI: Mastra AI (agents, memory, RAG), OpenRouter models, Zod structured outputs, MongoDB Vector Search

Messaging: DoubleTick WhatsApp Business API — webhooks, interactive buttons, lists, media

Infra: MongoDB 7, Redis 7, Docker Compose, Pino logging, Helmet

Quality: Jest unit + e2e suites (43 spec files)

IndieStay AI Receptionist | QenixLabs Case Study