Choose the right voice product
Voice on Devotel Orbit has three outbound surfaces. Pick the wrong one and you end up re-platforming the flow a month in. This page routes you to the right one once, then links deeper setup guides for each.Three surfaces, three jobs
Browser softphone — a human agent talks. Place and answer PSTN calls from a browser (or embedded SIP/web client), with queues, extensions, hold, transfer, and disposition codes. Set it up with the browser softphone guide. Outbound dialer — a campaign dials a list, agents take answered calls. Predictive, progressive, preview, and agentless modes with pacing, DNC scrubbing, abandon-rate ceilings, and dispositions built in. Set it up with the outbound dialer campaign guide.POST /voice/calls — your server originates a call with one request.
One-off programmatic legs: a reminder, a page-cast, a click-to-call from
your CRM, or a dial leg inside a programmable flow. Program what happens
when the callee answers either inline (staticVerbs) or by pointing the
call at a URL on your server (answer_url). See the
Voice API reference for the request shape and the
programmable DSL reference for the
verb vocabulary.
Decision table
All three surfaces read the same call log after the
fact — pick a surface on who DRIVES the call, not on where the record
lands.
Common workflows mapped
A BDR team working leads. The person decides when to dial and what to say, so a person drives the call: give them the browser softphone. If the team also uploads a shared list and works it top-down, that list belongs in the dialer even when humans talk — see the hybrid note below. A scheduled appointment reminder. Your scheduler firesPOST /voice/calls per appointment with staticVerbs — a say with the
reminder text, optionally a gather to confirm or rebook. No list, no
agent, one request per reminder. If the reminder must offer “press 1 for an
agent,” let the verb sequence dial the queue or ring group.
A canary ops page-cast. Your alerting runbook posts one call per
on-call rotation with an answer_url; when the engineer answers, your
server returns the verbs — read back the alert and offer a dial-leg into
the incident bridge. The fallback (answer_fallback) decides what the
callee hears if your endpoint is unreachable.
Hybrid patterns
Start withPOST /voice/calls when volume is small or trigger-driven: a
few hundred reminders a day, internal tooling, a new-segment experiment.
Move the flow to the dialer when you need campaign machinery the API
surface deliberately lacks — ordered priority across contacts, pacing that
respects agent availability and the abandonment ceiling, DNC persisted
across campaigns, and disposition-driven retries.
The softphone and the API also coexist: an agent works inbound queues on
the softphone while your back office originates product-click-to-call legs
via POST /voice/calls that route into the same queues.
Hands-on sanity walk per surface
Run one cold-start check on the surface you’ve chosen — each walk below ends in a visible artifact (a ringing browser tab, one connected campaign call, a call id in the log) that either confirms the pick or tells you to re-read the decision table. Softphone — confirm the browser rings. The browser softphone setup guide wires credentials, inbound routing, and the client. If you only want to confirm the browser calling path end-to-end before handing it to agents, use the built-in SDK demo walkthrough: open Developer → SDK Live Demo, dial a PSTN number from the browser, and answer on the callee phone. A two-way conversation means the softphone choice holds — the callee heard a real outbound call and the browser stayed the agent’s calling surface. Dialer — confirm one list row paces to one agent. Create the campaign with a two- or three-contact list, keep one agent inReady, activate,
then watch the live stats: one row goes in progress, connects to the
agent, and lands the disposition when the conversation ends. If pacing
felt correct at this size, the dialer choice holds — the same mechanics
run the full list. Note the gating rule before scaling: the campaign
aborts when the rolling abandonment rate trips the configured ceiling,
which defaults to the 3% FCC cap. Use the smallest list and fewest agents
that exercise everything — a draft campaign dials nothing until
activated, so setup costs nothing. The dialer campaign
guide walks every step.
Programmatic — confirm POST /voice/calls returns 201 and lands in the
shared call log. Originate one call from your server with a minimal
payload:
201 response carrying a call id is step one. Step two: open Voice →
Calls (the shared call log) and find the same call id — the surface you
drove shows in the log, and the call-log reading
guide shows how to filter to it and open
the detail sheet. The programmable voice DSL
reference catalogues the verbs
(say, gather, dial, hangup, …) you can send.
SIP trunk — the skip-the-API branch. If you picked the trunk route
from the “When NOT to expose the API” section below, the SIP trunk setup
guide walks registration, DID routing, and a
live test call — the artifact is a registered trunk and a completed
forwarded call, not a log row from any of the three surfaces above.
When NOT to expose the API
If the goal is to forward inbound PSTN calls to your own PBX or carrier rather than to originate AI-flow/agent legs on Orbit, you don’t want a call-origination API at all — you want a SIP trunk. Provision termination and origination trunks and route the numbers over them; the API surfaces above stay unused. See the SIP trunk setup guide.Glossary
AMD — Answering Machine Detection. The carrier flags the answered side as a person or a machine so a campaign can drop voicemails and a flow can branch. In the dialer it’s a campaign setting; overPOST /voice/calls
send amd: true.
STIR/SHAKEN — the caller-ID attestation framework carriers use to grade
how trustworthy your outbound number’s identity is. Orbit attaches the
attestation level to each outbound leg so downstream networks treat
verified calls accordingly; nothing for you to compute at call time.
DNC — Do-Not-Call. The dialer enforces your workspace’s DNC registry
before every attempt, and any contact can be scrubbed back into no-dial
status from the suppression surfaces. Consent and quiet-hours are required
before a contact enters a list at all — the
dialer campaign guide walks the
eligibility gates.
Verify your choice
Tick the line for the surface you picked before building the real flow on it:- Softphone — a PSTN number dialed from the browser rang a real phone and held a two-way conversation.
- Dialer — one list row went in progress, connected to one ready agent, and landed a disposition when the call ended.
- Programmatic —
POST /voice/callsreturned201with a call id, and the same call id reads back in the shared call log under Voice → Calls. - SIP trunk — a call forwarded over the registered trunk completed end-to-end.