Endpoint & operations
The following behaviours must be satisfied by your server. Most production integration problems trace back to one of these.
Accept connections immediately
Read continuously from the socket
If you stop reading, TCP backpressure eventually blocks Fonada's writes, and a write blocked for more than 5 seconds ends the call. Slow synchronous work — a model load, a blocking database query — must never run on the task that reads the socket. Hand audio to a queue and process it elsewhere.
Do not buffer more than a few seconds ahead when sending audio. See Sending audio back.
Closing the socket ends the call
If your server closes the connection or crashes mid-call, Fonada hangs up. There is no reconnection within a call. For a clean end, prefer end_of_call — it lets queued audio finish playing.
TLS certificates must be publicly valid
Use wss:// for anything crossing untrusted networks. Certificates are verified normally, so self-signed or expired certificates fail the connection and drop calls; there is no option to disable verification. Serve the full certificate chain.
Authenticate via the URL
Keepalives are optional
Fonada sends no WebSocket pings and never times out an idle connection. If you send pings, Fonada's client responds with pongs automatically.
Size for concurrency
Account for bursty outbound traffic. There is one connection per call, and a campaign can ramp to full concurrency within seconds — unlike inbound, which arrives gradually. Size the endpoint for the agreed peak concurrency, not the average.
Firewall
If you filter inbound traffic, Fonada will provide its egress addresses to allowlist on request.