[asterisk-users] CDR / billsec / originate / local chan
Ben Dinnerville
ben at voicelogic.com.au
Tue Feb 2 18:43:00 CST 2010
Hi All,
I have been running a environment with asterisk 1.4.20.1 for some time
now with no issue but have recently added some extra functionality
(enabled call recording via MixMonitor) and ran into some deadlock
issues which seem to be well documented with earlier 1.4.x releases so
have decided to take the plunge and upgrade. I decided to start testing
with 1.6.2 but have run into a couple of issues.
We run an environment that triggers outbound calls via AMI / asterisk
java and places the call upon answer back into a context that has IVR,
TTS/ VXML etc. Running with 1.4.20.1, we have not had any issues and
have been able to access all of the CDR fields in the h exten (using
endbeforehexten=yes in cdr.conf) however after upgrading all our post
answer related cdr information is reporting 0. Fields such as billsec,
answer etc all return either 0 or null which is causing a lot of issues
for us as we use some AGI post call via the h exten to perform
processing based on billable duration etc.
I have found a number of threads / articles etc discussing various
billsec related issues but it is hard to get a picture of what should
work on what version of asterisk. For example, I know that my
environment works on 1.4.20 but it is broken in 1.4.23 and seems to be
broken in 1.6.2 (pretty sure I tried 1.6.0.9 as well with the same result)
How t works in 1.4.20.1 is as follows:
We trigger call via Originate action as follows:
action:.Originate..
actionid:.1306903_89#AJ_ORIGINATE_25
timeout:.40000
exten:.s
async:.true
callerid:."".<61211111111>
context:.campaignType_5
priority:.1
channel:.SIP/trunk1/61212142321
And the campaignType_5 context looks similar to:
[campaignType_5_]
exten = s,1,Answer()
exten = s,n,Set(timestarted=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
exten = s,n,Set(CALLSTATUS=0)
exten = s,n,Background(lyrics-louie-louie)
exten = s,n,WaitExten(5)
exten = s,n,Set(timefinished=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
exten = s,n,Set(DIGITPRESSED=99)
exten = s,n,Set(TIMETOPRESS=${timestarted)})
exten = s,n,NoOp(Billsec is: ${CDR(billsec)})
exten = s,n,Hangup
exten = 1,1,Set(DIGITPRESSED=${EXTEN})
exten = 1,n,Set(TIMETOPRESS=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
exten = 1,3,Playback(wait-moment)
exten = 1,4,Dial(Local/${CALLLOGID}_${AGENTNUMBER}@campaignType_5_agent/n)
exten = 1,5,Hangup
exten = h,1,Set(timefinished=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
exten = h,2,GotoIf($["${TIMETOPRESS}foo" = "foo"]?h,20)
exten = h,3,GotoIf($["${DIGITPRESSED}foo" = "foo"]?h,10)
exten = h,4,Set(carrier=9)
exten =
h,n,AGI(agi://${DB(APPS/AGISERVER)}/ccoAgentActivityAgi.agi?BILLABLEDURATION=${CDR(billsec)}&CALLLOGID=${CALLLOGID}&CALLSTATUS=${CALLSTATUS}&CAMPAIGNID=${CAMPAIGNID}&DIGITPRESSED=${DIGITPRESSED}&DURATION=${CDR(duration)}&TARGETID=${TARGETID}&TIMEFINISHED=${TIMEFINISHED}&TIMEPRESSED=${TIMETOPRESS}&TIME
STARTED=${TIMESTARTED}&STATECHANGE=CALLDOWN&NODEID=${NODEID})
exten = h,10,Set(DIGITPRESSED=77)
exten = h,11,Set(timefinished=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
exten = h,12,Goto(h,3)
exten = h,20,Set(TIMETOPRESS=${timestarted})
exten = h,21,Goto(h,3)
exten = failed,1,Set(DIGITPRESSED=98)
exten = failed,2,Set(TIMETOPRESS=${timestarted})
exten = failed,3,Set(CALLSTATUS=6)
exten = failed,4,Set(timestarted=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
exten = failed,5,Set(timefinished=${STRFTIME(${EPOCH},,%Y%m%d%H%M%S)})
As mentioned, in 1.4.20 this works fine with all cdr fields being
reported correctly, but on 1.6.2 (and various other versions, on the h
exten with the AGI call we get duration reported correctly but billsec = 0
We are not using Local channels here unless Asterisk is optimising the
outbound leg of the call into one invisibly.
On 1.6.2 I have also tried using a local channel for the outbound leg
with the originate looking like the following:
action:.Originate..
actionid:.1306903_89#AJ_ORIGINATE_25
timeout:.40000
exten:.s
async:.true
callerid:."".<61211111111>
context:.campaignType_5
priority:.1
channel:.Local/61212142321 at outboundsip/n
And the Local context as follows;
[outboundsip]
exten = _XX.,1,Dial(SIP/trunk1/${EXTEN})
exten = _XX.,n,Hangup
exten = h,1,NoOp(Billsec is: ${CDR(billsec)})
In this configuration, whilst the outbound call goes out and billsec
gets reported correctly in the h exten, the call does not get bridged
back into the campaignType_5 context so none of the call processing
occurs. I cannot see any options that can be passed to the dial command
that may affect the bridging of the call back into the campaignType_5
context???
Does anyone out there know which way I need to hang my tongue out of my
mouth, how much i need to squint my eye and how far I need to tilt my
head (and to which side) to get 1.6.2 or any other post 1.4.20 version
of asterisk to report billsec etc back at the h exten for a call
established via an Originate action similar to how it was working in
1.4.20? I have been through a number of bug reports, mailing lists
posts, web sites etc and there seems to be a number of issues reported
over the years relating to billsec / h exten / originate but it seems to
change from version to version.
Thanks in advance,
Ben
More information about the asterisk-users
mailing list