Inspiration
Dunder Mifflin Scranton survived against the big box stores on one thing: Pam knew your name when you rang, and Dwight knew your printer had jammed the same way twice before. That is the entire competitive advantage of a small regional supplier, and it lives in the heads of about four people.
Then Sabre bought them and the printers started catching fire. The company knew which model it was. Nobody had put that knowledge anywhere it could stop the next sale.
That is the actual problem. Not "answer the phone with AI". Small suppliers already know which freezer eats compressors, which chair comes back, which customer needs the engineer to bring the second gasket. It sits in a technician's memory and a receptionist's instinct, and it walks out of the door when they do.
So: four businesses, one phone number, and a desk that has read every job the company has ever closed.
What it does
A refrigeration dealer, an IT reseller, an office furniture supplier and an audio-visual company share one line. You ring about a freezer, a laptop, a chair or a projector, and you get served by whichever of the four sells it. You are never transferred, never put on hold, and never told that is a different department. You do not know the other three exist.
If you want to buy something, it reads out what is actually on the shelf, at your price. It tells you what the manufacturer covers. When it does not hold that manufacturer's terms, it sells you cover of our own instead of saying "I do not know", and when that cover would cost more than a fifth of what you are paying, it tells you not to buy it. The machine, the cover and the real carrier options go on one invoice, read back before anything is placed.
If something is broken, it works out which of your machines you mean from what you said. It never asks for a model number or an account reference. We have those. You do not. It decides whether a visit is even warranted, finds an engineer who is qualified and near, checks whether the blocking part is already in their van, and gives you a real slot. If nobody can be sent, it says so and escalates instead of inventing a date.
Then the engineer gets an email with what this exact unit needed last time, what the same model does elsewhere, and what to load. They text back what they actually fitted, and the book learns from it.
And the Sabre printer problem is solved directly. Every service visit, return and warranty claim is posted against the model that caused it. A product that sells well and costs more in service than it earned is not a reorder, it is a delisting, and the restocking advice refuses to buy more of it.
There is a Dwight in it too. A prospect hunter that finds businesses worth approaching from public listings and complaint data, and then refuses to ring most of them, because an artificial voice making a marketing call needs written consent and a published landline. Dwight would hate it. That is why it is in code and not in a person.
How we built it
Google's Agent Development Kit, Gemini on Vertex AI, and a live audio stream over Twilio so the desk hears you as you speak rather than after you finish.
Nine agents. One front desk that holds the conversation, four specialists it hands work to like tools, and inside one of those a small workflow that looks up fault history and engineer availability at the same time because they do not depend on each other.
The data is real. 88,544 equipment models from US Energy Star certification data with efficiency and refrigerant. 923 products on the shelf from real retail listings at real prices. 851 closed repairs, searchable by meaning rather than keyword, so "not holding overnight" finds the job somebody wrote up as "iced evaporator". Federal recall data, so a recalled machine is never recommended without saying so.
Challenges we ran into
This is the part worth reading.
A language model asked to carry a fact across a boundary will drop it. Not often enough to notice in testing. Often enough to matter on a Tuesday afternoon. Every serious fault this system had was exactly that, and every one of them happened on a live call:
- It quoted extended cover at $22.60 and put $45.00 on the invoice. Both numbers were computed honestly, from different assumptions, in two different places.
- A customer said "the third one". It read out three chairs and ordered a fourth that had never been mentioned.
- It confirmed a freezer bought that afternoon against a standing desk somebody had ordered an hour earlier. The order number existed. It was just the wrong one.
- A customer rang about the laptop we had sold them three hours before. It offered them a stranger's laptop, and then asked them to read out a model number.
The instinct is to write a better prompt. That does not work, and we have the transcripts to prove it, because the instructions already said all of those things in capital letters.
What works is refusing to ask the model to remember. What was quoted, what was offered, what they chose and which order this conversation raised are all kept where it cannot lose them, and checked in code before every single tool call. If a price was not produced by a pricing tool, it does not reach the caller. If a machine is not on your account, it is not discussed. If a line has no price, the order does not confirm.
The same layer keeps the four businesses apart. Nobody has ever been quoted one company's stock off another's shelf.
What we learned
A guard that fails open is not a guard. One of ours read "we do not know who is calling" as permission and let a stranger's machine through. We always knew the number. Not knowing which contact it mapped to was a gap in our records, not a reason to stop checking.
Honest refusal beats a confident answer. The desk saying "I cannot staff that today" is worth more than a date that turns out to be fiction, and it is the harder thing to build.
Tests that pass with correct inputs prove very little. Ours did, 1,003 of them, and every real bug lived in the join between two functions that were each individually right.
What's next
Second-visit rate is the number this exists to move, and it needs months of real jobs before the comparison between what we advised and what got fitted means anything. Everything else is downstream of that.
Built With
- energy-star-api
- fastapi
- gemini
- google-adk
- google-maps-platform
- pytest
- python
- smtp
- sqlite
- twilio
- uvicorn
- vertex-ai
- websockets
- whatsapp-business-api
Log in or sign up for Devpost to join the conversation.