OmniVoice AI is an intelligent, multi-tenant restaurant automation platform that enables customers to place food orders naturally using voice. Powered by a Python Voice AI Agent, a Node.js/Express REST Backend, and a Real-Time Kitchen Display System (KDS) with Socket.IO, OmniVoice AI bridges spoken intent with kitchen fulfillment with zero friction.
- π£οΈ Conversational Voice AI Agent: Natural language order taking in English/Hinglish with fuzzy menu entity extraction and portion recognition.
- β‘ Real-Time Kitchen Display System (KDS): Instant bidirectional order telemetry using Socket.IO store rooms (
kitchen:<storeId>). - π‘οΈ ReDoS-Safe Menu Matcher: Robust regex sanitization and alias resolution for diverse spoken phrases (e.g., "Butter Chicken", "Murgh Makhani", "CTM").
- π’ Multi-Tenant Architecture: Isolate menus, categories, orders, and live socket channels per store instance.
- π³ Live Kitchen Workflow: Interactive KDS cards supporting real-time status transitions (
DraftβConfirmedβPreparingβReadyβCompleted). - π Audio Chimes & Visual Alerts: Audio-synthesized bell rings and pulse animations for incoming orders.
flowchart TD
Customer([π€ Customer / Voice Kiosk]) -->|Spoken Voice Input| VoiceAgent[π Python Voice AI Agent]
VoiceAgent -->|Fetch Menu Context| API_Context[GET /api/ai/menu-context/:storeId]
API_Context --> NodeBackend[β‘ Node.js / Express Backend]
VoiceAgent -->|Validate & Build Draft| API_Validate[POST /api/ai/validate-voice-order]
API_Validate --> NodeBackend
Customer -->|Confirm Order| API_Confirm[POST /api/orders/:orderId/confirm]
API_Confirm --> NodeBackend
NodeBackend -->|Persist Order Document| MongoDB[(π MongoDB Database)]
NodeBackend -->|Broadcast 'new_kitchen_order'| SocketServer[π Socket.IO Server]
SocketServer -->|Push to 'kitchen:storeId' Room| KDS[π¨βπ³ Live Kitchen Display System]
KDS -->|Update State 'Preparing'/'Ready'| API_Status[PATCH /api/orders/:orderId/status]
API_Status --> NodeBackend
OmniVoice AI_SIH/
βββ Backend/ # Node.js & Express API Server
β βββ public/ # Static Web Assets
β β βββ socket.io.min.js # Offline Socket.IO client library
β β βββ test-kitchen.html # Real-Time Kitchen Display System (KDS)
β βββ src/
β β βββ config/ # DB & Socket.IO initializers
β β βββ Controllers/ # Route business logic (AI, Orders, Menu, Stores)
β β βββ Middlewares/ # Centralized error handlers & validators
β β βββ Models/ # Mongoose schemas (Store, Order, MenuItem, etc.)
β β βββ Routes/ # Express API routes
β β βββ Utils/ # API response & error wrappers
β β βββ seedMenu.js # Database seeder with sample restaurant menu
β βββ server.js # Application entry point (Port 3000)
β βββ package.json
βββ Backend_With_python/ # Python Voice AI Agent
β βββ ... # Voice recognition, entity parsing & AI pipeline
βββ Frontend/ # Client web application / Kiosk interface
βββ .gitignore # Git exclusion rules
βββ README.md # Documentation
- Node.js (v18.x or higher)
- Python (v3.10 or higher)
- MongoDB (Local instance or MongoDB Atlas URI)
-
Navigate to the
Backenddirectory:cd Backend -
Install dependencies:
npm install
-
Create a
.envfile in theBackenddirectory:PORT=3000 MONGO_URI=mongodb://localhost:27017/omnivoice_db CORS_ORIGIN=*
-
Seed the database with sample menu and store data:
npm run seed
(Copy the output
DEFAULT_STORE_IDfor testing) -
Start the backend server:
npm run dev # or npm startServer runs on
http://localhost:3000.
- Ensure the backend server is running.
- Open the KDS in your browser:
http://localhost:3000/test-kitchen.html - Enter your Store ID (e.g.
65f1a2b3c4d5e6f7a8b9c0d1) and click Join Room. - The socket will connect and display incoming orders in real time.
-
Navigate to the
Backend_With_pythondirectory:cd Backend_With_python -
Create and activate a virtual environment:
# Windows python -m venv venv .\venv\Scripts\activate # Linux/macOS python3 -m venv venv source venv/bin/activate
-
Install required Python packages and launch the agent.
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/ai/menu-context/:storeId |
Fetch formatted catalog context for LLM prompt injection |
POST |
/api/ai/validate-voice-order |
Resolve spoken items against catalog, check stock & build draft order |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/orders/:orderId |
Get single populated order document |
GET |
/api/orders/store/:storeId |
Get all orders for a specific store |
POST |
/api/orders/:orderId/confirm |
Confirm order and broadcast to store kitchen room |
PATCH |
/api/orders/:orderId/status |
Update order status (Preparing, Ready, Completed) |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/stores |
Register new store instance |
GET |
/api/menu/:storeId |
Retrieve complete categorized store menu |
GET |
/health |
Service health & liveness probe |
| Event Name | Direction | Payload / Description |
|---|---|---|
join_kitchen_room |
Client β Server | storeId β Subscribes KDS client to kitchen:<storeId> room |
joined_kitchen_ack |
Server β Client | Confirms room subscription |
new_kitchen_order |
Server β Client | Emits confirmed order with line items, table number, total |
order_status_updated |
Server β Client | Emits state change (Preparing, Ready, etc.) |
Developed for the Smart India Hackathon (SIH).
Licensed under the ISC License.