here is the sip.conf :-
[general]
acl=172.31.35.0/20 ; Fix subnet
contactpermit=112.196.48.146/32 ; Zoiper’s IP
bindport=6090
bindaddr=0.0.0.0
externip=52.66.68.62
localnet=172.31.35.9/20
nat=force_rport,comedia
; Remove or modify this line if not needed
register => 1690100:K4rfk793U8@217.149.244.35:6090
[external-pbx]
type=peer
host=217.149.244.35
port=6090
username=1690100
secret=K4rfk793U8
fromuser=1690100
context=from-trunk
insecure=invite,port
dtmfmode=rfc2833
directmedia=no
disallow=all
allow=ulaw
qualify=yes
qualifyfreq=60
[1690100]
type=friend
host=dynamic
; REMOVED: username=1690101 ; This was causing authentication mismatch
secret=K4rfk793U8
context=from-internal
nat=force_rport,comedia
disallow=all
allow=ulaw,alaw
canreinvite=no
qualifyfreq=60
qualify=yes
and here is the extensions.conf file
[general]
static=yes
writeprotect=no
clearglobalvars=no
[globals]
CONSOLE=Console/dsp
IAXINFO=guest
TRUNK=SIP/external-pbx
[default]
exten => s,1,Hangup()
[from-trunk]
exten => s,1,Goto(+48222300490,1)
exten => +48222300490,1,NoOp(Incoming call for +48222300490)
same => n,Answer()
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}) ; Pass UID to agent’s channel
same => n,Queue(agents-queue)
[agent-pickup]
exten => s,1,NoOp(Agent pickup handler started)
same => n,Set(MY_UID=${CALLER_UID})
same => n,Set(CALLER_NUM=${GLOBAL(CALLER_${MY_UID})})
same => n,Set(AGENT_ID=${CHANNEL(name)})
same => n,Verbose(1,RAW VALUES - Caller: ${CALLER_NUM} Agent:${AGENT_ID} UniqueID:${MY_UID})
; Optional logging
same => n,System(echo “DEBUG: Caller=${CALLER_NUM} Agent=${AGENT_ID}” >> /tmp/queue_debug.log)
; Optional API call
same => n,ExecIf($[“${CALLER_NUM}” != “”]?System(curl --max-time 5 -X POST “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]
; Local numbers (7-9 digits, adds 48 prefix)
exten => _[2-9]XXXXXX,1,NoOp(Processing local number: ${EXTEN})
same => n,Set(OUTNUM=48${EXTEN}) ; Add country code
same => n,Dial(SIP/${OUTNUM}@external-pbx,60,Tt)
same => n,Hangup()
; Numbers already with 48 prefix
exten => _48XXXXXXXXX,1,NoOp(Processing national number: ${EXTEN})
same => n,Dial(SIP/${EXTEN}@external-pbx,60,Tt)
same => n,Hangup()
; International format (00 prefix)
exten => _00X.,1,NoOp(Processing international number: ${EXTEN})
same => n,Dial(SIP/${EXTEN}@external-pbx,60,Tt)
same => n,Hangup()
; E.164 format (+ prefix)
exten => _+X.,1,NoOp(Processing E.164 number: ${EXTEN})
same => n,Set(OUTNUM=${EXTEN:1}) ; Remove +
same => n,Dial(SIP/${OUTNUM}@external-pbx,60,Tt)
same => n,Hangup()
; Internal extension for testing
exten => 100,1,NoOp(Test extension)
same => n,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
; Echo test
exten => 600,1,NoOp(Echo test)
same => n,Answer()
same => n,Echo()
same => n,Hangup()