Concurrent inbound calls not ringing free agents even though SIP trunk supports 30 simultaneous calls

Hi everyone,

I’m setting up an Asterisk-based call center where we have multiple agents registered as SIP peers, and the SIP trunk provider confirms that our number supports up to 30 concurrent calls.

Current behavior:

  • When a customer calls, all agents start ringing.

  • As soon as one agent picks up, the ringing stops for others — this is correct and expected.

  • However, when another customer calls while the first call is ongoing, the free agents do not ring until the first call is disconnected.

  • Once the ongoing call ends, the next incoming call rings all available agents again.

Expected behavior:

  • Even if one agent is already on a call, the other free agents should still receive ringing for the second, third, … up to 30 concurrent calls, since the trunk supports it.

Setup details:

  • Asterisk version: Asterisk 16.30.0 built by root @ - on a x86_64 running Linux on 2025-02-13 09:44:30 UTC

  • SIP trunk provider: IPTelekom

  • Number of agents: 4

  • SIP trunk limit: 30 concurrent calls supported

  • Using Zoiper to test SIP accounts.

What I need help with:

I believe the issue might be with my queue or dialplan configuration. Currently, I’m using a simple dialplan where all agents are part of the same queue/group. But Asterisk seems to treat the number as if it can handle only one active call at a time.

  • Do I need to change my queue strategy?

  • Is there a setting in queues.conf, sip.conf, or extensions.conf that controls simultaneous ringing?

  • How can I make Asterisk ring free agents for new calls while other agents are already handling ongoing calls?

Any help or configuration suggestions would be greatly appreciated!

Thanks in advance.

On Wednesday 20 August 2025 at 10:20:49, Akshit3 via Asterisk Community wrote:

I believe the issue might be with my queue or dialplan configuration.

I suspect you are correct.

  • Do I need to change my queue strategy?

Very probably. It would help to tell us what strategy you are currently
using.

  • Is there a setting in queues.conf, sip.conf, or extensions.conf
    that controls simultaneous ringing?

You should not be using sip.conf; it is no longer supported in current
versions of Asterisk. PJSIP is the current SIP channel driver in Asterisk.

Any help or configuration suggestions would be greatly appreciated!

Well, show us how things are set up at present, otherwise we have no hard
information to work with to identify what the problem is.

Show us the part of your dialplan which handles incoming calls and sends them
to the queue.

Show us the definition of that queue.

Show us the verbose log file output for a call which comes in when there is
alreayd a call being handled by an agent.

Basically, show us enough information that we could reproduce your setup and
understand how it works.

Antony.


Archaeologists have found a previously-unknown dinosaur which seems to have
had a very large vocabulary. They’ve named it The Saurus.

here is the extensions.conf incoming call handling
exten => +48222300490,1,NoOp(Incoming call for DID: ${EXTEN})
same => n,Set(MY_UID=${UNIQUEID})
same => n,Set(GLOBAL(CALLER_${MY_UID})=${CALLERID(num)})
same => n,Verbose(1,DEBUG: Stored CALLER_${MY_UID} = ${CALLERID(num)})
same => n,Set(__CALLER_UID=${MY_UID})
; queue with subroutine on pickup
same => n,Queue(agents-queue,60,agent-pickup)
same => n,Hangup()

and here is the queues.conf

[agents-queue]
musicclass = default
strategy = ringall
timeout = 15
retry = 5
maxlen = 0
ringinuse = yes
member => SIP/1690100
member => SIP/1690101
member => SIP/1690102
member => SIP/1690103

As previously requested you also need to show a log, because your information inherently has assumptions that need to be verified. For example: You state that the trunk supports 30 concurrent calls, but is that verified from looking at the log to see if other calls do in fact reach Asterisk?

<— SIP read from UDP:27.60.130.153:22318 —>
SIP/2.0 200 OK
Via: SIP/2.0/UDP 52.66.68.62:6090;branch=z9hG4bK1494f9a0;rport=6090
Contact: sip:100.90.203.133:44704
To: sip:1690101@27.60.130.153:22318;transport=UDP;rinstance=e6db770aa1bd1d82;tag=bb039245
From: “asterisk” sip:asterisk@52.66.68.62:6090;tag=as743a3bd3
Call-ID: 2b80bf3d0139046373d904c577dcd0de@52.66.68.62:6090
CSeq: 102 OPTIONS
Accept: application/sdp
Accept-Language: en
Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
User-Agent: Zoiper v2.10.20.10
Allow-Events: presence, kpml, talk, as-feature-event
Content-Length: 0

<------------->
— (14 headers 0 lines) —
Really destroying SIP dialog ‘2b80bf3d0139046373d904c577dcd0de@52.66.68.62:6090’ Method: OPTIONS

That’s a single SIP response from Zoiper which shows nothing, aside from it responding to an OPTIONS request.

— (14 headers 0 lines) —
Really destroying SIP dialog ‘4b785fc72b31121938a7f5933c20f8fe@52.66.68.62:6090’ Method: OPTIONS

<— SIP read from UDP:27.60.130.153:22318 —>

<------------->

<— SIP read from UDP:27.60.130.153:22318 —>
REGISTER sip:52.66.68.62:6090;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 100.90.203.133:44704;branch=z9hG4bK-524287-1—ef3905b5951cbcc6;rport
Max-Forwards: 70
Contact: sip:1690101@27.60.130.153:22318;transport=UDP;rinstance=e6db770aa1bd1d82
To: sip:1690101@52.66.68.62:6090;transport=UDP
From: sip:1690101@52.66.68.62:6090;transport=UDP;tag=34e42229
Call-ID: JoUo6TQMnIoBSy4dG8l8Ow..
CSeq: 175 REGISTER
Expires: 60
Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
User-Agent: Zoiper v2.10.20.10
Authorization: Digest username=“1690101”,realm=“asterisk”,nonce=“7c561105”,uri=“sip:52.66.68.62:6090;transport=UDP”,response=“57bb729529c13166c943c85b6821dd2a”,algorithm=MD5
Allow-Events: presence, kpml, talk, as-feature-event
Content-Length: 0

<------------->
— (15 headers 0 lines) —
Sending to 27.60.130.153:22318 (NAT)
Sending to 27.60.130.153:22318 (NAT)

<— Transmitting (NAT) to 27.60.130.153:22318 —>
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 100.90.203.133:44704;branch=z9hG4bK-524287-1—ef3905b5951cbcc6;received=27.60.130.153;rport=22318
From: sip:1690101@52.66.68.62:6090;transport=UDP;tag=34e42229
To: sip:1690101@52.66.68.62:6090;transport=UDP;tag=as02ec3c9e
Call-ID: JoUo6TQMnIoBSy4dG8l8Ow..
CSeq: 175 REGISTER
Server: Asterisk PBX 16.30.0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
WWW-Authenticate: Digest algorithm=MD5, realm=“asterisk”, nonce=“0ceea58a”
Content-Length: 0

<------------>
Scheduling destruction of SIP dialog ‘JoUo6TQMnIoBSy4dG8l8Ow..’ in 32000 ms (Method: REGISTER)

<— SIP read from UDP:27.60.130.153:22318 —>
REGISTER sip:52.66.68.62:6090;transport=UDP SIP/2.0
Via: SIP/2.0/UDP 100.90.203.133:44704;branch=z9hG4bK-524287-1—9a1f97ca0591767e;rport
Max-Forwards: 70
Contact: sip:1690101@27.60.130.153:22318;transport=UDP;rinstance=e6db770aa1bd1d82
To: sip:1690101@52.66.68.62:6090;transport=UDP
From: sip:1690101@52.66.68.62:6090;transport=UDP;tag=34e42229
Call-ID: JoUo6TQMnIoBSy4dG8l8Ow..
CSeq: 176 REGISTER
Expires: 60
Allow: INVITE, ACK, CANCEL, BYE, NOTIFY, REFER, MESSAGE, OPTIONS, INFO, SUBSCRIBE
Supported: replaces, norefersub, extended-refer, timer, sec-agree, outbound, path, X-cisco-serviceuri
User-Agent: Zoiper v2.10.20.10
Authorization: Digest username=“1690101”,realm=“asterisk”,nonce=“0ceea58a”,uri=“sip:52.66.68.62:6090;transport=UDP”,response=“3da687ec60fd651bd8eef4c90f5acce0”,algorithm=MD5
Allow-Events: presence, kpml, talk, as-feature-event
Content-Length: 0

<------------->
— (15 headers 0 lines) —
Sending to 27.60.130.153:22318 (NAT)
Reliably Transmitting (NAT) to 27.60.130.153:22318:
OPTIONS sip:1690101@27.60.130.153:22318;transport=UDP;rinstance=e6db770aa1bd1d82 SIP/2.0
Via: SIP/2.0/UDP 52.66.68.62:6090;branch=z9hG4bK4a0dfc13;rport
Max-Forwards: 70
From: “asterisk” sip:asterisk@52.66.68.62:6090;tag=as74cc5846
To: sip:1690101@27.60.130.153:22318;transport=UDP;rinstance=e6db770aa1bd1d82
Contact: sip:asterisk@52.66.68.62:6090
Call-ID: 20409d7e06b0bc782a6d191657efaaca@52.66.68.62:6090
CSeq: 102 OPTIONS
User-Agent: Asterisk PBX 16.30.0
Date: Wed, 20 Aug 2025 10:47:22 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Content-Length: 0

That shows registration from Zoiper.

You don’t even need to look at the SIP part at this point. Start at the beginning. Verify the calls are actually getting to Asterisk. The Asterisk console output should show them appearing and executing dialplan. If you really want you could look at the SIP traffic and see if the INVITE requests are coming from your provider.

[root@-:/etc/asterisk]# cat queues.conf
[agents-queue]
musicclass = default
strategy = ringall
timeout = 15
retry = 5
maxlen = 0
member => SIP/1690100
member => SIP/1690101
member => SIP/1690102
member => SIP/1690103

[root@-:/etc/asterisk]# cat sip.conf
[general]
bindport=6090
bindaddr=0.0.0.0
externip=52.66.68.62
localnet=172.31.35.0/20
nat=force_rport,comedia
srvlookup=no
udpbindaddr=0.0.0.0:6090

; ===== CRITICAL FIXES =====
qualify=yes
qualifyfreq=15 ; Reduced from 30 to 15 seconds
callcounter=yes
busylevel=1
notifyhold=yes ; Added
notifyringing=yes ; Added
session-timers=accept ; Added
session-expires=1800 ; Added
session-minse=90 ; Added
defaultexpiry=120 ; Added
minexpiry=60 ; Added
maxexpiry=3600 ; Added
; =========================

; Registration
register => 1690100:XXXXXXX@217.149.244.35:6090

[external-pbx]
type=peer
host=217.149.244.35
port=6090
username=1690100
secret=XXXXXXX
fromuser=1690100
fromdomain=217.149.244.35
context=from-trunk
insecure=invite,port
directmedia=no
canreinvite=no
nat=force_rport,comedia
disallow=all
allow=ulaw
qualify=yes
qualifyfreq=20 ; Reduced from 30 to 20
transport=udp
rtp_symmetric=yes
icesupport=no

[1690100]
type=friend
host=dynamic
secret=XXXXXX
context=from-internal
nat=force_rport,comedia
disallow=all
allow=ulaw,alaw
dtmfmode=rfc2833
canreinvite=no
qualify=yes
qualifyfreq=15 ; Reduced from 20 to 15
callcounter=yes
busylevel=1
call-limit=1 ; CRITICAL: Added call limit

[1690101]
type=friend
host=dynamic
secret=XXXXXXX
context=from-internal
nat=force_rport,comedia
disallow=all
allow=ulaw,alaw
dtmfmode=rfc2833
canreinvite=no
qualify=yes
qualifyfreq=15 ; Reduced from 20 to 15
callcounter=yes
busylevel=1
call-limit=1 ; CRITICAL: Added call limit

[1690102]
type=friend
host=dynamic
secret=XXXXX
context=from-internal
nat=force_rport,comedia
disallow=all
allow=ulaw,alaw
dtmfmode=rfc2833
canreinvite=no
qualify=yes
qualifyfreq=15 ; Reduced from 20 to 15
callcounter=yes
busylevel=1
call-limit=1 ; CRITICAL: Added call limit

[1690103]
type=friend
host=dynamic
secret=XXXXXXX
context=from-internal
nat=force_rport,comedia
disallow=all
allow=ulaw,alaw
dtmfmode=rfc2833
canreinvite=no
qualify=yes
qualifyfreq=15 ; Reduced from 20 to 15
callcounter=yes
busylevel=1
call-limit=1 ; CRITICAL: Added call limit
[root@-:/etc/asterisk]# cat extensions.conf
[general]
static=yes
writeprotect=no
clearglobalvars=no

[globals]
CONSOLE=Console/dsp
TRUNK=SIP/external-pbx

[default]
exten => s,1,Hangup()

[from-trunk]
; Route specific DID numbers (e.g., +48222300490)
[from-trunk]
exten => +48222300490,1,NoOp(Incoming call for DID: ${EXTEN})
same => n,Set(MY_UID=${UNIQUEID})
same => n,Set(GLOBAL(CALLER_${MY_UID})=${CALLERID(num)})
same => n,Verbose(1,DEBUG: Stored CALLER_${MY_UID} = ${CALLERID(num)})
same => n,Set(__CALLER_UID=${MY_UID})
; queue with subroutine on pickup
same => n,Queue(agents-queue,60,agent-pickup)
same => n,Hangup()

; Fallback for other DIDs
exten => s,1,NoOp(Incoming call from trunk)
same => n,Goto(+48222300490,1) ; Route to main DID or modify as needed

; ===== AGENT PICKUP HANDLER =====
[agent-pickup]
exten => s,1,NoOp(Agent pickup handler started)
; Retrieve caller info from global variable
same => n,Set(MY_UID=${CALLER_UID})
same => n,Set(CALLER_NUM=${GLOBAL(CALLER_${MY_UID})})
same => n,Set(AGENT_ID=${CHANNEL(name)})

; Debug logging
same => n,Verbose(1,RAW VALUES - Caller: ${CALLER_NUM} Agent:${AGENT_ID} UniqueID:${MY_UID})
same => n,System(echo "$(date +'%Y-%m-%d %H:%M:%S') - Caller=${CALLER_NUM} Agent=${AGENT_ID}" >> /tmp/queue_debug.log)

; API call to external system (optional)
same => n,ExecIf($\["${CALLER_NUM}" != ""\]?System(curl --max-time 5 -X POST "[https://prod-autos.lider-ltd.pl/insert_ivr_user](https://prod-autos.lider-ltd.pl/insert_ivr_user)" -d "phone=${CALLER_NUM}&agent=${AGENT_ID}" >> /tmp/api_calls.log 2>&1))

same => n,Return()

[from-internal]

; ----- Polish Numbers -----
; Rule 1: Local 9-digit format (e.g., 788483116 → send as 788483116)
exten => _XXXXXXXXX,1,NoOp(Calling Polish local number: ${EXTEN})
same => n,NoOp(DEBUG: Sending raw 9-digit number: ${EXTEN}) ; Log the raw number
same => n,Dial(SIP/${EXTEN}@external-pbx,60,Tt) ; Send AS-IS (no prefix)
same => n,Hangup()

; Rule 2: E.164 format (+48XXXXXXXXX → strip +48, send raw 9 digits)
exten => _+48XXXXXXXXX,1,NoOp(Calling Poland E.164: ${EXTEN})
same => n,Set(OUTNUM=${EXTEN:3}) ; Remove “+48”, keep only the 9 digits
same => n,NoOp(DEBUG: Stripped +48, sending: ${OUTNUM})
same => n,Dial(SIP/${OUTNUM}@external-pbx,60,Tt)
same => n,Hangup()

; Rule 3: International format (0048XXXXXXXXX → strip 0048, send raw 9 digits)
exten => _0048XXXXXXXXX,1,NoOp(Calling Poland 0048 format: ${EXTEN})
same => n,Set(OUTNUM=${EXTEN:4}) ; Remove “0048”, keep only the 9 digits
same => n,NoOp(DEBUG: Stripped 0048, sending: ${OUTNUM})
same => n,Dial(SIP/${OUTNUM}@external-pbx,60,Tt)
same => n,Hangup()

; ----- Indian Numbers (Keep existing logic) -----
exten => _+91XXXXXXXXXX,1,NoOp(Calling India: ${EXTEN})
same => n,Dial(SIP/${EXTEN}@external-pbx,60,Tt) ; Send with +91
same => n,Hangup()

; Fallback for invalid numbers
exten => _X.,1,NoOp(Invalid number: ${EXTEN})
same => n,Playback(ss-noservice)
same => n,Hangup()
[root@-:/etc/asterisk]#

here is my configuration inside the files please let me know where I am missing?

This looks like a memory leak to me, not that that is relevant to the current problem.

still stuck on this can I check which number iptelekom provide us how many calls does it support one time.

On Thursday 21 August 2025 at 07:55:41, Akshit3 via Asterisk Community wrote:

can I check which number iptelekom provide us how many calls does it support
one time.

I recommend that you ask them. There may not be a single answer to this; it
might depend on what service you have bought from them.

Anyone here with experience of the same provider might not be on the same
contract as you have.

Antony.


Too many people spend money they haven’t earned
to buy things they don’t want,
to impress people they don’t like.

  • Will Rogers

To do this locally, make multiple, simultaneous calls, and look at the logs, that you’ve bee asked for, but haven’t provided, to see how many of the calls get offered to Asterisk.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.