Professional Travel Center’s marketing line rings all day with prospects responding to mail campaigns. Human operators answer during business hours and book about 42% of answered calls into group sales presentations; after hours and on weekends, callers hit voicemail and die there. The fix: one shared platform, two AI agent roles — an Inbound Marketing Operator that answers, qualifies, and books appointments 24/7, and a Customer Service agent that captures member requests with pre-fetched research. The owner greenlit it as a real, paid build.
The part that makes it work is the training data. Before writing a line of agent prompt, I built a Playwright harvester over the company’s call-tracking system and mined ~3,200 recorded calls with outcome labels — then read 79 full transcripts line by line. The result is a script-as-performed: the exact beats top operators run, objections ranked by real frequency, phonetic-alphabet email readbacks, timezone handling, and the wording that loses calls. The AI doesn’t follow the script as written; it follows the script as it actually wins.
The reasoning behind the voice is Claude Sonnet 4.5, run at temperature 0 with six tools — session availability, book, reschedule, cancel, winning-code lookup, do-not-call — so every commitment the caller hears is a tool result, not a guess. A booking exists only when the booking tool returns it, and capacity is re-checked at write time against the live schedule. A drift checker diffs the live agent against the repo (prompt, tools, config) and fails on any difference, so what was tested is what answers the phone. The whole platform — API, dashboard, call harvester, audits, owner-facing PDFs — was built with Claude Code from the first commit in March 2026 to the prompt that is live today. First production call booked a real appointment into the fulfillment system on 2026-08-26.