OpenPhonexDocs

How OpenPhonex handles provider languages and voices

How provider-reported inventories become searchable, what OpenPhonex still validates for live calls, and what happens when a provider changes its catalog.

OpenPhonex separates two different questions:

  1. What does the provider currently advertise? The provider reports its voices, voice identifiers, languages, models, and metadata.
  2. What can this OpenPhonex runtime execute? OpenPhonex declares the speech-to-text, model, and text-to-speech adapters and languages that its workers can run end to end.

The first answer drives browsing and search. The second answer controls whether an AI agent can be saved and used for a call. A provider adding a new voice does not require a frontend release, a manual approval queue, or a generated sample. It also does not make an undeclared call stack runnable by itself.

Provider-backed voice cache

For each configured provider, OpenPhonex reads the provider's voice inventory through its adapter and stores a scoped cache. The workspace reads that cache; opening the Voices page or an AI agent never waits for a provider request.

  • A managed OpenPhonex credential contributes to the shared managed inventory.
  • A bring-your-own credential has a private inventory scoped to that workspace, project, credential, and provider. It is never copied into the managed inventory or another workspace.
  • The cache refreshes in the background. If a refresh fails or returns an invalid response, OpenPhonex continues serving the last good inventory.
  • Large provider inventories are bounded and marked as truncated. A partial result never proves that an unobserved voice was removed.
  • Providers that do not expose a listing API may use provider documentation as their inventory source. The UI identifies the source instead of presenting it as a live provider result.

The provider's language and descriptive metadata are provider-reported information, not an OpenPhonex quality score or accuracy guarantee.

Cartesia Sonic 3.6

Cartesia Sonic 3.6 is a streaming TTS option in the same catalog. It does not ship with a checked-in OpenPhonex voice list: the managed inventory contains only Cartesia voices the provider marks public and not owned by the managed account. With your own Cartesia credential, the inventory is private to that credential and can include its owned or cloned voices.

Choose the exact provider-reported voice ID and a language the catalog offers for the declared runtime stack. The worker never infers a runnable language from a voice name or Cartesia metadata alone. You can enter arbitrary bounded text in Test voice before saving; the preview uses the selected credential and exact ID, never a platform-key fallback. Cartesia TTS is priced in submitted text characters; the catalog is the current source for the applicable price and reserve estimate.

Azure AI Speech

Azure AI Speech contributes two catalog options, and they are independent of each other:

  • Transcription — an Azure real-time speech-to-text option, offered for every language OpenPhonex runs. It is offered alongside the existing options rather than replacing any of them, and it is not the default for any language: an agent uses Azure transcription only if you select it.
  • Voices — Azure's neural voice catalog, through the same provider-cached inventory as the options above rather than a checked-in list. Voices appear once the first refresh has completed.

Azure names each voice for the locale it was built for, and a Tamil voice may be Indian (ta-IN) or Sri Lankan (ta-LK), so a Tamil agent's accent follows the voice you pick rather than a separate setting. Transcription is a separate choice with its own locales: Azure offers Indian Tamil for real-time recognition and does not offer Sri Lankan Tamil for it at all, so an agent may speak in ta-LK while listening in ta-IN.

The catalog offers many more voices than there are languages an agent can be saved in, because the inventory reports every language Azure declares for a voice. Test voice works across the whole imported library, so you can hear a voice before knowing whether an agent can be built on it; saving an agent still requires a language OpenPhonex runs, and the editor says so at the point of saving.

Choose the exact provider-reported voice ID and a language the catalog offers for the declared runtime stack. The worker never infers a runnable language from a voice name: a multilingual Azure voice speaks the language you selected, not the one in its identifier. Azure transcription is priced in audio seconds and Azure synthesis in submitted text characters — including the markup OpenPhonex adds around your text, and with some scripts counted at more than one billable character each. The catalog is the current source for the applicable price and reserve estimate. Azure runs on an OpenPhonex-managed credential only — there is no bring-your-own-key path for it today.

Choosing a language and voice

OpenPhonex does not choose a default or recommended language or voice for a new AI agent. Choose its languages and opening language explicitly, then a shared voice stack that can run them. Optional per-language overrides do not require separate agent copies or a manually generated sample for each language. The picker shows a flag only where a locale has an unambiguous region; otherwise it uses a neutral language icon rather than guessing a nationality.

Speaking several languages versus listening for them

In Choose before the call, the selected language profile stays fixed for that call. Follow the caller additionally needs a transcriber mode that can recognize the selected languages in the same conversation. OpenPhonex checks that separate capability against the existing provider/model declaration; it does not infer simultaneous recognition by adding together monolingual language lists. A model may therefore work for a fixed-language call but not for that language combination in follow mode.

An unsupported combination produces a configuration error, not an automatic provider or voice replacement. This is a runtime compatibility check, not a manual language approval or audition requirement. The supported provider mode also does not guarantee accent accuracy or acoustic quality; test your actual conversation before relying on it.

Automatic switching availability by language

Follow mode has two paths, and they are not available on the same transcribers. The explicit request path is always available in follow mode: the caller asks for a language, and the agent switches if that language is one of the published ones. Automatic switching additionally needs the transcriber to report which language it heard, and only some do.

Read each STT catalog entry's language_detection metadata for its supported language set, automatic or request-only behavior, and candidate limit. The editor combines that information with the selected voice configuration to show the accepted languages. Do not infer the final set from this table or from a provider's monolingual language count.

TranscriberListening behaviorAutomatic response-language switching
Azure AI Speech Real-timeA selected candidate set, with a maximum of 10 simultaneouslyYes, when the adapter reports stable language evidence
Deepgram Nova-3The model's declared multilingual setExplicit request only with the current integration
Soniox Real-time v5Broad language identification for new Auto configurations; existing strict-hint publications retain their constructionYes, within the published reply-language set
Google Chirp 2Fixed-language recognitionNot available in Follow mode

A provider may support more fixed languages than simultaneous candidates. Recognition of a language also does not prove that your selected TTS voice can speak it. OpenPhonex preserves your voice choice and shows configuration conflicts instead of choosing a different voice automatically.

Soniox can hear languages outside a restricted reply-language set. That does not authorize a reply-profile switch outside the published set. Azure compares speech against its candidates and can select one even when the caller spoke another language. Neither mechanism guarantees that unsupported speech will be identified as unsupported.

Where automatic switching is available it takes two consecutive final results that agree on the same language. That is deliberately conservative. A transcriber typically needs a moment to notice a language change, so the first moments after a caller switches are often still transcribed as the previous language; requiring two agreeing results means a single such result cannot move the call. The delay depends on when the recognizer returns those results; it is not a fixed number of milliseconds or sentences. A single final result in another language is insufficient. Ask for the language directly to use the explicit-request path, which does not wait for two detection results.

Automatic switching happens between sentences, never inside one. A caller who drops single foreign words into an otherwise Estonian sentence stays on Estonian, which is the intended behavior.

Authenticated browser tests use the same production conversation runtime as phone calls, including supported provider language evidence. Publish the configuration before testing it. An anonymous homepage demo is a separate runtime path; do not assume its automatic-detection behavior from an authenticated browser test. Test browser and phone behavior separately when both transports matter to your deployment.

What the caller hears when the language changes

A switch is never silent. When a caller asks for one of the published languages, the agent confirms the change out loud in the new language and carries on from what the caller last said — the reply the agent was giving when the request arrived is replaced, not resumed, because the transcriber and voice are exchanged at that boundary.

When a caller asks for a language that is not one of the published ones, the agent says so and names the languages it can speak on this call, then continues in the current one. Publishing a narrower language set than an agent's instructions promise is the usual way to reach this: update the system prompt and the opening message together with the language set, or callers will keep being offered a language the call cannot deliver.

Browse and test the cached catalog

The Voices workspace page is a flat, paginated list rather than a separate curated collection. Its horizontal Language, Accent, Character, and Provider filters are searchable multi-selects:

  • selecting several values within one filter means any of those values;
  • selections across different filters are combined; and
  • clearing every selection means all cached voices again.

The filter values come from the cached provider metadata. Character means provider-reported style or persona tags, not a gender inferred by OpenPhonex. A duplicated human language label stays distinguishable by its provider code rather than collapsing one provider claim into another.

Use Play to hear a voice. When a target language is selected, a compatible cached recording plays immediately only when its catalog provenance proves that it matches the target. At present, that proof exists for English only on an OpenPhonex ingestion-synthesized sample; a provider recording without a spoken-language assertion is not assumed to be English. With no Language filter or chosen preview language, an existing recording can instead play as published, and the row labels unverified spoken language rather than inferring one. If no suitable recording exists, or if you enter your own text, OpenPhonex uses the same explicit live preview command as Test voice. That command is bounded, metered and rate-limited for the workspace. If it cannot run, the page gives a local safe error; it does not show a provider credential, trace, or raw provider response.

With one matching Language filter, the full library previews that language. If several selected languages match a voice, choose one in its searchable preview language control; the library does not silently choose a first match. Text you enter is spoken exactly as written and is not translated. With no text, the library uses a localized sample sentence for the chosen language when available; otherwise enter your own text rather than receiving an English fallback. See Voice Library for the complete browsing and preview behavior.

Browsing or previewing a provider claim does not select it, make it a default, or make it callable. Saving and calling still validate the complete STT, model, TTS, language and billing stack, and name the component that prevents the combination from being used.

Use Test voice with your own text as the practical validation before you save. For a managed credential, a new voice selection must belong to the managed scoped inventory. For a bring-your-own credential, the exact voice ID must be accepted through that credential's own validation/preview path; a similarly named or identical managed voice does not authorize it.

The runnable language set is still bounded by the OpenPhonex worker registry. The selected provider, model, and language must form a declared streaming stack for calls. Provider-advertised languages outside that set may be browsable or previewable, but they are not silently admitted to a live agent.

When a provider removes a voice

OpenPhonex never replaces an AI agent's stored voice with a fallback voice. Changing a voice changes the agent's identity and must remain an explicit user choice.

If a completed provider inventory no longer contains an existing stored voice, the editor keeps that exact selection visible and warns you. An unavailable or partial provider listing is not enough to disable it. If an exact provider request definitively reports that the voice no longer exists, OpenPhonex marks that exact scoped voice unavailable and blocks new call admission until you choose another voice or an explicit successful validation clears the marker.

This fails visibly instead of letting a provider catalog change make an agent sound like somebody else.

Reading the current catalog

The catalog is a pure cached read and never calls a provider while you read it:

GET /v1/agent-catalog?language=ta&metered_only=true

Each runnable entry carries the provider, model, declared languages, scoped voice inventory, cost and latency provenance, and credential contract. Use voice_count and voices_truncated before assuming a bounded response is the provider's complete inventory.

For per-language selection across a campaign, see Multilingual outbound calls. For exact request and response shapes, see the generated API reference.

On this page