SIP Trunks
Create inbound and outbound trunks, and a complete reference for every setting — destinations, transport, media, DTMF, codecs, capacity limits and caller ID.
A trunk is the SIP link between your phone system and WhatsApp calling. It holds where calls go, how they are authenticated, which codecs are offered, and how many calls it may carry at once. You need one trunk per direction you want to support.
In the app: Dashboard → Automation → Calls → Trunks
Create a trunk
Open the dialog
Click New trunk in the top right. On an empty account you can also start from the Inbound trunk or Outbound trunk buttons in the middle of the page.
Pick a direction
Choose Inbound (Receive WhatsApp calls on your PBX) or Outbound (Place WhatsApp calls from your PBX).
Direction is permanent
A trunk's direction cannot be changed after it is created. If you picked wrong, delete the trunk and create a new one.
Name it
Name is required, up to 100 characters, and must be unique on your account — names are compared case-insensitively, so Office 3CX and office 3cx collide. Saving a duplicate name is rejected.
Description is optional and shows up in the trunk's side panel.
Choose the WhatsApp number
Leave WhatsApp number on All numbers for an account-wide trunk, or bind the trunk to one number. A trunk bound to a specific number takes precedence over the account-wide one for calls on that number.
Set the destinations (inbound only)
Under Deliver calls to, enter at least one SIP target. Outbound trunks skip this — see The dial-out endpoint below.
Adjust advanced settings if you need to
Everything under Advanced settings has a working default. Open it only if your phone system needs TLS, SRTP, a specific codec order, or capacity caps.
Create
Click Create trunk. Outbound trunks confirm with "Trunk created. Your dial-out sip: endpoint is ready." — open the trunk to copy it.
Where calls go
Destinations (inbound)
An inbound trunk needs at least one destination, and you can add up to ten. Each row has four parts:
| Column | Meaning |
|---|---|
| URI | Where we send the call, e.g. sip:pbx.example.com:5060. Must start with sip: or sips: |
| Priority | Lower wins. The lowest-priority enabled target is tried first |
| Weight | Splits traffic between targets that share the same priority |
| Enabled | Off takes the target out of rotation without deleting it |
Routing works like this: we sort by priority ascending, load-balance across equal priorities using their weights, and skip anything disabled. If the first target does not answer, we move down the priority list; when the list is exhausted, the call fails.
A typical two-site setup:
| URI | Priority | Weight | Result |
|---|---|---|---|
sip:pbx-primary.example.com:5060 | 1 | 10 | Takes every call while it is up |
sip:pbx-dr.example.com:5060 | 2 | 10 | Only used when the primary does not answer |
And an even split across two equal servers — both priority 1, both weight 10.
Editing destinations later
Destinations are edited from Edit trunk, not from the side panel. Sending an empty list is rejected — an inbound trunk always needs at least one target.
The dial-out endpoint (outbound)
Outbound trunks have no destination list. Instead, we generate the endpoint your phone system dials when the trunk is created. It looks like:
sip:office-3cx-a1b2c3@sip.pingmate.appYou cannot choose or edit it. Open the trunk's side panel to find it under Dial-out endpoint, with a copy button. Point your PBX's SIP trunk at that URI, then dial customers as +<country code><number>.
Settings reference
Everything a trunk holds, with its default.
Basics
| Setting | Values | Default | Notes |
|---|---|---|---|
| Name | Up to 100 characters | — | Required, unique per account (case-insensitive) |
| Description | Up to 500 characters | Empty | Shown in the side panel |
| Direction | Inbound / Outbound | — | Required, permanent |
| WhatsApp number | A connected number, or All numbers | All numbers | A number-bound trunk beats the account-wide one |
| Authentication | IP allowlist / Digest credential / IP + credential | IP allowlist | See Authentication |
| Active | Active / Disabled | Active | Toggled from the side panel; disabled trunks carry no calls |
Advanced
| Setting | Values | Default | Notes |
|---|---|---|---|
| Transport | UDP, TCP, TLS | UDP | How we signal to your phone system |
| Media | RTP, SRTP | RTP | Whether the audio stream to your phone system is encrypted |
| DTMF | RFC 2833, SIP INFO, In-band | RFC 2833 | How keypad tones are carried |
| Codecs | OPUS, PCMU, PCMA, G722, G729 | OPUS, PCMU, PCMA | Offered in the order listed; at least one required |
| Max calls | Whole number, 0 = unlimited | 0 | Concurrent calls this trunk may carry |
| Calls / second | Whole number, 0 = unlimited | 0 | New calls per second on this trunk |
| Caller ID | Up to 32 characters | Empty | Overrides the number we present as the caller |
Transport
UDP is the default and what most phone systems on a private network or a trusted link expect. Use TCP where your platform prefers it or where SIP messages are large enough to fragment. Use TLS to encrypt the signalling itself — worth pairing with SRTP so both the call setup and the audio are protected.
Transport applies to the leg between us and your phone system. The leg between WhatsApp and us is always TLS-encrypted, regardless of this setting.
Media
RTP sends audio unencrypted on the leg to your phone system. SRTP encrypts it. Audio between WhatsApp and us is always encrypted either way; this setting only decides what happens on your side of the relay.
Choose SRTP if that leg crosses the public internet. Make sure your phone system is configured to expect it — a mismatch here is a classic "call connects, nobody can hear anything" fault.
DTMF
How keypad presses reach your IVR:
- RFC 2833 — tones travel as dedicated events alongside the audio. The default, and what nearly every modern platform expects.
- SIP INFO — tones travel as SIP messages. Use only if your platform asks for it.
- In-band — tones travel as actual audio inside the stream. Fragile once audio is converted between codecs; avoid unless nothing else works.
Codecs
Codecs are offered in the order you list them, most-preferred first. The defaults — OPUS, PCMU, PCMA — suit almost everyone.
Keep PCMU and PCMA enabled
WhatsApp calls arrive as OPUS. If your phone system can also speak G.711 (PCMU/PCMA), audio can be passed straight through instead of converted on every call, which means less delay and cleaner sound. Leaving both enabled costs nothing.
G722 is wideband and sounds better than G.711 where both ends support it. G729 is low-bandwidth and lossy — pick it only if bandwidth is genuinely tight and your platform is licensed for it.
Capacity limits
Both limits default to 0, which means unlimited.
- Max calls caps how many calls this trunk carries at the same time. This is the hard cap — it is counted exactly, and a call beyond it is refused. Set it to match what your phone system's licensing or trunk capacity can actually handle.
- Calls / second caps how fast new calls may start. This one is approximate; treat it as a burst guard rather than a precise quota.
Caller ID
Leave Caller ID empty and we present the WhatsApp number the call belongs to. Set it to override the number shown as the caller on outbound calls.
Set this if you have several numbers
On an outbound trunk that is not bound to a specific WhatsApp number, we work out which of your numbers to place the call from. With exactly one number on the account that is unambiguous. With several, the call is refused unless the trunk has either a WhatsApp number binding or a Caller ID.
Managing a trunk
Click any trunk row to open its side panel.
The panel gives you:
- The dial-out endpoint (outbound) or the ordered target list (inbound), each with a copy button
- A spec grid — Transport, Media, DTMF, Max calls, Calls / sec, Codecs
- The Active switch, which takes the trunk in and out of service immediately
- Credentials and IP allowlist — covered in Authentication
- Edit trunk, which reopens the full dialog
Pausing a trunk
Flip Active off to stop the trunk carrying calls without losing its configuration, credentials or allowlist. Useful during PBX maintenance. Flip it back on when you are ready.
Deleting a trunk
Use the delete icon on the trunk row. The trunk, its credentials and its IP allowlist are all removed, and calls routed through it stop immediately. There is no undo.
What's next
Authentication
Secure the trunk with a digest credential, an IP allowlist, or both.
Connect your phone system
Map these settings onto Asterisk, FreePBX, 3CX or your own platform.
Best practices
How is this guide?
Calls Overview
Voice calls on WhatsApp, carried over your own SIP trunks — how inbound and outbound work, what you need before you start, and where everything lives.
Authentication
Secure a trunk with a digest credential, an IP allowlist, or both — how each mode works, how to manage credentials, and which credential belongs to which leg of a call.


