We tried a chatbot in 2019 and it was a disaster.
It probably was, and the reason is architectural rather than a matter of effort: an intent classifier with hand-built dialogue trees broke on any phrasing outside its training data. What changed is retrieval over your actual knowledge base plus tool calls into your actual systems, with the escalation path specified first. The honest test is not a demo — it is replaying a thousand of your own historical conversations and showing you what would have resolved, what would have escalated, and what would have gone wrong.
Containment measures the bot, not the customer.
Agreed, and raw containment is trivially gameable — a caller who gives up is counted as contained. The definition we work to subtracts abandoned sessions and any session followed by a repeat contact within 72 hours, and we publish the false-containment audit before you ask for it, targeting under 5%. If containment rises while repeat-contact rate rises, the deployment is failing whatever the dashboard says. Escalation rate is the number your workforce planning actually staffs against, so that is what we report alongside it.
It will hallucinate a policy and commit us to something.
This is the realest risk on the list and there is case law: in Moffatt v Air Canada (British Columbia Civil Resolution Tribunal, February 2024) the airline argued its chatbot was a separate entity responsible for its own statements, lost, and paid the fare difference its bot had invented. More recently, Cursor’s support bot invented a device-limit policy and triggered public cancellations. The mitigations are mechanical rather than reassuring — answers constrained to retrieved passages, citation coverage gated in CI so a prompt change cannot ship below threshold, an explicit refuse-and-escalate path for anything outside the corpus, and hard human-in-the-loop gates on refunds, cancellations and eligibility. GDPR Article 22 pushes in the same direction: decisions with legal or similarly significant effect stay recommendations a person approves.
Bulgarian speech recognition is not good enough for real customers.
Partly true, and worth naming precisely instead of waving away. Bulgarian is supported by Deepgram Nova-3 and by ElevenLabs’ multilingual and Flash v2.5 models — but Flux, the ASR built specifically for voice-agent turn detection, covers English plus nine languages and Bulgarian is not among them. Nor does LiveKit’s multilingual turn detector, nor the common semantic endpointers, list bg. So a BG agent runs tuned Silero VAD plus Deepgram `utterance_end_ms` instead of STT-native endpointing, and pays roughly 150–250ms of extra end-of-utterance delay for it; where volume justifies it we fine-tune a turn model on your own transcripts and show you the before/after EOU distribution. Telephony word error rate on Bulgarian names, ЕГН digit strings and code-switched English terms runs materially worse than English, and Deepgram’s keyterm prompting is an English Nova-3 feature, so a `bg` stream gets the older `keywords` boosting instead. That is why identification is DTMF-first, why we measure what vocabulary biasing actually buys on your recordings, and why we measure WER on those recordings before quoting a containment number.
GDPR — we cannot send customer conversations to a US model provider.
Handled in the architecture, not with a DPA and a shrug. EU-region inference endpoints, no-training contractual terms, retention windows set per data category rather than one global default, and a documented lawful basis with the Article 35 DPIA input written as we go. PII redaction runs at ingest, with measured recall: we report redaction recall per entity type on your own transcripts, because ЕГН detection on 8 kHz Bulgarian audio carrying 12–25% word error rate is not 100%, and anyone who tells you it is has not measured it. Residual leakage is handled by a second pass and a short retention window on raw audio, not by a promise. And the honest part your DPO will raise, which we would rather raise first: an EU region does not put a US-parent provider outside the CLOUD Act, so the Chapter V transfer impact assessment still has to be written — we write it, we do not wave the region at you. Voice recordings used to identify a person are Article 9 biometric data, which is a separate consent question we will raise before you do.
Per-resolution pricing means you are incentivised to call things resolved.
A fair read of the market, and the reason we do not charge that way: our phases are fixed price and operation is a fixed monthly retainer, so no invoice of ours moves when a resolution gets counted. Where you do buy per-resolution — from a helpdesk vendor, or from anyone else — define resolution in the contract rather than in the dashboard: no human touch, no repeat contact within seven days, no negative CSAT. Then audit it on a sample and have both parties report the number independently. If the definition lives only in the vendor’s dashboard, it is not a metric, it is an invoice.
Our CRM is on-prem from 2011 and has no real API.
Common, usually solvable, and honestly priced — the ladder in order of preference. First, whatever SOAP or REST surface already exists, however ugly. Second, a read replica for lookups plus a thin write service in front of the one or two operations the agent genuinely needs. Third, RPA as a bridge, with a fragility budget named in the contract: expected breakage per vendor UI change, who fixes it, and inside what response time — an RPA path nobody has budgeted to maintain fails in month four. Fourth, queue-and-reconcile, where the agent writes to the helpdesk and a batch job syncs, which is honest about latency instead of pretending to be real time. What we will not do is quote you a containment rate that depends on real-time writes your system cannot support.
Generated Bulgarian sounds like a robot and our brand voice matters.
Voice selection is a measurable decision rather than a taste one: we A/B candidate voices on completion rate and CSAT, not on which one the room liked in the demo. The things that actually break Bulgarian TTS are specific and testable — the vocative case (Иване, not Иван, when the agent addresses someone), the suffixed definite article, number and currency reading (сметката е 42,60 лв. read as a sum rather than digits), and surnames interpolated into templates, where the wrong stress makes the whole sentence sound synthetic. We build a pronunciation lexicon for your product and tariff names and test it on the templates you actually send. Where synthesis cannot carry a segment convincingly — condolences, complaint openings, anything with weight — that segment stays human.