Emergency server help: get in touch

Calls Drop After 30 Seconds or 15 Minutes? A Tested Decision Tree for FreePBX and Asterisk

When calls drop after 30 seconds, 32 seconds or about 15 minutes, the exact time points to the cause. We reproduced each drop on a FreePBX 17 server and show the SIP trace, the Asterisk log line and the fix for each one.

Published 11 min read

When calls drop after 30 seconds, or after exactly 15 minutes, the time is the most useful clue you have. Drops at a fixed time are almost never “bad lines”: a timer in the PBX ran out because something it waited for never arrived. We reproduced each of these drops on a FreePBX 17 server and recorded the SIP messages, so you can match your own trace against ours.

Short answer: On FreePBX with default settings, a drop at exactly 30 seconds is usually the RTP timeout (no audio reached the PBX); the Asterisk log line confirms it. A drop at about 32 seconds means the phone’s ACK never arrived. A drop just after 15 minutes means a session-timer refresh got lost, usually because a NAT or firewall closed the UDP mapping. Check who sent the BYE and its Reason header, then fix the network path, not the timer.

Decision tree: what the drop time tells you

Call drops afterBYE and Reason (from our trace)What Asterisk logsCauseFix
Exactly 30 sFrom the PBX, Reason: Q.850;cause=44Disconnecting channel … for lack of audio RTP activity in 30 secondsNo RTP reaches the PBX (FreePBX default rtp_timeout=30)Fix one-way audio: NAT settings, RTP ports, SIP ALG
About 32 sFrom the PBX, Reason: SIP ;cause=408 ;text="Request Timeout", after 200 OK sent 11 timesNothing specific at the default log levelThe ACK for the 200 OK never arrivesContact and NAT handling, disable SIP ALG
Half the session timer + 32 s (900 + 32 = 932 s with the default 1800)From the PBX, 408 Request Timeout, after its refresh re-INVITE went unansweredNothing specificThe refresh cannot reach the phone or provider, usually a closed NAT mappingKeepalives, longer UDP timeout, TCP/TLS, disable SIP ALG
Session timer − 32 s (1768 s, about 29.5 min, with 1800)From the PBX, Reason: SIP ;cause=408 ;text="No session refresh received."Nothing specificThe other side was the refresher and never refreshedFix the peer, or change who refreshes
Another fixed timeCheck who hangs up–A setting that matches the time: a changed rtp_timeout, a Dial() time limit, the provider’s maximum call lengthFind the matching setting

Two numbers are worth remembering. 32 seconds is the SIP transaction timeout (64 × T1, with T1 = 0.5 s) from RFC 3261, so a drop near 32 seconds means a SIP message went unanswered. 30 seconds is FreePBX’s default RTP timeout, so with the defaults a drop at exactly 30 seconds points at missing audio rather than missing signalling. Confirm it with the log line “lack of audio RTP activity” and the BYE’s Reason header: another limit set to 30 seconds, such as a provider’s or a Dial() time limit, would end the call at the same moment. The timer values in this guide are the defaults of FreePBX 17 and Asterisk 22; other versions or changed settings move them.

How we reproduced each drop

On our FreePBX 17 lab server (Debian 12, Asterisk 22.11, 4 vCPU) a SIPp script played the part of extension 1002 and called the echo test (*43), so every call had a known, answered destination. For each case we broke one thing on purpose and kept the phone’s SIP log; a matching “good” call shows the same setup working. To keep the session-timer tests short, the phone asked for a 90-second session timer instead of the default 1800 seconds; the timers scale the same way.

TestWhat we brokeResult
No audio from the phonePhone sends no RTP after the call is answeredPBX hung up at 30.0 s
Same call with audioNothingCall stayed up until the phone hung up at 45 s
Lost ACKPhone sends audio but never the ACKPBX resent the 200 OK 11 times, hung up at 32.0 s
Refresh lost (PBX refreshes)Phone ignores the PBX’s refresh re-INVITERefresh at 45 s (half of 90), hang-up at 77.0 s
No refresh (phone refreshes)Phone is the refresher and never refreshesPBX hung up at 60.0 s (90 − 30)
Phone refreshes every 40 sNothingCall stayed up until the phone hung up at 125 s

One more result from the first lost-ACK attempt: that phone sent neither audio nor the ACK, and the RTP timeout ended the call at 30 seconds, before the ACK timer at 32. When both are broken you see the 30-second drop, so check audio first.

Calls drop after 30 seconds: no audio is reaching the PBX

FreePBX sets rtp_timeout=30 on every PJSIP extension (and rtp_timeout_hold=300 for calls on hold). If Asterisk receives no RTP for 30 seconds it hangs up, sends a BYE with Reason: Q.850;cause=44 and logs the reason in plain words:

SIP trace: calls drop after 30 seconds when the phone sends no RTP; FreePBX sends BYE with Reason Q.850 cause 44
No audio from the phone: the PBX ended the answered call at exactly 30.0 s (FreePBX rtp_timeout=30).
Asterisk log line for a call that drops after 30 seconds: Disconnecting channel for lack of audio RTP activity in 30 seconds, with rtp_timeout 30
The matching Asterisk log line and the FreePBX endpoint defaults (rtp_timeout 30, session timer 1800 s).

The timer is not the problem: it ends calls that already had one-way or no audio. Look at why the audio does not arrive:

  • The PBX is behind NAT and advertises a private address in its SDP: set external_media_address, external_signaling_address and local_net on the transport (our PJSIP NAT generator writes them), as in the Asterisk NAT documentation.
  • The RTP port range (10000 to 20000 on FreePBX) is blocked by a firewall in front of the PBX.
  • A router with SIP ALG rewrites the SDP. See how to disable SIP ALG.
  • The phone is remote and direct_media sends audio straight between two NATed phones. Set direct_media=no for remote extensions.

Setting rtp_timeout=0 stops the drops but leaves the caller talking to silence. Fix the audio path instead; our one-way audio guide goes through it step by step.

Calls drop after 32 seconds: the ACK never arrives

After a call is answered, the caller must confirm the 200 OK with an ACK. Until the ACK arrives Asterisk keeps resending the 200 OK, at 0.5, 1.5, 3.5, 7.5 seconds and then every 4 seconds. After 32 seconds it gives up and hangs up with a 408 Request Timeout:

SIP trace of a call that drops after 32 seconds: the PBX resends the 200 OK 11 times without an ACK, then sends BYE with 408 Request Timeout
Lost ACK: the 200 OK is resent at 0.5, 1.5, 3.5, 7.5 s and then every 4 s; the PBX hangs up at 32.0 s.

Audio usually works during those 32 seconds, which is why this drop is so confusing. The 200 OK reaches the phone, but the phone’s ACK goes somewhere else, or never makes it back. Common reasons:

  • The 200 OK carries a private Contact address, so the phone sends the ACK to an address it cannot reach. Turn on rewrite_contact, force_rport and rtp_symmetric for NATed phones and set the transport’s external addresses.
  • A SIP ALG on a router rewrites headers and breaks the dialog.
  • Large SIP messages over UDP get fragmented and the fragments are dropped. Try TCP for that phone.
  • Asymmetric routing: the ACK leaves through a different gateway or firewall that has no state for the call.

In a trace, look for the same 200 OK repeated with the same CSeq. Our sngrep guide shows how to see it live, and the SIP trace analyzer flags retransmissions in a pasted trace.

Call drops after 15 minutes: the session refresh is lost

Session timers (RFC 4028) let both ends confirm that a call is still alive. FreePBX enables them with timers=yes and timers_sess_expires=1800. When the PBX is the refresher it sends a re-INVITE halfway through, after 900 seconds. If that refresh never gets an answer, the transaction times out 32 seconds later and the call ends, at about 932 seconds, just over 15 minutes. In our shortened test the refresh went out at 45 seconds and the call ended at 77:

SIP trace: the PBX refresh re-INVITE gets no answer and the call drops 32 seconds later, the 15-minute drop scaled to a 90-second session timer
Session timer 90 s, PBX refreshes at 45 s, nobody answers, BYE at 77 s. With the default 1800 s this is the drop at about 932 s.

Why would a refresh go unanswered when the call is working? Because nothing else used the signalling path for 15 minutes. A NAT router or firewall closes an idle UDP mapping long before that, so the PBX’s re-INVITE never reaches the phone or the provider. Fixes, from the most to the least effective:

  • Keep the mapping open: qualify_frequency on the endpoint’s AOR (FreePBX uses 60 seconds), and NAT keepalives on the phone.
  • Raise the UDP timeout on the firewall in front of the phones or PBX, or use TCP or TLS for those phones.
  • Disable SIP ALG on every router in the path.
  • As a last resort, set timers=no on the affected endpoint. The drops stop, but calls whose other end vanished are no longer cleaned up by the timer.

Calls drop at almost 30 minutes: nobody refreshed

If the other side is the refresher (the 200 OK says refresher=uac for a call the phone started) but never sends a refresh, Asterisk waits until shortly before the session expires and hangs up with Reason: SIP ;cause=408 ;text="No session refresh received.". RFC 4028 sets that point at the expiry minus 32 seconds or a third of the interval, whichever is smaller: 1768 seconds with the default 1800, and 60 seconds in our 90-second test.

SIP trace: the phone is the refresher but never refreshes, the PBX ends the call with 408 No session refresh received
The phone was the refresher and never refreshed: BYE at 60 s (90 s minus a third), “No session refresh received.”

The same call with a phone that refreshes every 40 seconds stayed up until the phone hung up:

SIP trace of a session timer working: the phone refreshes with a re-INVITE every 40 seconds and the call stays up until the phone hangs up
The same call with refreshes every 40 s stayed up until the phone hung up at 125 s.

If a phone or provider advertises session timers but never refreshes, update its firmware or turn session timers off in the phone. On the Asterisk side, timers=no on that endpoint stops the drops.

Capture the evidence on your own PBX

Make a test call that drops and collect three things: the time from answer to hang-up, the BYE with its Reason header, and the Asterisk log around the hang-up.

asterisk -rx "pjsip set logger on"          # SIP messages into the Asterisk log (turn off afterwards)
grep -E "lack of audio RTP|Reason:" /var/log/asterisk/full | tail
asterisk -rx "pjsip show endpoint 1001" | grep -E " rtp_timeout|timers"
tcpdump -ni any -w /tmp/drop.pcap udp port 5060 or udp portrange 10000-20000
sngrep                                        # live ladder diagram: look for repeated 200 OK or re-INVITE

Then read the table at the top of this page: exactly 30 seconds plus the RTP log line means missing audio; a repeated 200 OK and a 408 means a lost ACK; a re-INVITE without an answer around 15 minutes means a lost refresh. For other drops, compare the time with every timer you have set, and check whether the BYE came from the PBX, the phone or the provider.

What we tested and how

All traces on this page come from our FreePBX 17 lab server (Debian 12, Asterisk 22.11, 4 vCPU) on 16 and 17 October 2026 (FreePBX 17.0.33, Asterisk 22.11, SIPp 3.6.1). The “phone” was a SIPp scenario registered as a normal FreePBX PJSIP extension with the FreePBX defaults; the session-timer tests used a 90-second timer requested by the phone, which Asterisk accepted. We did not test real routers or SIP ALGs: the network causes listed for each drop are the usual reasons for the message that went missing, not something this lab reproduced. The screenshots are the real terminal output; only IP addresses are masked.

Related: common VoIP problems, one-way audio, PJSIP NAT on Asterisk and FreePBX, disable SIP ALG, SIP ports for the firewall, SIP response codes, PJSIP health check script.

At a glance

Calls Drop After 30 Seconds or 15 Minutes? A Tested Decision Tree for FreePBX and Asterisk summary card: On FreePBX with default settings, a drop at exactly 30 seconds is usually the RTP timeout (no audio reached the PBX); th…
In short: On FreePBX with default settings, a drop at exactly 30 seconds is usually the RTP timeout (no audio reached the PBX); the Asterisk log line confirms it. A drop at about 32 seconds means the…

Frequently asked questions

Why do my VoIP calls drop after exactly 30 seconds?

On FreePBX the most common reason is the RTP timeout: rtp_timeout is 30 seconds by default, and Asterisk hangs up when no audio arrives from the phone for that long. The Asterisk log says “for lack of audio RTP activity in 30 seconds”. Fix the audio path (NAT, RTP ports, SIP ALG) rather than the timer.

Why do calls drop after 32 seconds?

The ACK for the 200 OK never reached the PBX. Asterisk resends the 200 OK for 32 seconds, then hangs up with a 408 Request Timeout. Usually a NAT, Contact or SIP ALG problem.

Why do calls drop after 15 minutes?

With session timers at 1800 seconds the PBX refreshes the call after 900 seconds. If the refresh cannot reach the other side, usually because a firewall closed the idle UDP mapping, the call ends about 32 seconds later. Keepalives, a longer UDP timeout or TCP fix it.

Should I just set rtp_timeout to 0?

Only if you understand the trade-off. It stops the 30-second hang-ups, but the caller still has no audio, and calls whose other end disappeared stay open until something else ends them.

How do I see the BYE Reason header in FreePBX?

Run asterisk -rx "pjsip set logger on", make a test call and look at the BYE in /var/log/asterisk/full, or capture with sngrep or tcpdump. The Reason header shows a Q.850 cause or a SIP code with text.

Reading a lot of our guides? Go ad-free with srvScripts Pro for $6 a month. It also pays for new guides. Cancel any time.

Share this guide

Free website test

Is your website set up right?

Check SSL, security headers, redirects, robots.txt, sitemap, llms.txt and security.txt in one test. It takes about 30 seconds.