SIP Voice
Answer and place calls with a connic voice agent on any phone system or provider that supports SIP.
On this page
| Modes | Sync (incoming calls) and outbound (outgoing calls) |
| YAML type | sip |
| Credentials | In the connector; when your phone system sends calls to connic, connic creates them |
| Bridge | Not supported |
| Custom domain | Not supported |
| Linked agents | Exactly one agent, deployed with voice_config |
| While paused | connic signs the line out and refuses calls from your phone system. |
Set up
Add
voice_configand 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.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.
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.
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.
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.
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-voiceConfiguration
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.
| Field | Type | Status | Description |
|---|---|---|---|
| type | string | Required | sip. |
| mode | string | Optional | sync 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 |
| config | object | Required | SIP Voice settings. |
| setup | string | Required | register: 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 |
| server | string | Optional | Host name of the phone system or SIP provider. Required with register and for outgoing calls. Dashboard: SIP server. |
| port | integer | Optional | The server's SIP port. Dashboard: Port.Default: 5060, or 5061 with TLS |
| transport | string | Required | tls, tcp, or udp. Dashboard: Transport.Default: tls |
| username | string | Optional | With register, required there. The SIP account or extension connic signs in as. Dashboard: Username. |
| password | string | Optional | With register, required there. The account's password, without spaces or semicolons. Dashboard: Password. |
| auth_username | string | Optional | With register. Only when the provider signs in with a different name than the username. Dashboard: Authentication username. |
| caller_id | string | Optional | The number or extension outgoing calls come from. Dashboard: Caller ID. |
| media_encryption | string | Required | srtp encrypts the call audio, none sends it unencrypted. Dashboard: Media encryption.Default: srtp |
| codecs | string | Required | g722,alaw,ulaw prefers G.722 (HD voice); alaw,ulaw uses G.711 only. Dashboard: Codecs.Default: g722,alaw,ulaw |
| to | string | Optional | Outbound mode. The number to call when a run's input has no to. Dashboard: Default number to call. |
| ring_seconds | integer | Optional | Outbound 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_numbers | string[] | Optional | Numbers that agent tools may transfer callers to with TransferCall, in E.164 format. At most 20. Dashboard: Transfer numbers. |
| allowed_callers | string[] | Optional | Sync 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_number | string | Optional | Sync 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_seconds | integer | Optional | Sync 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_path | string | Optional | Sync 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:
{
"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.
type: sip
mode: outbound
config:
setup: register
server: pbx.example.com
transport: tls
username: "201"
password: ${PBX_OUTBOUND_PASSWORD}
caller_id: "+4930123456"
agents:
- reminder-callsAllowed 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
| Limit | Value |
|---|---|
| Linked agents | Exactly one, with voice_config in the environment's active deployment |
| Transfer numbers | 20 per connector |
| Allowed callers | 100 per connector |
| Maximum wait | 0 to 900 seconds; 30 by default |
| Hold audio | MP3 or WAV, up to 10 minutes |
| Ring time | 5 to 120 seconds; 30 by default |
| Codecs | G.722 and G.711 (A-law and µ-law) |
| Settings changes | Reach the line within about 15 seconds |
| Call length | The agent's timeout, capped by the plan's run timeout; 60 minutes on Pro |
| Error or symptom | What to do |
|---|---|
| Could not sign in to the SIP server | The 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 call | The number didn't pick up within the ring time. Raise ring_seconds or check the number. |
| The call could not be connected | The 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 ASCII | Set a password on the phone system without those characters. |
| Calls don't reach the agent | Check 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. |