Make your first outbound PSTN call
Two paths turn a new Orbit account into a phone that dials the PSTN:- Option A — register a SIP trunk with your own PBX or softphone software, and let API-origin calls dial out over it.
- Option B — the browser softphone, where an agent dials straight from a web page with no SIP client to install.
ringing → answered → completed). This guide walks either
path end to end and links the deep-dive page for the path you pick.
Every outbound leg terminates through the Devotel softswitch. A trunk
you register here is one origin surface; the termination path stays on
Orbit’s own network either way.
From one call to a verified pipeline
The walkthrough below puts a single outbound call on the wire. What it leaves untouched is the part operators run every day: before any dial leaves the account, preview how it routes; as dials run, watch outcomes from the dashboard’s Voice → Calls console instead of polling raw statuses; and on retries or cold traffic, chain into the sibling guides that cover pacing, timing, and gates. The sequence below is the same one that shows up on every voice onboarding checklist.1. Gate before the first dial
Run the pre-flight send gates checklist so the campaign does not trip on spend caps, quiet hours, or missing ownership of the caller-ID DID after the first call has already gone out.2. Route with a preview, not a guess
If recipients on the campaign are reachable over more than one channel (SMS, WhatsApp, RCS, voice), call the smart-route-preview endpoint first. It returns the channel the router would pick, the ordered fallback chain, and a per-message cost estimate — without dispatching anything. For pure voice campaigns, use it to confirm voice is the selected surface before pacing begins.3. Pace cold numbers and cold audiences
New numbers and new senders are rate-sensitive. Throttle the ramp with the number warming phases and daily caps (10DLC senders), and pick dial windows with best time to dial rather than sending the full audience at hour zero.4. Verify and monitor from the Calls console
Once dials run, open Voice → Calls in the dashboard for live verification: each call row shows the lifecycle (ringing →
in_progress → completed / failed / no-answer) plus recordings
when calls were placed with record: true. That page is the
verification loop of record — a failed dialed-leg, an unexpected
terminal state, or a missing recording shows on the console first. For
API-side verification on retry-aware campaigns, track delivery
outcomes with DLR outcomes monitoring
instead of hand-polling terminal states.
5. Find the gap from delivery logs
When the console shows an anomalous outcome (fallback fired when it should not have, a no-answer cluster at a specific hour), drill into the delivery logs the route-preview guide introduced — the same forensic read applies whether the failing hop was the route choice or the dial itself. Putting it together: buy → gate → preview → pace → monitor is one pipeline, and the Calls console is its verification point. The sections below walk a single call end to end; bring the loop above into play as soon as the account moves past the first call.1. Prerequisites
Which prerequisite applies depends on the path:- Option A (SIP/trunk): a SIP-capable PBX (FreeSWITCH, Asterisk, 3CX) or a desktop SIP client (for example MicroSIP or Linphone), plus inbound SIP-credentials you mint on the account.
- Option B (browser softphone): an HTTPS page and a browser with a microphone grant — the same rules the browser softphone guide lists in full.
- Either path: at least one voice-enabled DID in the account to present as caller ID, and an API key with voice scope if you dial via the API.
2. Buy a voice-capable number
If the account has no DID yet, work through Buy and provision numbers — search inventory withcapabilities=voice (or sms,voice when messaging will share the
number), purchase, and poll the order until the line reports
provisioned:
from on every
dial below, and it is the only caller ID the outbound surface accepts.
3. Option A — register a SIP trunk
This path connects your own phone system to Orbit. The full lifecycle (direction choice, probe-before-save, credential capture, routing, monitoring) is a nine-step walkthrough in Connect a SIP trunk; the short version for a first call:- Create the trunk with the carrier-facing details:
status reads unregistered until your
PBX completes its first REGISTER against the SIP edge host shown in
Settings → SIP trunks:
Response
- Register the device that will originate calls (your PBX, or a SIP client on an agent’s desk) against the SIP edge host shown in Settings → SIP trunks, using the digest or IP-allowlist auth the trunk is configured with.
- Skip to section 5 — once the originating surface exists, the dial step is identical to Option B.
POST /api/v1/voice/sip-trunks/probe, exercised in
sip-trunk-setup)
and it names the failing phase (DNS, connect, or REGISTER) instead of a
generic rejected call.
4. Option B — the browser softphone
The no-install path: mint a short-lived credential, connect the client, dial. The full guide is Set up the browser (WebRTC) softphone; on a first call you need three moves.- Mint a token:
- From your own page, mount the SDK softphone and connect — a minimal HTML page:
- Dial from the browser, or call the endpoint directly once the client is connected:
expiresAt instead of
recycling. The browser-fallback reality and the inbound decision (DNIS
→ queue or SIP routing for inbound rings) live in the
softphone guide.
5. Dial a single PSTN call
With either origin surface registered, the dial step is one API call —POST /api/v1/voice/calls. Pass the bought DID as from and any PSTN
destination as to; a record: true flag captures the audio for the
post-call read:
2xx envelope carries the new call at its first state:
Response
2xx response returns data.id (call_…) — the handle every later
step uses. Options answer_url/staticVerbs, AMD, and metadata-level
bookkeeping are at
Program an outbound voice call; for a
first call there is nothing to configure beyond to and from.
6. Read the lifecycle states
A call movesringing → in_progress → a terminal completed on
answer (or failed / no-answer on a declined or unanswered ring).
Poll the record:
status
advanced along the sequence above; a terminal read looks like:
Response
call.completed / call.failed webhooks under
Settings → Webhooks and verify the delivery
signature. The Voice calls page in
the dashboard lists the same progression per call; the full state map
and webhook payloads live in
programmable-voice-call.
7. Common errors
These cover the failures a first outbound call hits in the wild:
SIP failures past this short list are covered in
Troubleshooting: SIP trunk down or calls failing;
lifecycle outcomes that look like (
no-answer, busy, unreachable) map
in programmable-voice-call.
Where to go next
- Program every call — answer_url verbs, AMD, recordings, transcripts: Program an outbound voice call.
- Run the trunk in production — failover, health snapshot, route quality: Connect a SIP trunk.
- Give agents the full softphone — inbound routing, mobile push, SDK events: Browser (WebRTC) softphone.
- Build the verification pipeline — send gates pre-flight checklist, route preview, and delivery forensics.