Kuiklo

Voice Order Assistant

A customer sends a voice note on Telegram (WhatsApp later). The bot takes the order, confirms every charge before the customer taps Confirm, and replies in the founder's voice.

Built for Kuiklo, Patna Channel Telegram bot @Kuicklobot Language Hinglish in, Hinglish out Prices demo values, labeled
What the customer sees

One voice note. One clear order.

Every message below is the real bot text. Buttons replace typing wherever a tap works. Prices come from the demo catalog.

Greeting in the founder's voiceOn /start the bot sends a voice note. It is cloned from Shyam Gupta's voice with Sarvam. Every voice message carries the AI label in its caption.
Customer speaks, bot reads it backThe Hinglish voice note goes to a local STT server on the same box. The bot lists what it understood before it asks anything.
Short follow-up questions, voicedBrand, delivery slot, name, phone and area. Each question is one voice note with buttons. Rules extract the order first; a DeepSeek call is the fallback when rules find nothing.
Full breakdown before ConfirmItems, delivery fee, handling fee, total, payment mode, delivery promise, masked phone. No charge can appear later that is not on this screen.
60-second change windowAfter Confirm the bot shows a clock and a change button. A brand swap shows before and after, line by line. After 60 seconds the button is refused.
K
Kuicklobot
bot
Today
/start09:30
0:08
नमस्ते। क्विकलो यूज़ करने के लिए थैंक यू। मैं फ़ाउंडर एंड सीईओ श्याम गुप्ता। बताइए, आपकी कैसे मदद कर सकता हूँ?
🎙️ AI-generated voice (Shyam Gupta ki awaaz). 👋 क्विकलो डेमो बॉट में स्वागत है! वॉइस नोट या टेक्स्ट भेजिए, जैसे: "1 kg atta, 2 roti, 3 kg bhindi, kal subah" ⚠️ यह डेमो है। दाम डेमो वैल्यू हैं।09:30
0:06
Customer, Hinglish: "ek kilo atta, do roti, teen kilo bhindi, kal"
09:31
Maine yeh samjha: • Atta 1 kg • Roti 2 pcs • Bhindi 3 kg 📅 Delivery: kal (9 Oct)09:31
0:03
आटा कौनसा ब्रांड चाहिए?
🎙️ AI-generated voice (Shyam Gupta ki awaaz). Atta kaunsa brand chahiye?
Aashirvaad Select Sharbati ₹48/kg ✓
Pillsbury Chakki Fresh ₹52/kg
Fortune Chakki Fresh ₹50/kg
Patanjali Whole Wheat ₹44/kg
Koi bhi chalega
09:31
0:03
डिलीवरी का स्लॉट क्या रखें, सुबह या शाम?
🎙️ AI-generated voice (Shyam Gupta ki awaaz). Ek detail chahiye: Delivery slot kya rakhein?
Morning ✓Evening
09:32
3 aur sawal, voice mein: naam, phone, area
🧾 Order Summary
Item              Qty     Price
Atta              1 kg    ₹48
Roti              2 pcs   ₹20
Bhindi            3 kg    ₹120
--------------------------------
Items subtotal            ₹188
Delivery fee (demo)        ₹25
Handling fee (demo)         ₹5
--------------------------------
TOTAL                     ₹218
📦 Delivery: kal, morning slot 💳 Payment: COD (cash on delivery) 🏠 Area: Kankarbagh 👤 Naam: Ramesh | 📱 98xxxxxx10 Prices and fees are demo values. Order confirm karne se pehle sab kuch dekh lijiye.
✅ Confirm order ✓✏️ Kuch badalna hai
❌ Cancel
09:33
✅ Aapka order process ho raha hai. Order ID: ORD-20261008-0001 ⏱️ Ek minute ke andar koi change ho to abhi bata sakte hain.
🔄 Order change karna hai ✓👍 Sab theek hai
09:33
Kaunsa item badalna hai?
Atta ✓RotiBhindi
09:33
Atta ke brand options (demo catalog):
Aashirvaad Select Sharbati ₹48/kg
Pillsbury Chakki Fresh ₹52/kg ✓
Fortune Chakki Fresh ₹50/kg
Patanjali Whole Wheat ₹44/kg
09:34
🔁 Change summary Atta: Aashirvaad 1 kg ₹48 → Pillsbury 1 kg ₹52 (+₹4) Items subtotal: ₹188 → ₹192 Delivery and handling fees: unchanged TOTAL: ₹218 → ₹222
✅ Change confirm karein ✓❌ Purana order rakhein
09:34
✅ Aapke order mein change kar diya gaya hai. Updated order dispatch ho gaya. Naya total: ₹22209:34
After 60 seconds
⏱️ Change ka time nikal gaya. Order change ke liye Kuiklo support se contact karein.09:35

Scroll inside the phone to see the whole flow, including the 60-second change window.

How it works

One n8n workflow, three local services, one box.

Telegram calls a 21-node n8n workflow on an Oracle Cloud box. Speech-to-text, the FAQ bot and the voice service run on the same box. Nothing leaves it except Telegram, the Sarvam voice call, and the DeepSeek fallback for hard-to-parse orders.

Architecture: Telegram to n8n on Oracle Cloud to local STT, FAQ and voice services Telegram customer, @Kuicklobot Oracle Cloud box (aarch64, 4 CPU, no GPU) n8n.linkright.in and the local services share one machine n8n workflow: Kuiklo MAIN 01 Telegram Order Bot (21 nodes) Trigger Config Kill switch? Normalize Voice? get file STT Extract (rules) DeepSeek fallback Order brain FAQ? KB Voice reply? Sarvam voice Telegram: send state: sessions and orders in n8n static data, phone masked bhavna.ai STT Apex Hinglish whisper fine-tune CTranslate2 int8 via faster-whisper POST /transcribe, OGG in, text out 127.0.0.1:8787, pm2 bhavna-stt ~0.45x real time on CPU FAQ bot all-MiniLM-L6-v2 retrieval, top 3 gemma3:4b on Ollama writes the reply 31 Q&A from kuiklo.com pages POST /ask, off-topic guard at 0.30 answers in Hinglish, 24 to 45 s Voice service Sarvam voice clone, hi-IN Devanagari text only (T-31) cached by text hash, 200 chars max 100 voice messages per day cap AI label on every caption STT node KB node Sarvam voice node webhook reply
n8n workflow local service on the same box external call, only when rules fail Dashed box: everything inside runs on one Oracle machine

Leaves the box

Telegram messages. One Sarvam API call per new voice line (then cached). One DeepSeek v3.2 call via OpenRouter when rules cannot read the order.

Stays on the box

Every voice note, every transcript, the FAQ knowledge base, the catalog, sessions and orders. Secrets sit in a 0600 file on the box, never inside n8n nodes.

Kill switch

One Config flag stops the whole bot. Fees, swap window, model names and the greeting text are Config values, not buried in code.

Transparency and fairness rules

The customer always sees the full bill first.

These rules come from the spec and each one has a unit test behind it.

  • Every charge is a line item in the summary. No hidden fee.
  • The summary is shown before confirmation. Confirmation is a separate tap.
  • Any change after confirmation shows before and after, line by line.
  • Delivery fee and handling fee do not change silently. If they change, show it.
  • Payment mode and delivery promise are always shown.
  • Every price is labeled "demo" in the demo build.
  • The bot never says a price is final when it is a demo value.
  • Options such as "change order" are shown as buttons, never hidden. Typed "haan" still works as a fallback.
Privacy and safety

Built so the founder can show it without worry.

Voice clone, with consent

The clone is used only after Shyam Gupta's consent is on file in a private folder. Every voice reply carries the caption "AI-generated voice (Shyam Gupta ki awaaz)". It is never used to make a customer believe they are speaking to him personally. Without consent the bot falls back to text.

Stock is never shown

The catalog is loaded through a column allowlist. The stock flag only hides unavailable items and is dropped before anything else runs. "Kitna stock hai?" gets a refusal: "Stock ki jaankari main nahi de sakta." Tested in T-06 and T-22.

Phone is masked

Phone numbers show only the last two digits in every customer message (98xxxxxx10) and are stored masked. Tested in T-10.

Test chat only

No real customer Telegram IDs are stored in the repo. Sessions live in n8n static data for the demo only. Real payments and real dispatch are out of scope.

Secrets stay off the workflow

Bot token, Sarvam key and voice id live in a 0600 file on the Oracle box. n8n nodes never hold them. The STT, FAQ and voice servers listen on 127.0.0.1 only.

Caps on spend

200 characters per voice message, 100 voice messages per day. Over the cap the same message goes out as text. Audio is cached by text hash, so a repeated line costs nothing again.

Numbers we measured

Real timings from the demo box, 8 Oct 2026.

Measured on the Oracle Cloud machine: aarch64 Linux, 4 CPU, no GPU. Only numbers we recorded ourselves are shown.

0.45x
STT speed, real time
A 10 s voice note takes about 5 s. A 70 s clip took 29.4 s, near word for word.
24 to 45 s
FAQ answer, gemma3:4b
Per question, on CPU. Good Hinglish, correct facts. gemma3:1b is 6 to 16 s but weaker.
₹3
per 1,000 voice characters
Sarvam voice clone pricing. ₹100 free credits, so about 400 short replies at 80 characters each.
36
unit tests green
T-01 to T-31 plus extras in node n8n/test/test_brain.js. Run again on 8 Oct, all pass.
21
n8n nodes
One MAIN workflow. Config and kill switch at the top. Voice, FAQ and LLM fallback are branches.
31
Q&A in the knowledge base
Pulled from kuiklo.com pages. Off-topic questions are refused in 0.14 s without calling a model.

The greeting voice line (121 characters) was generated once and is served from cache. Extraction uses rules first; the DeepSeek fallback via OpenRouter is only called when rules find nothing, so most orders make no LLM call at all.

Built on Kuiklo's own words

The FAQ bot answers from kuiklo.com, not from guesses.

31 question and answer pairs were taken from Kuiklo's public pages on 8 Oct 2026. The bot finds the closest 3 with MiniLM embeddings and writes a Hinglish reply with gemma3:4b. A question that scores under 0.30 is turned away with "Yeh sawal Kuiklo ke baare mein nahi lag raha."

Are there delivery charges on Kuiklo? Any hidden fees?
No. Kuiklo says there are zero delivery charges. What you see at checkout is exactly what you pay. No hidden fees, no platform fees, no surge pricing, no convenience fee.
Which city does Kuiklo serve? Is Kuiklo available in my area?
Kuiklo operates in Patna only. It serves major localities in Patna, including Kankarbagh, Boring Road, Fraser Road, Kidwaipuri, Bailey Road, Rajendra Nagar, and more.
Can I cancel or change my order after placing it?
Changes or cancellations are only possible within the first 60 seconds after placing an order, because of the rapid fulfilment model. Once an order is packed for delivery, it cannot be cancelled.
What payment methods does Kuiklo accept?
Credit and debit cards, digital wallets (such as Apple Pay, Google Pay, Amazon Pay, Mobikwik), UPI, LazyPay, Paytm, and cash on delivery in select areas. Payments go through RazorPay as the payment gateway.

What the bot said, live

Customer: delivery charge kitna hai?

Bot (gemma3:4b, 24 s): "Koi delivery charge nahi hai! Kuch hidden fees bhi nahi hain, aap jo checkout pe de..."

Customer: kaunse area mein deliver karte ho?

Bot (gemma3:4b, 31 s): "Kuiklo Patna mein hi kaam karta hai. Hum Kankarbagh, Boring Road, Fraser Road, Kidw..."

FAQSupportAbout10-minute deliveryAffordable groceryTermsPrivacyRefer and EarnKuiklo MoneyKuiklo LitPrint on Demand
Demo catalog

197 mock SKUs, 114 products, 14 categories, Patna-flavoured.

Ten of the rows the bot reads today. The list is synthetic: real brands, made-up prices. It will be replaced by Kuiklo's real list. The stock flag is never shown to a customer.

SKUProductBrandVariantUnitPrice (demo)Category
ATA-001attaAashirvaadSelect Sharbatikg₹48staples
ATA-002attaPillsburyChakki Freshkg₹52staples
DAL-001dalTata SampannToor (Arhar)kg₹160staples
TEL-001telFortuneSunflower 1 Lpcs₹140staples
DUD-001doodhSudhaToned 500 mlpcs₹26dairy
PNR-001paneerSudhaPaneer 200 gpcs₹80dairy
BRD-001breadHarvest GoldWhite 400 gpcs₹40bakery
ROT-001rotiKuiklo KitchenTawa Rotipcs₹10ready
BHI-001bhindiFarm FreshLoosekg₹40vegetables
KEL-001kelaFarm FreshDozenpcs₹50fruits

Columns the bot may read: sku, product, brand, variant, unit, unit_price_inr, category, in_stock_flag. The flag only hides an item. Quantities are never read.

What is next

From demo to Kuiklo's counter.

Pending manual checks: a typed order and a 60-second swap in a real Telegram chat from the owner's phone (M-01, M-03). The workflow is live and the webhook is set; unit tests and a real voice bubble with buttons are confirmed.