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
Thanks for calling. This call may be recorded. How can I help?
I need to move my appointment.
Sure. Can I have your date of birth to find it?

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
tool request to your serverPOST
{
  "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
per callcost split four ways: speech recognition, language model, voice and telephony

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.