Skip to main content
connic
ConnectorsBeta

SIP Voice

Answer and place calls with a connic voice agent on any phone system or provider that supports SIP.

Last updated
ModesSync (incoming calls) and outbound (outgoing calls)
YAML typesip
CredentialsIn the connector; when your phone system sends calls to connic, connic creates them
BridgeNot supported
Custom domainNot supported
Linked agentsExactly one agent, deployed with voice_config
While pausedconnic signs the line out and refuses calls from your phone system.

Set up

  1. Add voice_config and a supported realtime model to an LLM agent, save the model provider's credentials in the project if the model requires them, and deploy the agent to the environment. See connic voice.

  2. Choose how your phone system and connic reach each other. Either connic signs in like a phone: create a SIP account or extension for connic on the phone system. Or your phone system sends calls to connic: you set up a SIP trunk to connic in the last step.

  3. Open the agent. In Connector Flow, click Add inbound connector to answer calls or Add outbound connector to place them, then Create New Connector, and select SIP Voice.

  4. Pick the Setup from step 2 and fill in the server and, when connic signs in, the account's username and password. Choose the Transport and Media encryption your phone system supports, and click Create.

  5. When your phone system sends calls to connic, open the connector and copy its SIP address, Username, and Password into a new SIP trunk on the phone system. Route the numbers or extensions the agent should answer to that trunk. Then call one of them and open the run.

In code

Declare the connector in connectors/*.yaml. Keep the password in a variable. Quote phone numbers and extensions; unquoted, YAML reads them as integers and the deploy fails.

connectors/support-line.yaml
type: sip
config:
  setup: register
  server: pbx.example.com
  transport: tls
  username: "200"
  password: ${PBX_LINE_PASSWORD}
  transfer_numbers:
    - "+4930123456789"
  allowed_callers:
    - "+4915112345678"
  fallback_number: "+4930987654321"
agents:
  - support-voice

Configuration

The fields of a SIP Voice connector, the same in connectors/*.yaml, the REST API, and connic MCP. The descriptions name the matching setting in the dashboard. Link one deployed agent with voice_config to receive or place calls. The dashboard links the agent you create the connector from, or asks for one under Voice agent. REST API and connic MCP create requests can link the agent through the optional agent_name field.

FieldTypeStatusDescription
typestringRequiredsip.
modestringOptionalsync answers calls to the line; outbound places a call for every run of the agent. It can't change after the connector is created. Dashboard: Mode.Default: sync
configobjectRequiredSIP Voice settings.
setupstringRequiredregister: connic signs in to the phone system like a phone. trunk: the phone system sends calls to connic and signs in with credentials connic creates. Dashboard: Setup.Default: register
serverstringOptionalHost name of the phone system or SIP provider. Required with register and for outgoing calls. Dashboard: SIP server.
portintegerOptionalThe server's SIP port. Dashboard: Port.Default: 5060, or 5061 with TLS
transportstringRequiredtls, tcp, or udp. Dashboard: Transport.Default: tls
usernamestringOptionalWith register, required there. The SIP account or extension connic signs in as. Dashboard: Username.
passwordstringOptionalWith register, required there. The account's password, without spaces or semicolons. Dashboard: Password.
auth_usernamestringOptionalWith register. Only when the provider signs in with a different name than the username. Dashboard: Authentication username.
caller_idstringOptionalThe number or extension outgoing calls come from. Dashboard: Caller ID.
media_encryptionstringRequiredsrtp encrypts the call audio, none sends it unencrypted. Dashboard: Media encryption.Default: srtp
codecsstringRequiredg722,alaw,ulaw prefers G.722 (HD voice); alaw,ulaw uses G.711 only. Dashboard: Codecs.Default: g722,alaw,ulaw
tostringOptionalOutbound mode. The number to call when a run's input has no to. Dashboard: Default number to call.
ring_secondsintegerOptionalOutbound mode. How long the phone rings, from 5 to 120 seconds, before the run fails because nobody answered. Dashboard: Ring time (seconds).Default: 30
transfer_numbersstring[]OptionalNumbers that agent tools may transfer callers to with TransferCall, in E.164 format. At most 20. Dashboard: Transfer numbers.
allowed_callersstring[]OptionalSync mode. Only these numbers can call the agent, in E.164 format. At most 100. Calls from other and hidden numbers are rejected before they are answered; see Allowed callers. Dashboard: Allowed callers.
fallback_numberstringOptionalSync mode. Number in E.164 format that receives accepted calls the agent can't finish and calls that waited the maximum wait. Dashboard: Fallback number.
max_wait_secondsintegerOptionalSync mode. How long callers wait for the agent when it is already in as many calls as its concurrency limit allows, from 0 to 900. Dashboard: Maximum wait (seconds).Default: 30
hold_audio_pathstringOptionalSync mode. Path of an MP3 or WAV file in your project folder, such as assets/hold.mp3, up to 10 minutes long, that waiting callers hear on repeat. It deploys with the project. Dashboard: Hold audio.

Generated values

With trunk, the connector shows a SIP address (sip.connic.co), a Username, and a Password for your phone system's trunk. They stay the same when you edit the connector.

Agent input

An incoming call starts the run with the caller's number and the number or extension they called:

input.json
{
  "call_id": "1730900000.42",
  "from": "+4915112345678",
  "to": "200",
  "provider": "sip"
}

Calls

In sync mode, SIP Voice answers calls to the line and streams the audio between your phone system and the agent in both directions. The caller hears a ringing tone until the agent is ready to speak. Keypad input and hang-up follow the agent's voice settings.

Outgoing calls

In outbound mode, every run of the linked agent is a call. Start the runs any way you like, for example from a webhook connector, or from another agent with trigger_agent. When a run starts, connic calls the number in the input's to field through the line, or the connector's default number when the input has none. With a greeting, the agent speaks first once someone answers; without one, it waits for them to speak. The agent gets through phone menus with press_keys, which sends the keys over the line, and can wait on hold until a person answers. Runs beyond the agent's max_concurrent_runs wait before connic dials. The run fails when nobody answers within the ring time, the line is busy, or the call can't be connected, and its error says which. If a mailbox answers, the agent hears its greeting like a person, so tell the agent in its system prompt what to do then, for example leave a short message after the tone and hang up.

connectors/reminder-calls.yaml
type: sip
mode: outbound
config:
  setup: register
  server: pbx.example.com
  transport: tls
  username: "201"
  password: ${PBX_OUTBOUND_PASSWORD}
  caller_id: "+4930123456"
agents:
  - reminder-calls

Allowed callers

With allowed callers, connic rejects calls from all other numbers and from hidden numbers before they are answered, so they start no run. It compares the caller's number as your phone system sends it, so the phone system must send numbers in E.164 format. The connector logs show each rejected call and its number. Caller numbers can be faked, so don't rely on this list alone to protect sensitive data.

Waiting callers

Every call is a run, so the agent takes as many calls at once as its max_concurrent_runs allows. Further callers wait in line and reach the agent in the order they called. While they wait, they hear the ringing tone or the connector's hold audio. A caller still waiting after the maximum wait goes to the fallback number; without one, the call ends and its run fails.

Transfers and fallback

When an agent tool raises TransferCall with one of the connector's transfer numbers, connic asks your phone system to transfer the call there. If nobody answers there, the call ends. The fallback number applies only to incoming calls in sync mode and not to transfers. If an accepted call can't continue, for example because the run fails or the caller waited the maximum wait, it goes to the fallback number instead. Without a fallback number, the call ends. Your phone system must allow transfers from the line.

Phone system setup

connic reaches your phone system from sip.connic.co: SIP on port 5060 over UDP or TCP and 5061 over TLS, and call audio on UDP ports 10000 to 20000. If the phone system only accepts known addresses, allow that address. With register, connic keeps the line signed in and tries again every 30 seconds after a failed sign-in, or every 5 minutes after the server refused it. A connector for outgoing calls doesn't sign the line in; it authenticates each call it places, so it can use the same account as a connector for incoming calls.

Limits and errors

LimitValue
Linked agentsExactly one, with voice_config in the environment's active deployment
Transfer numbers20 per connector
Allowed callers100 per connector
Maximum wait0 to 900 seconds; 30 by default
Hold audioMP3 or WAV, up to 10 minutes
Ring time5 to 120 seconds; 30 by default
CodecsG.722 and G.711 (A-law and µ-law)
Settings changesReach the line within about 15 seconds
Call lengthThe agent's timeout, capped by the plan's run timeout; 60 minutes on Pro
Error or symptomWhat to do
Could not sign in to the SIP serverThe connector logs show the server's answer. Check the server, port, transport, username, password, and authentication username, and that the phone system accepts sign-ins from sip.connic.co.
Nobody answered the callThe number didn't pick up within the ring time. Raise ring_seconds or check the number.
The call could not be connectedThe phone system refused the call. Check that the line may call that number and that the number is complete, including the country code where needed.
Password can't contain spaces, semicolons or characters outside ASCIISet a password on the phone system without those characters.
Calls don't reach the agentCheck that the connector is active and linked to exactly one agent with voice_config in the active deployment, and that your phone system routes the calls to the line.