Skip to navigation

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/inbound and POST /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: fromNumber on outbound calls, fromNumbers (rotating, frozen at creation, retry-stable) on campaigns, and a per-agent transfer caller ID via PUT /agent/{agentId}/transfer-source.
  • A temporary caller-ID bridge on the agent (POST /agent/{agentId}/caller-ids): shared attachments that outbound calls without a fromNumber dial from, first attached wins. Deprecated at introduction (responses carry Deprecation: true) and removed with the migration window; pass fromNumber per call instead.
  • Guarded deletions everywhere: deleting a trunk still in use returns 409 naming 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 400 naming your options (dashboard test calls keep a labelled shared test number).
  • Campaigns follow the same rule: a campaign whose fromNumbers (or legacy phoneNumberIds) 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, telephonyProductId and allowInboundCall on agent writes, fromProductId on outbound calls, phoneNumberIds on campaigns, and the agentId / customProducts read shapes. Deprecated paths respond with a Deprecation: true header. The full list and the concrete sunset date live on the Deprecation Notices page.