Skip to main content
Your own voice platform (PBX, SBC or contact centre) talks to Ringg over standard , with no telephony provider in between: you keep your carrier and numbers, and Ringg supplies the agent that handles the conversation (bring your own telephony). A trunk works in two directions:
  • Inbound: your switch sends an INVITE to Ringg. Ringg answers, picks the agent and runs the conversation.
  • Outbound: Ringg sends an INVITE to your trunk, and your platform routes the call to the customer.

Before you start

An agent

The agent that answers inbound INVITEs or places outbound calls over the trunk.

An API key

Optional: only to register inbound callees by API.

What each side provides

Set up the trunk in the dashboard

Enterprise workspaces configure SIP trunks themselves: Numbers → Add number, select SIP, then open Configure provider (the gear) to reach the Configure SIP Trunks panel. With no trunk yet, the panel opens on the Add form. SIP isn’t offered on the Saudi Arabia or UAE regional dashboards; there, and for other workspaces, contact Ringg.

Every trunk field, saving, and the trunk appearing in the list

1

Add a trunk

In Configure SIP Trunks, select Add and fill in the trunk:
SIP trunk form with Name Acme PBX Mumbai, Direction Both, an inbound source chip 203.0.113.0/28, Outbound target sip.acme-lending.example:5061, Tech prefix 9 and Strip digits 1

A trunk with direction Both: inbound sources, outbound target, tech prefix, strip digits

With Authentication on, choose the Auth mode: Register (periodic REGISTER to your platform; needs direction Outbound or Both) or Digest (answers 401 challenges on outbound INVITEs). Then enter Username, Password and optionally Realm (defaults to the outbound host). Register also takes Expires (seconds), 60 to 86400 (default 3600), and Register delay (seconds), 0 to 3600 (default 0).
Authentication section with Auth mode Register, Username ringg-trunk, a masked Password, Realm sip.acme-lending.example, Expires 1,800 seconds and Register delay 5 seconds

The Authentication fields for Register mode

2

Save

”SIP trunk created successfully.” appears and the trunk is listed. Use the pencil to edit it or the trash icon to delete it.
SIP trunks table listing Genesys Cloud Pune and Acme PBX Mumbai with their created dates and edit and delete buttons

Configure SIP Trunks after saving

3

Add your numbers

With the trunk selected in Add number, type your numbers on the Add custom tab. See Add a number by hand. Then attach them to agents or use them as caller ID.

Network requirements

SIP signalling

Use sip.ringg.ai as the destination in your trunk configuration. Ringg shares the underlying ingress and media IP addresses with you during onboarding, for your firewall and ACL rules. Media encryption follows the signalling transport, and is not configured separately. Connect over TLS on 5061 and the media is negotiated as SDES-SRTP (RTP/SAVP) using the AES_CM_128_HMAC_SHA1_80 cipher suite. Connect over UDP or TCP on 5060 and the media is plain RTP. If you require encrypted media, use TLS. There is no option to run SRTP over a plaintext signalling transport.
For TLS, always connect to sips:sip.ringg.ai:5061 rather than to the IP address. The certificate is issued for the hostname sip.ringg.ai, so a client that connects by IP and validates the certificate will fail on a hostname mismatch.

RTP media

Media is bridged on the same address as signalling.
The most common cause of a connected call with no audio is a firewall that permits SIP on 5060 but blocks the RTP range. Allow UDP 10000-60000 in both directions to the Ringg media addresses before testing.

Codecs

Session timers

Ringg supports RFC 4028 session timers with a minimum Session-Expires of 1800 seconds. A shorter value is rejected with 422 Session Interval Too Small. Either raise the value on your side or omit the header.

How a call flows

Ringg terminates the SIP leg, bridges the audio into the AI bot engine, and runs the conversation using the agent configuration resolved from the call. If the agent decides to hand the call to a human, Ringg sends a SIP REFER back to your platform.

Inbound: your platform to Ringg

Allowlisting

Ringg authenticates inbound calls by source IP. Send Ringg the signalling IP or CIDR your platform originates from, and it is added to the inbound ACL. Ringg accepts public IPv4 addresses and CIDR blocks up to /18; anything broader, IPv6 and private ranges are rejected. If your carrier publishes a wider egress pool, send the specific ranges you originate from.

Custom SIP headers

Ringg reads these headers from the inbound INVITE. All are optional except where your chosen routing method requires them. Example INVITE:

Choosing which agent answers

Ringg resolves the agent in this order: X-Agent-ID first, then X-CLIENT-ID, then the dialled number.

Passing context into the conversation

Context lets the agent open the call already knowing who it is speaking to, instead of asking.

X-Custom-Vars

X-Custom-Vars carries an & separated list of key=value pairs:

Using the values

Every key becomes available in the agent’s system prompt and intro message as @{{key}}:
Keep values short and avoid characters that need escaping in a SIP header. & and = are the separators in X-Custom-Vars, so a value containing either does not parse.

Genesys Cloud (BYOC)

Genesys Cloud BYOC trunks do not generally send X-Custom-Vars. They carry call context in the standard RFC 7433 User-to-User header instead, and Ringg supports that natively.

The header

Encoding

A decoded payload looks like this:

What Ringg does with it

  1. Reads every User-to-User header on the inbound INVITE.
  2. Decodes the hex payload and removes the leading 00 discriminator.
  3. Makes each decoded key a conversation variable, usable as @{{key}} exactly like X-Custom-Vars.
  4. On transfer, puts the UUI back on the Refer-To URI so your platform keeps the same context on the onward leg.

Keep the UUI small

Keep the UUI payload under roughly 150 bytes: send identifiers such as a ticket or conversation ID rather than free text, and look up the detail on your side after the transfer completes.
UUI content is hex encoded, so every byte of payload becomes two characters on the wire; a 200 byte payload is a 400 character header. On transfer that header travels inside the Refer-To URI of the REFER, and a large UUI can push the REFER past the 1500 byte MTU into IP fragmentation. Some SBCs and firewalls silently drop fragments, and the transfer fails with no useful error.

Outbound: Ringg to your trunk

For outbound calls, Ringg originates the INVITE toward your platform from a fixed set of source addresses. Ringg provides these during onboarding, and you allow them in your inbound firewall and SIP ACL.

What Ringg needs from you

Authentication modes

IP based is the simplest and recommended where your platform supports it. With digest or register, send the exact realm your platform challenges with when it differs from its hostname. A realm mismatch makes registration or authentication fail silently and retry indefinitely, with no calls connecting.

Call transfer with SIP REFER

When the AI agent needs to hand the call to a human or another destination, Ringg sends a SIP REFER on the existing dialog. Your platform performs the actual transfer.

What your platform must support

Behaviour to expect

  • Many platforms send their own BYE to release the Ringg leg as soon as they accept the REFER. Ringg does not treat this as an error.
  • A UUI received on the inbound call travels on the Refer-To URI (keep it small). If your transfer destinations carry large UUI payloads, prefer TCP or TLS for the trunk: UDP requests above roughly 1300 bytes are prone to fragmentation, which some networks drop.

Inbound callees

An inbound callee is a record you register with Ringg ahead of time: when this person calls in, use this agent and start the conversation already knowing these facts about them. Use it when your platform cannot attach per-customer context to every INVITE: upload the context once, keyed by the caller’s identifier, and at call time send only X-CLIENT-ID. Each record stores:
  • The user_id that X-CLIENT-ID is matched against, usually the caller’s number
  • The agent_id that should handle the call
  • Any custom variables to inject into the prompt and intro message
Records are upserted: uploading a user_id that already exists overwrites its configuration, so you can re-upload the full list on a schedule. Transliteration runs only when the request carries agent_id. The endpoints below live under https://prod-api.ringg.ai/ca/api/v0 and take your workspace API key in the X-API-KEY header on its own; a request that also carries an Authorization header is rejected. The key identifies the workspace, so no workspace ID is needed.

Upload via CSV

The mapping key is the Ringg field name, the value is your CSV column heading: Your CSV headings can be named anything; only the left side of the mapping has to match the variable names your agent expects. transliterate_fields matches on those same left-side names: with the mapping above, transliterating the customer’s name means passing ["callee_name"], not ["name"]. A value that matches no variable name is silently ignored.

Upload via JSON

Upload response

Both endpoints return the same shape:

List callees

The response is {"data": [...], "limit", "offset", "count", "total"}; each item has id, workspace_id, user_id, agent_id and custom_args_values.

Troubleshooting

Onboarding checklist

1

Configure the trunk, or contact Ringg

Enterprise workspaces set up the trunk in the dashboard. Otherwise, email admin@ringg.ai requesting a SIP integration, with these details so the trunk can be provisioned in one pass:
  • Company name and your Ringg workspace
  • Direction needed: inbound, outbound, or both
  • Your SIP signalling IP or CIDR, for the inbound allowlist
  • For outbound, what Ringg needs from you: trunk host, port, transport and authentication, with the exact realm for digest or register
  • Whether the agent needs to transfer calls, and the destination to transfer to
  • How you will pass context: X-Custom-Vars, or the User-to-User header if you are on Genesys Cloud
Ringg confirms the allowlist entry and returns your trunk configuration with the addresses for your firewall.
2

Apply your firewall rules

Point your trunk at sip.ringg.ai and allow the addresses Ringg provided on the signalling and RTP ports, in both directions.
3

Decide routing, context and transfer

Pick how the agent is chosen and how context is passed. If the agent will hand off to a human, confirm your platform accepts REFER and agree the destination.
4

Run a test call

Place a call in each enabled direction.
Two-way audio, the right agent answers, injected variables appear in the conversation, and the transfer lands. The call is in Logs.

Next steps

Add the trunk's numbers

Type them in on the Add custom tab.

Attach a number to an agent

Route dialled-number calls to an agent.