{
  "id": 5684663,
  "title": "Voice agent that books appointments: ElevenLabs, Cal.com and a backend that never lets the model guess",
  "url": "https://urgent.news/2026/09/05/voice-agent-that-books-appointments-elevenlabs-cal-com-and-a-backend",
  "topic": "ai",
  "section": "AI",
  "published": "2026-09-05T00:54:41.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/devrchancay/voice-agent-that-books-appointments-elevenlabs-calcom-and-a-backend-that-never-lets-the-model-34e9"
  },
  "original_language": "en",
  "account": "An appointment booking system was developed using a voice agent that talks to real tools. ElevenLabs Agents manages the voice, including transcription, turn-taking, and speech synthesis. The Cal.com API handles the calendar while a Fastify backend ensures the model never has to guess any details like the day of the week, time format, or ISO offset. The backend's sole purpose is to prevent the model from making any incorrect assumptions during the booking process. The entire process is outlined in a fixed order, broken down into ten numbered steps. The backend handles date and timezone arithmetic, choosing times to offer, reading out thirty possible slots aloud, phrasing each time in Spanish, and ensuring idempotency by using an optionId instead of a date. Booking is the only irreversible action, requiring explicit confirmation from the user and blocking interruptions while the process runs. In case of tool errors, the system returns a 200 HTTP code with a suitable message for the agent to read aloud. If a 5xx error occurs, the model must improvise during the call. The system is designed to be simple, narrow in scope, and easy to build.",
  "summary": "A voice agent that books appointments is a system where someone talks, a model understands what they are asking for, calls real tools, and hangs up with an appointment on a calendar. I built one in a lab repo: ElevenLabs Agents handles the voice—transcription, turn-taking, synthesis—Cal.com handles the calendar, and in between sits a Fastify backend whose only job is to make sure the model never…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}