Adding g option causes to problem with CDR saving values

Hello. Actually I’m trying to define who hanged up the call. So, I added:

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,ExecIf($["${HANGUPCAUSE}"="16"]?Macro(hangupcall,))

The new values (userfield, hangup_party, peer_ip_address, recv_ip_address) have not been not saved into CDR table. Whithout g option or if the call failed - saves correctly.
with-g-question.txt (18.9 KB)
without-g-question.txt (18.6 KB)
I attached logs with g and without g.
Is it possible that g option causes to Dial process to became asynchronous?

It does not cause it to be asynchronous. What is the value of the endbeforehexten option in cdr.conf?

not in use:
;endbeforehexten=no

You haven’t provided all the relevant dialplan. Also Macro no longer exists in the latest version of Asterisk.

Your logs include references to AMPUSER, which normally indicates you are using dialplan code provided as part of FreePBX, which normally means you should use the FreePBX forum, for peer support, as good answers depend on a detailed knowledge of FreePBX internals.

There are h extensions and hangup handlers running, all of which will come from FreePBX, so I’m not going to try and work out exactly what has happened.

However, there should be no parallism in control flow. Also, before the big revamp of CDRs, and possibly still, there were two CDRs that were maintained during a call, and the exact processing path could mean that you updated one, and the other was the one that actually got written. One was associated with the bridge, and one with the incoming channel. I forget the exact rules, and this might have all changed in the big rewrite, so I won’t try and work out exactly which copy would get updated and which written out in your case, when using currently supported versions.

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()

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