Problem breakdown · No. 004 · October 19, 2026
The morning voicemail backlog is a clinic's quietest revenue leak
Small clinics lose the first part of every day to replaying voicemails by hand, and late-heard cancellations become empty slots. This problem fits one builder, as long as the model drafts and the front desk decides.
The problem
In a small clinic with one or two people at the front desk, the phone is still the main channel. After hours and during busy stretches, calls go to voicemail. Each morning someone replays every message, writes down a name, date of birth, callback number and request, looks the patient up, and calls back.
Most messages are routine: cancel, reschedule, refill request, billing question. The cost is real anyway. The desk works the queue while the waiting room fills. A cancellation heard late is a slot that could have gone to a waitlisted patient. Now and then, a message that needed a clinician sits behind a parking question.
Existing tools miss this gap. Practice management systems handle scheduling and reminders, but voicemail lives in the phone system. AI phone agents try to replace the receptionist, which many clinics do not trust and many patients dislike.
Constraints
- Budget: a modest monthly fee, not an integration project.
- Skills: no IT staff. Setup has to be something like forwarding voicemail-to-email.
- Regulation: voicemails are health information. In the US, every vendor touching audio or text needs a business associate agreement under HIPAA.
- Data access: practice management APIs are often limited or paid. Assume a read-only export at best.
- Trust: the front desk must remain the one who acts. A wrong reschedule or a missed urgent message costs more than the time saved.
- Input quality: noisy audio, misspelled names, numbers spoken fast.
System design
- Ingest: voicemail emails or a phone system webhook. Audio is stored encrypted and keyed by message id, so processing is idempotent on that id.
- Transcription: a speech-to-text provider covered by a business associate agreement.
- Extraction (LLM): structured output with caller name, date of birth, callback number, intent from a fixed enum, requested dates and a short summary. Output is schema-validated. Anything invalid goes to
needs_reviewrather than being retried until it looks plausible. - Urgency (deterministic first): clinic-maintained phrase rules flag a message regardless of the model. The model may raise urgency, never lower it.
- Patient match (deterministic): exact date of birth plus fuzzy name, or phone number, against the patient list. Ambiguous matches show candidates. Nothing is auto-picked.
- Queue: one screen ordered by urgency, then time. Audio sits beside the transcript and the suggested action. A single
doneclick records who handled it and when.
The model belongs where input is messy and the output is a draft. Matching, the urgency floor, ordering and anything that writes stay in plain code.
Trade-offs
There are no automatic writes to the schedule. Staff still click, which is slower, but it preserves trust and avoids a fragile write integration.
Phrase rules will over-flag. A false positive costs seconds, and a false negative is the failure that matters.
This does not answer live calls, so missed calls still happen. It only shrinks the cost of handling them. Retaining transcripts also creates a liability, so audio and text are deleted after a configurable window.
What I would build first
I would start with one clinic and voicemail-to-email forwarding into a dedicated inbox. Behind it sit transcription and extraction, and a plain web page showing audio, transcript, extracted fields, intent and urgency flag. Patient matching would run against a CSV export refreshed by hand. The first version makes no writes anywhere.
In the first week I would measure three things: how long the morning queue takes to clear compared with before, how often the extracted callback number and date of birth were correct, and whether every message staff considered urgent was flagged. In the second week I would tune the phrase rules. I would also add one prompt: when a cancellation arrives, show the waitlist for that slot.
Let the model turn messy input into a structured draft, and keep matching, urgency floors and every write in deterministic code that a person controls.