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.
Bug fixes
- Fixed say verb does not close streaming when finishing say.
- Fixed playbackIds not in correct order compared with
say.textarray. - Allow say verb to fail as NonFatalTaskError for File Not Found instead of crashing the call.
- Fixed race condition in gather where timeout timer gets set after resolve when speech transcript arrives.
- Fixed transcribe 2 legs cannot fallback.
- Fixed SDP checking for Opus on A leg during B leg dialing.
- Fixed undefined issue when setting TTS streaming channel vars.
- Fixed dial verb cannot bridge 2 leg endpoints due to transcoding.
- Do not send TTS streaming events when not doing TTS streaming.
- Fixed gather should ignore transcription if task is killed or resolved.
- Fixed callsession cannot close TTS streaming.
- Optimized slow SQL queries and added support for readonly database endpoints.
- Optimized CIDR gateway queries using STRAIGHT_JOIN to prevent inefficient table scans.
- Parallelized independent gateway queries for exact IP and CIDR range lookups to reduce inbound call routing latency.
- When far end answers with only PCMA, passthrough instead of transcoding to PCMU.
- Include codec-accept on answer to rtpengine during reinvites.
- Remove ICE and DTLS settings if set in database configuration.
- Fixed reg trunk proxy port handling to only use port if proxy is IPv4 address; use SIP gateway host for DNS lookup of ephemeral gateways.
- Fixed Array.prototype.push.apply stack overflow causing maximum call stack size exceeded errors.
- If no SRV record found when no port specified, fall back to A record lookup.
- Fixed support for writer/reader database nodes.
- Removed send_options_bots array to fix ticket #1983.
- Fixed timing issue with ephemeral gateway update/deletion and potential regbot zombie processes.
- Set
JAMBONES_NETWORK_CIDRas private IP address space when running under K8S. - Removed activation code from API response.
- Force account sip_realm to lowercase.
- Fixed obscured key detection.
- Fixed unable to fetch voice_call_session.
- Fixed webhook URL validation on update to not remove URLs if unchanged.
- Fixed Soniox STT speech credential validation.
- Subscription update-quantities validation for minimum voice call sessions.
- Added database indexes and SQL optimizations including index on sip_gateways and trunk_type for predefined carriers.
- Fixed duplicate inbound and outbound SIP gateways could be created.
- Require IP auth trunk to have either inbound or outbound carrier; consistent wording to “IP Trunk”.
- Fixed outbound call routing race condition showing default LCR route set that user cannot delete.
- Removed filter for active carriers from phone number configuration.
Availability
- Available now with devops scripts for subscription customers
Questions? Contact us at support@jambonz.org
New Features
- Redesigned and simplifed the Carrier page in the portal, adding support for additional carrier authentication features.
- Add support for STT Latency metrics
- Add support for Deepgram Flux STT.
- Add support for Gladia STT.
- Add support for Soundhound STT.
- Add support for AssemblyAI v3 STT.
- Add support for Deepgram EU hosted endpoint.
- Add support for additinonal ElevenLabs hosted endpoints.
- Add support for Cartesia Sonic-3 streaming TTS model.
- Add support for Resemble TTS.
- Add additional languages and phrases to voicemail greeting file.
- Config verb can now be used to disable tts caching for the entire call.
- New
distributeDtmfproperty added to conference verb to enable DTMF distribution to all conference members. - Add support for tel scheme in referTo property of dial verb.
- Add new Alert verb
- Added CLI commands for managing feature server drainage, allowing administrators to manually take feature servers out of the rotation gracefully. Commands include fs active, fs drain, fs drained, fs undrain, and fs list.
Bug fixes
- A significant number of stability and performance improvements have been made in this release to improve overall system reliability.
- PR 1421 Fixed a timing issue in the gather verb where the timeout timer would not properly start after a bargein event occurred. This could cause calls to hang indefinitely waiting for user input instead of timing out as expected. The fix also removed an unnecessary “playDone” event emission that was no longer being used.
- PR 1415 Fixed an issue where whitespace-only tokens were being sent to the media server during TTS streaming. When whitespace was trimmed, incomplete commands lacking the required parameters would result in errors. The fix validates tokens before transmission and holds whitespace-only content for the next processing cycle.
- PR 1391 Fixed an issue where customerData was being lost when calls were transferred between feature servers. The fix ensures that customer context and metadata are preserved throughout the transfer process, allowing important customer information to remain intact during call routing.
- PR 1395 Resolved an issue where query string parameters were being inappropriately URL-encoded when they appeared as part of a filename in HTTP requests for audio file retrieval. This was causing URLs to become malformed and preventing audio files from being retrieved correctly.
- PR 1393 Fixed a race condition where the system would fail to send the final status callback or close the WebSocket application connection when a caller canceled during app JSON fetching. The fix ensures that CallSession properly cleans up resources when a call is canceled during the app-fetching phase.
- PR 1386 Fixed a timing issue where the continuous ASR (automatic speech recognition) timer was being initiated immediately upon starting to listen during background gather operations. The fix prevents the timer from starting prematurely in background gather scenarios, avoiding unintended behavior.
- PR 1383 Resolved a bug where transferring outbound conference participants between feature servers would fail. The system was checking the original call direction from Redis to determine whether to answer transfer requests, which caused failures for outbound calls. The fix ensures that transferred calls are always answered regardless of their original call direction.
- PR 1369 Improved error handling for TTS synthesis failures by ensuring that errors occurring during the initial TTS request are properly propagated as “SpeechCredentialError” events. Previously, TTS errors would fail silently without proper logging or call handling. The fix enables proper error reporting and allows applications to handle TTS failures appropriately.
- PR 1372 Added an event handler to properly respond when the Deepgram speech recognition service terminates its connection unexpectedly with an error condition. This ensures the system can gracefully handle remote closure events from Deepgram.
- PR 1366 Fixed an issue where the synthesized-audio verb was not properly sending status events when using text-to-speech streaming functionality. The fix ensures that status events are correctly generated and transmitted when TTS streaming is enabled, allowing clients to properly track the completion or status of audio synthesis operations.
- PR 1351 Fixed a timeout handling issue in the gather verb where the main timeout and ASR timeout were not being properly cleared when an interdigit timeout was triggered or when DTMF input took priority. This prevents conflicting timer behaviors during gather operations.
- PR 1359 Added exception handling around req.cancel() calls to prevent unhandled errors during request cancellation. This was particularly important for REST-based outdial operations where timing issues could cause exceptions to be thrown without proper catching, potentially causing crashes.
- PR 1358 Updated the speech_util dependency to version 0.2.23, bringing improvements to the speech processing pipeline.
- PR 1357 Fixed a bug where the singleDialer component was not properly initializing ConfirmCallSession with the necessary temporary file references. This was preventing proper cleanup and file management later in the call lifecycle, potentially causing issues with confirmation hook processing.
- PR 1356 Resolved an issue where ConfirmCallSession within placeCall lacked access to the tmpFiles variable, preventing proper cleanup of temporary files after operations completed. This fix prevents temporary file accumulation and resource leaks in the call session confirmation workflow.
- PR 1354 Corrected a misleading error log message that displayed “invalid command since id is missing” when a request actually lacked the tokens field. The log message now accurately reflects when the tokens field is missing, improving debugging clarity for developers.
- PR 1353 Added exception handling to prevent crashes when a SIP REFER message is received after a dial task has already concluded. This fix allows the system to gracefully manage this timing-related edge case rather than terminating unexpectedly.
- PR 1352 Fixed a security issue where the TTS streaming functionality was inadvertently exposing sensitive speech service credentials in logs or output. The fix ensures that authentication information remains protected and isn’t accidentally exposed through logs or debug output.
- PR 1349 Fixed an issue where Least Cost Routing (LCR) was being ignored in certain scenarios. The change prevents the dial and createCall functions from attempting to automatically select a carrier trunk when LCR is configured but no specific trunk is specified. This fix only affects accounts with active LCR configurations.
- PR 1344 Fixed an issue where the punctuation setting in the gather recognizer object was not functioning correctly when using Microsoft as the speech recognition vendor. When developers set “punctuation: false” in the recognizer configuration, the system was not removing punctuation marks from the recognized speech output as expected.
- PR 1331 Resolved a race condition in playback handling where the say task could receive stop events from previous cached file playbacks, causing improper playback state management. The fix shifts responsibility for generating playback IDs to the feature server and tracks the current playback ID to ensure only events corresponding to the current playback operation are processed.
- PR 1312 Fixed an issue where the timeout timer wasn’t being initiated when users bargeIn to a speech prompt by pressing DTMF digits. The fix ensures the timer starts automatically when DTMF input occurs during playback, while preserving existing behavior for normal scenarios where the timer starts at the end of say/play operations.
- PR 1320 Extended notification functionality for text-to-speech audio handling to send synthesized-audio notifications regardless of whether content originates from cache or vendor generation. Previously, the system only sent notifications when audio was freshly generated. The fix also returns an identifier that allows correlation between “say” verbs and their corresponding synthesized-audio events, enabling better traceability.
- PR 1315 Fixed a bug where the task.kill parameter was not being properly passed to the call state component, ensuring proper task termination handling.
- PR 1308 Enabled passing through options from the recogniser object in an AMD (Automated Message Detection) verb to the speech-to-text service. This allows users to leverage service-specific features such as custom models (e.g., custom Deepgram models) without modifying the core implementation.
- PR 1301 Fixed an issue where temporary audio files in a ConfirmCallSession were not being cleaned up when calls ended, causing resource leaks. The fix ensures that ConfirmCallSession uses the tmpFiles set of the parent CallSession to store references to created files, allowing the parent CallSession’s cleanup function to properly remove temporary files when the call terminates.
- PR 1300 Enabled the ability to pause and resume background listening functionality using silence or blank audio, enhancing the system’s ability to handle audio input states more flexibly during background processing operations.
- PR 1293 Fixed an issue with audio file caching where URLs containing query string parameters with periods (valid characters) were incorrectly parsed. The fix URL-encodes periods within query string parameters to %2E, allowing the system to correctly identify the file extension and enabling proper caching and playback of media files.
- PR 1290 Fixed failures when using Whisper with Play functionality by allowing a whisper to accept a single object verb (specifically “play”) without triggering unnecessary fetching operations. The fix also disables URL-based verb fetching during whisper operations to prevent failures.
- PR 1278 Implemented control mechanisms for forwarding the P-Asserted-Identity (PAI) header, enabling more granular control over how PAI information is propagated through the system.
- PR 1283 Fixed an issue where the stopTranscription method was incorrectly delaying transcription stops during gather verb operations when the JAMBONES_TRANSCRIBE_EP_DESTROY_DELAY_MS environment variable was enabled. The delayed shutdown prevented proper input capture in subsequent gather operations when transitioning between recognizers. The fix adds a gracefulShutdown: false parameter to stop transcription immediately without applying the configured delay.
- PR 1276 Fixed an issue where the gather task’s nested sayTask would not emit a playDone event when operating in streaming mode, preventing the transcribe task from starting and blocking the timeout timer. This fix ensures proper event emission during streaming playback, allowing the gather operation to proceed normally through its lifecycle stages and enabling timeout mechanisms to function when listenDuringPrompt is enabled.
- PR 1286 Fixed TTS cache issues including error handling gaps when TTS fails (where playback-start event doesn’t occur but playback-stop still fires), and concurrency race conditions with playback IDs. The fix implements atomic operations for ID generation and properly handles scenarios where playback-start lacks an ID.
- PR 1282 Fixed issues with LCC (Low Cost Calling) dial functionality when relative URLs are provided as action hooks. The PR also updated speech-utils to version 0.2.15 with configurable tmp folder location.
- PR 1279 Fixed a race condition related to cached audio playback where playback stop events from previous audio commands could incorrectly interfere with current playback operations. The solution validates that the playback ID in the “playback-stopped” event matches the ID from the corresponding “playback-start” event. Also improved TTS caching to respect the disableTtsCache setting.
- PR 1259 Fixed an issue where transcriptions were not being received when calls were terminated. The feature server was sending stopTranscription commands too quickly and destroying endpoints prematurely before transcription could be processed. The fix implements graceful shutdown for endpoints when JAMBONES_TRANSCRIBE_EP_DESTROY_DELAY_MS is enabled, delaying stopTranscription and endpoint destruction until transcription is received or timeout occurs. Excludes ASR fallback operations, paused transcription states, and AMD stop operations from the delay.
- PR 1271 Fixed an issue where the system would attempt to process missing or undefined data when a referHook function in a dial operation fails to return any payload. The fix now skips subsequent operations when no response is received, preventing errors from trying to work with empty or null values.
- PR 1269 Fixed TTS response code handling to ensure that a response code of 0 triggers task failure. The fix addresses compatibility with different TTS vendors (like Azure and Deepgram) that return different error codes, and improves error alerting when TTS errors occur by sending appropriate jambonz:error messages to webhooks rather than dropping calls.
- PR 1264 Fixed REFER (call transfer) handling in the dial functionality to ensure proper cleanup and termination of the dial task in the parent session when a REFER request is received on a parent call leg after the child call has been transferred. The fix includes a reversion of a problematic prior change to dial.js.
- PR 492 Fixed API authorization for account-level API keys to access SIP gateways and VoIP carriers. Previously, account-level API keys were unable to read or create these resources through the API endpoints. The fix grants proper permissions and automatically populates the service provider SID when accounts create carriers.
- PR 494 Fixed excessive CPU utilization during call recording caused by inefficient buffer handling in S3 multipart uploads. The previous implementation used Buffer.concat on every chunk, creating O(n²) complexity. The fix optimizes memory operations by accumulating chunks in an array and performing a single concatenation per 5 MB part, reducing complexity to O(n) and stabilizing request latency under concurrent load.
- PR 500 Fixed an issue where the system was unable to retrieve the list of available voices for Deepgram models.
- PR 505 Added the ability to completely disable rate limiting by setting the DISABLE_RATE_LIMITS environment variable to ‘true’ or ‘1’. This optimization is useful for deployments that handle rate limiting at a higher infrastructure level, eliminating unnecessary processing overhead from API-level rate limit calculations.
- PR 208 Increased DTMF signal volume levels in the session border controller to improve DTMF tone detection and reliability.
- PR 183 Fixed SIP reinvite handling to properly remove video SDP (Session Description Protocol) information during call renegotiation. This ensures that video codec and capability data is correctly filtered when calls are reinvited.
- PR 189 Fixed the isPrivateVoipNetwork function to correctly identify private network addresses in SIP URIs regardless of whether a trailing semicolon is present. Previously, URIs without a semicolon would incorrectly return false even when representing valid private network addresses.
- PR 113 Fixed an issue where the system was redirecting client calls to other SBCs using public IP addresses instead of private ones. The fix stores the private SIP address in Redis during client registration, enabling subsequent operations to route calls through private network paths.
- PR 110 Enhanced the database status API response to include expires value and timestamp fields for carrier information. The changes provide additional metadata about credential expiration and when status was recorded, along with improved logging for better visibility into the registration flow.