Summary:ASTERISK-20351: SIP attended transfer - wrong billsec in CDR (transferring side)
Reporter:Maciej Krajewski (jamicque)Labels:
Date Opened:2012-09-03 03:58:06Date Closed:2012-09-04 09:35:21
Versions: Frequency of
Environment:Attachments:( 0) full.gz
Description:There is a serious problem with bill sec in Attended transfer scenario.
A is calling do B
B puts A on HOLD
B calls to C
B makes transfer C with A

After such scenario asterisk by default make 2 CDR's:
1) the whole A call with the duration of the call A-B + HOLD + A-C (and this is all right)
2) B-C billsec shows only the time with B-C call and no time after the transfer - this is a crucial mistake especially if you would like to charge the B for the transfer (there is no way of doing that).

If tried different configuration and using ForkCDR and ResetCDR in dialplan. However, none of them can give me the time A and C where actually talking.

IMHO the billsec of the second CDR should have the time of B-C call + A-C

here is my dialplan (I've attached the proper logs)

exten => h,1,NoOp()
exten => h,2,Hangup

exten => 2,1,Dial(SIP/test002)
same => n,Hangup()

exten => 3,1,Dial(SIP/test003)
same => n,Hangup()

Comments:By: David Woolley (davidw) 2012-09-03 06:02:22.400-0500

The general advice for complex CDR cases (and this is a complex CDR case) is to use CEL instead.  Generally attempting to fix one complex case in CDR breaks another.

By: Maciej Krajewski (jamicque) 2012-09-03 07:15:21.203-0500

Well, actually I would not agree that basic CDR transfer (AT) is a complex scenario. If the second CDR has the time of B-C Call + A-C everything would be ok.

By: Matt Jordan (mjordan) 2012-09-04 09:35:21.666-0500

The behavior of CDRs in transfer scenarios is undefined.

We are not going to attempt to define that behavior.

If you need call records that take into account situations where a channel may be bridged with more than one channel, please use CELs.