[asterisk-users] CDR on transfers of called ZAP channel

David Boyd dboyd at ignitetrx.com
Mon Jun 11 11:38:32 CDT 2007


On Mon, 2007-06-11 at 09:11 -0600, Steve Murphy wrote:
> Gunnar--
> 
> CDR generation that covers transfers is an "umimplemented" feature in
> Asterisk, in any version.
> 
> I have been working on a solution, but unfortunately, my solution is
> radical enough that I dare not apply it to 1.2 or even 1.4. It will most
> likely break every working implementation of billing that has been built
> on Asterisk by end users/developers. Unpleasant visions of angry mobs of
> developers armed with baseball bats, who want nothing more than to drag
> me out of my home and "share" their pain and frustration over my
> fixes..... you get the idea.
> 
> Actually, I have TWO solutions! One, is to modify the current CDR
> engine, the other is to provide an entirely different solution that is
> single-event driven, kinda along the lines of manager events, but more
> streamlined for CDR billing purposes.
> 
> The first solution somewhat reorganizes CDRS by no longer posting them
> to the backend db's when a hangup occurs. Rather, it will post them when
> a bridge between channels is "finished", or "ends". Since a Local
> channel acts as a sort of bridge, I think I will have to do the same
> thing there. I'm in the middle of it now. I spent/wasted a good amount
> of time generating extra CDR's that would describe time in different
> parts of a transfer, but as I traveled further down that road, I see
> that this will only make things unnecessarily complex. So, I'm not going
> to do it. What this means is that a CDR will get generated for each
> chunk of a conversation involved in a transfer, but these pieces will
> not tell you much about how the chunks relate to each other. The channel
> originating the conversation will be the "source", and the channel
> originally connected to will be the "destination". Time spent in 3-way
> conferences, music on hold, etc. etc. will most likely not be available.
> My theory is that, in most cases, it won't matter. All you REALLY want
> to know is who to bill, and for how much time. If a transfer occurs, it
> involves someone "internally" dialing another party. This second
> "conversation", will generate another CDR, and the guy who dialed it
> will be assigned that call, even if he hung up before the call was
> answered (blind xfer).  For example, picture this: a switch in Modesto
> gets a call from Sacramento, and extension 151 gets this call, and dials
> Shanghai, and blind transfers the Sacramento call to Shanghai, and then
> Sacramento and Shanghai talk for an hour. Two CDR's will be generated.
> One will cover the incoming call from Sacramento, and will be little
> over an hour. The other CDR that will come out will say 151 dialed
> Shanghai and talked an hour. That's it.
> 
> The second solution, the event-based one, will generate an event record
> for each significant event in the life of each channel. So, "START"
> events when a channel is born; "ANSWER" events when someone answers a
> call; "END" events when somebody hangs up. There will also be "Park",
> and "Transfer", and "MOH", and "3-WAY", Conference-Join", and several
> others. Just enough information will be included with each event to
> thread together billable sequences. Along with each event record will be
> the time the event happened, and channel info. This approach will be
> very much more fine-grained, and allow you to do fancy things like
> figure out that Sacramento was the only person talking to Shanghai, and
> allow you to bill the call to the guy/gal in Sacramento. Trouble with
> this approach is that threading together the event records is a
> non-trivial operation! But I hope to provide some tools that will make
> this easier to do.
> 
> So, the bad news is: you will not see any solutions for this problem, in
> 1.2, or 1.4. the CDR "fix" (first solution) will most likely end up in
> 1.6, the event-based solution will probably not be available until 1.8
> or 1.10; we shall see.
> 
> murf
> 
> 
> On Mon, 2007-06-11 at 14:26 +0200, Gunnar Schaller wrote:
> > Hello list,
> > I have a problem with called ZAP channels making an attended-transfer
> > or blind-xfer. Signalling at the phones is ok, but the CDR of Asterisk
> > is wrong.
> > At the moment there is a bristuffed Asterisk 1.2.18 running with
> > bristuff-0.3.0-PRE-1y-g. Here is my dialplan, I simplified it a bit:
> > 
> > [default]
> > exten => 0123456789,1,Macro(dialpstn,${EXTEN})
> > 
> > [macro-dialpstn]
> > exten => s,1,Set(TRANSFER_CONTEXT=transfer)
> > exten => s,2,Set(FORWARD_CONTEXT=transfer)
> > exten => s,3,Set(CIDNUMORIG=${CALLERID(num)}) ; save callerid-num
> > exten => s,4,Set(CALLERID(num)=98765) ; dial out using msn 98765
> > exten => s,5,Dial(Zap/g1/${ARG1}|30|t)
> > 
> > exten => h,1,Set(CALLERID(num)=${CIDNUMORIG}) restore callerid-num for
> > CDR
> > 
> > [transfer]
> > exten => _X.,1,Set(CALLERID(all)="External" <0123456789>)
> > exten => _X.,1,Dial(SIP/${EXTEN})
> > 
> > 
> > So I call 0123456789 with SIP phone 10. The callee dials *1 20 for
> > attended transfer and SIP phone 20 (I have *1 for attended transfer in
> > features.conf). The called SIP-phone shows the caller-information I
> > set in context "transfer". But the CDR is wrong, it has 98765 in MySQL
> > field src. So it seems I can't overwrite the ${CALLERID(num)} for cdr,
> > but for the called channel.
> > Anybody who can explain that? Or any solution for called Zap channels
> > making an attended transfer?
> > 
> _______________________________________________
> --Bandwidth and Colocation provided by Easynews.com --
> 
> asterisk-users mailing list
> To UNSUBSCRIBE or update options visit:
>    http://lists.digium.com/mailman/listinfo/asterisk-users


Murf, doesn't the first solution pretty much preclude the ability to
bill for additional content or application access? 

And do you foresee a manner in which you would be able to assign a cdr
event type in the dial plan to a given termination type, not only
predefined ones as you have shown?


This is not criticism just an attempt to understand, so if I have missed
some poignant piece of information,  please point me in the proper
direction.


Thanks,
Dave






More information about the asterisk-users mailing list