[asterisk-users] CDR written before hangup extension
Mitch Claborn
mitch_ml at claborn.net
Fri Dec 21 11:16:37 CST 2012
asterisk 11.1
Documentation in cdr.conf for endbeforehexten reads:
Normally, CDR's are not closed out until after all extensions are
finished executing. By enabling this option, the CDR will be ended
before executing the "h" extension and hangup handlers so that CDR
values such as "end" and "billsec" may be retrieved inside of of this
extension.
I have explicitly set endbeforehexten=no, yet the CDR records are being
written as soon as the operator hangs up the call (this is in a queue
situation). If I insert Wait() in the dialplan where the comments "note
CDR is already written by this point" are, I can query the database and
see the CDR record.
My dialplan excerpt is below. Is there a way to force the CDR to not be
written until the end of my dialplan logic? In particular, I want to be
able to store the results of the post call survey in the CDR. I'm using
cdr_adaptive_odbc.
[queues]
; this runs on the caller's channel
exten =>sales,1,Verbose(2,${CALLERID(all)} entering the sales queue)
same =>n,Answer()
same =>n(asksurvey),Read(MMSURVEY,custom/survey-ask,1,,,5)
same =>n,MixMonitor(${CHANNEL(uniqueid)}.wav,b)
same =>n,Set(CDR(salesqueue_entered)=1)
same =>n,Queue(sales,tc,,,,,,sub-QueueConnected)
same =>n,GotoIf($["${QUEUESTATUS}" = "CONTINUE"]?checksurvey) ; only
go to the survey if we were connected to a call
same =>n,Playback(custom/queue-sales-no-operators)
same =>n,Hangup()
same =>n(checksurvey),GotoIf($["${MMSURVEY}" = "1"]?survey,s,1)
same =>n,Hangup()
exten =>h,1,NoOp(When a sales queue call is hung up)
; note CDR is already written by this point
same =>n,StopMixMonitor()
same =>n,Hangup()
[survey]
exten =>s,1,NoOp(Take the survey)
; note CDR is already written by this point
same =>n(q1),Read(MMSURVEYQ1,custom/survey-q1,1,,,5)
... more survey here
--
Mitch
More information about the asterisk-users
mailing list