New Features & Improvements
- Deepgram Flux TTS — Added Deepgram’s Flux model as a text-to-speech vendor across the feature-server, API server, and webapp.
- Gradium TTS — Added Gradium as a text-to-speech vendor.
- Inworld streaming TTS — Inworld TTS streams with word-level alignment, and the API adds the
inworld-tts-2generation. The oldertts-1generation is deprecated. - Qwen Omni-Realtime (speech-to-speech) — Added Alibaba’s Qwen Omni-Realtime (Qwen-Audio-3.0) as a speech-to-speech vendor for the agent verb.
- OpenAI GPT live — Added OpenAI’s GPT live models for speech-to-speech, and OpenAI live transcription is selectable for transcribe.
- xAI and Resemble in the portal — The webapp exposes xAI and Resemble text-to-speech options in Extra Options.
- Speechmatics filtering — Speechmatics accepts filtering configuration.
- Dialogflow CX tool calls — Dialogflow CX supports a client-side tool-call round trip through
toolHook. - Dialogflow CES tool calls, streaming playout, and observability — Dialogflow CES supports the same client-side tool-call round trip, streams playout as it arrives, and reports turn-by-turn detail. Recent Calls in the portal has a turn-by-turn transcript view for Dialogflow sessions.
- Per-member conference recording — listen accepts
scope=membersat the conference level, producing one fork per participant instead of a single mixed stream. - Remote party on conference participants — Conference participants report the remote party’s number.
- SRTP on outbound SIP URI calls — dial accepts
srtpEncryptionfor SIP URI targets, and the SBC honors theX-Jambonz-SRTPheader on forwarded SIP URI calls.rtcp-muxis now the default for SRTP on both inbound and outbound. - transfer onholdHook — The transfer verb and handoff accept an
onholdHook. - Multi-arch Docker images — The feature-server, API server, webapp, inbound, and outbound images are built for both amd64 and arm64.
Removals
- SMPP removed — SMPP support has been removed from the feature-server, API server, and webapp.
- FreeSWITCH dependencies removed — Integration tests run against mediajam, and the cron jobs no longer reference FreeSWITCH.
Bug Fixes
- transfer/handoff caller ID — A transfer or handoff no longer loses the caller ID.
- Speech-to-speech teardown — Speech-to-speech sessions are torn down cleanly.
- DTMF —
lcc_DTMFprefers RFC 2833 through the media server. - say on the streaming path — The say verb executes correctly when streaming.
- Ultravox errors — A failed call registration reports the real underlying error rather than a generic failure.
- Outbound SDP — The SBC no longer emits an SDP
m=line with no audio codec. - 3PCC detection — Inbound no longer misidentifies certain calls as third-party call control.
- CLI environment — The API server loads the ecosystem environment in the
bin/andupgrade-dbCLIs. - SSO login — SSO login no longer returns a 500 for enterprise users, and service-provider-scoped users are no longer redirected to registration after signing in.
- Enterprise upgrade billing — Upgrading an enterprise account keeps the customer’s existing Stripe subscription.
- Portal — Users land on Home after opting into the new console; the carrier KYC prompt is hidden when prepaid isn’t offered; the placeholder “Est. next invoice” card is parked; and the enterprise welcome dialog no longer pushes account creation.
Component versions
The three components that differ between the AMI and Debian package installs
differ only in packaging: jambonz11 adds a multi-arch Docker build and an RPM
build-dependency fix, and the pcap-server and heplify-server point releases each
add a multi-arch Docker image. No functional difference, and the two converge at
the next release.
Availability
jambonz.cloud — 11.1.1 is available on our hosted platform, with nothing to install or upgrade.
AWS — AMIs are published for all nine deployment variants on both amd64 and
arm64, in all 30 regions the CloudFormation templates support. The AMIs and
their EBS snapshots are public, so generate-cf.sh copies them into your own
account. See the AWS installation instructions to deploy or
upgrade a self-hosted cluster.
Media server
- mediajam replaces FreeSWITCH — The feature-server media path now runs on the new Go-based mediajam media server instead of FreeSWITCH. Higher session density, linear multi-core scaling, and a small footprint that builds on any Linux distro and as a minimal Docker image. Audio-only (PCMU/PCMA + telephone-event), RTP via Pion, RFC 2833 DTMF, resampling via libspeexdsp, with Krisp and RNNoise available for noise isolation and turn-taking.
New Features & Improvements
- Transfer verb — New transfer verb that hands a call off to another destination as a blind transfer (SIP REFER or bridged dial) or a warm transfer (caller parked on hold, or joined into a three-way conference), with spoken briefs, confirmation gates, hold music, and a configurable disposition (return to the app, go to voicemail, or hang up) when the transfer does not complete.
- Transfer-to-human handoff for AI verbs — The agent and llm verbs accept a declarative
handoffblock. When present, the runtime injects atransfer_to_humantool into the model’s toolset and runs the packaged transfer choreography when the model calls it — notoolHookrequired. - Built-in hangup tool for AI verbs — The agent and llm verbs accept a
hangupblock that injects ahanguptool the model can call to end the call on its own, with an optionalreasonplaced in theX-Reasonheader on the outbound BYE. - Conference observability & control (API) —
GET /Accounts/{sid}/Conferences?expand=participantsreturns live conference rooms with their participants and durations; newPOST/DELETE /Accounts/{sid}/Conferences/{name}/listenendpoints start and stop a conference-scoped listen fork, addressed by conference name with no participant leg. - Bidirectional conference listen stream — The conference listen fork is bidirectional: the room’s mixed audio streams to your WebSocket endpoint, and audio the WebSocket server streams back is mixed into the room and heard by every participant (unless disabled with
disableBidirectionalAudio). - Play or speak to a whole room — The media server can play an audio file (or tone) and speak TTS to an entire conference/room, mixed into the room mix so all participants hear it, with the ability to stop an in-flight playout.
- Live Call Control — transfer —
updateCallnow acceptstransferas a live call control operation. - New speech vendors and models — Added support for xAI (STT), Murf (STT and TTS), Rime
coda, Cartesia Sonic 3.5 (with word timestamps), Soniox v5 real-time model (stt-rt-v5), and NVIDIA Riva cloud (NVCF) credentials with refreshed Magpie voices. The webapp exposes the new vendors in the speech-services UI. - Speech vendors removed — Verbio, Cobalt, Nuance, Voxist, and PlayHT have been deprecated and removed across the feature-server, API server, and webapp.
- gather interim events — Interim
gatherevents now include averb_id. - API security hardening — Added cross-account authorization checks (CWE-639) across API server resources (tenants, LCR carrier-set entries, SIP/SMPP gateways, custom voices, and more) to prevent access to records outside the caller’s scope.
- SBC gateway safety — Carrier configuration now rejects
0.0.0.0and/0gateways, andsbc_addressesenforces a uniquehost:portindex.
Bug Fixes
- Call counts on transfer/abandon — A call transferred off a feature-server now correctly decrements the SBC call count (inbound and outbound), and abandoned outbound calls decrement the count as well. Long-running calls are no longer reaped by the cleanup cron (the
debug:incallskeys for active calls are refreshed). - Krisp/noise alerts — Alerts raised when Krisp noise isolation or turn detection fails now report the real vendor and underlying error instead of a hardcoded message.
- Conference timeLimit —
timeLimitis now preserved on a transferred feature-server when joining a conference. - Speech-to-speech teardown — The call now ends cleanly when an s2s session ends with no follow-on verbs; ElevenLabs s2s coerces non-string
client_tool_result.resultvalues to strings; and s2s disconnect logging no longer mislabels_onDisconnectas_onConnectFailure. - listen verb — Fixed the listen verb being torn down (with the wrong handler) when a background listen task failed.
- dial verb — An unanswered
actionHookis no longer logged as a dial error. - Scale-in — Resource teardown in
_clearResourcesis now bounded so scale-in can’t hang. - Security/logging — The carrier
register_passwordis no longer written to the log.
New Features & Improvements
- Agent verb — production ready — The agent verb graduates from experimental in 10.1.0 to a fully deployable building block for cascaded voice AI pipelines. Compose any supported STT, LLM, and TTS together and let the platform handle turn-taking, barge-in, and tool execution on your behalf.
- Agent tool-filler — Cover the silence during slow LLM tool calls with either LLM-generated backchannel phrases or a background audio loop. In
backchannelmode the agent’s own LLM is used to generate a fresh set of natural filler phrases in the configured TTS language (with an optionalstylehint), pre-warmed at agent startup so they’re ready the moment a tool call fires. Inaudiomode the agent loops a URL of your choice. Both modes are tuned withstartDelaySecsandescalationSecs. - Deepgram Flux multilingual with auto-locking — Detect the caller’s language on the first utterance, then automatically lock STT to that language and switch the TTS voice to match. New
autoLockLanguage(true/false/'always') andlanguageConfig(per-language voice mapping) properties on the agent verb, plus a WebSocketstt:reconfigurecommand for mid-call control. - Manifest-driven LLM credentials — The API server and webapp now render LLM credential forms and handle encryption from a shared
@jambonz/llmmanifest, so adding a new LLM vendor no longer requires changes in api-server or webapp. Fully backward compatible with all existing encrypted credentials. - DeepSeek LLM support — Add DeepSeek as an LLM provider for the agent verb and any HTTP
llm.toolHookflow. - Google Vertex AI LLM support — Add Google Vertex AI as an LLM provider, with
vertex-geminiandvertex-openaiexposed as distinct credential types rather than being inferred from the model name. - Azure OpenAI LLM support — Add Azure OpenAI as an LLM provider with full credential management in the API server and webapp.
- Groq LLM support — Add Groq as an LLM provider, exposing Groq’s low-latency inference of open-weight models (Llama, Mixtral, and others) to the agent verb and
llm.toolHookflows. - HuggingFace Inference Providers — Add HuggingFace Inference Providers as an LLM provider, opening up the broad catalog of models served through the HuggingFace inference network.
- Baseten LLM support — Add Baseten as an LLM provider, letting you wire Baseten-hosted open-weight model deployments directly into the agent verb.
- Vendor metadata end-to-end — Surface provider-specific telemetry — region, request id, processing time, cache hit/miss token counts, rate-limit headers, HuggingFace inference provider, Bedrock latency, Groq processing-ms — through
turn_endevent hooks,session.json, the webapp transcript view, and the offline bundle viewer. A generic renderer means new vendors light up the diagnostics view without UI changes. - LLM connect-time diagnostics — Optional client-side timing breakdown (request → headers, headers → first token, plus TCP/TLS connect timing via undici diagnostics_channel). Enable with
JAMBONES_DEBUG_LLM_TIMING=1on the feature-server. - HTTP
llm.toolHookfor OpenAI — The HTTPllm.toolHookintegration now supports OpenAI in addition to the existing providers. - OpenAI Realtime GA — Full support for OpenAI’s general-availability Realtime API. The platform detects the session shape on the wire and converts legacy formats transparently while stripping GA-invalid fields from older
response_createpayloads. - OpenAI Realtime Whisper VAD — Use OpenAI’s Whisper-based voice activity detection in the OpenAI Realtime STT pipeline.
- AssemblyAI speech-to-speech — New
mod_assemblyai_s2sFreeSWITCH module provides real-time speech-to-speech via AssemblyAI’s streaming API. - Vertex AI for Google S2S — Use
vertex-geminiandvertex-openaias Google speech-to-speech backends, expanding model availability beyond the standard Google Cloud Speech endpoints. - Cartesia
generation_config— Supportgeneration_configfor Cartesia Sonic-3 and higher voices, enabling more advanced TTS control. - Google STT
parentPath— Newrecognizer.googleOptions.parentPathlets you point Google STT at a custom GCP resource hierarchy. - jambonz-mini Debian install — A new one-command bare-metal / VPS installer brings up a complete single-host jambonz stack from the public Debian package repository. No Docker, Kubernetes, or cloud templates required — ideal for small deployments, lab environments, and edge installs. See the Debian package install guide for details.
- System Updates admin panel — Jambonz-mini deployments installed via AWS CloudFormation or Terraform (on other clouds) can now detect available upgrades, install immediately, schedule (or reschedule, or cancel) future upgrades, and watch live progress streamed back into the portal via Server-Sent Events. A site-wide banner flags any pending upgrade. Visibility is gated by
VITE_ENABLE_SYSTEM_UPDATESand a valid license. (Bare-metal Debian installs upgrade viaapt upgradeinstead.) - Multi-process clustering — Optional
cluster.jsworker forking is now available in feature-server, sbc-inbound, sbc-outbound, and api-server. Enable viaJAMBONES_FORK_INSTANCE=<n>(orJAMBONES_FORK_INSTANCE=maxfor one worker per core) to get pm2-style scaling under systemd without the pm2 dependency. - Krisp failure alerts — Generate alerts on Krisp noise-isolation or turn-taking failure so operators can spot degraded sessions in time-series dashboards.
- Slow End-of-Turn metric alerts — The webapp now badge-flags slow-turn detection in the EOT metric alerts view, making it easier to triage latency outliers.
- Inline action events in transcript — Agent transcript action events (TTS language switches, configuration changes, etc.) are now interleaved inline with conversation turns sorted by timestamp, rather than grouped at the bottom.
dialre-anchorX-Reasonheader — Pass anX-Reasonheader when re-anchoring media endpoints to FreeSWITCH, allowing the re-anchor to skip license validation.- FreeSWITCH module updates — A new
uuid_deepgramflux_configureAPI command for runtime Deepgram Flux configuration, AVMDfast_mathoptimization for audio pattern detection, improved 11Labs alignment-tracking logging, andmod_deepgram_transcribeadded to the defaultmodules.conf.xmlautoload list.
Bug Fixes
- Fixed AMD tone detection stopping prematurely on
machine-stopped-speaking; tone detection now continues as expected. - Fixed a TTS streaming race condition with fast LLMs that trigger tool calls — the streaming connection is now pre-warmed and channel variables are set before
startTtsStreamis invoked. - Fixed agent preflight-hit transitions (direct jump to Thinking) not calling
autoLockLanguagewhen they should. - Fixed Deepgram Flux STT metadata capture by reading the
languagesarray directly fromEndOfTurnevents. - Fixed LLM tool history being dropped across internal
toolCallResponsereprompts, which could cause the LLM to hallucinate a refusal mid-conversation. Tools from the lastprompt()are now cached and reused. - Fixed Rimelab voice-model handling so each model uses its own voice rather than being forced to a single hardcoded default.
- Fixed a quick-CANCEL race condition in sbc-inbound where rapid CANCEL requests on inbound calls could cause missed state transitions and stale call-count entries.
- Fixed a UTC date-handling bug in the webapp’s
/Updates/sessions/{path}route that produced inconsistent session and bundle paths across timezones. - drachtio-server (critical): Fixed a delayed crash that could occur when in-dialog requests (INFO, NOTIFY, OPTIONS, MESSAGE, PUBLISH, SUBSCRIBE) arrived during an active INVITE transaction.
- drachtio-server (critical): Fixed a memory leak on WebSocket BYE when the transport closed before the application responded.
- drachtio-server (critical): Fixed a crash on shutdown caused by improper cleanup ordering during SIGTERM.
- drachtio-server: Corrected session-expires refresher timing, and fixed an edge case where a late ACK after dialog teardown could destabilize the transaction layer.
- FreeSWITCH: Fixed a long-standing curl + boost::asio race condition across all 11 streaming-TTS modules by replacing double-map lookups with an iterator pattern in HTTP completion callbacks.
- FreeSWITCH: Fixed a missing semicolon in
mod_rimelabs_tts_streamingand removed obsolete libwebsockets logging symbols to support currentlibwebsocketsversions.
SQL Changes
No database schema changes are required for this release. The LLM vendor expansion is handled entirely via the new @jambonz/llm manifest layer and the @jambonz/schema package — existing llm_credentials storage is reused.
Availability
- Available now on jambonz.cloud.
- Available now for AWS self-hosting via CloudFormation scripts.
- Available now as a Debian package for jambonz-mini bare-metal / VPS deployments.
- Coming shortly to all other self-hosting platforms.
Questions? Contact us at support@jambonz.org
New Features & Improvements
- Session observability — Major new feature providing detailed per-session data for debugging and analysis. At call end, the feature-server assembles a
session.jsoncontaining turn-by-turn detail (transcripts, latencies, agent responses) and sends it to the recorder alongside the audio. The API server exposes a new session retrieval endpoint and bundle viewer (HTML page with embedded waveform player) so you can replay audio and inspect turn data together. A newobservability_levelcolumn on the application controls how much detail is captured. The webapp adds an observability level selector and a transcript tab in the Recent Calls view for browsing session data. - Krisp turn detection with native-turn-taking STT vendors — You can now use Krisp for acoustic turn detection even when your STT vendor (AssemblyAI, Deepgram Flux, Speechmatics) provides its own native turn-taking. Previously these vendors always used their built-in detection; now you can opt into Krisp for more consistent behavior across vendors.
- Agent verb inherits STT/TTS from application — The agent verb now falls back to the STT and TTS settings configured on the application when
sttorttsare not specified in the verb. Previously these were effectively required on the verb itself. - drachtio-srf 5.0.21 — Updated the SIP stack to pick up upstream fixes.
Bug Fixes
- Fixed webapp clearing the “alerts last viewed” timestamp on logout, which caused the alert notification badge to re-trigger for already-seen alerts after logging back in.
- Fixed an issue in the Recent Calls view where session date was being parsed from
attempted_atinstead of the recording URL, producing incorrect timestamps in some cases.
Availability
- Available now on jambonz.cloud; coming soon with devops scripts for subscription customers
Questions? Contact us at support@jambonz.org
New Features & Improvements
- Agent verb — Major new feature enabling low-latency voice AI agents with support for Amazon Bedrock and Google Gemini as LLM backends, Deepgram and Krisp for STT/turn-taking, and ElevenLabs TTS with spoken-word tracking. Includes mid-conversation async updates via
agent:update, noise cancellation powered by Krisp, and comprehensive metrics and measurement. See the agent verb reference and voice agents guide for details. - Node.js SDK — New unified SDK for building jambonz voice applications in TypeScript/JavaScript, supporting webhook and WebSocket transports, REST API client, TTS streaming, and chainable verb methods. Replaces the older
@jambonz/node-clientand@jambonz/node-client-wspackages. See the Node.js SDK documentation. - Python SDK (experimental) — New Python SDK with the same capabilities as the Node.js SDK: webhook and WebSocket transports, REST client, TTS streaming, inject commands, and spec-driven verb generation with full type hints. See the Python SDK documentation.
- Speech vendor updates — Expanded speech vendor support across the platform:
- Speechmatics Preview STT — New speech-to-text vendor with turn-taking event forwarding and analytics.
- Houndify WebSocket STT — Speech recognition over WebSocket with
audioQueryAbsoluteTimeoutfor controlling recognition timeouts. - AssemblyAI Universal-3 Pro — Support for the universal-3 pro streaming model, defaulting to
u3-rt-prowhen a prompt is provided. - Deepgram Flux language hint — Pass
language_hintto Deepgram Flux STT for improved recognition accuracy. - Google S2S transcription events — Google Speech-to-Speech now emits
llm_eventwith transcription data to the application layer. - ElevenLabs TTS tracking — Track spoken words and TTS timing for ElevenLabs, enabling detailed usage analytics and billing insights.
- TTS time-to-first-byte metrics — Latency metrics across all streaming TTS vendors to measure time to first audio byte.
- Inworld AI models — Support for Inworld AI models.
- Krisp noise isolation — Add support for Krisp-powered noise isolation and cancellation with usage tracking and event generation.
- Google Gemini LLM — Add support for Google Gemini as an LLM provider with credential management in the API server and webapp.
- MCP client hardening — Improved MCP client reliability with configurable timeouts, authentication support, URL hints, automatic reconnection, and graceful connection close.
- Listen verb in conference — Support for nesting a
listenverb inside aconference, enabling real-time audio streaming from conference sessions. - LLM services — New LLM services management in the API server and webapp.
- License expiry alert — The webapp now displays an alert when the system license key is expired or approaching expiration.
- Schema migration — Migrated to the consolidated
@jambonz/schemapackage, deprecating the standalone verb-specs module. - Updated API swagger — API server swagger documentation updated to reflect new endpoints and properties.
Bug Fixes
- Fixed a race condition for outbound calls in the feature-server that could cause call setup failures.
- Fixed
gladiaOptionsbeing hardcoded instead of using user-provided configuration. - Fixed Google Speech-to-Speech not sending transcription events to the application layer.
- Fixed DTMF digits being sent as multiple underscore characters instead of correct tones.
- Fixed TTS engine flush signaling and guarded against Cartesia empty events without proper completion state.
- Fixed ElevenLabs models endpoint failure causing the entire language/model dropdown to break; now gracefully falls back to static data.
- Fixed Deepgram STT language dropdown appearing empty due to model name parsing issue.
- Fixed missing language names for Cartesia Sonic 3 languages in the language map.
- Fixed ElevenLabs STT not properly loading available languages and models.
- Fixed potential crash in webapp TTS voice sorting when voice name is undefined.
- Fixed exception when user provides an invalid value for a play file URL.
- Added exception handling in the
mod_dubFreeSWITCH module to prevent crashes from unhandled errors. - Fixed agent verb integration with Deepgram STT and Krisp/LLM-based turn taking.
- Fixed internal task validation that was incorrectly rejecting valid internal tasks.
- Removed unused IBM speech integration from the webapp.
SQL Changes
Contact your account manager or email support@jambonz.org for the complete SQL migration script for this release.
Questions? Contact us at support@jambonz.org
New Features & Improvements
- Add ability to override certain TTS streaming options via the config verb, allowing runtime control of streaming behavior.
- Add ability to enable/disable Azure audio logging via
azureOptionsin speech credentials. - Compare SDP to determine if transcoding is being used, with refactored codec checking.
- SoundHound now supports audio endpoint configuration from speech credentials with
requestInfoandsampleRateoptions. - Add configurable say chunk size for TTS streaming.
- Enhanced TTS sentence boundary detection for Arabic and Japanese with improved regex handling.
- Add support for sending DTMF to Ultravox.
- Add label to STT/TTS alerts with time-series updates.
- Use timeout on HTTP requests to prevent hanging connections.
- Allow UAS leg to send re-invite with outbound gateway credentials.
- Add hasRecording flag for setting recording URLs in call detail records.
- Add configurable backup for outbound registration failure.
- Use persistent call-id for regbot using gateway SID.
- Only disable registration after multiple consecutive failures rather than a single failure.
- Add support for Google Gemini TTS.
- Add support for OpenAI transcribe auto language detection.
- Allow boostAudioSignal from updateCall API.
- Allow media_path updates from REST API with validation for media_path values.
- Allow startRecording without SIPREC URL for cloud deployments.
- Add new fields for ICE and DTLS configuration.
- Add admin carrier and number management control via
JAMBONES_ADMIN_CARRIER. - Add database migrations for predefined carriers tables.
- Add alert notification badge to the webapp with configurable polling.
- Add SoundHound audio endpoint configuration in the webapp.