Here’s relevant dialplan:
[from-agent]
exten => _.,1,NoOp(Inside main dialplan)
exten => _.,n,SET(EXT=${CUT(CHANNEL:4,-,1)})
exten => _.,n,Set(__GAYA_C_TYPE=MA)
;exten => _.,n,Agi(check-agent-status-by-ext.php,${EXT})
exten => _.,n,Set(CDR(exten)=${EXT})
exten => _.,n,AGI(agi://127.0.0.1:4573/check_agent_status_by_ext,${EXT})
exten => _.,n,ExecIf($["${AGENT_STATUS}" = "1"]?Goto(from-internal,${FILTER(*0-9,${EXTEN})},1))
exten => _.,n,ExecIf($["${AGENT_STATUS}" = "3"]?Goto(from-agent,agent-paused,1))
exten => _.,n,ExecIf($["${AGENT_STATUS}" = "0"]?Goto(from-agent,no-agents-logged,1))
exten => _.,n,Hangup
[macro-outbound-callerid]
include => macro-outbound-callerid-custom
exten => s,1,ExecIf($["${CALLINGPRES_SV}" != ""]?Set(CALLERPRES()=${CALLINGPRES_SV}))
exten => s,n,ExecIf($["${REALCALLERIDNUM:1:2}" = ""]?Set(REALCALLERIDNUM=${CALLERID(number)}))
exten => s,n(start),GotoIf($[ $["${REALCALLERIDNUM}" = ""] | $["${KEEPCID}" != "TRUE"] | $["${OUTKEEPCID_${ARG1}}" = "on"] ]?normcid)
exten => s,n,Set(USEROUTCID=${REALCALLERIDNUM})
exten => s,n,GotoIf($["foo${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "foo"]?bypass)
exten => s,n(normcid),Set(USEROUTCID=${DB(AMPUSER/${AMPUSER}/outboundcid)})
exten => s,n(bypass),Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)})
exten => s,n,Set(TRUNKOUTCID=${OUTCID_${ARG1}})
exten => s,n,GotoIf($["${EMERGENCYROUTE:1:2}" = "" | "${EMERGENCYCID:1:2}" = ""]?trunkcid)
exten => s,n,Set(CALLERID(all)=${EMERGENCYCID})
exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)})
exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)})
exten => s,n(exit),MacroExit()
exten => s,n(trunkcid),ExecIf($[${LEN(${TRUNKOUTCID})} != 0]?Set(CALLERID(all)=${TRUNKOUTCID}))
exten => s,n(usercid),ExecIf($[${LEN(${USEROUTCID})} != 0]?Set(CALLERID(all)=${USEROUTCID}))
exten => s,n,ExecIf($[${LEN(${TRUNKCIDOVERRIDE})} != 0 | ${LEN(${FORCEDOUTCID_${ARG1}})} != 0]?Set(CALLERID(all)=${IF($[${LEN(${FORCEDOUTCID_${ARG1}})}=0]?${TRUNKCIDOVERRIDE}:${FORCEDOUTCID_${ARG1}})}))
exten => s,n(hidecid),ExecIf($["${CALLERID(name)}"="hidden"]?Set(CALLERPRES()=prohib_passed_screen))
exten => s,n,Set(CDR(outbound_cnum)=${CALLERID(num)})
exten => s,n,Set(CDR(outbound_cnam)=${CALLERID(name)})
exten => s,n,ExecIf($["${GAYA_C_TYPE}" = ""]?Set(__GAYA_C_TYPE=M))
exten => s,n,ExecIf($[ $["${GAYA_C_TYPE}" = "M" | "${GAYA_C_TYPE}" = "MA"] & $["${GAYA_M_EXTEN}" == ""]]?Set(CALLERID(all)=${IF($["${REALCALLERIDNUM}" == "${FROMEXTEN}"]?${TRUNKCIDOVERRIDE}:${TRUNKCIDOVERRIDE})}))
exten => s,n,ExecIf($[ $["${GAYA_C_TYPE}" = "M" | "${GAYA_C_TYPE}" = "MA"] & $["${CONNECTEDLINE(num)}" != "" & "${USEROUTCID}" == "" & "${GAYA_M_EXTEN}" != ""] ]?Set(CALLERID(all)=${IF($["${REALCALLERIDNUM}" = "${GAYA_M_EXTEN}"]?${TRUNKCIDOVERRIDE}:${REALCALLERIDNUM})}))
exten => s,n,ExecIf($[$["${GAYA_C_TYPE}"="M"|"${GAYA_C_TYPE}"="MA"]&"${TRUNKCIDOVERRIDE}"=""]?Set(CALLERID(all)=${USEROUTCID}))
exten => s,n,SIPAddHeader(X-COPERATO-ID: ${UNIQUEID})
exten => s,n,ExecIf($["${GAYA_C_TYPE}" = "M" & "${GAYA_M_EXTEN}" != "" ]?Set(CDR(exten)=${GAYA_M_EXTEN}))
exten => s,n,ExecIf($["${GAYA_C_TYPE}" = "M" & "${GAYA_M_EXTEN}" = "" ]?Set(CDR(exten)=${FROMEXTEN}))
exten => s,n,ExecIf($["${GUID}" != ""]?Set(CDR(userfield)=${GUID}))
exten => s,n,ExecIf($["${AGENT_CODE}" != ""]?Set(CDR(agent)=${AGENT_CODE}))
exten => s,n,ExecIf($["${GAYA_C_TYPE}" != ""]?Set(CDR(call_type)=${GAYA_C_TYPE}))
[from-internal]
include => from-internal-noxfer
include => from-internal-xfer
include => bad-number ; auto-generated
[outrt-9] ; main
include => outrt-9-custom
exten => _X.,1,Macro(user-callerid,LIMIT,EXTERNAL,)
exten => _X.,n,Set(MOHCLASS=${IF($["${MOHCLASS}"=""]?default:${MOHCLASS})})
exten => _X.,n,ExecIf($["${KEEPCID}"!="TRUE" & ${LEN(${DB(AMPUSER/${AMPUSER}/outboundcid)})}=0 & ${LEN(${TRUNKCIDOVERRIDE})}=0]?Set(TRUNKCIDOVERRIDE=<+441174090994>))
exten => _X.,n,Set(_NODEST=)
exten => _X.,n,Gosub(sub-record-check,s,1(out,${FILTER(0-9,${EXTEN})},))
exten => _X.,n,Macro(dialout-trunk,1,${FILTER(0-9,${EXTEN})},,off,9)
exten => _X.,n,Macro(dialout-trunk,2,${FILTER(0-9,${EXTEN})},,off,9)
exten => _X.,n,Macro(outisbusy,)
[macro-dialout-trunk]
include => macro-dialout-trunk-custom
exten => s,1,Set(DIAL_TRUNK=${IF($[${EXISTS(${GAYA_FORCE_TRUNKID})}]?${GAYA_FORCE_TRUNKID}:${ARG1})})
exten => s,n,Noop(Call out from Trunk : ${DIAL_TRUNK} )
exten => s,n,GosubIf($[$["${ARG3}" != ""] & $["${DB(AMPUSER/${AMPUSER}/pinless)}" != "NOPASSWD"]]?sub-pincheck,s,1())
exten => s,n,GotoIf($["x${OUTDISABLE_${DIAL_TRUNK}}" = "xon"]?disabletrunk,1)
exten => s,n,Set(DIAL_NUMBER=${ARG2})
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${DIAL_OPTIONS})
exten => s,n,Set(OUTBOUND_GROUP=OUT_${DIAL_TRUNK})
exten => s,n,AGI(agi://127.0.0.1:4573/set_call_settings,${DIAL_NUMBER},${ARG5},${TRUNKCIDOVERRIDE})
exten => s,n,GotoIf($["${BLOCKED}" = "1"]??s-BUSY,1)
exten => s,n,GotoIf($["${OUTMAXCHANS_${DIAL_TRUNK}}foo" = "foo"]?nomax)
exten => s,n,GotoIf($[ ${GROUP_COUNT(OUT_${DIAL_TRUNK})} >= ${OUTMAXCHANS_${DIAL_TRUNK}} ]?chanfull)
exten => s,n(nomax),GotoIf($["${INTRACOMPANYROUTE}" = "YES"]?skipoutcid)
exten => s,n,Set(DIAL_TRUNK_OPTIONS=${IF($["${DB_EXISTS(TRUNK/${DIAL_TRUNK}/dialopts)}" = "1"]?${DB_RESULT}:${TRUNK_OPTIONS})})
exten => s,n,Macro(outbound-callerid,${DIAL_TRUNK})
exten => s,n(skipoutcid),GosubIf($["${PREFIX_TRUNK_${DIAL_TRUNK}}" != ""]?sub-flp-${DIAL_TRUNK},s,1())
exten => s,n,Set(OUTNUM=${OUTPREFIX_${DIAL_TRUNK}}${DIAL_NUMBER})
exten => s,n,Set(custom=${CUT(OUT_${DIAL_TRUNK},:,1)})
exten => s,n,ExecIf($["${MOHCLASS}"!="default" & "${MOHCLASS}"!="" & "${FORCE_CONFIRM}"="" ]?Set(DIAL_TRUNK_OPTIONS=M(setmusic^${MOHCLASS})${DIAL_TRUNK_OPTIONS}))
exten => s,n,ExecIf($["${FORCE_CONFIRM}"!="" ]?Set(DIAL_TRUNK_OPTIONS=${DIAL_TRUNK_OPTIONS}M(confirm)))
exten => s,n(gocall),Macro(dialout-trunk-predial-hook,)
exten => s,n,GotoIf($["${PREDIAL_HOOK_RET}" = "BYPASS"]?bypass,1)
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(num,i)=${DIAL_NUMBER}))
exten => s,n,ExecIf($["${DB(AMPUSER/${AMPUSER}/cidname)}" != ""]?Set(CONNECTEDLINE(name,i)=CID:${CALLERID(number)}))
exten => s,n,GotoIf($["${custom}" = "AMP"]?customtrunk)
exten => s,n,ExecIf($["${MEXTEN}"!="" ]?Set(OUTNUM=${MEXTEN}))
exten => s,n,Set(CDR(hangup_party)=caller)
exten => s,n,Dial(${OUT_${DIAL_TRUNK}}/${OUTNUM},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS}g)
exten => s,n,Set(CDR(userfield)=callee)
exten => s,n,Set(CDR(hangup_party)=callee)
exten => s,n,NoOp(hangup_party-- ${CDR(hangup_party)})
exten => s,n,NoOp(HANGUPCAUSE-- ${HANGUPCAUSE})
exten => s,n,ExecIf($["${HANGUPCAUSE}"="16"]?MacroExit())
exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
exten => s,n(customtrunk),Set(pre_num=${CUT(OUT_${DIAL_TRUNK},$,1)})
exten => s,n,Set(the_num=${CUT(OUT_${DIAL_TRUNK},$,2)})
exten => s,n,Set(post_num=${CUT(OUT_${DIAL_TRUNK},$,3)})
exten => s,n,GotoIf($["${the_num}" = "OUTNUM"]?outnum:skipoutnum)
exten => s,n(outnum),Set(the_num=${OUTNUM})
exten => s,n(skipoutnum),Dial(${pre_num:4}${the_num}${post_num},${TRUNK_RING_TIMER},${DIAL_TRUNK_OPTIONS})
exten => s,n,Noop(Dial failed for some reason with DIALSTATUS = ${DIALSTATUS} and HANGUPCAUSE = ${HANGUPCAUSE})
exten => s,n,GotoIf($["${ARG4}" = "on"]?continue,1:s-${DIALSTATUS},1)
exten => s,n(chanfull),Noop(max channels used up)
exten => s-BUSY,1,Noop(Dial failed due to trunk reporting BUSY - giving up)
exten => s-BUSY,n,Progress
exten => s-BUSY,n,Playtones(busy)
exten => s-BUSY,n,Wait(5)
exten => s-BUSY,n,Busy(5)
exten => s-ANSWER,1,Noop(Call successfully answered - Hanging up now)
exten => s-ANSWER,n,Macro(hangupcall,)
exten => s-NOANSWER,1,Noop(Dial failed due to trunk reporting NOANSWER - giving up)
exten => s-NOANSWER,n,Progress
exten => s-NOANSWER,n,Playback(number-not-answering,noanswer)
exten => s-NOANSWER,n,Congestion(20)
exten => s-INVALIDNMBR,1,Noop(Dial failed due to trunk reporting Address Incomplete - giving up)
exten => s-INVALIDNMBR,n,Progress
exten => s-INVALIDNMBR,n,Playback(ss-noservice,noanswer)
exten => s-INVALIDNMBR,n,Congestion(5)
exten => s-CHANGED,1,Noop(Dial failed due to trunk reporting Number Changed - giving up)
exten => s-CHANGED,n,Playtones(busy)
exten => s-CHANGED,n,Busy(20)
exten => _s-.,1,Set(RC=${IF($[${ISNULL(${HANGUPCAUSE})}]?0:${HANGUPCAUSE})})
exten => _s-.,n,Goto(${RC},1)
exten => _X,1,Goto(continue,1)
exten => _X.,1,Goto(continue,1)
exten => continue,1(noreport),Noop(TRUNK Dial failed due to ${DIALSTATUS} HANGUPCAUSE: ${HANGUPCAUSE} - failing through to other trunks)
exten => continue,n,Set(CALLERID(number)=${AMPUSER})
exten => disabletrunk,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} DISABLED - falling through to next trunk)
exten => bypass,1,Noop(TRUNK: ${OUT_${DIAL_TRUNK}} BYPASSING because dialout-trunk-predial-hook)
exten => h,1,Macro(hangupcall,)
[hangup-handler]
exten => s,1,Noop(checking transcribe Status - update_status_and_country_code ${OUTNUM} )
exten => s,n,AGI(agi://127.0.0.1:4573/update_status_and_country_code,${OUTNUM},${CDR(exten)} ,${CDR(agent)},${GAYA_C_TYPE}, ${CDR(billsec)})
exten => s,n,ExecIf($["${C2C_TALKING_TO}" != ""]?Set(CDR(c2c_talking_to)=${C2C_TALKING_TO}))
exten => s,n,Set(CDR(actual_out_num)=${DIAL_NUMBER})
exten => s,n,GotoIf($["${GAYA_C_TYPE}" == "M" | "${GAYA_C_TYPE}" == "MA"]?ipExist:ipNotExist)
exten => s,n(ipExist),Set(CDR(peer_ip_address)=${CHANNEL(peerip)})
exten => s,n,Set(CDR(recv_ip_address)=${CHANNEL(recvip)})
exten => s,n,GotoIf($[${EXISTS(${SIP_HEADER(X-COPERATO-WEBRTC-IP)})}]?webrtc:ipNotExist)
exten => s,n(webrtc),Set(CDR(peer_ip_address)=${SIP_HEADER(X-COPERATO-WEBRTC-IP)})
exten => s,n,Set(CDR(recv_ip_address)=${SIP_HEADER(X-COPERATO-WEBRTC-IP)})
exten => s,n(ipNotExist),ExecIf($["${GUID}" != ""]?Set(CDR(userfield)=${GUID}))
exten => s,n,GotoIf($[${EXISTS(${CDR(agent_name)})}]?endPlan)
exten => s,n,AGI(agi://127.0.0.1:4573/set_agent_name,${OUTNUM},${CDR(exten)} ,${CDR(agent)},${GAYA_C_TYPE}, ${CDR(src)})
;exten => s,n,Noop( Agent name not exist )
exten => s,n(endPlan),Return()