Call History
Every call relayed between WhatsApp and your phone system — the columns, all eight call states, filtering, and a troubleshooting table for calls that did not connect.
Every call, connected or not, is recorded. The Call history tab is where you check whether a customer got through, how long the call ran, and why one failed.
In the app: Dashboard → Automation → Calls → Call history
The columns
| Column | What it shows |
|---|---|
| Contact | The customer's name, or their number when we have no name. Named contacts show the number underneath |
| Direction | Inbound — the customer called you. Outbound — you called them |
| Outcome | The call's final state, with the end reason underneath when there is one |
| Duration | How long the call was connected, as m:ss. Blank when it never connected |
| When | Relative time, e.g. 12 minutes ago. Hover for the exact date and time |
| Call permission | Whether you may call this contact — with an Ask button when you may not |
Use the state dropdown above the table to filter by outcome: All calls, Completed, Connected, Ringing, Missed, Rejected, Failed or Canceled. Change the page size at the bottom to page through longer histories.
No export yet
Call history cannot be exported to CSV. If you need call data in a report, note it from this page for now.
Call states
Eight states, one of which means success.
| State | Meaning |
|---|---|
| Completed | The call connected and ended normally. The only success state |
| Connected | The call is live right now. A row still showing this long afterwards means the call did not end cleanly |
| Ringing | The call is being offered and has not been answered yet |
| Initiated | The call has just started and has not reached ringing |
| Missed | It rang, nobody answered |
| Rejected | The other side actively declined |
| Failed | The call could not be set up — routing, authentication, capacity or network |
| Canceled | The caller hung up before it was answered |
Initiated, Ringing and Connected are transient — a live call passes through all three. Everything except Completed is a flavour of not-connected.
End reasons
When the row has a reason under its badge, that text is the specific cause — a SIP reason from your phone system, or ours when we refused the call. It is the most useful single field on the page when something is wrong.
Troubleshooting
Match the symptom, not the state alone — the same Failed badge covers several very different problems.
The call never reached us
| Symptom | Cause | Fix |
|---|---|---|
| No row at all for an inbound call | Calling is not enabled for that number | Connections → ⋮ → Turn on calling |
| No row, and the number shows Calling (pending) | WhatsApp accepted the setup but is not routing calls | Open the calling dialog and read WhatsApp's message — usually a review or verification still in progress |
| Calls arriving somewhere else entirely | Another tool still owns calling for that number | Only one platform can take calls for a number at a time |
We could not reach your phone system
| Symptom | Cause | Fix |
|---|---|---|
| Failed, and your PBX never rang | Destination unreachable | Check the destination URI is a public address, and that your firewall allows SIP from us |
| Failed after a delay, several destinations configured | Every target refused or timed out | Test each destination individually; check the disabled switches |
| Failed on some calls only | Trunk at Max calls or Calls / second | Raise the cap, or add capacity on your side |
| Everything fails right after a change | Trunk was switched to Disabled | Re-enable it in the trunk's side panel |
Authentication
| Symptom | Cause | Fix |
|---|---|---|
| Every outbound call refused, credential looks correct | Trunk is IP + credential and your public IP is not allowlisted | Add the public egress address of your phone system |
| Refused after working for months | Credential expired, or was switched off | Check the credential's enable switch and expiry |
| Refused after a network change | Your public IP changed | Update the IP allowlist |
Permission and caps
| Symptom | Cause | Fix |
|---|---|---|
| Outbound refused instantly, permission reads Not granted | The customer has not allowed calls | Click Ask, or let them call you |
| Outbound refused, permission reads Expired | The 7-day grant lapsed | Ask again |
| Outbound refused after many calls to one contact | 100 connected calls in 24 hours | Wait for the window to roll over |
| Permission disappeared on its own | Four consecutive unanswered calls revoked it | Stop calling; reach them by message |
See Call permissions for the full model.
Caller ID
| Symptom | Cause | Fix |
|---|---|---|
| Outbound refused on an account with several WhatsApp numbers | We cannot tell which number to call from | Bind the trunk to a WhatsApp number, or set a Caller ID on it |
Audio
Audio faults do not show up as a failed state — the call completes with a normal duration and the humans on it heard nothing.
| Symptom | Cause | Fix |
|---|---|---|
| Connects, then silence both ways | UDP 20000–29999 closed | Open the media range in both directions |
| Audio one way only | Return RTP blocked, or NAT on your side | Check the firewall's return path and your NAT settings |
| Connects and drops after a few seconds | RTP/SRTP mismatch | Match the trunk's Media setting to your phone system |
| Choppy or robotic audio | Codec conversion or network jitter | Enable PCMU and PCMA on the trunk so audio can pass through unconverted |
| Keypad presses ignored by your IVR | DTMF mismatch | Match the trunk's DTMF setting; RFC 2833 suits most platforms |
Calls cut off at 60 minutes
Not a fault. Every relayed call ends automatically after one hour.
What is not here
- Recordings. Calls are not recorded. If you need recording, do it on your phone system.
- Per-agent reporting. History is account-wide; it does not attribute calls to individual agents.
- Billing. Call minutes are not charged and do not appear on your billing statement.
- Export. No CSV download from this table.
What's next
How is this guide?


