
# Browser-Based Voice Agents

A voice agent can run over the telephone network or in a browser. The
conversation itself is the same agent — same instructions, same tools, same
voice — but the surroundings differ, and a few telephony behaviours have no
browser equivalent.

Set this on the **Setup** tab: **Delivery Method → Web (Browser-Based)**.

## What you'll need

- The **`agents:voice:manage`** permission.
- A saved voice agent — see [Create a Voice Agent](/help/voice-agents/creating-campaigns).
- A microphone, for anyone talking to it.
- **No phone number.** A web agent does not need one, and the **Not
  deployable yet** badge in the header — which tracks the missing number — can
  be ignored for this delivery method.

## What changes

| | Telephony | Web (Browser-Based) |
|---|---|---|
| Needs a phone number | Yes | No |
| Typed input alongside speech | No | Yes, with **Allow Chat** |
| Live on-screen transcript | No | Yes |
| On-screen countdown timers | No | Yes, with `manage_timer` |
| Background office ambience | Yes, when enabled | Never, whatever the switch says |
| Recorded | Inbound recorded by the carrier; outbound recorded by the platform | Always recorded |
| Warm / cold transfer | Yes | No — there is no call to bridge |
| Voicemail detection | Outbound only | No |
| Caller-ID contact lookup | Yes | No — there is no caller ID |
| Keypad tones (DTMF) | Yes | No |

Everything else — instructions, greeting, voice, languages, turn-taking, tool
execution, CRM writes, knowledge search, transcripts, summaries — works the
same way.

## Allow Chat

**Setup → Allow Chat** ("Enable text-based chat alongside voice") lets a
person type instead of speaking, mid-conversation, without losing the thread.

It matters more than it sounds. People switch to typing when they are
somewhere they cannot talk, when they have to give an order number or an email
address exactly, or when the agent has misheard the same word twice. Leaving
it off makes all three of those a dead end.

## On-screen timers

Enable **`manage_timer`** on the **Tools** tab and the agent can put a
countdown on the screen and manage it during the conversation — set it, pause
it, extend it, cancel it.

The useful part: **a running timer suspends the dead-air rules.** "Take three
minutes to find that document, I'll wait" normally trips the silence timeout
and the agent hangs up. With a timer running it waits, and the person can see
how long they have. See
[Turn-Taking, Interruptions and Dead Air](/help/voice-agents/turn-taking-and-timing).

Timers are a browser feature. There is nothing to show on a phone call.

## Talk to a web agent from inside Karmaflow.ai

The browser client that ships with the product is the test panel on the
agent's own form:

1. Open the agent → **Test & Deploy** tab.
2. **Talk to your agent** → choose **Draft (last saved changes)** or
   **Production** → **Start voice test**.
3. Allow microphone access when the browser asks.

You get the live transcript, the tool activity, mute, and per-stage timings
when the run ends. Full detail:
[Testing, Drafts and Going Live](/help/voice-agents/testing-and-promotion).

## Putting a web agent in front of your own users

A public browser voice experience — an agent embedded on your own site or in
your own app — needs a web client that joins the conversation and issues its
own access tokens. That client is not something you configure from the agent
form, and the credentials it needs are issued from a platform-operator
surface.

So: set **Delivery Method** to **Web (Browser-Based)** on the agent, get the
conversation right using **Talk to your agent**, and talk to Karmaflow.ai about
the client when you want it in front of customers.

## Behaviours that will not carry across

If you are moving an agent from telephony to web, re-read its instructions for
things that no longer exist:

- **Transfer instructions.** "Transfer to billing if…" has nowhere to go.
  Replace it with a task, a ticket, or `duty_notify` so a human still gets
  the handoff.
- **Voicemail instructions.** Not applicable.
- **"The number you are calling from"** and anything that leans on caller ID.
  A web visitor is not identified by a phone number, so the agent has to ask —
  make sure `save-update-user` is enabled so it can record what it is told.
- **Keypad prompts.** No keypad.

Run the reverse check when moving web → telephony: timers and typed input stop
being available, and the agent should stop offering them.

## Troubleshooting

- **The header says "Not deployable yet".** It is reporting a missing phone
  number. A web agent does not need one.
- **No microphone / the test will not start.** The browser blocked microphone
  access. Allow it for the site and start the test again.
- **No background ambience even though Background Audio is on.** Correct —
  browser calls never get it.
- **The agent offers to transfer me and then cannot.** Transfer tools do not
  work on web delivery. Remove the promise from the instructions.
- **Typing does nothing.** **Allow Chat** is off on the **Setup** tab.
- **A timer never appears.** `manage_timer` is not enabled on the **Tools**
  tab.

## Next steps

- [Testing, Drafts and Going Live](/help/voice-agents/testing-and-promotion)
- [Tools, Knowledge and Memory](/help/voice-agents/tools-and-knowledge)
- [Turn-Taking, Interruptions and Dead Air](/help/voice-agents/turn-taking-and-timing)
- [Chat Agents](/help/chat-agents/overview) — if what you actually want is a
  typed website assistant
