Storing HANGUPCAUSE In CDR
Hi, I have the following code that operates when a channel is hung-up:
[record-hangupcause]exten => 1,n,Set(CDR(hangupcause)=${HANGUPCAUSE})exten => s,n,Return()
Before the dial a hangup handler is registered:
Set(CHANNEL(hangup_handler_push)=record-hangupcause,s,1)
The routine is called and the variables are being set, however not on the channel’s CDR which made the call. I believe this is due to the CDR being closes as soon as the dial returns. By changing the cdr option ‘endbeforehexten=no’ this should keep the CDR accessible, however all this does is cause another CDR to be created for the ‘h’ extension. Is there a way to update the CDR so that a result can be stored per dial?
Thank you in advance, Ross
5 thoughts on - Storing HANGUPCAUSE In CDR
search in archives save the records to another table like cdr_extended
Dne 7.10.2015 v 15:26 Ross Beer napsal(a):
This was always possible in the past, however does not work in the current release.
I believe this is a bug.
To: asterisk-users@lists.digium.com From: cervajs@fpf.slu.cz Date: Fri, 9 Oct 2015 10:04:47 +0200
Subject: Re: [asterisk-users] Storing HANGUPCAUSE in CDR
search in archives
save the records to another table like cdr_extended
Dne 7.10.2015 v 15:26 Ross Beer napsal(a):
Hi,
I have the following code that operates when a channel is
hung-up:
[record-hangupcause]
exten => 1,n,Set(CDR(hangupcause)=${HANGUPCAUSE})
exten => s,n,Return()
Before the dial a hangup handler is registered:
Set(CHANNEL(hangup_handler_push)=record-hangupcause,s,1)
The routine is called and the variables are being set,
however not on the channel’s CDR which made the call. I
believe this is due to the CDR being closes as soon as the
dial returns.
By changing the cdr option ‘endbeforehexten=no’ this should
keep the CDR accessible, however all this does is cause
another CDR to be created for the ‘h’ extension.
Is there a way to update the CDR so that a result can be
stored per dial?
Thank you in advance,
Ross
—
—————————————
Marek Cervenka
=======================================
—
You can use this
exten => h,1,Set(CDR(userfield)=Hangupcause:${HANGUPCAUSE})
From: asterisk-users-bounces@lists.digium.com
[mailto:asterisk-users-bounces@lists.digium.com] On Behalf Of Ross Beer Sent: Friday, October 9, 2015 1:52 PM
To: Asterisk Users Mailing List – Non-Commercial Discussion
Subject: Re: [asterisk-users] Storing HANGUPCAUSE in CDR
This was always possible in the past, however does not work in the current release.
I believe this is a bug.
_____
To: asterisk-users@lists.digium.com
From: cervajs@fpf.slu.cz
Date: Fri, 9 Oct 2015 10:04:47 +0200
Subject: Re: [asterisk-users] Storing HANGUPCAUSE in CDR
search in archives save the records to another table like cdr_extended
Dne 7.10.2015 v 15:26 Ross Beer napsal(a):
Hi,
I have the following code that operates when a channel is hung-up:
[record-hangupcause]
exten => 1,n,Set(CDR(hangupcause)=${HANGUPCAUSE})
exten => s,n,Return()
Before the dial a hangup handler is registered:
Set(CHANNEL(hangup_handler_push)=record-hangupcause,s,1)
The routine is called and the variables are being set, however not on the channel’s CDR which made the call. I believe this is due to the CDR being closes as soon as the dial returns.
By changing the cdr option ‘endbeforehexten=no’ this should keep the CDR
accessible, however all this does is cause another CDR to be created for the
‘h’ extension.
Is there a way to update the CDR so that a result can be stored per dial?
Thank you in advance,
Ross
Hi Andrew,
Unfortunately that has stopped working when using chan_pjsip and asterisk 13.
The CDR is closed too early after a dial attempt. This is the expected behaviour for Asterisk 13, however you should be able to set the variable before the CDR is locked/committed and before another dial attempt.
The hangup_handler should be the way to do this as it’s run within the same dial command.
I think I will need to raise an issue as this has only stopped working in Asterisk 13.
Thank you for your feedback,
Ross
From: andrew@convergedgroup.net To: asterisk-users@lists.digium.com Date: Fri, 9 Oct 2015 14:50:51 +0200
Subject: Re: [asterisk-users] Storing HANGUPCAUSE in CDR
You can use this exten => h,1,Set(CDR(userfield)=Hangupcause:${HANGUPCAUSE})From: asterisk-users-bounces@lists.digium.com [mailto:asterisk-users-bounces@lists.digium.com] On Behalf Of Ross Beer Sent: Friday, October 9, 2015 1:52 PM
To: Asterisk Users Mailing List – Non-Commercial Discussion
Subject: Re: [asterisk-users] Storing HANGUPCAUSE in CDR This was always possible in the past, however does not work in the current release.
I believe this is a bug. To: asterisk-users@lists.digium.com From: cervajs@fpf.slu.cz Date: Fri, 9 Oct 2015 10:04:47 +0200
Subject: Re: [asterisk-users] Storing HANGUPCAUSE in CDRsearch in archives save the records to another table like cdr_extended
Dne 7.10.2015 v 15:26 Ross Beer napsal(a):Hi, I have the following code that operates when a channel is hung-up: [record-hangupcause]exten => 1,n,Set(CDR(hangupcause)=${HANGUPCAUSE})exten => s,n,Return() Before the dial a hangup handler is registered: Set(CHANNEL(hangup_handler_push)=record-hangupcause,s,1) The routine is called and the variables are being set, however not on the channel’s CDR which made the call. I believe this is due to the CDR being closes as soon as the dial returns. By changing the cdr option ‘endbeforehexten=no’ this should keep the CDR accessible, however all this does is cause another CDR to be created for the ‘h’ extension. Is there a way to update the CDR so that a result can be stored per dial? Thank you in advance, Ross
— —————————————Marek Cervenka=======================================
— _____________________________________________________________________ — Bandwidth and Colocation Provided by http://www.api-digital.com — New to Asterisk? Join us for a live introductory webinar every Thurs: http://www.asterisk.org/hello asterisk-users mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/asterisk-users
—
I’ve responded to the thread on the -dev list, as this is something related to the CDR overhaul that occurred in Asterisk 12.
As an FYI: this isn’t specific to chan_pjsip. You’d get this behaviour regardless of the channel driver you used.
Matt