Custom STT/TTS endpoints
Delphi's modular STT and TTS providers, and several Realtime providers, accept custom service URLs. Use them when speech traffic must go to a private IP, a mock server, a non-standard Azure Speech port, or any host other than the vendor's public default.
Where to configure
Open Flow Designer → Flow Settings → Default provider (or a voice-agent Provider override), pick Pipeline or Realtime, then expand the provider's Advanced accordion:
| Provider role | UI field | Typical location |
|---|---|---|
| Azure STT | Endpoint URL | STT → Advanced STT |
| Azure TTS | Endpoint URL | TTS → Advanced Azure TTS |
| Inworld STT | Endpoint URL | STT → Advanced |
| Inworld TTS | Endpoint URL | TTS → Advanced |
| OpenAI Realtime | Custom URL | Realtime → Advanced Settings |
| Grok Realtime | Custom URL | Realtime → Advanced Settings |
| Gemini Live | Realtime URL | Realtime (main form) |
| Pythia Realtime | URL | Realtime (required) |
| Azure Realtime | URL mode | Auto (resource name) or Custom (full WebSocket URL) |
| OpenAI Chat | Base URL | LLM → Advanced LLM |
Fields not exposed in the inspector can still be set in the source view (for example baseUrl on OpenAI TTS).
IP addresses and DNS names
Endpoint fields accept any valid URL the runtime can parse — FQDNs, short hostnames, and literal IPv4/IPv6 addresses are all supported.
Examples:
wss://speech.mock.internal:8043/speech/recognition/conversation/cognitiveservices/v1
wss://10.0.2.15:8043/api/v1/speech:recognize
https://192.168.1.50/tts/cognitiveservices/websocket/v1
wss://my-azure-speech.contoso.com/stt/speech/recognition/conversation/cognitiveservices/v1
When Endpoint URL is set on Azure STT or Azure TTS and the path is empty or /, Delphi appends the standard Azure Speech path for the selected recognition mode (STT) or /tts/cognitiveservices/websocket/v1 (TTS WebSocket). You can also supply a full path if your mock or private gateway expects a non-standard route.
For Azure TTS, a URL starting with https:// or http:// selects the HTTPS REST synthesis path instead of the default WebSocket transport.
Why custom endpoints exist
Delphi talks to Azure Speech over a direct WebSocket implementation (not the legacy Microsoft Speech SDK). That lets TelPhi:
- Connect using the hostname you configure — important for Squid ACLs and
NO_PROXYrules on private networks. - Route outbound traffic through
HTTP_PROXY/HTTPS_PROXYon Voice hosts with the correctCONNECThost header.
If you point STT/TTS at a mock server on a private IP, ensure the Voice instance can reach that IP (routing, security groups, and proxy ACLs).
Private-network and proxy checklist
Voice hosts on the private network typically egress through Squid:
- Set
HTTP_PROXY/HTTPS_PROXYon the Voice service (see Voice operations). - Add Squid ACLs for the speech host — by domain or destination IP/port — if the default allow rules are too narrow.
- For on-VPC or RFC1918 targets that must not use the proxy, add them to
NO_PROXYon Voice (comma-separated hosts or CIDRs as your deployment supports). - Place test calls and confirm in SigNoz that TelPhi connects without
Invalid … endpoint URLor proxy403/timeout errors.
Mock servers that use self-signed TLS may require operator-side trust material on the Voice host; Delphi does not expose a per-provider “skip TLS verify” toggle in TelWeb.
Mock and lab speech servers
Common patterns:
| Goal | Approach |
|---|---|
| Lab STT on a fixed IP | Azure STT → Advanced → Endpoint URL → wss://<ip>:<port>/… with the path your mock expects |
| Lab TTS on HTTP | Azure TTS → Endpoint URL → https://<ip>:<port>/… |
| Full-stack realtime stub | Pythia Realtime or OpenAI Realtime custom URL pointing at your WebSocket server |
| Carrier-style Azure region override | Leave region set for query defaults but override host via Endpoint URL |
After changing endpoint URLs, publish the flow (or run a draft test call) so Voice picks up the new inline provider config.
Troubleshooting
| Symptom | Likely cause | What to check |
|---|---|---|
Invalid Azure STT endpoint URL in Voice logs | Malformed URL or unsupported scheme | Must be a parseable wss:// or ws:// URL; include port if not 443 |
| Connection timeout to public Azure | Proxy missing or Squid blocks destination | Voice HTTPS_PROXY; Squid access log |
| Connection timeout to private IP | Routing or proxy intercepting RFC1918 | NO_PROXY; security groups between Voice and speech host |
| TLS / certificate errors | Mock server cert not trusted | Install CA on Voice host or terminate TLS on a trusted gateway |
| Works with DNS but not IP | Squid ACL allows domain only | Add destination IP to Squid ACL or bypass via NO_PROXY |
For operator-side container and proxy debugging, see Instance debugging and Squid troubleshooting.
See also
- Speech playback and hangup — pipeline TTS queue and hangup timing
- Azure provider — STT/TTS/Realtime endpoint fields
- Pythia — self-hosted realtime URL
- Providers overview
- Inspectors → Provider config editor