AI Auto-Calling for Appointment Reminders
Appointment reminders are a headache for any service business. Slots go idle, administrators spend hours on the phone, clients forget to show up. We have developed voice bots for 50+ medical centers, beauty salons, and auto repair shops — and in every case, we reduced no-show rates from 20–35% down to 5–10%. The result is direct revenue: if you have 1,000 appointments per month and an average ticket of 3,000 RUB, filling those empty slots yields up to 600,000 RUB in additional monthly income.
Why AI Calling Beats Manual Reminders
Manual calling overloads administrators, leads to missed calls, and introduces human error. An AI bot works non-stop, handling up to 1,000 calls in parallel with consistent quality. Compare: the average admin spends 30 seconds per call; the bot takes 10 seconds. For a stream of 100 appointments per day, that saves 12 person-hours. Plus the bot never forgets to call and never gets tired by evening.
How the AI Bot Handles Unusual Responses
After the bot connects and delivers the reminder script, it analyzes the client's response using an NLP model (transformer-based). If the client explicitly confirms, the appointment is logged as confirmed. If they ask to reschedule or cancel, the corresponding subprocess triggers. In case of an ambiguous phrase, the bot asks again. This approach achieves over 96% intent classification accuracy on real dialogues. Technically, this is implemented via a classifier based on Sentence-BERT — sentence embeddings are compared to reference scenarios using cosine similarity.
Reminder Logic
REMINDER_SCHEDULE = {
"medical_appointment": [
{"offset": timedelta(days=2), "message": "long_reminder"},
{"offset": timedelta(hours=4), "message": "day_reminder"},
{"offset": timedelta(hours=2), "message": "final_reminder"},
],
"beauty_salon": [
{"offset": timedelta(days=1), "message": "long_reminder"},
{"offset": timedelta(hours=3), "message": "final_reminder"},
],
"service_center": [
{"offset": timedelta(hours=24), "message": "long_reminder"},
{"offset": timedelta(hours=2), "message": "final_reminder"},
]
}
async def schedule_reminders(appointment: dict):
schedule = REMINDER_SCHEDULE.get(
appointment["type"], REMINDER_SCHEDULE["beauty_salon"]
)
appointment_dt = datetime.fromisoformat(appointment["datetime"])
for reminder in schedule:
reminder_time = appointment_dt - reminder["offset"]
if reminder_time > datetime.utcnow():
await task_queue.schedule(
task="send_appointment_reminder",
args={
"appointment_id": appointment["id"],
"message_type": reminder["message"]
},
eta=reminder_time
)
Reminder Script
REMINDER_SCRIPTS = {
"long_reminder": """
Hello, {customer_name}!
This is a reminder that you have an appointment with {specialist_name}
the day after tomorrow, {appointment_date} at {appointment_time}.
Address: {address}.
Do you plan to visit? Press 1 to confirm, 2 to reschedule.
""",
"final_reminder": """
Hello, {customer_name}!
Reminder of your visit today at {appointment_time} with {specialist_name}.
We're waiting for you at {address}. If you can't make it, please let us know in advance.
"""
}
Handling Response to Reminder
async def handle_reminder_response(
appointment_id: str,
user_response: str
) -> str:
intent = await classify_intent(user_response)
if intent == "confirm":
await calendar.confirm(appointment_id)
return "Great! See you then. Goodbye!"
elif intent == "reschedule":
slots = await calendar.get_available_slots(
specialist_id=appointment["specialist_id"],
days_ahead=7
)
return f"Nearest available times: {format_slots(slots[:3])}. Which works for you?"
elif intent == "cancel":
await calendar.cancel(appointment_id)
await notify_specialist(appointment_id)
return "Appointment cancelled. We'll be glad to see you another time!"
return "Sorry, I didn't understand. Please say 'confirm' or 'I want to reschedule'."
Our Experience and Results
We have been implementing voice bots for years, developing solutions for 50+ medical centers, beauty salons, and auto repair shops. Average no-show reduction: from 25% to 8%. One project — a dental chain with branches in 4 cities — saved over 1.5 million RUB per month by filling empty slots. We guarantee similar results provided the scripts are properly configured.
"After implementing AI calling, the number of no-shows dropped by 70% in the first month. The bot took over all the routine — administrators only confirm reschedules in the CRM." — Chief physician of a dental chain, our client.
Comparison: Manual vs AI Calling
| Criteria | Manual Calling | AI Auto-Calling |
|---|---|---|
| Time per call | 30-60 sec | 8-12 sec |
| Parallelism | 1 call | Up to 1,000 parallel |
| Rescheduling errors | Frequent | Automatic sync |
| Call completion rate | 60-70% | 99%+ (3 attempts) |
| Cost per 1,000 appointments/month | ~50,000 RUB (salary) | Negligible (depreciation) |
Technical Integration Details
The system is built on a microservice architecture: telephony service (REST/WebRTC), NLP classifier (PyTorch + ONNX Runtime), task queue (Redis + Celery), calendar (PostgreSQL + Redis). CRM integration via REST API or webhooks. ASR: Silero (Russian) or Google Cloud Speech-to-Text. TTS: Silero or Yandex SpeechKit.
What's Included in Turnkey Development
| Stage | What We Do | Result |
|---|---|---|
| Analysis | Study appointment specifics, service types, peak hours | Technical specification with reminder logic |
| Design | Design dialogue scenarios and CRM integration | Scenario diagram, API specification |
| Development | Write code in Python using FastAPI, PostgreSQL, ASR/TTS | Ready microservice |
| Testing | Run 200+ dialogues, check edge cases (DTMF errors, noise) | Test report |
| Deployment | Deploy on your servers or cloud (AWS/GCP/Azure + Kubernetes) | System in production |
| Documentation | Deliver API description, admin guide, commented code | Full documentation package |
We also train your staff to work with the system and provide 30 days of free technical support after launch.
Timeline and How to Get Started
A basic system for one appointment type — from 2 weeks. If you need multiple industries, different reminder scenarios, and deep CRM integration — from 4 to 6 weeks. Cost is determined individually after analyzing your processes.
Request a consultation for your project — we'll calculate the optimal scenario and timeline. Get demo access to a working prototype and verify the system's effectiveness before purchase. We'll evaluate your project and offer a turnkey solution — contact us for a consultation.







