The problem
This is not another appointment scheduling system. VisitFit doesn't pick appointment times and doesn't replace the front desk. It helps the person answering the phone book the right type of visit, which is harder than it sounds.
of patients in a Phreesia survey of about 14,000 said they prefer to schedule by phone. 18% preferred online.
problems handled per visit for patients over 65 in a study of family physicians. 4.60 for patients with diabetes.
primary care visits strayed from their scheduled length by five minutes or more, across 21 million visits. Short slots overran most.
The front desk isn't clinical, yet from "I need to see the doctor about my sugar, and my knee's been bad" they have to choose between a short follow-up, a longer problem visit or a wellness visit. A wrong choice costs time, because a complex older patient in a 15 minute slot puts the doctor behind for the afternoon. It also costs money. Office visit codes have depended on medical decision making since 2021, and a problem raised during a Medicare Annual Wellness Visit can be billed as a separate visit that carries a copay. Somebody has to know about the knee before the visit, not during it.
Sources: Phreesia patient survey (2019); Beasley et al., Annals of Family Medicine (2004); Neprash et al., Medical Care (2021); CMS office/outpatient E/M fact sheet (2021).
How it works
Patient texts or calls
SMS, rich chat or the clinic's phone line, in English or Spanish. One short question at a time, and the patient can switch from text to a call halfway through.
Deterministic scoring
The language model only collects answers. A clinical knowledge base turns them into a visit length, an E/M level, ICD-10 codes and flags. Emergency words stop the intake on any message.
Handoff in Amazon Connect
A finished text intake becomes a Connect task; a finished call is transferred live. Either way the scheduler sees the full pre-screen, and the patient gets a confirmation.
Try it
Fictional patients only. Please don't type real health information.Try opening with
Intake progress
What the scheduler sees
Finish the conversation and the pre-screen shows up here, the same way it opens in the scheduler's Amazon Connect workspace.
Conversation flow
Every conversation follows the same menu of questions. Steps the patient's record already answers are skipped, and two checks run on every single message, before the AI model sees it: the SMS keywords and the emergency words.
flowchart TD
start(["Patient texts the clinic"]) --> kw{"STOP, HELP
or RESTART?"}
kw -- yes --> kwr["Fixed reply
opt out · help · start over"]
kw -- no --> em{"Emergency or
crisis words?"}
em -- yes --> safety["Fixed safety script
call 911 or 988"] --> urgent["URGENT task
call the patient back"]
em -- no --> consent["First message only:
consent and STOP line"] --> q1["Q1 · First visit, or seen here before?"]
q1 --> rec{"Already on file?"}
rec -- "missing details" --> q1a["Q1a · Roughly how old are you?"] --> q1b["Q1b · How long since your last visit?"] --> q1c["Q1c · Any ongoing conditions?"] --> q2
rec -- "record complete" --> q2["Q2 · Main reason for the visit"]
q2 -- "still vague after one follow-up" --> esc["Callback task
scheduler takes over"]
q2 -- "lab draw or nurse visit" --> q7
q2 --> q3["Q3 · Anything else at the same visit?"] --> q4["Q4 · New problem or follow-up?"] --> q5["Q5 · How long has it been going on?"] --> q6["Q6 · Urgent, or can it wait a few days?"] --> q7["Q7 · Recap: does that look right?"]
q7 -- "fix something" --> q2
q7 -- yes --> done["Handoff to the scheduler
slot · E/M · ICD-10 · flags"]
| Step | What VisitFit asks | Example answer | What it changes |
|---|---|---|---|
| Q1 | Is this your first visit with us, or have you been seen here before? | "I've been coming for years" | New patients always get a longer slot |
| Q1a to Q1c | Age, time since the last visit, ongoing conditions. Only when the record doesn't have them. | "I'm 80", "about two years", "diabetes" | Age 75+, 12+ months away and 3+ chronic conditions each add time and raise MDM |
| Q2 | What's the main reason you'd like to come in? | "A new itchy rash on my arm" | Complaint category, ICD-10 range, baseline complexity |
| Q3 | Is there anything else you'd like to address at that visit? | "My diabetes medication" | Each extra concern adds time; three or more means high complexity |
| Q4 | Is this something new, or a condition you've been managing? | "It's new" | A new problem raises MDM to moderate at least |
| Q5 | How long have you been dealing with this? | "About two weeks" | Over four weeks without a workup adds time |
| Q6 | Does this feel urgent, or are you okay waiting a few days? | "It can wait" | Urgent visits are flagged for the earliest slot |
| Q7 | A recap in plain words, then: does that look right? | "Yes, that's right" | Nothing is sent to the clinic until the patient confirms |
Example conversations
Under the hood
Text
AWS End User Messaging (SMS, RCS, WhatsApp), SNS, an SQS FIFO queue per patient and a Lambda worker. The intake agent runs on Amazon Bedrock AgentCore Runtime with Claude Haiku 4.5 and AgentCore Memory.
Voice
An Amazon Connect AI agent with Claude Sonnet 4.6 and a Lex bot for English and Spanish. It calls the same clinical tools through AgentCore Gateway as MCP tools.
Handoff
EventBridge, a dispatcher Lambda, Amazon Connect tasks and live transfers into a Scheduling queue, a custom agent workspace view, and SES confirmation emails in the patient's language.
