makeCall, holdCall, singleStepTransfer, setAgentState, and the rest — as short request/reply lines. State changes come back to you as a live event stream.
What CSTA is
ECMA CSTA (Computer-Supported Telecommunications Applications, standardized as ECMA-269) is the long-established vendor-neutral API for third-party call control. It defines the operations an external application uses to observe and manipulate calls and agents on a telephony system — make a call, clear a connection, hold, retrieve, transfer, consult, set agent state, register as a route point — without owning the media itself. TeleQuick implements those operations as wire verbs on a control leg into the engine. The verb names map one-to-one to CSTA operations, so if you have driven CSTA before, the model is familiar: your app sends a verb and gets a reply, and separately subscribes to a stream of CSTA events describing what happened to the calls and agents you touched.This is the engine twin of the routing engine the operator console uses for its own agent workstation. Both surfaces speak the same verbs. The console drives its built-in workstation; this API is for your external ISV or SDK client. There is no behavioral fork — the same call control, exposed for third parties.
When to use it
Third-party call control
Your backend or app needs to originate, hold, transfer, or clear live calls programmatically — not run the AI pipeline, but control the call.
Agent workstations
You are building a custom softphone or agent desktop and need to set agent work state (ready / not-ready / after-call-work) and pop calls on screen.
Route point / ACD brain
Your app registers as a route point and makes the routing decision — receiving route requests and selecting the destination, ACD-style.
CRM / ISV integration
You are integrating an existing contact-center or CRM product and want a standards-based CTI link rather than a proprietary one.
Connect
The CTI control leg runs on the engine over one of two transports. Both carry the same length-prefixed, correlated request/reply lines; pick the one that fits your client.- WebSocket (wss)
- WebTransport (QUIC)
Open a secure WebSocket to the engine with the subprotocol
cti. This is the simplest client to write and works from any language with a WebSocket library.<verb>\t<args-json>, and every request carries a correlation id so its reply can be matched. The very first line you send must be auth — the connection stays unauthenticated (and every other verb is refused) until it succeeds.
Mint a CTI token
Ask the control-plane API for a short-lived signed CTI token for the tenant, with the scopes your app needs (see below). Treat it like any bearer credential — it is short-lived by design; refresh and reconnect before it expires.
Authenticate on the first line
Send
auth with the token as the first request. On success the reply confirms the connection and the scopes it was granted; on failure the connection is closed.First line
Auth and scopes
Authorization is a short-lived signed CTI token minted by the control-plane API. It carries ascopes claim that gates which families of verbs the connection may use. A verb whose scope is not present in the token is refused — request only what your app needs.
The call-control verbs:
makeCall, clearConnection, holdCall, retrieveCall, singleStepTransfer, consultationCall, transferCall, cancelConsultation, generateDigits.Agent work-state control:
setAgentState (login / logout / ready / not-ready with an aux reason / after-call-work).Route-point registration:
routeRegister, to receive route requests and select the destination.Events ride a durable track
Verbs are request/reply — you send an operation and get an acknowledgement. The resulting state changes arrive separately as CSTA events on a durablecti/<tenant> track that your SDK subscribes to directly. Because the track is durable, a client that reconnects can resume the event stream rather than miss what happened while it was away.
The event stream reports the CSTA lifecycle of the calls and agents you touch:
| Event | Meaning |
|---|---|
delivered | A call is offered / ringing at a device. |
established | A connection answered — the parties are talking. |
held / retrieved | A connection was placed on hold or taken back. |
transferred | A transfer completed. |
cleared | A connection was released / hung up. |
failed | The operation or call failed. |
makeCall acknowledges immediately, and you learn the far end is ringing via delivered and answered via established.
The verb families
Call Control
Originate, clear, hold/retrieve, blind and consultative transfer, consult, and DTMF —
makeCall, holdCall, singleStepTransfer, and the rest.Agent State
Log agents in and out and move them between ready, not-ready (with an aux reason), and after-call-work with
setAgentState.Routing & Events
Register as a route point with
routeRegister and subscribe the cti/<tenant> CSTA event track.Client surface today. CTI is a wire protocol you speak from any WebSocket or WebTransport client; there is no dedicated single-purpose polyglot CTI SDK wrapper yet. The verbs, framing, auth, and event track documented here are the contract — build against them directly, or over the transport the rest of the SDK already gives you.
Related
High Availability
Run more than one engine node so the CTI control plane and call routing survive a node failure. CTI pairs with the enterprise HA story.
Deployment Models
Where the engine runs — managed cloud or on-prem — and how the control leg reaches it.
On-Prem Quickstart
Stand up the engine in your own environment, the common home for an enterprise CTI integration.
Transport to Telephony
How calls enter and leave over SIP — the calls your CTI app then controls.