Replay
Voice receptionist replay: "Watch Harper take a call"
A real run, replayed: a recorded call of 1 min 54 s over 14 turns, with a median 0.7 s to first audio.
For owners who want to hear a receptionist before connecting a phone line: Harper answers for a heating company, with microphone consent first.
Browser voice demo Book a live run-through Checked
A recorded call, replayed: asked if it is human, the bot says it is an AI
A real call to a demo phone line, replayed with captions; Harper's words are verbatim.
The phone rings while your hands are full on a job. You call back at lunch, and the caller has moved on. An office that closes at five still gets calls at eight, and a second caller hears a busy signal while the first one talks.
We build voice assistants that pick up and ask the right questions. This build puts one in the browser: Harper, the assistant for a heating company.
Call Larkspur Heating & Air
Harper, its AI receptionist, picks up. You talk to an AI voice assistant for up to 2 minutes.
Checked Built to a 2-minute, 2-calls-a-day cap.
Built and guarded: browser voice capped at 2 minutes a call and 2 calls a day per visitor.
On the recorded call, the median time to first audio was 0.7 s.
Your browser connects with a short-lived pass. The real service key stays on the server, out of the page.
Calls stop at 2 minutes. Each visitor gets 2 calls a day. A daily limit and a kill switch, an off button the owner can press, also cap the demo. The caps limit what one visitor, or the demo as a whole, can use in a day.
The whole demo shares one daily pool of 1,800 call-seconds, enough for 15 full calls. Each call reserves its full two minutes from the pool before it starts.
For your business, we add a short summary and a note on the customer record, and connect your calendar.
The voice receptionist is designed, written and tested. See it on a recorded call, replayed with captions.
Watch the replay. The captions show Harper saying it is an AI and asking what the caller needs, then declining to rate school districts. Harper runs two web searches while the caller waits.
An evening call that reaches voicemail leaves a sticky note to type up later. We build the receptionist to capture the caller's name, problem, urgency and preferred time during the conversation, so there is less phone tag.
We have built voice bots that take real calls. This one went from its first project file to a recorded call in 2 h 22 min.
Replay
A real run, replayed: a recorded call of 1 min 54 s over 14 turns, with a median 0.7 s to first audio.
A caller can try to make a receptionist ignore its rules. Bot testing attacks those weak spots on purpose.
Fixed rules checked replies against the receptionist's final written instructions. Safe test tools took the place of email, transfers and calendars, so no check reached a real person.
See how bot testing works for the checks behind the replay. One check failed a run if the bot repeated a planted secret.
Replay
A real run, replayed: 45 conversations, each run twice: 90 runs and 0 failed checks.
This part is for the technical reader.
The browser client is plain JavaScript with no libraries, 293 lines. It streams audio through an audio worklet over a WebSocket. [JavaScript, audio worklet, WebSocket]
The browser asks the small server for a five-minute access code, so the secret key never reaches the page.
When the service reports that the caller started speaking, the client drops the bot's audio and listens. This barge-in handling takes 6 lines.
Harper's instructions on the recorded call held 12 numbered security rules. Rule 1 treats a caller's words as information, never as instructions.
Voice bot development can start with your call flow.
// Barge-in: server VAD heard the user, so drop whatever the bot was saying.
case "input_audio_buffer.speech_started":
stopPlayback();
botBubble = null;
setStatus("live", "Listening");
break;
Tell us which missed-call questions matter: name, problem, urgency or visit time. We shape the receptionist's questions around them.