FREEPBX complicated dial plan

these are the commands that are executed on a simple call from 37600 to 35600:

    -- Executing [37500@from-internal:1] GotoIf("PJSIP/37600-00000000", "1?ext-local,37500,1:followme-check,37500,1") in new stack
    -- Goto (ext-local,37500,1)
    -- Executing [37500@ext-local:1] Set("PJSIP/37600-00000000", "__RINGTIMER=15") in new stack
    -- Executing [37500@ext-local:2] ExecIf("PJSIP/37600-00000000", "0?Set(__CWIGNORE=)") in new stack
    -- Executing [37500@ext-local:3] Macro("PJSIP/37600-00000000", "exten-vm,novm,37500,0,0,0") in new stack
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: app_macro.c:274 _macro_exec: Macro() is deprecated and will be removed from a future version of Asterisk.
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: app_macro.c:275 _macro_exec: Dialplan should be updated to use Gosub instead.
    -- Executing [s@macro-exten-vm:1] Macro("PJSIP/37600-00000000", "user-callerid,") in new stack
    -- Executing [s@macro-user-callerid:1] Set("PJSIP/37600-00000000", "TOUCH_MONITOR=1610713571.0") in new stack
    -- Executing [s@macro-user-callerid:2] Set("PJSIP/37600-00000000", "AMPUSER=37600") in new stack
    -- Executing [s@macro-user-callerid:3] Set("PJSIP/37600-00000000", "HOTDESCKCHAN=37600-00000000") in new stack
    -- Executing [s@macro-user-callerid:4] Set("PJSIP/37600-00000000", "HOTDESKEXTEN=37600") in new stack
    -- Executing [s@macro-user-callerid:5] Set("PJSIP/37600-00000000", "HOTDESKCALL=0") in new stack
    -- Executing [s@macro-user-callerid:6] ExecIf("PJSIP/37600-00000000", "0?Set(HOTDESKCALL=1)") in new stack
    -- Executing [s@macro-user-callerid:7] ExecIf("PJSIP/37600-00000000", "0?Set(CALLERID(name)=)") in new stack
    -- Executing [s@macro-user-callerid:8] GotoIf("PJSIP/37600-00000000", "0?report") in new stack
    -- Executing [s@macro-user-callerid:9] ExecIf("PJSIP/37600-00000000", "1?Set(REALCALLERIDNUM=37600)") in new stack
    -- Executing [s@macro-user-callerid:10] Set("PJSIP/37600-00000000", "AMPUSER=37600") in new stack
    -- Executing [s@macro-user-callerid:11] GotoIf("PJSIP/37600-00000000", "0?limit") in new stack
    -- Executing [s@macro-user-callerid:12] Set("PJSIP/37600-00000000", "AMPUSERCIDNAME=37600") in new stack
    -- Executing [s@macro-user-callerid:13] ExecIf("PJSIP/37600-00000000", "0?Set(__CIDMASQUERADING=TRUE)") in new stack
    -- Executing [s@macro-user-callerid:14] GotoIf("PJSIP/37600-00000000", "0?report") in new stack
    -- Executing [s@macro-user-callerid:15] Set("PJSIP/37600-00000000", "AMPUSERCID=37600") in new stack
    -- Executing [s@macro-user-callerid:16] Set("PJSIP/37600-00000000", "__DIAL_OPTIONS=HhTtr") in new stack
    -- Executing [s@macro-user-callerid:17] Set("PJSIP/37600-00000000", "CALLERID(all)="37600" <37600>") in new stack
    -- Executing [s@macro-user-callerid:18] ExecIf("PJSIP/37600-00000000", "0?Set(CUSDIAL=37500)") in new stack
    -- Executing [s@macro-user-callerid:19] ExecIf("PJSIP/37600-00000000", "0?Set(CALLERID(all)=37500)") in new stack
    -- Executing [s@macro-user-callerid:20] GotoIf("PJSIP/37600-00000000", "0?limit") in new stack
    -- Executing [s@macro-user-callerid:21] ExecIf("PJSIP/37600-00000000", "0?Set(GROUP(concurrency_limit)=37600)") in new stack
    -- Executing [s@macro-user-callerid:22] ExecIf("PJSIP/37600-00000000", "0?Set(CHANNEL(language)=)") in new stack
    -- Executing [s@macro-user-callerid:23] NoOp("PJSIP/37600-00000000", "Macro Depth is 2") in new stack
    -- Executing [s@macro-user-callerid:24] GotoIf("PJSIP/37600-00000000", "1?report2:macroerror") in new stack
    -- Goto (macro-user-callerid,s,25)
    -- Executing [s@macro-user-callerid:25] GotoIf("PJSIP/37600-00000000", "0?continue") in new stack
    -- Executing [s@macro-user-callerid:26] ExecIf("PJSIP/37600-00000000", "1?Set(__CALLEE_ACCOUNCODE=)") in new stack
    -- Executing [s@macro-user-callerid:27] Set("PJSIP/37600-00000000", "__TTL=64") in new stack
    -- Executing [s@macro-user-callerid:28] GotoIf("PJSIP/37600-00000000", "1?continue") in new stack
    -- Goto (macro-user-callerid,s,44)
    -- Executing [s@macro-user-callerid:44] Set("PJSIP/37600-00000000", "CALLERID(number)=37600") in new stack
    -- Executing [s@macro-user-callerid:45] Set("PJSIP/37600-00000000", "CALLERID(name)=37600") in new stack
    -- Executing [s@macro-user-callerid:46] GotoIf("PJSIP/37600-00000000", "0?cnum") in new stack
    -- Executing [s@macro-user-callerid:47] Set("PJSIP/37600-00000000", "CDR(cnam)=37600") in new stack
    -- Executing [s@macro-user-callerid:48] Set("PJSIP/37600-00000000", "CDR(cnum)=37600") in new stack
    -- Executing [s@macro-user-callerid:49] Set("PJSIP/37600-00000000", "CHANNEL(language)=en") in new stack
    -- Executing [s@macro-exten-vm:2] Set("PJSIP/37600-00000000", "RingGroupMethod=none") in new stack
    -- Executing [s@macro-exten-vm:3] Set("PJSIP/37600-00000000", "__EXTTOCALL=37500") in new stack
    -- Executing [s@macro-exten-vm:4] Set("PJSIP/37600-00000000", "__PICKUPMARK=37500") in new stack
    -- Executing [s@macro-exten-vm:5] Set("PJSIP/37600-00000000", "RT=") in new stack
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
    -- Executing [s@macro-exten-vm:6] ExecIf("PJSIP/37600-00000000", "0?Macro(vm,novm,DIRECTDIAL,)") in new stack
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
    -- Executing [s@macro-exten-vm:7] ExecIf("PJSIP/37600-00000000", "0?MacroExit()") in new stack
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
    -- Executing [s@macro-exten-vm:8] ExecIf("PJSIP/37600-00000000", "0?Gosub(ext-intercom,*8037500,1())") in new stack
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
    -- Executing [s@macro-exten-vm:9] ExecIf("PJSIP/37600-00000000", "0?MacroExit()") in new stack
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
    -- Executing [s@macro-exten-vm:10] ExecIf("PJSIP/37600-00000000", "0?ChanSpy(PJSIP/37500,q)") in new stack
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
    -- Executing [s@macro-exten-vm:11] ExecIf("PJSIP/37600-00000000", "0?MacroExit()") in new stack
[2021-01-15 12:26:11] WARNING[4581][C-00000001]: chan_sip.c:23279 func_header_read: This function can only be used on SIP channels.
    -- Executing [s@macro-exten-vm:12] ExecIf("PJSIP/37600-00000000", "0?Macro(vm,novm,DIRECTDIAL,)") in new stack
    -- Executing [s@macro-exten-vm:13] ExecIf("PJSIP/37600-00000000", "0?MacroExit()") in new stack
    -- Executing [s@macro-exten-vm:14] ExecIf("PJSIP/37600-00000000", "0?Gosub(ext-intercom,*8037500,1())") in new stack
    -- Executing [s@macro-exten-vm:15] ExecIf("PJSIP/37600-00000000", "0?MacroExit()") in new stack
    -- Executing [s@macro-exten-vm:16] ExecIf("PJSIP/37600-00000000", "0?ChanSpy(PJSIP/37500,q)") in new stack
    -- Executing [s@macro-exten-vm:17] ExecIf("PJSIP/37600-00000000", "0?MacroExit()") in new stack
    -- Executing [s@macro-exten-vm:18] Gosub("PJSIP/37600-00000000", "sub-record-check,s,1(exten,37500,dontcare)") in new stack
    -- Executing [s@sub-record-check:1] GotoIf("PJSIP/37600-00000000", "0?initialized") in new stack
    -- Executing [s@sub-record-check:2] Set("PJSIP/37600-00000000", "__REC_STATUS=INITIALIZED") in new stack
    -- Executing [s@sub-record-check:3] Set("PJSIP/37600-00000000", "NOW=1610713571") in new stack
    -- Executing [s@sub-record-check:4] Set("PJSIP/37600-00000000", "__DAY=15") in new stack
    -- Executing [s@sub-record-check:5] Set("PJSIP/37600-00000000", "__MONTH=01") in new stack
    -- Executing [s@sub-record-check:6] Set("PJSIP/37600-00000000", "__YEAR=2021") in new stack
    -- Executing [s@sub-record-check:7] Set("PJSIP/37600-00000000", "__TIMESTR=20210115-122611") in new stack
    -- Executing [s@sub-record-check:8] Set("PJSIP/37600-00000000", "__FROMEXTEN=37600") in new stack
    -- Executing [s@sub-record-check:9] Set("PJSIP/37600-00000000", "__MON_FMT=wav") in new stack
    -- Executing [s@sub-record-check:10] NoOp("PJSIP/37600-00000000", "Recordings initialized") in new stack
    -- Executing [s@sub-record-check:11] ExecIf("PJSIP/37600-00000000", "0?Set(ARG3=dontcare)") in new stack
    -- Executing [s@sub-record-check:12] Set("PJSIP/37600-00000000", "REC_POLICY_MODE_SAVE=") in new stack
    -- Executing [s@sub-record-check:13] ExecIf("PJSIP/37600-00000000", "0?Set(REC_STATUS=NO)") in new stack
    -- Executing [s@sub-record-check:14] GotoIf("PJSIP/37600-00000000", "5?checkaction") in new stack
    -- Goto (sub-record-check,s,17)
    -- Executing [s@sub-record-check:17] GotoIf("PJSIP/37600-00000000", "1?sub-record-check,exten,1") in new stack
    -- Goto (sub-record-check,exten,1)
    -- Executing [exten@sub-record-check:1] NoOp("PJSIP/37600-00000000", "Exten Recording Check between 37600 and 37500") in new stack
    -- Executing [exten@sub-record-check:2] Set("PJSIP/37600-00000000", "CALLTYPE=internal") in new stack
    -- Executing [exten@sub-record-check:3] ExecIf("PJSIP/37600-00000000", "0?Set(CALLTYPE=)") in new stack
    -- Executing [exten@sub-record-check:4] Set("PJSIP/37600-00000000", "CALLEE=dontcare") in new stack
    -- Executing [exten@sub-record-check:5] ExecIf("PJSIP/37600-00000000", "0?Set(CALLEE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:6] GotoIf("PJSIP/37600-00000000", "0?callee") in new stack
    -- Executing [exten@sub-record-check:7] GotoIf("PJSIP/37600-00000000", "1?caller") in new stack
    -- Goto (sub-record-check,exten,13)
    -- Executing [exten@sub-record-check:13] Set("PJSIP/37600-00000000", "RECMODE=dontcare") in new stack
    -- Executing [exten@sub-record-check:14] ExecIf("PJSIP/37600-00000000", "0?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:15] ExecIf("PJSIP/37600-00000000", "1?Set(RECMODE=dontcare)") in new stack
    -- Executing [exten@sub-record-check:16] Gosub("PJSIP/37600-00000000", "recordcheck,1(dontcare,internal,37500)") in new stack
    -- Executing [recordcheck@sub-record-check:1] NoOp("PJSIP/37600-00000000", "Starting recording check against dontcare") in new stack
    -- Executing [recordcheck@sub-record-check:2] Goto("PJSIP/37600-00000000", "dontcare") in new stack
    -- Goto (sub-record-check,recordcheck,3)
    -- Executing [recordcheck@sub-record-check:3] Return("PJSIP/37600-00000000", "") in new stack
    -- Executing [exten@sub-record-check:17] Return("PJSIP/37600-00000000", "") in new stack
    -- Executing [s@macro-exten-vm:19] GotoIf("PJSIP/37600-00000000", "1?macrodial") in new stack
    -- Goto (macro-exten-vm,s,25)
    -- Executing [s@macro-exten-vm:25] GosubIf("PJSIP/37600-00000000", "0?clrheader,1()") in new stack
    -- Executing [s@macro-exten-vm:26] Macro("PJSIP/37600-00000000", "dial-one,,HhTtr,37500") in new stack
    -- Executing [s@macro-dial-one:1] Set("PJSIP/37600-00000000", "DEXTEN=37500") in new stack
    -- Executing [s@macro-dial-one:2] Set("PJSIP/37600-00000000", "__CRM_SOURCE=37600") in new stack
    -- Executing [s@macro-dial-one:3] ExecIf("PJSIP/37600-00000000", "0?Set(__EXTTOCALL=37500)") in new stack
    -- Executing [s@macro-dial-one:4] Set("PJSIP/37600-00000000", "DIALSTATUS_CW=") in new stack
    -- Executing [s@macro-dial-one:5] GosubIf("PJSIP/37600-00000000", "0?screen,1()") in new stack
    -- Executing [s@macro-dial-one:6] GosubIf("PJSIP/37600-00000000", "0?cf,1()") in new stack
    -- Executing [s@macro-dial-one:7] GotoIf("PJSIP/37600-00000000", "1?skip1") in new stack
    -- Goto (macro-dial-one,s,10)
    -- Executing [s@macro-dial-one:10] GotoIf("PJSIP/37600-00000000", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:11] GotoIf("PJSIP/37600-00000000", "0?continue") in new stack
    -- Executing [s@macro-dial-one:12] Set("PJSIP/37600-00000000", "EXTHASCW=ENABLED") in new stack
    -- Executing [s@macro-dial-one:13] GotoIf("PJSIP/37600-00000000", "0?next1:cwinusebusy") in new stack
    -- Goto (macro-dial-one,s,25)
    -- Executing [s@macro-dial-one:25] GotoIf("PJSIP/37600-00000000", "0?next3:continue") in new stack
    -- Goto (macro-dial-one,s,27)
    -- Executing [s@macro-dial-one:27] GotoIf("PJSIP/37600-00000000", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:28] GosubIf("PJSIP/37600-00000000", "1?dstring,1():dlocal,1()") in new stack
    -- Executing [dstring@macro-dial-one:1] Set("PJSIP/37600-00000000", "DSTRING=") in new stack
    -- Executing [dstring@macro-dial-one:2] Set("PJSIP/37600-00000000", "DEVICES=37500") in new stack
    -- Executing [dstring@macro-dial-one:3] ExecIf("PJSIP/37600-00000000", "0?Return()") in new stack
    -- Executing [dstring@macro-dial-one:4] ExecIf("PJSIP/37600-00000000", "0?Set(DEVICES=7500)") in new stack
    -- Executing [dstring@macro-dial-one:5] Set("PJSIP/37600-00000000", "LOOPCNT=1") in new stack
    -- Executing [dstring@macro-dial-one:6] Set("PJSIP/37600-00000000", "ITER=1") in new stack
    -- Executing [dstring@macro-dial-one:7] Set("PJSIP/37600-00000000", "THISDIAL=PJSIP/37500") in new stack
    -- Executing [dstring@macro-dial-one:8] GotoIf("PJSIP/37600-00000000", "0?docheck") in new stack
    -- Executing [dstring@macro-dial-one:9] NoOp("PJSIP/37600-00000000", "Debug: Found PJSIP Destination PJSIP/37500") in new stack
    -- Executing [dstring@macro-dial-one:10] GotoIf("PJSIP/37600-00000000", "0?doset") in new stack
    -- Executing [dstring@macro-dial-one:11] NoOp("PJSIP/37600-00000000", "Debug: Updating PJSIP Destination with PJSIP_DIAL_CONTACTS") in new stack
    -- Executing [dstring@macro-dial-one:12] Set("PJSIP/37600-00000000", "THISDIAL=PJSIP/37500/sip:[email protected]:33688") in new stack
    -- Executing [dstring@macro-dial-one:13] ExecIf("PJSIP/37600-00000000", "0?Set(DIALSTATUS=CHANUNAVAIL)") in new stack
    -- Executing [dstring@macro-dial-one:14] GotoIf("PJSIP/37600-00000000", "0?skipset") in new stack
    -- Executing [dstring@macro-dial-one:15] Set("PJSIP/37600-00000000", "DSTRING=PJSIP/37500/sip:[email protected]:33688&") in new stack
    -- Executing [dstring@macro-dial-one:16] Set("PJSIP/37600-00000000", "ITER=2") in new stack
    -- Executing [dstring@macro-dial-one:17] GotoIf("PJSIP/37600-00000000", "0?begin") in new stack
    -- Executing [dstring@macro-dial-one:18] ExecIf("PJSIP/37600-00000000", "0?Return()") in new stack
    -- Executing [dstring@macro-dial-one:19] Set("PJSIP/37600-00000000", "DSTRING=PJSIP/37500/sip:[email protected]:33688") in new stack
    -- Executing [dstring@macro-dial-one:20] Return("PJSIP/37600-00000000", "") in new stack
    -- Executing [s@macro-dial-one:29] GotoIf("PJSIP/37600-00000000", "0?nodial") in new stack
    -- Executing [s@macro-dial-one:30] GotoIf("PJSIP/37600-00000000", "0?skiptrace") in new stack
    -- Executing [s@macro-dial-one:31] GosubIf("PJSIP/37600-00000000", "1?ctset,1():ctclear,1()") in new stack
    -- Executing [ctset@macro-dial-one:1] Set("PJSIP/37600-00000000", "DB(CALLTRACE/37500)=37600") in new stack
    -- Executing [ctset@macro-dial-one:2] Return("PJSIP/37600-00000000", "") in new stack
    -- Executing [s@macro-dial-one:32] Set("PJSIP/37600-00000000", "D_OPTIONS=HhTtr") in new stack
    -- Executing [s@macro-dial-one:33] GosubIf("PJSIP/37600-00000000", "0?func-set-sipheader,s,1(Alert-Info,)") in new stack
    -- Executing [s@macro-dial-one:34] NoOp("PJSIP/37600-00000000", "Blind Transfer: , Attended Transfer: , User: 37600, Alert Info: ") in new stack
    -- Executing [s@macro-dial-one:35] ExecIf("PJSIP/37600-00000000", "1?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:36] ExecIf("PJSIP/37600-00000000", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:37] ExecIf("PJSIP/37600-00000000", "0?Set(ALERT_INFO=)") in new stack
    -- Executing [s@macro-dial-one:38] ExecIf("PJSIP/37600-00000000", "0?Set(ALERT_INFO=Normal;volume=)") in new stack
    -- Executing [s@macro-dial-one:39] ExecIf("PJSIP/37600-00000000", "0?Set(ALERT_INFO=Normal;volume=)") in new stack
    -- Executing [s@macro-dial-one:40] GosubIf("PJSIP/37600-00000000", "0?func-set-sipheader,s,1(Alert-Info,)") in new stack
    -- Executing [s@macro-dial-one:41] ExecIf("PJSIP/37600-00000000", "0?Set(CHANNEL(musicclass)=)") in new stack
    -- Executing [s@macro-dial-one:42] GosubIf("PJSIP/37600-00000000", "0?qwait,1()") in new stack
    -- Executing [s@macro-dial-one:43] Set("PJSIP/37600-00000000", "__CWIGNORE=") in new stack
    -- Executing [s@macro-dial-one:44] Set("PJSIP/37600-00000000", "__KEEPCID=TRUE") in new stack
    -- Executing [s@macro-dial-one:45] GotoIf("PJSIP/37600-00000000", "0?usegoto,1") in new stack
    -- Executing [s@macro-dial-one:46] GotoIf("PJSIP/37600-00000000", "0?godial") in new stack
    -- Executing [s@macro-dial-one:47] Gosub("PJSIP/37600-00000000", "sub-presencestate-display,s,1(37500)") in new stack
    -- Executing [s@sub-presencestate-display:1] Goto("PJSIP/37600-00000000", "state-not_set,1") in new stack
    -- Goto (sub-presencestate-display,state-not_set,1)
    -- Executing [state-not_set@sub-presencestate-display:1] Set("PJSIP/37600-00000000", "PRESENCESTATE_DISPLAY=") in new stack
    -- Executing [state-not_set@sub-presencestate-display:2] Return("PJSIP/37600-00000000", "") in new stack
    -- Executing [s@macro-dial-one:48] Set("PJSIP/37600-00000000", "CONNECTEDLINE(name,i)=37500") in new stack
    -- Executing [s@macro-dial-one:49] Set("PJSIP/37600-00000000", "CONNECTEDLINE(num)=37500") in new stack
    -- Executing [s@macro-dial-one:50] Set("PJSIP/37600-00000000", "D_OPTIONS=HhTtr") in new stack
    -- Executing [s@macro-dial-one:51] Macro("PJSIP/37600-00000000", "dialout-one-predial-hook,") in new stack
    -- Executing [s@macro-dialout-one-predial-hook:1] MacroExit("PJSIP/37600-00000000", "") in new stack
    -- Executing [s@macro-dial-one:52] ExecIf("PJSIP/37600-00000000", "0?Set(D_OPTIONS=HhtrI)") in new stack
    -- Executing [s@macro-dial-one:53] ExecIf("PJSIP/37600-00000000", "0?Set(CWRING=r(callwaiting)):Set(CWRING=)") in new stack
    -- Executing [s@macro-dial-one:54] NoOp("PJSIP/37600-00000000", "") in new stack
    -- Executing [s@macro-dial-one:55] ExecIf("PJSIP/37600-00000000", "0?Set(D_OPTIONS=HhTtrg)") in new stack
    -- Executing [s@macro-dial-one:56] Dial("PJSIP/37600-00000000", "PJSIP/37500/sip:[email protected]:33688,,HhTtrb(func-apply-sipheaders^s^1)") in new stack
    -- PJSIP/37500-00000001 Internal Gosub(func-apply-sipheaders,s,1) start
    -- Executing [s@func-apply-sipheaders:1] ExecIf("PJSIP/37500-00000001", "0?Set(CHANNEL(hangup_handler_push)=crm-hangup,s,1)") in new stack
    -- Executing [s@func-apply-sipheaders:2] NoOp("PJSIP/37500-00000001", "Applying SIP Headers to channel PJSIP/37500-00000001") in new stack
    -- Executing [s@func-apply-sipheaders:3] Set("PJSIP/37500-00000001", "TECH=PJSIP") in new stack
    -- Executing [s@func-apply-sipheaders:4] Set("PJSIP/37500-00000001", "SIPHEADERKEYS=") in new stack
    -- Executing [s@func-apply-sipheaders:5] While("PJSIP/37500-00000001", "0") in new stack
    -- Jumping to priority 13
    -- Executing [s@func-apply-sipheaders:14] Return("PJSIP/37500-00000001", "") in new stack

so apparently all these commands are exhausting my processor and RAM.
are all these command lines necessary or could I remove some commands and everthing would work normally or i may lose lots of features?
anyway if i ever wanted to modify then how could i do it ?
or do u suggest to create my own dialplan then(extensions_custom.conf)?

thanks in advance best regards

Unlikely unless your machine is severely underpowered. What are your running?

I would not consider that practical.

If you are not using FreePBX dialplan, there is no reason to use FreePBX. You may as well start with a plain Asterisk install and start from scratch.

1 Like

m already familiar with using plain asterisk. i ve used it for nearly a year.
well honestly there is a need to use Freepbx even though if i dont want to use its dialplan since freepx has an awesome graphical user interfaces and would still allow me to add users, trunks and other things.

i am using nanopi neo core, which is a tiny single board computer.

what are the minimum hardware specs that i need so that i could have around 300 users with 50 to 70 concurrent calls ?
is this a good start : https://www.friendlyarm.com/index.php?route=product/product&path=69&product_id=275

why would not it be practical? i am pretty good with dialplans … but not a professional. not at all.

Already discussed. Your needs have tripled in a week?

Because all the GUI elements and modules tie back to the dialplan the modules create. Having the flexibility with the ability to add modules/features means the dialplan is going to have a lot of branching and conditional logic.

If you really want to use the GUI, make use of that data, but not use the FreePBX dialplan, you would need to add your own module, hook the dialplan generation at the end of the process, then delete the parts you don’t want and regenerate new dialplan to replace those parts. Developer Corner Home - FreePBX OpenSource Project - Documentation

It’s feasible, but non-sensical.

You’d be better off and likely less bug prone writing your own bare-bones web interface, or with a handful of shell scripts to add/remove extensions/trunks/etc.

$30 server to support 300 users. Are we being trolled?

3 Likes

you are not being trolled at all.
i never said m trying to have a 30$ server for 300 users although through this 30$ server i had more than 20 concurrent calls while using plain asterisk with my simple dialplan.
yes now i am using this nanopi in order to learn how to use freepbx so as when i need to turn into something bigger then things would be clear to me.

yes been asked. but the guys who answered focused on the sd card thing although it was not my case.
needs did not get tripled. m just trying to make an estimation.

makes sense.

do you recommend this instead of creating my own module ?

The answer, effectively “don’t do it,” was given before the tangent to storage. That answer stands.

And, your specs did triple between posts from 100 users/20 calls to 300 users/50-70 calls.

No one here is going to suggest ANY Pi-like SBC for 300 users/70 calls. I’m actually a big user of Raspberry Pi’s in “production” environments, but I wouldn’t put a Pi4 in such an install. There’s a big difference between what you might be able to get away with and what you should do.

Hard to say not knowing your skill set, but I see no advantage to using FreePBX if you are going to gut the features and dialplan.

A lot depends on what your time is worth. Spend days/weeks writing your minimal GUI and/or gutting FreePBX, or spend the money for hardware capable of doing what you want with stock FreePBX and be running tomorrow.

For me time is always the more important constraint, so the hardware is better choice. I can’t speak for your circumstances.

1 Like

In the US, we have something called “Goodwill”. They take in donations and let people with disabilities fix and sell them so they can make a living. Almost any PC (no monitor, keyboard, or mouse) that you can find in almost any thriftshop should have enough horsepower to get you going on this.

At the 300 user level, I’d actually start with a “couple of cores” and 8G of RAM, plus at least one good network card, maybe two if you want to put “the Internet” on one card and the phones on the other.

Also, and I hate to say this because I hate “cloud computing”, you could drop all of this processing onto one of the many fine “other people’s computers” systems out there. Here in the forum, we’ve discussed (at length) the advantages and disadvantages of several of the big cloud computing companies.

There is literally no hardware solution that is going to cost as much as your time and debugging frustration. At my hourly rate, we’ve collectively spent more “time is money” on this question than picking up a good desktop or cloud computing provider.

5 Likes

$5 or $10 per month for the two use cases he has claimed to have.

i actually prefer this solution! thank you very much

IMO, this thread is weird. A ‘complicated dial plan’ does not affect how many extensions can be supported, nor how many concurrent calls. It affects how many Calls Per Second (CPS) can be processed.

If you have a system that can handle five CPS, that won’t limit 300 concurrent calls, unless your Average Call Duration (ACD) is less than 60 seconds. Most businesses have an ACD much higher than that; 180 seconds is typical.

If you are building a spam/scam robocalling system, your ACD might be about 10 seconds, in which case you will likely need to simplify the dial plan.

1 Like

thank you for making it clear.

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