Telephony rework: SIP trunks as resources, agents answer, calls choose their caller ID
The telephony model is reorganized around one idea: who answers a number is durable configuration, what a call dials from is a property of the call. Full details and migration steps: Telephony API migration guide.
New
- SIP trunks are first-class resources, one per direction:
POST /sip-trunk/inboundandPOST /sip-trunk/outbound, with a dedicated SIP Trunks dashboard page. - An agent answers on a number or trunk via
POST /agent/{agentId}/answers; a source is answered by exactly one agent, and conflicts identify the agent holding it. - Every call names its caller ID:
fromNumberon outbound calls,fromNumbers(rotating, frozen at creation, retry-stable) on campaigns, and a per-agent transfer caller ID viaPUT /agent/{agentId}/transfer-source. - A temporary caller-ID bridge on the agent (
POST /agent/{agentId}/caller-ids): shared attachments that outbound calls without afromNumberdial from, first attached wins. Deprecated at introduction (responses carryDeprecation: true) and removed with the migration window; passfromNumberper call instead. - Guarded deletions everywhere: deleting a trunk still in use returns
409naming what uses it, and releasing a number an agent answers on or dials from is refused.
Changed
- No more silent fallback to a platform-owned caller ID: a call that cannot resolve its from-number is refused with a
400naming your options (dashboard test calls keep a labelled shared test number). - Campaigns follow the same rule: a campaign whose
fromNumbers(or legacyphoneNumberIds) resolve to zero numbers your organization owns is refused at start. - The dashboard’s “Import SIP” tab is replaced by the SIP Trunks page; the Phone Numbers page shows the Answering agent per number and blocks releasing a number an agent still answers on.
Deprecated (still working for 45 days from this release)
POST /product/import-phone-number,telephonyProductIdandallowInboundCallon agent writes,fromProductIdon outbound calls,phoneNumberIdson campaigns, and theagentId/customProductsread shapes. Deprecated paths respond with aDeprecation: trueheader. The full list and the concrete sunset date live on the Deprecation Notices page.