Hi Mike,
I've tried updating my CDR's via the h exten but with no success. I've tried 
with both endbeforehexten=no and endbeforehexten=yes (in cdr.conf) but the 
value refused to appear in my CDR (even though I see the Set() application 
being executed in the console under the h exten). Thank you for your suggestion 
though...

Any other thoughts are welcome.


Kind Regards,
Harel Cohen

-----Original Message-----

Date: Mon, 12 Dec 2011 13:41:31 -0700
From: Mike Diehl <[email protected]>
Subject: Re: [asterisk-users] Populate CDR issues
To: [email protected]
Cc: Harel Cohen <[email protected]>
Message-ID: <[email protected]>
Content-Type: Text/Plain;  charset="iso-8859-1"

On Monday 12 December 2011 4:28:17 am Harel Cohen wrote:
> Danny,
> 
> Why would you think this is a "circumvent"? I'm using a nice feature 
> of 1.8 where I can create any CDR field I like and populate it by 
> using the
> CDR(<fieldname>) function. While all other fields that I created are 
> populated properly (however before the 'dial' commences) it seems like 
> at this point of the dial plan the CDR is closed for editing even 
> though I configured endbeforehexten=no in my cdr.conf.

I agree, this is a perfectly valid use of the CDR.  I do the same thing, btw.  
I think what you are seeing is that when your call starts, Asterisk creates a 
record, either in memory, or in a db transaction.  When the call is torn down, 
the record is updated and committed to the db.  The down-shot is that any 
changes you make to the db record get clobbered by this last update.

I ended up making some of my updates in the hang-up phase via the "h" 
extension.  See if that will do what you need.



-- 

Take care and have fun,
Mike Diehl.

------------------------------

Date: Thu, 1 Dec 2011 12:57:56 +0100
From: Harel Cohen <[email protected]>
Subject: [asterisk-users] Populate CDR issues
To: "[email protected]"
        <[email protected]>
Message-ID:
        <[email protected]>
Content-Type: text/plain; charset="us-ascii"

Hello list,
I'm trying to populate my CDR logs with values which are available after the 
call has started (e.g. signalling IP of remote user, media IP, codec etc.). 
While CHANNEL function give me all I need for the incoming leg (leg A), I can't 
get the relevant values for the outgoing channel. I've tried using the option 
'U' with my dial command (execute subroutine for called channel after called 
channel answered but before the call is bridged). While this throws the correct 
information to the console it does not populate the CDRs accordingly.
Note: Asterisk ver is 1.8.7.1 and CDR's are written to MySQL with adaptive ODBC 
and the table therein contains the relevant fields.

This is the console with 'very-verbose' output for the 'Dial' application where 
office_Admin2, IP 192.168.20.222, is calling office_ServerRoom, IP 
192.168.20.226. My comments added prefixed by ** and on separate line:

** channel here is source channel: SIP/office_Admin2-00000015
[Dec  1 12:14:31]     -- Executing [316@InternalDP:5] 
Dial("SIP/office_Admin2-00000015", "SIP/office_ServerRoom,,FgU(jump2SetVar)") 
in new stack
[Dec  1 12:14:31]   == Using UDPTL CoS mark 5
[Dec  1 12:14:31]   == Using SIP RTP CoS mark 5
[Dec  1 12:14:31]     -- Called SIP/office_ServerRoom
[Dec  1 12:14:31]     -- SIP/office_ServerRoom-00000016 is ringing
[Dec  1 12:14:31]     -- SIP/office_ServerRoom-00000016 is ringing
[Dec  1 12:14:33]     -- SIP/office_ServerRoom-00000016 answered 
SIP/office_Admin2-00000015
** from here the channel is the destination channel: 
SIP/office_ServerRoom-00000016
[Dec  1 12:14:33]     -- Executing [s@jump2SetVar:1] 
Gosub("SIP/office_ServerRoom-00000016", "SetVar,postdial,1") in new stack
** This is how I obtain channel information:
** exten => 
postdial,1,Set(CDR(chanoutsigip)=${CHANNEL(peerip)}:${SIPPEER(${CHANNEL(peername)},port)})
** same => n,Set(CDR(chanoutmediaip)=${CHANNEL(rtpdest,audio)})
** same => n,Set(CDR(chanoutcodec)=${CHANNEL(audionativeformat)})
[Dec  1 12:14:33]     -- Executing [postdial@SetVar:1] 
Set("SIP/office_ServerRoom-00000016", "CDR(chanoutsigip)=192.168.20.226:5065") 
in new stack
[Dec  1 12:14:33]     -- Executing [postdial@SetVar:2] 
Set("SIP/office_ServerRoom-00000016", 
"CDR(chanoutmediaip)=192.168.20.226:23008") in new stack
[Dec  1 12:14:33]     -- Executing [postdial@SetVar:3] 
Set("SIP/office_ServerRoom-00000016", "CDR(chanoutcodec)=g729") in new stack
[Dec  1 12:14:33]     -- Executing [postdial@SetVar:4] 
Goto("SIP/office_ServerRoom-00000016", "endsub,1") in new stack
[Dec  1 12:14:33]     -- Goto (SetVar,endsub,1)
[Dec  1 12:14:33]     -- Executing [endsub@SetVar:1] 
Return("SIP/office_ServerRoom-00000016", "") in new stack
[Dec  1 12:14:33]     -- Executing [s@jump2SetVar:2] 
Return("SIP/office_ServerRoom-00000016", "") in new stack
[Dec  1 12:14:33]     -- Executing [s@app_dial_gosub_virtual_context:1] 
NoOp("SIP/office_ServerRoom-00000016", "") in new stack
[Dec  1 12:14:33]     -- Auto fallthrough, channel 
'SIP/office_ServerRoom-00000016' status is 'UNKNOWN'
[Dec  1 12:14:33]     -- Remotely bridging SIP/office_Admin2-00000015 and 
SIP/office_ServerRoom-00000016

When call is terminated the relevant fields in the database for 
CDR(chanoutsigip), CDR(chanoutmediaip) and CDR(chanoutcodec) are populated with 
their default values (typically blank or '-----') and NOT with the values above.
Am I doing something wrong or is there a different way to populate CDR's with 
info from called channel (leg B)?

Thank you for your replies...

Harel



--
_____________________________________________________________________
-- 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

Reply via email to