Changelog

Follow new updates and improvements to voiceaiwrapper.

April 2nd, 2026

Smart Do Not Call (Smart DNC) is now available for outbound campaigns. When a lead says they don't want to be called again, the campaign detects it and marks that lead so it is excluded from future outreach automatically.

How it works

After each call ends, your agent reports whether the caller asked not to be contacted again. The product reads that field, and if it is set to true, marks the lead as DNC. That lead will be skipped in future campaign runs.
No changes to calling logic are needed on your end — the setup is entirely on the agent side.

Supported providers

Vapi, Retell, ElevenLabs, Bolna

What you need to set up

Step 1 — Add a post-call field to your agent
Add a boolean field named caller_requested_do_not_call to your agent's post-call analysis. Where you add it depends on your provider:

Provider

Where to add it

Vapi

Structured Outputs → Create from scratch → add boolean field

Retell

Post Call Analysis → Post Call Extraction → add boolean field

ElevenLabs

Agent → Analysis tab → Data Collection → Add Data Point → set type to boolean

Bolna

Agent → Analytics → Extractions → New Extraction → set answer type to Pre-defined

Field details to use:

  • Name / Identifier: caller_requested_do_not_call

  • Type: boolean

  • Description: Whether user asked not to be called again

For Bolna, you also need two pre-defined answers:

  • true — user explicitly asks not to be contacted again (e.g. "don't call again", "stop calling", "remove me")

  • false — user does not express any request to stop contact

Step 2 — Update your agent prompt
Add instructions so the agent recognises do-not-call intent and responds correctly. Example:

"If the caller says they do not want to be called again, asks to be removed, or asks you to stop calling, respond respectfully, confirm you will honor their request, and end the conversation without pushback. Treat phrases like 'don't call me,' 'remove me,' and 'stop calling' as explicit do-not-call requests."

Where to find it

Campaign Settings → outbound campaign → Smart Do Not Call → Configure. The Configure dialog shows the exact field name, type, description, and per-provider setup steps with copy buttons.

April 2nd, 2026

New

Ultravox joins Vapi, Retell, ElevenLabs, and Bolna as a supported voice provider. Here is what it covers, how it differs, and what it does not do yet.

What's included

Connect
Go to Voice Providers, add your Ultravox API key, and use the webhook URL we provide. Ultravox sends call events to that endpoint — it needs to be set correctly for statuses, transcripts, and recordings to appear in the app.

Agents, knowledge bases, and tools
Your Ultravox agents, corpora, and tools are accessible from the app and can be selected when setting up campaigns or client access.

Phone number pools
Pools work with Twilio, Telnyx, and Plivo numbers. Add one or more E.164 numbers (e.g. +15551234567) under a pool, then assign the pool to a campaign.

Outbound campaigns
Ultravox supports outbound campaigns only. When you create a campaign, the Inbound option is disabled. Campaign settings include:

  • Which Ultravox agent to use

  • Telephony provider: Twilio, Telnyx, or Plivo — this must already be connected to your Ultravox account

  • Caller ID: an E.164 number (e.g. +15551234567) that must exist in that telephony account and be configured for outbound use

Call logs
Calls show up in the call log with status, duration, transcript/summary (when available from Ultravox), and a recording link where applicable.

Dashboard
The provider dashboard shows call volume, duration, call outcomes, and leads over your selected date range.

March 30th, 2026

New

Campaign metadata in webhooks

All forwarded webhooks from Vapi, Retell, ElevenLabs, Bolna, and other providers now include a _campaign_metadata object with campaign details.

Fields included:

  • campaign_id — Unique identifier for the campaign

  • campaign_name — Display name of the campaign

  • type — Campaign type (e.g., OUTBOUND)

  • status — Current campaign status (e.g., ACTIVE)

  • tenant_id — Tenant/Org identifier

  • voice_provider_id — Voice provider/Pod identifier

  • assigned_client — Object containing:

    • id — Client identifier

    • name — Client display name

Example:

{
 "_campaign_metadata": {
 "campaign_id": "Vm9pY2VDYW1wYWlnblR5cGXXXXXXXXX==",
 "campaign_name": "Sample Campaign",
 "type": "OUTBOUND",
 "status": "ACTIVE",
 "tenant_id": "VGVuYW50VHlwZTXXXXXX",
 "voice_provider_id": "VGVuYW50Vm9pY2VQcm92aWRlclR5XXXXXXXXX==",
 "assigned_client": {
 "id": "Q2xpZW50VHlwZTpXXXXXXX",
 "name": "Client A"
 }
 }
}


This metadata is available in all webhook events forwarded from Vapi, Retell, ElevenLabs & Bolna using "Outgoing Webhook / Webhook Forwarding" configuration in campaign settings, and can be used to identify and filter events by campaign.

Bolna success metric support


Campaigns using Bolna can now configure a custom analytics key name to determine call success. The system reads the success value from Bolna's Custom Analytics (custom extractions) using the configured key name and matches it against your success values to calculate campaign conversion metrics.

To configure:

  1. Enable "Call Success Metric" in campaign settings

  2. Enter the custom analytics key name that contains the success value in your Bolna agent's custom extractions output

  3. Add the success values to match against (e.g., "success", "completed")

The key name lookup is case-insensitive, and the system will count calls as successful when the extracted value matches any of your configured success values.

March 30th, 2026

New

We've added a text-based chat widget powered by VAPI to web widgets in inbound campaigns. This feature is now available for VAPI voice pods.

You can configure chat and voice simultaneously (both enabled), or choose either chat-only or voice-only modes. Visitors can chat with your AI agent directly on your website without voice calls. For VAPI, the same assistant can be used for both voice and chat; you can set a dedicated chat assistant in widget settings or leave it to fall back to the voice assistant.

Key Features

  • Backend-proxied messaging — Create session, send messages, and end session via our API; the VAPI private key stays on the server

  • Customizable appearance — Match your brand colors, logo, and styling

  • Connection status indicator — Visual indicator shows when connected

  • Manual end — End chats anytime with the "End" button

  • Auto-disconnect — Sessions automatically end after inactivity (default: 3 minutes, configurable 1–60 minutes)

  • Minimize widget bubble — Minimize the widget to a small bubble while keeping it accessible

  • Session lifecycle — Session ends when the visitor closes the tab, switches away (visibility hidden), or collapses the widget

Webhooks (VAPI assistant configuration)

Chat sessions are tracked and billed when VAPI sends session lifecycle events to your assistant webhook (the same URL used for voice). In the VAPI assistant's server messages, include the session.created and session.updated webhook events. Without these, chat sessions will not be logged or billed.

  • session.created — Creates a chat interaction log and marks the session active.

  • session.updated (status completed) — Finalises billing, updates the log with cost and equivalent minutes, and marks the session ended. Duplicate completion events are ignored.

Billing & Pricing

Chat interactions are converted to equivalent minutes based on your subscription's chat-to-minute conversion rate.

Billing follows the same system as voice calls, with chats converted to minutes for consistent tracking. Chat must be enabled in your subscription to use this feature.

Important: Chats will only be charged to clients if their Stripe product plan has chat billing enabled; otherwise, usage will not be charged.

Configuration Options

You can customize inactivity timeout, chat placeholder text, connection status text, button colors and styling, widget size and position, and header content (logo, title, subtitle) to match your brand.

Client Account Configurations & Chat Management

  • Client Account Configurations — Enable chat functionality for clients through Client Account Configurations. Chat must be enabled in the client's account configuration settings to use this feature. Note: To ensure chat sessions are billed correctly, verify that chat billing is enabled in the client's Stripe product plan; otherwise, usage will not be charged.

  • Chat logs — All chat conversations are logged and can be viewed in the campaign chat logs section, providing full visibility into visitor interactions.

  • Chat log exports — Export chat logs for analysis, reporting, or record-keeping purposes. Export functionality is configurable for clients through Client Account Configurations, allowing you to control which clients can export conversation data in various formats.

Getting Started

The chat widget can be configured alongside voice calls (both enabled), or you can choose to enable only chat or only voice in your inbound campaign web widget settings.

When both are enabled, visitors can choose their preferred interaction method. Configure it in your campaign widget settings to add text-based chats to your website. For VAPI, you can use the same assistant for voice and chat; if you set a chat assistant, it is used for chat and the voice assistant for voice.

Note: This feature uses VAPI's session (chat) API. All chats are logged and billed according to your subscription plan. Ensure the VAPI assistant used for chat has session.created and session.updated webhook events configured so that sessions are tracked and billed correctly.

March 30th, 2026

New

We’ve added export and import support to the form builder. ( Form Builder is available on the Pro plan)

You can now download the current form configuration as a JSON file and later load it back into the form builder or share it across environments and accounts.

Key Features

  • One-click export — Downloads the current form as a JSON file, including fields, layout (rows/columns), buttons, and success screen configuration.

  • Safe import with validation — Imports JSON files and validates them against the form schema; invalid files are rejected with a clear validation message.

  • Atomic load — On successful validation, the imported form replaces the current builder state in one step.

  • Re-import friendly — The file input resets automatically so you can re-import the same file after making changes.

What’s Included

  • Form content — Title, description, banner, all supported field types, and their configuration (labels, placeholders, options, validation, etc.).

  • Behavior & UI — Button configuration, success screen content, and success behavior type.

Usage

  • Export — From the form builder, use the export option to download the current form as a JSON file.

  • Import — Use the import option to select a previously exported JSON file; if the file passes validation, the form builder will load it into the editor.

March 30th, 2026

New

What’s new

If your widget is powered by ElevenLabs, you can now offer a language switcher so end-users can interact with your assistant in more than one language.

How it works (user-facing)

  • The widget continues to have a default language (your primary language).

  • If the ElevenLabs agent supports more languages, the widget can also show additional supported languages.

  • End-users can switch languages in the widget UI (where enabled) and keep the conversation in the chosen language.

How to enable it

In the widget builder, enable “Allow visitors to pick their language” for your ElevenLabs widget.

  • This turns on a language dropdown (with flags) inside the widget UI.

  • Visitors can switch between the agent’s default language and any additional languages available on that agent.

What you’ll see

  • Voice widget: language options are available for the voice assistant when configured with ElevenLabs.

  • Chat widget: language options are available for the chat assistant when configured with ElevenLabs.

Notes

  • The language dropdown only shows languages that are actually available on your selected ElevenLabs agent.

  • If no additional languages are available, the widget simply uses the default language (no change in behavior).

March 30th, 2026

New

Improved

Bolna: success metric in Call Logs

  • Table column: Call Logs now includes a Success Metric column for Bolna. It shows the value from your campaign’s Bolna custom analytics field (the same key you set for call success on the campaign), pulled from that call’s custom extractions.

  • Filters: You can filter Call Logs by that success metric (for example, contains, does not contain, is, is not—same style as your other log filters).

  • Note: The column and filter only apply meaningfully when the campaign has a custom analytics key name configured for the success metric. If nothing is set, you may see empty values.

Custom pages: dynamic variables in the editor

For Custom menu items of type Editor page (rich content / custom page), the editor toolbar now includes Dynamic variables.
You can insert placeholders that are filled in when a client opens the page:

  • Client fields: client name, primary email, and the signed-in user’s email.

  • Portal links: quick links to areas like Dashboard, Assistants, Chat assistant, Campaigns, Phone numbers, Knowledge base, Tools, Call logs, Workflows, Squads, and Phone number pool.

  • Other custom pages: each of your other custom pages appears as a link variable (by its menu label), so you can link between custom pages without pasting raw URLs.

Links respect client access: if a client doesn’t have access to a section or page, that link is not shown for them.

March 17th, 2026

New

What’s new

If your widget is powered by ElevenLabs, you can now offer a language switcher so end-users can interact with your assistant in more than one language.

How it works (user-facing)

  • The widget continues to have a default language (your primary language).

  • If the ElevenLabs agent supports more languages, the widget can also show additional supported languages.

  • End-users can switch languages in the widget UI (where enabled) and keep the conversation in the chosen language.

How to enable it

In the widget builder, enable “Allow visitors to pick their language” for your ElevenLabs widget.

  • This turns on a language dropdown (with flags) inside the widget UI.

  • Visitors can switch between the agent’s default language and any additional languages available on that agent.

ElevenLabs AI chat White Label with Voiceaiwrapper

What you’ll see

  • Voice widget: language options are available for the voice assistant when configured with ElevenLabs.

  • Chat widget: language options are available for the chat assistant when configured with ElevenLabs.

Notes

  • The language dropdown only shows languages that are actually available on your selected ElevenLabs agent.

  • If no additional languages are available, the widget simply uses the default language (no change in behavior).

January 22nd, 2026

New

Improved

Structured Outputs is the new way of capturing data from VAPI calls. Our system uses structured outputs to capture lead information from calls. Structured data is still supported for backward compatibility.

January 20th, 2026

New

Improved

Text Messaging During Voice Calls

  • Users can now send text messages while on an active voice call

  • Perfect for situations where speaking isn't possible or convenient

  • Messages appear in real-time alongside the voice conversation

Real-Time Transcript Display

  • View live transcription of the entire conversation during voice calls

  • See both user and agent messages as they happen

  • Helps users follow along and reference what was said

Improved Connection Status

  • Clear visual indicator showing when the voice call is connected

  • Easy-to-access end call button in the connection banner

  • Customizable connection status text and colors

Customizable Text Labels

  • Customize placeholder text for the message input field

  • Customize send button text

  • Customize empty transcript messages

  • All text labels can be translated and localized

Changed

  • Animation styles are automatically hidden when transcript is enabled to provide more screen space for messages

  • Voice calls always start with voice mode (never text-only) for a consistent experience

Notes

  • These features are available only for ElevenLabs voice widgets

  • All features are optional and can be enabled/disabled in the widget configuration

  • Existing widgets continue to work as before - no changes required