WhatsApp API Platform
Calls

Test a Trunk

A pre-flight checklist, then place a real test call in each direction, read the result in call history, and work out what to fix when it fails.

There is no simulated test button — a SIP trunk is proven by a real call. This page gets you to that call with the fewest surprises, and tells you how to read the outcome.

In the app: Dashboard → Automation → Calls → Call history


Pre-flight checklist

Work down the list. Each item is a real cause of a failed first call.

CheckWhereLooking for
Number is connectedDashboard → ConnectionsThe number's card is present and healthy
Calling is onConnections → → Turn on callingA Calling badge, not Calling (pending)
Trunk is ActiveCalls → TrunksThe status dot is on and the side panel reads Active
Direction is rightCalls → TrunksInbound to receive, Outbound to place
Destination is publicTrunk → Deliver calls toA hostname or public IP, reachable from the internet
Endpoint copiedTrunk → Dial-out endpointYour phone system dials exactly this URI
Auth matchesTrunk → AuthenticationCredential created, and/or your public IP allowlisted
Firewall is openYour networkSIP port and UDP 20000–29999
Codecs overlapTrunk → CodecsAt least one codec your phone system also speaks

Calling (pending) means calls will not arrive

If the number's badge reads Calling (pending), WhatsApp has accepted the configuration but is not routing calls yet. Open the calling dialog to see WhatsApp's own explanation. Testing before this clears wastes an afternoon.


Test an inbound call

Open call history

Go to Dashboard → Automation → Calls → Call history and leave it open on a second screen. Set the state filter to All calls.

Call your business number from WhatsApp

On a phone with WhatsApp installed, open a chat with your business number and tap the call icon. Use a number that is not one of your own WhatsApp Business numbers.

Watch your phone system

Your PBX should ring within a few seconds. If nothing arrives, the problem is between us and your phone system — check the destination address, its firewall, and the trunk's transport.

Answer and listen both ways

Speak from both ends. Audio in one direction only, or neither, almost always means the media range is closed or the media encryption settings disagree.

Check the history row

Refresh call history. A row appears with direction Inbound, and its outcome moves through Ringing → Connected → Completed with a duration once you hang up.


Test an outbound call

Outbound has one extra prerequisite: permission.

Get permission from the test contact

The customer you are calling must have granted your business permission to call them. The quickest route is to have them call you first — a customer-initiated call grants permission automatically.

Otherwise, find the contact in Call history and click Ask in the Call permission column. They receive a message in WhatsApp asking whether you may call; once they accept, the column reads Can call back.

Dial from your phone system

Dial the customer as +<country code><number> through the outbound trunk. Their WhatsApp should ring.

Answer and check the history row

A row appears with direction Outbound, ending as Completed with a duration.

Permission requests are rate-limited

WhatsApp allows one permission request per contact per 24 hours, and two per 7 days. Do not burn them testing — use a contact who has already granted permission, or have them call you first. See Call permissions.


Reading the result

Every call lands in Call history, whether it connected or not.

ColumnWhat to look at
ContactWho called, or who you called
DirectionInbound (they called) or Outbound (you called)
OutcomeThe state badge, with the reason underneath when there is one
Durationm:ss, blank if the call never connected
WhenRelative time; hover for the exact timestamp
Call permissionWhether you may call this contact back

Completed is the only success state. Ringing and Connected are states a live call passes through — a row still showing Connected minutes later means the call did not end cleanly. Everything else means the call did not happen, and the reason text under the badge is your first clue.

Full meanings for all eight states are in Call history.


When the test fails

Work outwards from where the call stopped.

What you sawWhere it brokeWhat to check
No history row at allBefore usCalling is not on for that number, or the number is still pending at WhatsApp
Row appears, PBX never ringsUs → your phone systemDestination address, its firewall, trunk transport, trunk is Active
PBX rings, call drops on answerMediaUDP 20000–29999 closed, or an RTP/SRTP mismatch
Connects, no audio one wayMedia pathFirewall allows outbound but not return RTP, or NAT on your side
Outbound refused immediatelyPermission or capacityContact has not granted permission, it expired, or the trunk hit Max calls
Outbound refused, several numbers on accountCaller IDBind the trunk to a WhatsApp number, or set a Caller ID
Everything refused, credential looks rightAuthenticationAuth mode is IP + credential and your public IP is not allowlisted

The full table with every failure reason is in Call history.


Before you go live

Test both directions

Even if you only plan to receive calls today, an outbound trunk you have never tested will not work the day you need it.

Test failover

Disable your primary destination in the trunk, place an inbound call, and confirm it lands on the second target. Re-enable it afterwards.

Test the capacity cap

Place enough simultaneous calls to hit Max calls and confirm the extra ones are refused cleanly rather than degrading everything. Skip this only if the cap is unlimited.

Check quality on a real network

Test from mobile data, not only office wifi. Codec conversion and jitter show up under real conditions.


Getting help

If a call still fails after the checks above, send support:

  • The trunk name and its direction
  • The contact's number and the approximate time of the call
  • The outcome and the reason text from the history row
  • What your phone system logged at the same moment

That is enough to correlate both sides of the call.


What's next

How is this guide?

On this page