Delphi v0.9.17
Delphi v0.9.17 is a full platform cut after v0.9.16-patch2. It adds a Super Viewer role, speech detection (energy and Silero VAD), per-app recording artefacts, and much tighter hangup, transfer, DTMF, and SIP header behaviour. Operators get a max call duration with a spoken warning, seven.io SMS, hidden production Swagger, AMI trunk-health credentials, and categorized config backups. The list below is the user-visible work from this window, grouped by area — not every internal ticket.
v0.9.17Recommended SDKv0.1.5Supported SDK range>=0.1.3 <0.2.0Highlights
- Super Viewer — platform-wide read-only access; promotions and demotions still use the email challenge.
- Speech detection — energy or Silero VAD gates STT; mid-call barge-in and Azure segmentation timeouts apply immediately.
- Recording artefacts — choose call / STT / TTS audio and transcript JSON per app; TOBi conversation IDs stay on stored transcripts.
- Hangup and transfer signaling — bot-owned BYE reasons, documented SIP header budget, REFER and INVITE transfer, DTMF collect, SIP ladder text export.
- Call duration and TTS cache — per-flow max duration with a pre-hangup warning; cache on by default, disable per reply.
- seven.io SMS —
FEATURE_SMSandSMS_API_KEYreplace the Vonage variables. - Operator hardening — Swagger hidden on customer-facing TelAPI, AMI trunk health, stale-server cleanup, config backup versioning, SigNoz 0.139.
Security and Sessions
- Super Viewer is a third system role beside Super Admin and Standard User. It sees the same platform surfaces as Super Admin, cannot write, and cannot start WebRTC or telephony sessions. TelWeb shows a read-only banner. See Roles and access and Users and teams.
- Promoting or demoting Super Viewer or Super Admin still uses the email challenge. Set
PLATFORM_ROLE_EMAIL_CODE_SECRET(dedicated, ≥32 characters in production) on TelWeb and Tasker. KeepPLATFORM_ROLE_EMAIL_TASKER_READY=falseuntil every Tasker replica can send the role-change mail — see the env var index. - Super Admin password minimum remains 16 characters. Super Admins stay visible on Users with a Platform role column.
- Failed logins, lockouts, password changes, and platform role events appear in Access logs and can be exported toward SigNoz. Credential lockout still uses
LOGIN_MAX_ATTEMPTS_CREDENTIALSandLOGIN_LOCKOUT_MINUTES_CREDENTIALS. - Password-expiry reminders and the forced-change path continue through Tasker. Set
NEXTAUTH_URLto the public TelWeb origin on TelWeb, Tasker, TelAPI, and TelPhi so expiry and usage emails use the same links. See Password expiry. - Audit rows still default to a 180-day cleanup (
AUDIT_LOG_RETENTION_DAYS). - PII redaction in TelWeb and SigNoz stays the default. Recording artefacts on S3 are a separate retention choice — see Recording and transcript storage.
- Security events can be exported for SIEM ingestion — see Security event export.
- Create-user + invite + welcome-setup was restored on the hosted staging path. Customer C2 create-user was not re-certified from staging.
TelWeb
- Team Members can open Notifications. Save and publish still follow Members can publish Apps — see Draft and publish.
- Copying a flow to another team takes the latest published definition only and drops Flow Builder assistant history.
- Team Variables stay hidden on plans that do not include them. Entitled teams show the tab with masked secrets; Super Admin can still bypass.
- Settings tabs no longer bounce while entitlements load.
- Teams on a complimentary / unlimited plan no longer send Members to
/activate-billing. - Conversations Debug can search by Trace ID, header value, or conversation ID.
- You can export the SIP ladder as text from the conversation Debug tab (this was not part of v0.9.16).
- Debug log and ladder rows still show time-of-day only. The API
createdAtfield is full ISO — a follow-up will show the date on each row. - Super Admins use Config versioning & backups for categorized backups (including header manipulation, server groups, and notification types) and identity restore.
Voice, SIP, and WebRTC
Speech detection and barge-in
Flow call handling can enable speech detection. auto uses Silero when AudioProc is connected (audioPreprocessing / AUDIOPROC_ENABLED) and the energy detector otherwise. A broken AudioProc session falls back to energy — the call continues.
- Mid-call
bargeIn: falseapplies immediately. It is no longer queued behind the current announcement. - Continuous ASR flushes multiple STT finals into one utterance.
- Azure
sttSegmentationSilenceTimeoutMsis honoured on publish and mid-call from botsessionParams. - Three-or-more-word barge-in is the verified interrupt path. Single-word suppress during playback was not proven in this window.
Hangup, transfer, DTMF, and SIP headers
Hangup prefers clearing the call over failing closed on header problems.
- Bot
endConversationreason/reasonCodewin over the Flow Settings default. The egress BYE carries a SIP Reason and optional custom headers. - Custom BYE headers stay inside the documented SIP header budget: 47 headers, 4,096 characters per line, 12,000 total. Over-budget payloads drop the extra bot headers (
headerTooLong/headersTooLong) and still disconnect. In-budget sets (including empty Genesys-style values) stay on the wire. - Farewell audio plays at hangup when configured; turning wait-for-silence off does not play farewell mid-call. Hangup after a long period of caller inactivity is not in this release — only farewell
waitForSilenceafter the bot goodbye. - Blind REFER and attended INVITE transfer keep Reason and custom headers on the egress leg.
- Incoming prefix/split channelData rules and outgoing DID header-manip (for example
X-VGW-Environment) remain live only after you Publish — see TOBi managed LLM and SIP header context rules. - DTMF collect supports
dtmfCollectInterDigitTimeoutMS. Collected digits show on the conversation ladder. DTMF is reconstructed onto the call recording when that artefact is selected.
Duration, recording, TTS, and retry
- Per-flow max call duration and an optional warning spoken about ten seconds before hangup override the voice-host fallbacks
MAX_CALL_DURATION_SECONDS(default 7200) andMAX_CALL_DURATION_WARNING_MESSAGE. See Call handling properties and the env var index. - Apps pick recording artefacts independently: full-call processed/raw audio, STT/TTS turn audio, and transcript JSON. Stored
call-transcript.jsonkeeps the TOBi conversation id. See Recording and transcript storage and Recording output. - Bots can suppress stored transcript text with
sensitiveInfoOnStorage. - Azure TTS forwards SSML when Use SSML is on.
- The platform TTS cache stays on. A bot can set
activityParams.disableTtsCachefor one reply — see TOBi managed LLM. - BOT create retries retryable provider errors and fails closed on non-retryable codes. Azure STT/TTS WebSockets reconnect after abnormal
1006closes under load.
Trunks, TLS, and capacity
- SIP trunk health uses the Asterisk Manager Interface. Set
AMI_HOST,AMI_PORT(8038),AMI_USER, andAMI_SECRETso TelPhi and TelSys share one login — see the env var index. - Edge SIP TLS on
:5061and Taskeredge-tls-renewremain the operator path for Let’s Encrypt materials. A Genesys Cloud TLS handshake against a customer C2/VGW path is not certified from staging Let’s Encrypt. EGRESS_TLS_REJECT_UNAUTHORIZEDnow also applies to direct (NO_PROXY) HTTPS egress. Leave ittruein production.- Single-voice load certification from this window: about 100 concurrent PCMA on one voice host, about 200 after a 2× scale-out. Saturation cuts the last turn rather than leaving named 110/128 errors. See Load testing.
TelAPI and SDK
- When
FEATURE_API_ACCESS=false, TelAPI keeps health, SIP trunk health, and webhooks and does not register SDK session or runtime routes. /documentationis a separate switch.TELAPI_SWAGGER_UI_ENABLED=falsehides Swagger and the live OpenAPI JSON. Use the versioned API reference on this site. Both WebRTC and webhook-only profiles were regenerated for 0.9.17.- TOBi callbacks require the token header. A query-string token is rejected with 400 (it does not feed the credential jail). Unused callback fields are marked in the OpenAPI document.
- Mid-call STT segmentation timeouts reach TelPhi.
endConversationincludesreasonandreasonCode.tobiConversationIdis present on TOBi callback and hangup/DTMF paths. GET /api/v1/usage/tts-charactersreports TTS character usage withREAD_TEAM_USAGE— see Usage.- The recommended TelPhi SDK is 0.1.5 (Browser Targeted Actions, shipped with v0.9.16-patch2). This release does not add a new SDK package. 0.1.3 and 0.1.4 remain supported for clients that do not need BTA, text chat, or handoff APIs. See SDK compatibility and the SDK reference.
Flow Builder and Conversations
- Call handling covers speech detection, max duration, DTMF inter-digit timeout, and recording artefact chips.
- Provider retry, bot-delay failover, and transfer restrictions use seeded resilience defaults. Empty admin settings can be re-applied with the setup CLI
--apply-missingflag. - Managed TOBi flows support the draft → publish → live-call path, including Application Metadata and inbound channelData rules after publish.
- Copy-to-another-team no longer carries Flow Builder assistant history.
- Caller-silence hangup (hang up after a long period of caller inactivity) is not in this release.
AI Providers and Audio
- TTS media cache is on by default and can be seeded on existing installs. Disable per reply with
disableTtsCache, or for the whole call withupdate_tts_config/ttsCaching: 'off'. - Azure Flow Builder requests omit temperature and honour the configured Azure endpoint.
- TTS gateway concept and recording-output operator pages are in this docs version — see TTS gateway.
Observability and Operations
- Access and security events export to SigNoz — see Security event export and Audit logging.
- TelPro, TelSys, and RTPEngine SIP appear on the conversation ladder and in SIP trunk log reference. See also SIP signaling reference and Application flow logging (
logType+recordKind). transactionIdis propagated on SIP headers, the Redis stream, and OTel spans so a single call can be searched across TelPhi, TelPro, TelSys, and TelAPI.- Call-detail / session-summary metrics are recorded for completed calls — see Call detail records.
- Alarming and monitoring guidance is on SigNoz monitoring and Action success monitoring.
- SigNoz ships 0.139 with restored alert-rule sync (
SIGNOZ_API_KEY) — see Version sources. - Tasker
STALE_SERVER_CLEANUPremoves silent Voice/API inventory rows afterSTALE_SERVER_HEARTBEAT_SECONDS. Scaler scale-down no longer hits ElastiCache CROSSSLOT on that path; scale-up API hosts are no longer treated as Terraform-protected. - Runtime database traffic stays on
DATABASE_URL; migrate usesMIGRATION_DATABASE_URL— see Database credentials and Backup / restart / rollback. - Recovery, seeder reset, and platform-settings apply-missing paths are documented on the setup CLI.
Billing and Platform Settings
- SMS uses seven.io. Set
FEATURE_SMS=trueand storeSMS_API_KEYon the Ops host; allow HTTPS egress togateway.seven.io:443. There is no provider-specific sender variable. Removed:VONAGE_SMS_FROM_NAME,VONAGE_SMS_API_KEY,VONAGE_SMS_API_SECRET. See SMS delivery. - Teams on a complimentary unlimited plan skip the Member billing-activation gate.
- Usage and overage notification emails link to Subscription and the Dashboard (not a dead billing settings path).
Operators
Run voiceai-db-migrate before restarting application services. This release adds Super Viewer, config-version categories, and per-app recording artefacts. Existing apps that already had Recording on are backfilled with the full artefact set — narrow the chips in TelWeb if you do not want every output.
Replace VONAGE_SMS_* with SMS_API_KEY and enable FEATURE_SMS before the first SMS after upgrade. See SMS delivery and the env var index.
Keep PLATFORM_ROLE_EMAIL_TASKER_READY=false until every Tasker replica can send PLATFORM_ROLE_CHANGE_CODE_EMAIL. Production TelWeb and Tasker need a dedicated PLATFORM_ROLE_EMAIL_CODE_SECRET of at least 32 characters. See the env var index.
Customer-facing TelAPI should keep TELAPI_SWAGGER_UI_ENABLED=false. That flag does not follow FEATURE_API_ACCESS. Use API reference for the pinned 0.9.17 OpenAPI snapshots.
If SIP trunk health shows AMI authentication failures, align AMI_USER / AMI_SECRET / AMI_PORT on TelPhi and TelSys. The default port is 8038, not 5038.
Set NEXTAUTH_URL to the public TelWeb URL on TelWeb, Tasker, TelAPI, and TelPhi.
Upgrade checklist
- Run database migrations (
voiceai-db-migrate/ your standard pipeline) withMIGRATION_DATABASE_URL, then restart application services onDATABASE_URL— see Database credentials. - Re-run setup seeders with
--apply-missingso existing installs receive resilience defaults, transfer restrictions, TTS media-cache settings, notification template links, andSTALE_SERVER_CLEANUP— see Delphi setup CLI. - Confirm
PLATFORM_ROLE_EMAIL_CODE_SECRETand setPLATFORM_ROLE_EMAIL_TASKER_READY=trueonly after Tasker is on this release. Promote a test user to Super Viewer and back. - If SMS is in use, migrate to
SMS_API_KEY, setFEATURE_SMS=true, allowgateway.seven.io:443, and send a test message — see SMS delivery. - Set voice fallbacks
MAX_CALL_DURATION_SECONDS/MAX_CALL_DURATION_WARNING_MESSAGEif you rely on the platform cap instead of per-flow values. - Align
AMI_HOST,AMI_PORT,AMI_USER, andAMI_SECRETon the Voice host. Enable AudioProc when you want Silero speech detection. - Review per-app recording artefacts after migrate — Recording-on apps are backfilled with all seven outputs.
- Keep
TELAPI_SWAGGER_UI_ENABLED=falseon customer-facing API hosts. ReviewFEATURE_API_ACCESSseparately if the deployment is webhook-only. - Set
NEXTAUTH_URLon TelWeb, Tasker, TelAPI, and TelPhi to the public TelWeb origin. - Leave
EGRESS_TLS_REJECT_UNAUTHORIZED=trueunless a known self-signed egress target requires otherwise. - Point Super Admins at Admin Settings → Backups and confirm a restore in staging.
- Upgrade integrator SDKs to 0.1.5 when adopting Browser Targeted Actions. No additional SDK publish is required for v0.9.17 itself.
What is not in this release
- Hangup after a long period of caller silence (only farewell
waitForSilenceafter the bot goodbye). - Full ISO date on each Conversations Debug log/ladder row (time-of-day is shown; API timestamps are complete).
- Genesys Cloud TLS handshake against a customer C2/VGW path (staging Let’s Encrypt
:5061is not that failure mode). - Per-error-code cognitive-service retry beyond BOT create retry / non-retryable fail-closed.
SDK compatibility
| Component | Version |
|---|---|
| Platform | v0.9.17 |
| Recommended TelPhi SDK | 0.1.5 |
| Supported SDK range | >=0.1.3 <0.2.0 |
No new SDK package is required for this platform release. Pin 0.1.5 if you use Browser Targeted Actions introduced with v0.9.16-patch2.