Voice booking for PROVIO members

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.

What the assistant already knew
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.

8:16 AM, outbound

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

"We have Wednesday at 9:00 and Thursday at 2:30."
Two times offered

Main Street Primary Care

"Friday at 11:15 is open."
One time offered

Museum District Clinic

Voicemail. Retry scheduled for 10:40 AM.Moved on to the next office; your team sees the flag.
No answer, retrying

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.

8:41 AM, confirmed

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.

System map Members and provider front desks connect by phone and text through Vapi (voice) and Twilio (SMS) to the Bartlett Labs booking service, a Next.js and TypeScript application with a Postgres database on servers in Dallas, Texas. The booking service exchanges member lookups, offered times, confirmed bookings and call logs with the PROVIO platform over API or webhooks. A dashed boundary marks where booking data, never clinical data, is handled. Members call the PROVIO line, get texts Provider front desks 36 practices, phone or text Vapi Voice: listens, speaks, calls Inbound member line Outbound office calls, retries Call summary and transcript Twilio SMS to members and offices Registered business sender Phone numbers, portable Booking service Bartlett Labs, Next.js, TypeScript Conversation logic for both calls Provider profiles and retry rules Member match from your roster Postgres database Rosters, profiles, call logs, bookings. Servers in Dallas, TX, run by Bartlett Labs. Nightly backups. Full export on request. PROVIO platform pro.myprovio.com System of record Member accounts, alerts Billing, confirmations Provider roster Connected by API or webhooks, scheduled sync, or the notification bridge offered times, bookings, call logs member lookup, provider roster Booking data only inside this line: identity, location, service type, timing. No symptoms, diagnoses or history. Vendor agreements (BAAs) settled before live member data.
voice and text traffic data to and from PROVIO booking-data boundary

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.

EventWhenCarries
member.lookupA call arrives (we call you)caller phone; you return member id, name, employer, eligibility, home and work address, language, text consent
options.offeredOffices have answeredmember id, request id, service type, up to five slots with provider id, start time, address, expires at
member.repliedMaria picks a time (in PROVIO or by text)member id, request id, chosen slot, or opt-out if she texts STOP
booking.confirmedThe office confirms the member's pickmember id, request id, provider id, start time, how it was confirmed, call summary; you return a booking id
booking.failedAn office call didn't produce a timemember id, provider id, reason (no answer, voicemail, no openings, not taking new patients, declined), retry at
request.needs_staffNo office reachable, or a non-booking questionmember id, request id, reason, summary, what was tried
call.endedEvery call endscall 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 Bartlett Founder, Bartlett Labs, Crosby, TX
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

  1. Your developer's name or email.
  2. The provider list with scheduling numbers and front-desk hours.
  3. A sample member record, shared securely.
  4. One employer group to pilot. I'll draft the provider heads-up for you.