The phone network still terminates most business conversations, so TeleQuick Voice speaks it natively. A carrier delivers a call over SIP, the engine answers it as a back-to-back user agent (B2BUA), decodes the G.711 media, and republishes it as an audio track your AI agent — or a human — can talk over. Every leg keys off a single call_sid, so signalling, media, recording, and reporting all line up on one call. This page orients you to that bridge. Follow the links to the task pages when you are ready to wire a trunk, provision a number, or hand a call to a person.
There is no separate PBX to run. The engine embeds its own SIP gateway, registrar, and dialplan — a FreeSWITCH-style modular core — so migrating off Asterisk or FreeSWITCH is a matter of re-pointing your trunks and agents, not standing up new signalling infrastructure. See Migration.

How a phone call reaches your agent

A call crosses four boundaries between the carrier and your agent. Each is a place you configure something.
1

Signalling — SIP gateway / B2BUA

The carrier sends an INVITE to your per-tenant SIP host, <workspace-id>.sip.telequick.dev. The SIP gateway authenticates it (source-IP ACL for trunks, digest auth for registered devices), matches it to a trunk, and answers it. Because the engine is a B2BUA, it owns both legs of the dialog — caller on one side, agent or callee on the other — which is what makes transfer, bridging, and handoff possible.
2

Routing — dialplan and ACD

Once answered, a decision engine resolves what happens next from the matched trunk and the dialed number: stream the call to an AI agent, run an IVR/queue program, or ring a human. Number-to-destination mapping and skill-queue routing live in the PBX / ACD layer.
3

Media — RTP plane

Audio flows as G.711 RTP (µ-law PT 0 / A-law PT 8). The in-engine media plane decodes it to the runtime’s 8 kHz PCM16 bus, applies noise suppression, scores call quality (MOS), and publishes the caller’s voice as the MoQT track voice/<sid>/uplink. The agent’s reply comes back on voice/<sid>/downlink and is paced out as G.711 every 20 ms. Codec details are in the Codec Guide.
4

Handling — agent or human

The AI runtime attaches to those tracks and runs your ASR/LLM/TTS or speech-to-speech pipeline (see Runtime). At any point you can hand the live call to a person — the AI leg pauses and a human subscribes to the same caller track. See AI-to-Human Handoff.

The pieces you configure

SIP Trunking

Connect a carrier. Bring your own SIP trunk (matched by source IP) or register outbound, in either direction, with credentials sealed at rest.

Number Provisioning

Import a DID, assign it to a trunk and an agent, and route inbound calls off it. Each workspace also gets its own <workspace-id>.sip.telequick.dev host.

Inbound Calls

Receive calls from the phone network, resolve the trunk and number, and route to an AI agent, an IVR, or a queue.

Outbound Calls

Originate a single call or run a paced bulk campaign out over a trunk, with an AI agent or a playback app on the far end.

PBX / ACD

Route through VDNs, skills, and queues; ring human agents on browser softphones or real SIP deskphones.

AI-to-Human Handoff

Warm-transfer a live call from the AI agent to a person, with the caller audio bridged the whole way.

Call Lifecycle

The full signalling and media sequence — from INVITE and early media through teardown, CDR, and Q.850 cause.

Codec Guide

Opus, PCM16, and G.711 — what runs on the wire, what the runtime works in, and where transcoding happens.

Trunks: the unit of connectivity

A trunk is how a carrier — or another PBX, or a vendor bridge — connects to your workspace. Inbound INVITEs are matched to a trunk by source IP or by the dialed DID; outbound calls select a trunk to leave over. Each trunk carries the SIP and RTP addressing for both sides, credentials (sealed), a media mode, and a realm.
direction
inbound | outbound | both
Which way calls flow over this trunk.
media_mode
proxy | direct
default:"proxy"
proxy routes RTP through the engine’s media plane (the default, and required for AI handling and recording). direct is defined for pass-through media but the live runtime currently degrades it to proxy.
realm
internal | external | ai_vendor
Classifies the far side — an internal device domain, an external carrier, or a vendor bridge.
inbound_rule / inbound_skill_id / vdn_id
string
What an inbound call on this trunk does: stream to an AI agent, drop into a skill queue, or enter a VDN program.
Trunks are created and edited from the control-plane console at agent.telequick.dev (or via the admin API). On save they are sealed and pushed to the engine’s live configuration store — they are not kept in your reporting database. Full field reference and setup steps are on the SIP Trunking page.

Numbers and per-tenant SIP hosts

When your workspace is provisioned, TeleQuick creates DNS records for <workspace-id>.sip.telequick.dev (and a matching WebRTC host) pointing at the engine. The engine reads the leftmost label of an inbound INVITE to identify your tenant, so multiple workspaces share one edge with no cross-tenant collisions. You then attach phone numbers (E.164 DIDs) to a workspace and bind each to a trunk and an agent. Imported and manually configured numbers route calls today.
The in-console “buy a number” search catalog is a demo stub (India-only, placeholder vendor) and does not purchase real numbers yet. To go live, import a DID you already own from Twilio, Telnyx, Bandwidth, or another provider and point its trunk at your workspace. See Number Provisioning.

Placing calls out

Originating is the mirror image of inbound. A control-plane call mints a session and asks the engine to dial:
import { Voice } from "@telequick/sdk";

const voice = new Voice({ apiKey: process.env.TELEQUICK_API_KEY });

// Dial a number and drop it straight onto an AI agent.
const call = await voice.calls.originate({
  to: "+15551234567",
  from: "+18005550100",   // a DID on one of your outbound trunks
  app: "AI_BIDIRECTIONAL_STREAM",
  agentId: "agent_42",
});

console.log(call.callSid);
from telequick import Voice
import os

voice = Voice(api_key=os.environ["TELEQUICK_API_KEY"])

call = voice.calls.originate(
    to="+15551234567",
    from_="+18005550100",
    app="AI_BIDIRECTIONAL_STREAM",
    agent_id="agent_42",
)

print(call.call_sid)
For volume, a paced bulk dialer runs campaigns of up to tens of thousands of numbers with configurable calls-per-second and max-concurrency limits, and the engine owns the pacing. See Outbound Calls.

Every call is observable

The SIP gateway emits a lifecycle event on each transition — initiated, established, ring, hold, transferred, cleared — and writes a CDR (with Q.850 cause and duration) when the call ends. The media plane writes per-call quality (loss, jitter, MOS) alongside it. A segment tagged with a handler shows whether that stretch of the call was AI-handled or human-handled. All of it lands in your reports. See Observability.

Next steps

Connect a carrier

Set up your first SIP trunk, inbound or outbound.

Take your first inbound call

Route a DID to an AI agent end to end.

Understand the lifecycle

Walk the full INVITE-to-CDR sequence.

Hand off to a human

Bridge a live AI call to a person.