A member calls one number. Her appointment comes back booked.
This page follows one booking from the first ring to the record landing in PROVIO, then shows what runs underneath and what connects to your platform. Prepared for G. Jonathan Pina by Bartlett Labs.
- Caller ID
- (713) 555-0142
- Member
- Maria Delgado
- Employer
- Gulf Coast Hospitality Group
- Eligibility
- Active
- Home
- Pasadena, TX 77502
- Work
- Houston, TX 77002
- Language
- English
Matched from the PROVIO member roster. Unknown numbers are matched by name and employer. No symptoms, no diagnosis, no history is asked for or stored.
No menu. No account number. She's already known.
The number she dialed from is looked up in your roster before the assistant says hello. That is why the whole member side of the call takes under a minute: it only has to ask the three things the roster can't know, what kind of care, how soon, and near home or near work.
Every call is logged with a plain summary your team can read. Recording of member calls is your call: kept 30 days, limited to the booking details, or off.
Then it calls the front desks. Three at once, in plain speech.
The assistant works through your contracted practices by service and location, closest to her office first, with the days and times she said work for her already in hand. It introduces itself as PROVIO's automated scheduling assistant on every call. Each practice has its own profile: the scheduling number, front-desk hours, how that office likes to be asked, and whether it prefers a call, a text, or email for confirmations. The profile learns from every call: the best hour to reach that desk, whether there's a phone menu or a hold, whether they're taking new patients. Staff answer the way they would answer any caller.
Midtown Family Medicine
Main Street Primary Care
Museum District Clinic
Every office call ends one of four ways, and each has a next step: times offered (sent to Maria); no answer or voicemail (retry, then the next office); not taking new patients (noted in the profile, next office); the desk asks something the assistant can't answer (it ends politely and your team gets the summary). Phone menus and hold are worked through. If no time fits, the search widens by date or area. If an office books by text, email or an online form instead of the phone, its profile says so and the assistant uses that channel.
Her options land in PROVIO, not in a new app.
Three offered times are posted to Maria's PROVIO account with an alert to choose. Your platform stays the place members already go for everything else.
This is the first of two write-backs into your platform. How it gets there depends on what pro.myprovio.com exposes today; the three paths are near the bottom of this page, in your developer's language.
Primary care, near work. Offered by two offices.
- Wed 9:00 AMMidtown Family Medicine
- Thu 2:30 PMMidtown Family Medicine
- Fri 11:15 AMMain Street Primary Care
An offered time becomes a booking only when the office confirms it.
She picks Thursday at 2:30. Both sides hear it from the same source.
The assistant contacts Midtown Family Medicine again, this time to confirm under Maria's name, using that office's preferred channel. Then the record goes back to PROVIO, where your billing, services and member confirmation flow take over.
To the office
"Confirming Maria Delgado, PROVIO member, Thursday at 2:30 with Dr. Lin." Phone, text or email, per the office profile.
To Maria
A text from the PROVIO line: Thursday 2:30 PM, Midtown Family Medicine, 2900 Smith St. Reply to change it.
To PROVIO
The confirmed appointment, the offered times, and the call summary, written into your platform as one booking record.
Nobody on your staff touched it. Billing and eligibility questions, and anything outside booking, are handed to your team with a summary. The assistant gives no medical advice; an emergency gets a 911 instruction and a flag to your team.
Under the hood
Five named parts. The two in the middle are ours to run; the outside ones are the same vendors behind our live receptionist today. Your platform sits on the right as the system of record. Nothing clinical crosses the dashed line.
Why these parts
- Vapi runs the voice: it hears, speaks, dials, and hands structured results to our service during and after each call. It is what answers our live demo line today.
- Twilio sends the texts from a registered business sender, so confirmations reach members instead of a spam folder, and your numbers port with you.
- Our booking service holds the conversation logic, the 36 provider profiles, and the retry rules. It's written by Bartlett Labs in TypeScript, the same code base as our receptionist, so the member line and the office calls share one brain.
- Postgres is a standard relational database; any developer can read it, and your data exports cleanly.
- PROVIO stays the system of record. We feed it; we don't replace it.
For your developer
Everything above comes down to two questions about pro.myprovio.com: can we read a member by phone number, and can we post a booking back? Three paths, from best to simplest. We start on whichever fits this month and move up when ready.
1. API or webhooks
We call your API to look up a member and to post offered times and confirmed bookings into their account. Or we send webhooks and you receive them.
Needs: an endpoint and a key, or a URL to receive webhooks. Real-time.
2. Scheduled sync
Member and provider rosters refresh daily or hourly by export. Options and confirmations move through a secure form or import your developer approves.
Needs: roster exports and an agreed import. Near real-time.
3. Notification bridge
Members get options and confirmations by text and email from the PROVIO line. Your team gets a daily report to enter into PROVIO.
Needs: nothing technical. A bridge until one of the paths above is ready.
What we send on path 1
Each event is a signed JSON POST to a URL you give us, with a shared secret in the header, an event id so your receiver can ignore duplicates, and a retry if your side returns an error. All times are ISO 8601 in Central Time. Field names are a starting point; we match your schema.
| Event | When | Carries |
|---|---|---|
member.lookup | A call arrives (we call you) | caller phone; you return member id, name, employer, eligibility, home and work address, language, text consent |
options.offered | Offices have answered | member id, request id, service type, up to five slots with provider id, start time, address, expires at |
member.replied | Maria picks a time (in PROVIO or by text) | member id, request id, chosen slot, or opt-out if she texts STOP |
booking.confirmed | The office confirms the member's pick | member id, request id, provider id, start time, how it was confirmed, call summary; you return a booking id |
booking.failed | An office call didn't produce a time | member id, provider id, reason (no answer, voicemail, no openings, not taking new patients, declined), retry at |
request.needs_staff | No office reachable, or a non-booking question | member id, request id, reason, summary, what was tried |
call.ended | Every call ends | call id, direction, who, duration, outcome, summary; recordings and transcripts are pulled through our API on request, never linked in a webhook |
POST https://pro.myprovio.com/hooks/bartlett (your URL)
X-Signature: sha256=… (shared secret)
{
"event": "booking.confirmed",
"request_id": "req_8f2c1a",
"member_id": "mbr_10442",
"provider_id": "prv_017",
"start_time": "2026-10-29T14:30:00-05:00",
"service_type": "primary_care",
"confirmed_via": "phone",
"office_contact": "front desk, Midtown Family Medicine",
"summary": "Confirmed Thursday 2:30 PM with Dr. Lin. Member texted the details."
}
What we need to read from PROVIO
- Member record by phone number: id, name, mobile, employer, eligibility, home address, work address, preferred language if you capture it, and whether the member agreed to texts (when and how). Carriers require that record before we text a member.
- Provider roster: practice name and address, scheduling phone, contracted services, front-desk hours, booking rules, preferred contact channel.
- A sandbox or test account for week 1, and a way to post to a test member before any live member data is used.
Data handling, in one place
- Booking data only: identity, location, service type, timing. Callers who start describing a condition are steered back to scheduling. Nothing clinical is stored.
- Recordings: member calls kept 30 days by default, limited to booking details, or off. Provider-call recording can be disabled.
- Vendor agreements, including any required Business Associate Agreements with the voice and messaging vendors, are settled in week 1 before live member data. The assistant identifies itself as PROVIO's scheduling assistant on every call.
- PROVIO owns its rosters, call logs, transcripts and booking history. Full export on request, including at cancellation. The booking number is yours and ports with you.
- Hosting: Bartlett Labs servers in Dallas, Texas, encrypted in transit and at rest, nightly backups, uptime monitoring with alerts to us.
What gets us started
Week 1 is a 60-minute session with you, your wife and your platform developer. We pick the path above, agree the conversations, and set up the member booking number and the outbound scheduling line. First pilot bookings inside 30 days; the full network within six weeks. The week-4 pilot comes with a report: how many offices answered, how often a phone menu or hold got in the way, how many calls needed a person, and how many bookings confirmed.
kyle@bartlettlabs.io · 765-427-2405
Hear the live receptionist this is built on: call (979) 987-4241, or visit repbot.bartlettlabs.io.
From you, before week 1
- Your developer's name or email.
- The provider list with scheduling numbers and front-desk hours.
- A sample member record, shared securely.
- One employer group to pilot. I'll draft the provider heads-up for you.