Test your AI phone script before it calls customers

By General Input

Run your test scenarios against every version of your calling script, listen to the recordings, grade each run, and prove a fix did not quietly break something else.

Integrations

  • Bland AI
  • Slack Bot

Type

App

Categories

  • Operations
  • Sales

Build me a test bench app for the AI phone script I run on Bland AI, so I can prove a script change works before I point it at customers. It is for the person writing and iterating the script, not a manager reading aggregate stats, so the centre of the app is a side by side comparison of two script versions running the same scenarios, with the transcripts as the evidence. Nothing runs on a schedule; I open the app and press Run.

Version library. Keep a library of script versions. Each version stores a name, the freeform task text the calling agent should run, a note about what changed, the created date, and a status of draft or promoted. I create a new version by duplicating an existing one and editing the text, and I can view any older version's text unchanged. Bland's Send Call accepts either freeform task text or a conversational pathway id but never both, so this bench always stores and dispatches task text and never sends a pathway id.

Scenario panel. Keep a panel of test scenarios I write once and reuse against every version. Each scenario has a name, a description of the caller behaviour I want to simulate (a prospect who interrupts constantly, someone who asks for pricing in the first ten seconds, a voicemail pickup that never picks up), the test phone number to dial in E.164 format such as +14155551234, and any extra grading questions specific to that scenario. Scenarios only ever point at my own test numbers, and the app should validate the E.164 format when I save one.

Running a version. A Run button on a version dispatches every selected scenario with Send Call, using that version's task text, the scenario's test number, and record set to true so a recording exists afterwards. Tag each call with the version id and scenario id in the call metadata so results can be matched back. Bland rejects a second call to the same phone number inside a ten second cooldown, so the dispatcher must space calls to the same number at least fifteen seconds apart: show me a queue with a countdown for the calls that are waiting, let calls to different numbers go out in parallel, and surface any dispatch rejection on the run instead of silently dropping it. After dispatch, poll Get Call Details until the call completes and store the transcript, status, duration and completion time on the run. Use List Calls to reconcile any run the app lost track of, and optionally show the per call timeline from Event Stream on the run detail.

Reading and listening to a run. Each run opens a detail view with the full transcript, an audio player fed by Get Call Recording, the dispatch and completion timestamps, and the exact task text that version used at the time of the run. Recordings only exist because every dispatch sets record to true; if a recording is genuinely missing, say so plainly rather than showing a broken player.

Grading. Grading uses Analyze Call against a checklist of yes or no questions I maintain, for example did it state the callback number, did it book a time, did it avoid promising a discount. Store every question's answer on the run and derive an overall pass or fail from them. Bland bills call analysis per question, so before any grading run show me a clear warning with the estimated cost, calculated as calls multiplied by questions, and make me confirm. Never grade automatically on completion and never silently regrade: if I re-run grading, keep the previous result in the run's history.

My own verdict. I can override any grade with my own pass or fail plus a note. Keep both the automatic result and my override, show clearly which one is in force, and keep the full history of verdicts so I can see how a scenario has moved from version to version.

The compare view is the heart of the app. I pick version A and version B and get a matrix with scenarios down the side and the two versions across the top. Each cell shows the verdict in force and the per question results underneath. Highlight regressions, meaning the scenario passed on A and fails on B, and fixes, meaning it failed on A and passes on B, as visually distinct states so a change that fixed one case while breaking another is impossible to miss. Clicking a cell opens the two transcripts side by side, aligned so I can read where the conversations diverge, with both recordings playable. If one version has no run for a scenario, show the gap and give me a button to run just that cell.

Slack summary and promotion. From any run set I can push a summary to a Slack channel I choose using Send a Message: the version name, the scenarios run, pass and fail counts, the regressions and fixes against the version I compared it to, and my notes. Promoting a version to a live campaign is a deliberate action in the app that flips its status to promoted and records who promoted it and when; if I have not sent a Slack summary for that version yet, prompt me to before promoting.

Persist versions, scenarios, checklist questions, runs, per question results, overrides and promotions so the complete history survives between sessions and I can always go back to a run from three versions ago and read exactly what was said.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seatsPause marketing emails to escalated customers, then restore them