<workspace-id>.sip.<domain>. The SIP domains
screen under Admin is where you see that hostname, add your own vanity
hostnames alongside it, and check whether each one is verified and accepting
traffic.
The screen is one implementation rendered in both the contact centre and the
voice-AI console, so what you see in either place is the same record set.
Reads and writes on this screen go through the control-plane API. The same
operations are available to your backend over the control-plane tRPC
interface with an API key; the control plane rejects a key that lacks the
capability scope for trunk and domain administration. See
Authentication.
What a SIP domain is and how it differs from a trunk
A domain and a trunk answer two different questions about the same call.
A domain is an addressing object. It does not by itself authorise a call,
carry codec or CLI policy, or decide where a call lands in the dialplan. A
trunk is the authorisation and policy object. A domain with no matching
trunk gives you a reachable hostname that rejects everything it receives.
Each row on the screen is a single hostname plus its state: whether it is the
workspace’s default endpoint or one you added, whether verification has
completed, and the transports it currently answers on. Trunks and numbers are
managed on their own screens; the domain row links them rather than owning
them.
How an inbound INVITE is matched to a domain
Matching is done on the leftmost DNS label of the host part of the request URI, not on the full hostname string and not on the To header. For the default endpoint<workspace-id>.sip.<domain>, the leftmost label is
the workspace id. An INVITE to sip:+15550001111@acme-4f2b.sip.<domain>
resolves to the workspace whose id is acme-4f2b. The remainder of the
hostname identifies the TeleQuick SIP edge; it is not tenant-specific.
Consequences worth knowing before you configure a carrier:
- The label must match a domain record exactly. Case is not significant; anything else is.
- A carrier that rewrites the request URI to its own hostname, or that sends the INVITE to a bare IP address, produces no leftmost label to match. Those INVITEs fall through to source-IP matching on the trunk instead — see the routing order below.
- A vanity hostname you add is matched the same way, on its own leftmost
label. Pointing
voice.example.comat the edge does not makeexample.commatch.
Adding, verifying, and removing a domain
The default<workspace-id>.sip.<domain> endpoint exists without any setup
and cannot be removed. Additional hostnames go through verification so that a
workspace cannot claim a hostname it does not control.
- Add the hostname on the SIP domains screen. It is created in an unverified state and does not yet match inbound INVITEs.
- Publish the DNS record the screen displays for that row, in the zone that owns the hostname. The screen shows the exact name and value to publish; do not guess it, because the value is per-record.
- Verify. The screen re-checks DNS and moves the row to verified once the record resolves. Until then the row stays unverified. DNS propagation is outside TeleQuick’s control, so a freshly published record may need another check.
- Point your peer at it. Verification only makes the hostname eligible for matching; the call still needs a trunk that authorises the sender.
Domains, trunks, and numbers: the routing order
An inbound call is resolved in three stages. Each stage can fail independently, which is why a call can be “reaching us” and still be rejected.- Tenant resolution. The leftmost DNS label of the request-URI host is matched against the workspace’s verified domain records. If the INVITE arrived at a bare IP or an unrecognised hostname, this stage produces no tenant and the gateway falls through to stage 2 to identify the sender.
- Peer authorisation. The signalling source is matched against the workspace’s trunks — source-IP matching for IP-authenticated trunks, or registration/credential identity for registered peers. The trunk decides whether the INVITE is accepted at all, and supplies the call’s policy. If stage 1 resolved a tenant, the trunk must belong to that tenant; a trunk from a different workspace is not a match.
- Number routing. The user part of the request URI is looked up against the numbers (DIDs) provisioned in the workspace to choose the dialplan or agent that handles the call.
Transport and TLS on port 5060
The screen shows which transports each domain answers on. Port5060 is the
standard SIP signalling port and is what a carrier or PBX will use unless you
tell it otherwise; it carries unencrypted SIP over UDP or TCP, so the
signalling — including the request URI that drives the matching above — is
visible on the wire.
For encrypted signalling, use the SIP-over-TLS transport and the TLS port
shown for the domain on the screen, and configure your peer with the
hostname rather than an IP address: TLS certificate validation is done against
the hostname, so an IP-addressed peer cannot verify the edge and, as noted
above, also defeats leftmost-label matching. Encrypting signalling with TLS
does not encrypt media; media encryption is negotiated separately on the
trunk.
Failure modes: unmatched label, wrong tenant, rejected INVITE
When no
CallEvent reaches the SDK at all, the failure is at stage 1 or 2 and
you need the SIP exchange itself. Enable HEPv3 capture on the gateway and
inspect the INVITE’s request URI and source address directly — see
Telemetry.
Related
- SIP trunking — trunk creation, peer authentication, and the default per-workspace endpoint
- Authentication — API keys and capability scopes for control-plane calls
- Telemetry — metrics, CDRs, and SIP packet capture