Bug Fixes
- drachtio could not reach a MySQL server on a non-standard port — license validation opens a connection to the jambonz database to check the licensed domain, and the port was not configurable: drachtio always used 3306. Where the database listens elsewhere, that connection blocked for the full TCP timeout on every attempt (roughly two minutes), the license never validated, and the server refused every call with
480 Temporarily Unavailable - Unlicensed. Registrations still succeeded, which made the symptom look like a media or networking fault rather than a licensing one. drachtio 10.1.4 addsJAMBONES_MYSQL_PORT(default 3306), and the self-hosting images now pass the port through. This affected Exoscale medium and large only, where the managed database service allocates a per-service port.
Availability
Exoscale — qcow2 images are published for all nine deployment variants at 11.1.3. Exoscale templates cannot be shared between accounts, so deploying starts by registering the images into your own account:
then terraform apply in provision-vm-mini, provision-vm-medium or
provision-vm-large. Both the mini and medium layouts were verified end to end
on this release. The large layout carries the same fixes but has not yet been
deployment-tested.
New Features & Improvements
- Mutual TLS (mTLS) for self-hosted servers — drachtio can present a client certificate on outbound TLS connections, so a carrier or SIP peer that requires mutual authentication can be reached from a self-hosted deployment. See Mutual TLS for how to obtain a client certificate and configure it.
- nineninesix.ai TTS — Added nineninesix.ai (
gepard-1.0) as a text-to-speech vendor for say, with speech-credential support in the API and the portal. The model emits no word timestamps, so playout tracking is unavailable on it. - Sub-account cap per enterprise organization — An enterprise organization can be limited to a maximum number of sub-accounts.
Bug Fixes
- 3DS authentication on capacity changes — Changing subscription capacity failed on any card requiring SCA/3DS, because the API returned a bare failure and dropped the
client_secret, so the browser could never present the challenge. Cards that always require authentication — every Indian-issued card, for one — could not complete a capacity change at all. The API now returns theclient_secret, and the portal runs the challenge instead of reporting success while the capacity was unchanged. - India e-mandate ceiling — Registers an e-mandate ceiling with headroom, and surfaces invoices that require additional factor authentication.
stt_msreported 0 on the agent verb —stopTalkingwas clobbered after the final transcript, so speech-to-text latency always came back as zero.tts_msmissing or wrong on the agent verb — Vendor TTS time is now reported intts_ms, and a flush race that dropped the measurement entirely is fixed.noResponseTimeoutwith the greeting disabled — The agent verb now armsnoResponseTimeoutat the start of the call when no greeting is configured.- TTS connect-failure alerts were dropped — A streaming connect failure passed an object into the InfluxDB vendor tag, and the tag escaper threw on it, losing the alert.
- Speechmatics credential test — Testing a Speechmatics credential crashed, and the preview sent an invalid
StartRecognitionmessage. - Enterprise cold login — A cold login landed enterprise users on Accounts instead of Home, because beta eligibility was read before the JWT had populated access.
- Google OAuth
rootDomain— Fixed the root domain used for Google OAuth. app_envdropdown — The dropdown now shows the initially selected option.
Availability
AWS — AMIs are published for all nine deployment variants on both amd64 and arm64, in all 30 regions the CloudFormation templates support. See the AWS installation instructions to deploy a self-hosted cluster.
Debian packages — jambonz-mini 11.1.2 is published in the apt repository
for both amd64 and arm64, installable on a fresh Debian 12 (bookworm) host
with apt-get install jambonz-mini. See the
Debian package instructions.
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 format 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.