Zivotta
An AI receptionist for businesses that lose money to missed calls
Zivotta answers inbound calls and messages around the clock, works out what the caller actually wants, books them into a live calendar, and hands the conversation to a person with a full transcript when it needs one.
The problem
The call you miss is the customer you never hear about
An unanswered call is not a delayed customer, it is a lost one. The caller rings the next listing, and the business never learns the enquiry existed. Voicemail does not close that gap: most callers hang up rather than leave a message, and the ones who do leave one have usually kept dialling anyway.
The existing answers all have the same shape. A receptionist covers business hours at a salary. An answering service covers more hours but reads from a script it cannot deviate from, and takes a message either way. Neither one can look at the calendar and book the appointment, which is the only outcome the caller actually rang for.
Anatomy of a call
Four stages, one of which is knowing when to stop
The interesting engineering is not in answering the phone. It is in deciding, mid-call, whether this is something the system should finish or something a person should.
- 01
Answer
Picks up on the first ring, at any hour. Audio is streamed rather than recorded and replayed, so the exchange runs at conversational pace instead of in walkie-talkie turns.
- 02
Understand
Caller intent is captured against the set of outcomes the business actually supports, rather than an open-ended conversation that can wander anywhere.
- 03
Act
Availability is checked against the live calendar and the booking is written back during the call, so the caller hangs up with a confirmed time rather than a promise that somebody will ring them back.
- 04
Hand off
Anything outside the supported set goes to a person, with the transcript and a summary attached, so whoever picks it up starts the conversation already informed.
What was built
Five parts, held to a phone call's tolerances
- 01
Streaming telephony pipeline
Speech is transcribed as it arrives and responses begin before the caller has finished speaking, because a phone line is unforgiving: a pause that would read as thinking in a chat window reads as a dropped call on a handset.
- 02
Intent capture over a constrained action space
The model proposes an action, the system validates it against what the business has actually configured. That boundary is what stops a receptionist promising something the business does not offer.
- 03
Live calendar integration
Availability is read and the booking written back inside the call. Writes are conflict-checked, because a double booking is a more expensive failure than a missed one.
- 04
Context-carrying handoff
A transfer without context is worse than no transfer: the caller repeats themselves and the impression of competence is gone. Every handoff carries the transcript and a summary of what has already been established.
- 05
One pipeline, two channels
Messages run through the same intent and action layer as calls. Splitting them into separate systems is how the two surfaces drift into behaving differently.
Decisions
The choices that shaped it
Every one of these traded something away. Those trades are the interesting part of the build.
- A constrained action space, not an open conversation
- The obvious build is a capable model on the end of a phone line. The problem is that a general conversational agent will confidently agree to things the business cannot deliver. Constraining the action space costs flexibility and buys the only thing that matters here, which is that the receptionist never commits the business to something it has not agreed to.
- Uncertainty resolves to a message, never to a guess
- When intent is unclear, the system takes a message rather than booking its best guess. A taken message is a small, recoverable failure. A wrong appointment is a customer who turns up to a closed door, and that costs more than the call was ever worth.
- Latency is a product requirement, not an optimisation
- Response time was treated as a constraint on the architecture from the start rather than something to tune afterwards. Streaming, early response generation and the shape of the model call all follow from that decision, and reversing it later would have meant rebuilding the pipeline.
- No published performance metrics until they are measured
- Answer rates and booking conversion are the numbers a buyer will ask for, and they are exactly the numbers that are meaningless without a defined denominator. They go on this page when there is a measurement behind them, not before.
Stack
- Next.js
- TypeScript
- LLM pipeline
- Streaming speech
- Telephony
- Calendar sync
Building something that has to hold a conversation and then act on it? The hard part is the boundary between the two. Tell us what it needs to be able to commit to.
hello@cruxcoast.com