Storing HANGUPCAUSE In CDR

Home » Asterisk Users » Storing HANGUPCAUSE In CDR
Asterisk Users 5 Comments

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