Build, test, launch and improve voice agents
Build, test and run each agent in one workspace, with the tools and call evidence your team needs.
Describe the job. Add what it needs.
An assistant is a prompt, a voice, a model and the things it can reach. Start from a description and refine.
Configure each assistant
Write the instructions, choose the first message and how the call opens, pick the transcriber, model and voice, and set limits such as maximum duration and silence timeout. Variables like {{name}} fill in per call.
- Per-assistant models and voices from OpenAI and Google Gemini
- Bring your own provider keys, held encrypted per organization
- Optional recording-consent announcement spoken before the greeting
- Assistant-level error message for when something goes wrong
Answer from your knowledge base
Upload text, Markdown, CSV, JSON or HTML files into a knowledge base. They are split, indexed and retrieved while the agent talks, so it answers from your policies, menus and price lists. If nothing relevant is found, it's told to say so.
- Indexing runs in the background with a visible status for every file
- Attach a knowledge base to an assistant, or scope a tool to specific files
- Deleting a file removes its passages
Retrieval during the call
The agent calls a lookup tool with a short query, gets the closest passages with their source, and answers from them. No pre-loading the whole handbook into the prompt.
Connect your tools and systems
Give the agent functions that call your server, API requests with your headers, a way to end the call, and a way to transfer it. Outbound requests are restricted to public HTTPS endpoints with size and time limits, so a tool can't be pointed at an internal network.
- Function tools send a signed request to your server and use the reply
- Transfer a live phone call to a person or another number
- Speak a short message while a slow tool runs
{
"message": {
"type": "tool-calls",
"toolCallList": [{
"function": { "name": "find_slot",
"arguments": { "day": "thursday" } }
}]
}
}Squads: more than one agent in a call
Split a complex job across specialists. A reception agent greets, a billing agent takes over with the conversation so far, and a scheduling agent finishes the job. Each has its own prompt, voice and tools.
- Hand off with context; callers don't repeat themselves
- Each member keeps its own first message and voice
Transfer from reception to a specialist
Handoffs are tools the model can call, so the decision to pass the call on is part of the conversation, not a phone tree.
Composer: plan changes with natural language
The dashboard has an assistant of its own. Ask it to list your assistants, explain a setting, or plan a change, and it answers from your live data. It shows what it intends to do and waits for your approval before changing anything.
Approval before action
Reads are immediate. Writes are proposed first and applied only when you approve them.
Test before going live
Calls are expensive to debug live. Test the same scenarios every time, and on every change.
Test calls
Talk to your assistant from the browser the moment you save it. Check the transcript, the audio and what it cost.
Evals
Write conversations with expected replies and check them with exact or pattern judges. Run them after every change.
Simulations
Let a simulated caller play a scenario against your agent and collect the results, without spending a minute of anyone's time.
Go live on the channel your customers use
The same agent, in the browser, over WebRTC, or on a phone number.
Web and WebRTC
Embed a call in your site with a public key. WebRTC calls run over Cloudflare's network for low latency, with automatic rejoin if the first connection stalls.
Phone numbers
Connect Twilio numbers for inbound and outbound calls. Point a number at an assistant or a squad and it's live.
Outbound campaigns
Upload customers, set a calling window in their time zone, a concurrency limit and a retry policy. Each customer's result is recorded: done, failed, skipped for no consent, skipped for do-not-call.
Guardrails
Consent is required by default. The do-not-call list always wins. Calls outside the window wait. These are checked by the dialer, not left to a prompt.
Monitor and improve every version
Track call outcomes, identify failures and update one thing at a time.
Call analytics
Number of calls, duration, success rate and spend over time, by assistant. Open any call for the transcript, the audio, the structured results and a cost breakdown across speech, model, voice and telephony.
- Boards and saved insights for the numbers you check every week
- A cost reconciliation report to compare against provider invoices
Failure monitoring
Define a rule, such as "more than three failed calls in an hour". Ryffio opens an issue and notifies you by email, Slack or your own webhook, and records every delivery.
Link issues to calls
Each issue links to the calls that triggered it, so you start from evidence.
Versions and traffic splits
Every save is a version you can compare and restore. Send 10% of calls to a new version, watch the results, and promote it when it wins.
Stage changes safely
Drafts let you stage a change without touching live calls.
Call behavior and reliability
Turn detection
A fast model judges whether a pause is the end of a thought, so people can think out loud.
Interruptions
When a caller talks over the agent it stops quickly; a quiet "mm-hm" doesn't derail it.
Dual transcription
Two transcribers can run side by side and the better hearing is used, which helps with names and numbers.
Failure handling
If a provider fails mid-call the caller hears an apology and the call ends with a clear reason, and you're alerted.
Recordings
Stereo recordings with the caller and the agent on separate channels, which can be stored in your own bucket, with a retention period you set.
Open API
Everything in the dashboard is available over a REST API. See the developer overview.
Test your first agent
Create an account, describe the job and make a browser test call in minutes.