Bug Fixes

  1. 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 adds JAMBONES_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:

$cd terraform/exoscale
$./prepare-images.sh --version 11.1.3

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

  1. 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.
  2. 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.
  3. 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 the client_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_ms reported 0 on the agent verbstopTalking was clobbered after the final transcript, so speech-to-text latency always came back as zero.
  • tts_ms missing or wrong on the agent verb — Vendor TTS time is now reported in tts_ms, and a flush race that dropped the measurement entirely is fixed.
  • noResponseTimeout with the greeting disabled — The agent verb now arms noResponseTimeout at 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 StartRecognition message.
  • 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_env dropdown — 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 packagesjambonz-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

  1. Deepgram Flux TTS — Added Deepgram’s Flux model as a text-to-speech vendor across the feature-server, API server, and webapp.
  2. Gradium TTS — Added Gradium as a text-to-speech vendor.
  3. Inworld streaming TTS — Inworld TTS streams with word-level alignment, and the API adds the inworld-tts-2 generation. The older tts-1 generation is deprecated.
  4. 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.
  5. OpenAI GPT live — Added OpenAI’s GPT live models for speech-to-speech, and OpenAI live transcription is selectable for transcribe.
  6. xAI and Resemble in the portal — The webapp exposes xAI and Resemble text-to-speech options in Extra Options.
  7. Speechmatics filtering — Speechmatics accepts filtering configuration.
  8. Dialogflow CX tool calls — Dialogflow CX supports a client-side tool-call round trip through toolHook.
  9. 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.
  10. Per-member conference recordinglisten accepts scope=members at the conference level, producing one fork per participant instead of a single mixed stream.
  11. Remote party on conference participants — Conference participants report the remote party’s number.
  12. SRTP on outbound SIP URI callsdial accepts srtpEncryption for SIP URI targets, and the SBC honors the X-Jambonz-SRTP header on forwarded SIP URI calls. rtcp-mux is now the default for SRTP on both inbound and outbound.
  13. transfer onholdHook — The transfer verb and handoff accept an onholdHook.
  14. Multi-arch Docker images — The feature-server, API server, webapp, inbound, and outbound images are built for both amd64 and arm64.

Removals

  1. SMPP removed — SMPP support has been removed from the feature-server, API server, and webapp.
  2. 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.
  • DTMFlcc_DTMF prefers 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/ and upgrade-db CLIs.
  • 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

Component11.0.011.1.1
mediajamv0.4.15v0.5.3
drachtio10.0.2210.1.2
upload-recordings1.8.51.8.6
rtpengine14.1.1.8-jambonz1014.1.1.8-jambonz10 (AMI) / -jambonz11 (deb)
pcap-server1.0.31.0.3 (AMI) / 1.0.4 (deb)
heplify-server1.0.31.0.3 (AMI) / 1.0.4 (deb)

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

  1. 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

  1. 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.
  2. Transfer-to-human handoff for AI verbs — The agent and llm verbs accept a declarative handoff block. When present, the runtime injects a transfer_to_human tool into the model’s toolset and runs the packaged transfer choreography when the model calls it — no toolHook required.
  3. Built-in hangup tool for AI verbs — The agent and llm verbs accept a hangup block that injects a hangup tool the model can call to end the call on its own, with an optional reason placed in the X-Reason header on the outbound BYE.
  4. Conference observability & control (API)GET /Accounts/{sid}/Conferences?expand=participants returns live conference rooms with their participants and durations; new POST/DELETE /Accounts/{sid}/Conferences/{name}/listen endpoints start and stop a conference-scoped listen fork, addressed by conference name with no participant leg.
  5. 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).
  6. 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.
  7. Live Call Control — transferupdateCall now accepts transfer as a live call control operation.
  8. 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.
  9. Speech vendors removed — Verbio, Cobalt, Nuance, Voxist, and PlayHT have been deprecated and removed across the feature-server, API server, and webapp.
  10. gather interim events — Interim gather events now include a verb_id.
  11. 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.
  12. SBC gateway safety — Carrier configuration now rejects 0.0.0.0 and /0 gateways, and sbc_addresses enforces a unique host:port index.

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:incalls keys 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 timeLimittimeLimit is 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.result values to strings; and s2s disconnect logging no longer mislabels _onDisconnect as _onConnectFailure.
  • listen verb — Fixed the listen verb being torn down (with the wrong handler) when a background listen task failed.
  • dial verb — An unanswered actionHook is no longer logged as a dial error.
  • Scale-in — Resource teardown in _clearResources is now bounded so scale-in can’t hang.
  • Security/logging — The carrier register_password is no longer written to the log.

New Features & Improvements

  1. 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.
  2. Agent tool-filler — Cover the silence during slow LLM tool calls with either LLM-generated backchannel phrases or a background audio loop. In backchannel mode the agent’s own LLM is used to generate a fresh set of natural filler phrases in the configured TTS language (with an optional style hint), pre-warmed at agent startup so they’re ready the moment a tool call fires. In audio mode the agent loops a URL of your choice. Both modes are tuned with startDelaySecs and escalationSecs.
  3. 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') and languageConfig (per-language voice mapping) properties on the agent verb, plus a WebSocket stt:reconfigure command for mid-call control.
  4. Manifest-driven LLM credentials — The API server and webapp now render LLM credential forms and handle encryption from a shared @jambonz/llm manifest, so adding a new LLM vendor no longer requires changes in api-server or webapp. Fully backward compatible with all existing encrypted credentials.
  5. DeepSeek LLM support — Add DeepSeek as an LLM provider for the agent verb and any HTTP llm.toolHook flow.
  6. Google Vertex AI LLM support — Add Google Vertex AI as an LLM provider, with vertex-gemini and vertex-openai exposed as distinct credential types rather than being inferred from the model name.
  7. Azure OpenAI LLM support — Add Azure OpenAI as an LLM provider with full credential management in the API server and webapp.
  8. 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.toolHook flows.
  9. HuggingFace Inference Providers — Add HuggingFace Inference Providers as an LLM provider, opening up the broad catalog of models served through the HuggingFace inference network.
  10. Baseten LLM support — Add Baseten as an LLM provider, letting you wire Baseten-hosted open-weight model deployments directly into the agent verb.
  11. 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_end event 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.
  12. 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=1 on the feature-server.
  13. HTTP llm.toolHook for OpenAI — The HTTP llm.toolHook integration now supports OpenAI in addition to the existing providers.
  14. 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_create payloads.
  15. OpenAI Realtime Whisper VAD — Use OpenAI’s Whisper-based voice activity detection in the OpenAI Realtime STT pipeline.
  16. AssemblyAI speech-to-speech — New mod_assemblyai_s2s FreeSWITCH module provides real-time speech-to-speech via AssemblyAI’s streaming API.
  17. Vertex AI for Google S2S — Use vertex-gemini and vertex-openai as Google speech-to-speech backends, expanding model availability beyond the standard Google Cloud Speech endpoints.
  18. Cartesia generation_config — Support generation_config for Cartesia Sonic-3 and higher voices, enabling more advanced TTS control.
  19. Google STT parentPath — New recognizer.googleOptions.parentPath lets you point Google STT at a custom GCP resource hierarchy.
  20. 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.
  21. 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_UPDATES and a valid license. (Bare-metal Debian installs upgrade via apt upgrade instead.)
  22. Multi-process clustering — Optional cluster.js worker forking is now available in feature-server, sbc-inbound, sbc-outbound, and api-server. Enable via JAMBONES_FORK_INSTANCE=<n> (or JAMBONES_FORK_INSTANCE=max for one worker per core) to get pm2-style scaling under systemd without the pm2 dependency.
  23. Krisp failure alerts — Generate alerts on Krisp noise-isolation or turn-taking failure so operators can spot degraded sessions in time-series dashboards.
  24. 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.
  25. 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.
  26. dial re-anchor X-Reason header — Pass an X-Reason header when re-anchoring media endpoints to FreeSWITCH, allowing the re-anchor to skip license validation.
  27. FreeSWITCH module updates — A new uuid_deepgramflux_configure API command for runtime Deepgram Flux configuration, AVMD fast_math optimization for audio pattern detection, improved 11Labs alignment-tracking logging, and mod_deepgram_transcribe added to the default modules.conf.xml autoload 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 startTtsStream is invoked.
  • Fixed agent preflight-hit transitions (direct jump to Thinking) not calling autoLockLanguage when they should.
  • Fixed Deepgram Flux STT metadata capture by reading the languages array directly from EndOfTurn events.
  • Fixed LLM tool history being dropped across internal toolCallResponse reprompts, which could cause the LLM to hallucinate a refusal mid-conversation. Tools from the last prompt() 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_streaming and removed obsolete libwebsockets logging symbols to support current libwebsockets versions.

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

  1. Session observability — Major new feature providing detailed per-session data for debugging and analysis. At call end, the feature-server assembles a session.json containing 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 new observability_level column 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.
  2. 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.
  3. Agent verb inherits STT/TTS from application — The agent verb now falls back to the STT and TTS settings configured on the application when stt or tts are not specified in the verb. Previously these were effectively required on the verb itself.
  4. 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_at instead of the recording URL, producing incorrect timestamps in some cases.

SQL Changes

1ALTER TABLE accounts ADD COLUMN observability_level
2 ENUM('disabled','recording','full') NOT NULL DEFAULT 'disabled' AFTER record_all_calls;
3
4ALTER TABLE applications ADD COLUMN observability_level
5 ENUM('disabled','recording','full') DEFAULT NULL AFTER record_all_calls;