Simulated versus real
In plain words
Section titled “In plain words”VoDialer runs end to end on one machine. The phones are a simulator and the AI is a scripted stand-in. No call has left that machine. No real person has been called. The platform has never spoken to the real AI service.
The checks that exist prove the logic: who is asked before a dial, what is refused, what is recorded, how a hand-over is set up, what happens when a service dies. They do not prove how it sounds, how fast the real AI answers, how real carriers behave, or that any rule is legally right.
The table
Section titled “The table”| Area | What runs today | What is verified | What is not verified |
|---|---|---|---|
| The AI that talks | fake-live, a scripted local server. It follows a script, recognises speech by loudness, and “transcribes” an answering machine’s greeting with a canned line. The API key is empty on purpose. |
The bot logic: turn-taking, tools, hard rules, hand-over requests, ending a call, against the stand-in. | The real service’s address, headers, session reply and audio behaviour. Real conversation quality, delay, interruptions and cost. |
| Phones | TELEPHONY_DRIVER=sim. Virtual people speak synthetic audio and hang up on a timer. Simulated people are +1555 numbers. Any other number is refused. |
Call states, recording (two channels, stored and checksummed), hand-over to a simulated agent with a whispered summary, 200 simulated calls at once. | Real carriers, SIP trunks, Kamailio, real caller IDs, real answering-machine detection (the simulator answers it because the fake AI’s transcript says so). |
| FreeSWITCH | A real FreeSWITCH was run in a container as a building block. | Placing calls, conferences, recording, listening in, whispering, mod_avmd, reconnecting. |
The bot audio path through it, a hand-over to a real softphone, adoption of calls after a restart, supervisor listening on FreeSWITCH, whisper text in the agent’s browser. |
| Agent and web app | In the tests, the “agent” is a program speaking the simulator’s protocol. | The services behind the screens, and tenant suspension and the platform console API through the gateway. | The web app was not part of the verification. Cookies and the live feed were checked with Rust clients, not a browser. There is no browser phone in the tests. |
| Calling rules | Starter values (8 am to 9 pm, 3 a day, consent 365 days, state variants, 2026 and 2027 federal holidays). | The engine applies the strictest rule and fails closed. Decision speed in a debug build: p50 23 microseconds with a million numbers. | That any value is legally correct. Counsel has not reviewed them. |
| Time zones | Area-code, 5-digit ZIP and ZIP3 tables built from public data (NANPA, Census, US DOT). Calling hours use them. | Each table shows its source; the seed uploads them as verified against those sources. | Counsel review. A ZIP or area code that crosses zones uses the stricter window. An uploaded table is used by compliance only. |
| Line type and active number | A placeholder that always answers “unknown”. | That it never invents an answer. | Any real lookup. It needs a paid provider. |
| Dropped-call rule | A limit that pauses at 3.0%, warns at 2.5%, with a 100-call warm-up. | The arithmetic, by tests. | The thresholds and the definition of “answered by a person”. Unreviewed. |
| QA judge and uploads | Rules only. With no key, judge items are “not applicable” and uploads wait for transcription. | That nothing is invented. Against a fake server only. | Any run against OpenAI, including transcription of uploaded recordings. |
| VICIdial and TrustedForm connectors | Written to the documented shapes. | Against mock servers in the tests. | Any live VICIdial or TrustedForm system. |
| Scale | One copy of each service. | A 200-person soak with 40 calls at once. Dialer tests with fakes. | Load, failover beyond the scenarios, 2,000 calls at once, several copies running together. |
| Not covered | Human-first (predictive, progressive) pacing with real agents. Listening, whispering and barging beyond service tests. | Pacing maths, with fakes. | Real agents behind it. |
| Storage and retention | Local MinIO, not locked. Retention 10 years. Placeholder keys. | Upload, checksum and recovery against MinIO. | Locked storage, real encryption keys, AWS. Retention awaits counsel. |
| Platform console | The API only. Billing unit costs are placeholders. | Role checks, audit chain, view as, limits, kill switch and imports (a million numbers in about 44 seconds on a debug build). | Any screen. A deployed core’s side of suspension. Several copies working together. |
| Prompt speech | A tone and a text line. A paid voice is built but off. | Against a fake. | The real voice. |
What the end-to-end tests do cover
Section titled “What the end-to-end tests do cover”The suite runs through the public API and the simulator. Its scenarios are golden, inbound, not-qualified, asks-to-stop, agent-dnc, no-agent, agent-timeout, compliance-stop, ai-down, call-control-kill, suspend-resume and soak. Compliance is never bypassed, so the dialing scenarios need a US time zone inside the legal window and stop with a message otherwise.