type EXTERNAL was renamed to STREAM. Fix what it names and send the request again. The API
ignores endpoint, textToSpeech and speechToText without an error, so check those yourself.
On Fonoster Cloud, your saved agents, numbers and settings were moved for you. You only update
your code, files and scripts. If you run Fonoster yourself, upgrade your install first (see
the Self-hosting section).
What changed at a glance
Update your applications
An application is now a stream or an Autopilot agent. Speech settings moved from the vendor objects intospeech, and use catalog IDs.
1
Rename the type
Change
EXTERNAL to STREAM. AUTOPILOT stays the same.2
Replace the endpoint with a URL
A stream is now a WebSocket server. Set
url to its ws:// or wss:// address. Fonoster no
longer reads endpoint, so an application with only an endpoint gets no calls.Autopilot agents need no URL: Fonoster runs them.3
Set the protocol
If you used
flavor, rename it to protocol. native is now fonoster. Leave it out to get
fonoster. Autopilot agents always use fonoster.4
Move the speech settings
Replace
textToSpeech and speechToText with speech. Fonoster ignores the old objects, so a
voice you set there is lost. Name each voice and model by its catalog ID, <provider>/<id>. To
list them, run fonoster providers:catalog --kind voice.Update your Autopilot agents
The agent’s settings still live underintelligence.config, with conversationSettings and
languageModel. A few fields changed:
- Model. Put the provider and the model in one catalog ID:
provider: groqandmodel: llama-3.3-70b-versatilebecomemodel: groq/openai/gpt-oss-120b. Groq retired Llama 3.3 70B, so agents that still name it run ongroq/openai/gpt-oss-120b. - Keys and endpoints. Delete
apiKeyandbaseUrl. Fonoster uses its own provider accounts, or yours if you add a key under Vendor keys (see Use your own vendor keys). - Voice activity detection. Delete
vadandmaxSpeechWaitTimeout. Fonoster now decides when the caller has finished talking. To make the agent wait longer or answer sooner, setconversationSettings.patiencetolow,normalorhigh(see Turn-taking and barge-in). - Events hook. Delete
eventsHook, and subscribe a workspace webhook instead (see Replace the events hook). - Audio filters. Delete
audioFilters. There is no per-agent setting for it.
assistant key and the speech settings under speech:
Update your CLI scripts
Twoapplications:create and applications:update flags were renamed. The old names stop the
command with an error that names the new one.
Rewrite your Voice SDK app
Your app is no longer a gRPC server. For every call, Fonoster opens one signed WebSocket to your app’surl, and your handler gets a single argument: the session.
1
Update the package
Install the latest Voice SDK:For Python, use
pip install fonoster-voice (see Use the Python Voice SDK).2
Change the handler
Import
VoiceServer by name, pass the signing secret, and take the session. You no longer call
answer(): the call is answered when your app connects.3
Set the signing secret
The server won’t start without a signing secret, and it refuses connections that Fonoster
didn’t sign. Set
APP_SIGNING_SECRET to the secret you got when you created the stream. If you
lost it, make a new one:4
Replace the methods that changed
protocol to twilio and its url to your bot (see
Bring your Twilio or Pipecat app).
Replace the events hook
The Autopilot events hook and itsconversation.started and conversation.ended events are gone.
Subscribe a workspace webhook to the events that replace them:
Workspace webhooks work for every application, not only Autopilot agents:
Get recordings from the call record
Recording is no longer a step in your code. Set the application’srecording policy to off,
on or consent (a consent prompt plays first). See
Record calls and ask for consent.
Recording URLs built from the app ref and an ID no longer exist. Each call’s recording is part of
its call record. List your calls with the CLI, then download a call’s recording by its call ref:
GET /api/records/{callRef}/recording. See Call records.
Check your work
- Create or update each application. Fix any old field the API names, and check that no
endpoint,textToSpeechorspeechToTextis left. - Call each application, from Talk to agent in the dashboard or from a number.
- Open the call under Calls and check the transcript.