New features
The Test Console lets you rehearse a script against simulated callers. A new Test Console item in the sidebar — and a Test Console option on the flask button beside any script — lets you build Personas: simulated callers with their own name, purpose, description, prompt and voice. Once you have a few, Run A2A places automated agent-to-agent test calls against the script, so you can hear how it handles an impatient landlord or a confused first-time caller without ringing a colleague. Runs are capped at 200 calls with a maximum duration per call, only one run per script can be active at a time, and a Recent runs list shows what’s queued, running and done, with a Cancel button. See Testing a script. Ask the AI to review your script right now. The AI recommendations toolbar gained a Regenerate button — tooltip “Ask the AI to read this script now and suggest improvements” — that starts a fresh review on demand instead of waiting for the overnight one. A live status line tells you where it’s up to (“Reviewing this script — this takes a minute or two.”) and new suggestions appear without reloading the page. You need to save your changes first, and if nothing has changed since the last review it will tell you so rather than burning a run. The AI now flags problem moments directly on the transcript. Alongside the responses you flag yourself, the review engine adds its own flags anchored to the exact turn where something went wrong. Editing an AI flag’s note endorses it, so it feeds into the next round of script recommendations; dismissing it takes it out of consideration while stopping that turn being flagged again. A single turn can carry more than one issue, and each one shows whether you or the AI raised it. See Call details. Retry policy is now a visual timeline instead of a set of numbers. On a batch’s Calling rules, the Retry policy card gives each outcome — Voicemail, No answer and Line busy — its own timeline. You click milestones (1 hour, 2 hours, 4 hours, 8 hours, 1 day, 2 days, 3 days, 7 days) to add or remove a retry, and each point is the delay after the previous attempt. Each outcome has its own Active switch, and the old Transient error row has been removed. Reschedule a call when the contact asks you to ring back. A new Contact is busy, callback requested switch — “Reschedules another call at the contact’s requested time” — books the follow-up for the time the contact actually asked for, in their own local time, in the same batch. Underneath it, Cancel pending retries when contact calls back inbound stops a retry dialling out to someone who has already returned the call. See Calling rules. Inbound calls now cancel pending outbound retries. If a contact rings you back before a queued retry goes out, that retry is cancelled rather than dialled, and no new retry is created for the attempt they responded to. Calls cancelled this way are marked as such in the queue, so it’s clear why they never went out. The batch Summary shows a breakdown of call outcomes. You can now see the share of each outcome across the batch and how it shifts over time, using your script’s own custom outcomes where you’ve defined them. Outbound outcomes include Appointment booked, Busy — callback requested, Not interested, Wrong number, No answer and Voicemail; inbound ones include Inquiry answered, Message taken and Transferred to human. Scheduled, queued, cancelled and in-progress calls are left out of the counts. See Batch analytics. New Trunk, Outcome and Sentiment filters on the Calls list, plus call tags. You can now filter call history by the trunk that carried the call, by the post-call outcome, and by sentiment score (is, greater than, less than), and stack several values on the same field to match any of them. A new Detailed Status filter shows exactly where a live call is — Dialling, Voicemail, Handoff Dialling, Handoff Connecting, Handoff Merged — and calls can now carry tags from the Metadata section of the call. Cost (cents) and Success Evaluation have been retired. Scripts can tell why a handoff failed, not just that it did. A Live Handoff now recordshandoff.attempts, handoff.connected and handoff.last.status — one of connected, rejected, busy, timeout, voicemail or routing_unavailable — along with the reason, how long the attempt took and which endpoint was tried. You can branch on these in conditions, so a call that was rejected outright in five seconds can be handled differently from one that hit a genuinely busy queue.
The assistant can press and read phone keypad tones. Two new tools let the assistant send digits down the line to navigate another company’s phone menu, and capture digits the far end presses into a variable, so a caller can key in a reference number or date of birth instead of saying it out loud. Both report success or failure so a script can take a different route if the keypad step doesn’t work. See DTMF Tools.
Web callers are now recognised as individuals. Each web caller is identified separately, so a new caller gets their own contact record and a returning one is matched back to it — and if the web link carries a contact ID, that contact is used. See Web calls.

