Inspiration

Missed healthcare appointments are a common problem. A patient may simply forget, get caught up with work or family responsibilities, or be unable to attend at the last minute. For a clinic, however, a missed appointment can mean an unused slot and additional administrative work.

We wanted to explore a simple question:

What if an AI phone agent could take care of the first step of recovering a missed appointment — naturally, safely, and without requiring clinic staff to make every follow-up call manually?

That idea led to CareCall — a missed appointment recovery agent that uses CALL-E to have a real phone conversation with a patient.

What CareCall Does

CareCall handles an administrative conversation with the patient:

  1. Verifies that it is speaking with the intended patient.
  2. Explains that the appointment was missed.
  3. Asks whether the patient would like to reschedule.
  4. Offers only appointment slots provided by the clinic system.
  5. Lets the patient select a suitable slot.
  6. Explicitly confirms the selected appointment.
  7. Returns a structured result that the appointment system can use to update the booking.

If the patient declines, requests a callback, cannot be verified, or raises a clinical concern, CareCall returns an appropriate structured outcome instead of trying to make assumptions.

CareCall is intentionally administrative, not clinical. It does not diagnose, provide medical advice, or perform medical triage.

How We Built It

The application uses a React frontend and a .NET backend.

React UI
   ↓
.NET CareCall API
   ↓
CALL-E
   ↓
AI Phone Conversation
   ↓
Patient Selects Appointment Slot
   ↓
CALL-E Structured Result
   ↓
.NET API Processes Result
   ↓
Appointment Updated
   ↓
React UI Shows RESCHEDULED

The frontend displays the appointment information and recovery status. The .NET API manages the integration with CALL-E and processes the structured result returned after the phone conversation.

Once the patient selects and explicitly confirms an available appointment slot, the backend updates the appointment and the React UI automatically reflects the new RESCHEDULED status.

The frontend provides the appointment information and available slots. The .NET API manages the integration with CALL-E and monitors the call until a structured result is available.

For the hackathon implementation, the backend polls the CALL-E result every few seconds. Once the conversation is completed, the structured result is processed and the appointment state is updated in the UI.

The CALL-E integration is kept separate from the appointment-management logic so that the phone conversation and the downstream business action remain clearly separated.

What We Learned

The biggest lesson was that building a useful voice agent is not only about getting the conversation to work.

The boundaries around the conversation are just as important.

We learned to explicitly define:

  • What information the agent is allowed to discuss.
  • How patient verification should happen.
  • Which appointment slots the agent can offer.
  • When an appointment can actually be changed.
  • What happens when the patient asks for a callback.
  • How duplicate calls should be prevented.
  • How cancellation and stop conditions should work.
  • How clinical or safety-related conversations should be handed off.

We also learned the value of returning a structured result rather than relying only on natural-language conversation output. This makes it much easier for a backend system to reliably determine what happened and take the appropriate next action.

Challenges

One of the biggest challenges was connecting a natural voice conversation to deterministic application behaviour.

A human conversation can be unpredictable. A patient might accept a slot, reject it, ask for another time, request a callback, or suddenly mention a medical concern.

We therefore designed explicit outcomes such as:

  • RESCHEDULED
  • DECLINED
  • CALLBACK_REQUESTED
  • NO_ANSWER
  • WRONG_PERSON
  • CLINICAL_FOLLOWUP_REQUIRED
  • SAFETY_ESCALATION
  • UNKNOWN

Another challenge was making sure the system did not accidentally turn a callback request into an unlimited automated calling loop. We addressed this by keeping scheduling and recurrence under the control of the host application rather than allowing the voice skill to create hidden recurring calls.

We also had to think carefully about duplicate prevention, cancellation, patient verification, and explicit confirmation before making an appointment change.

What's Next

The hackathon version demonstrates the complete flow from a missed appointment to a successful rescheduling through an AI phone conversation.

In a production implementation, we would extend this with webhook-based event handling, stronger identity verification, robust idempotency and concurrency controls, audit logging, clinic-system integrations, configurable escalation workflows, and more sophisticated scheduling support.

The goal is not to replace healthcare professionals. The goal is to remove repetitive administrative work while keeping humans in control of important decisions.

Built With

  • .net
  • agent
  • ai
  • api
  • appointment
  • artificial
  • automation
  • c#
  • call
  • call-e
  • conversational
  • healthcare
  • intelligence
  • machine-learning
  • phone
  • react
  • rest-api
  • scheduling
  • technology
  • voice
Share this project:

Updates

Submission history