diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/tex/asterisk.tex | 4 | ||||
-rw-r--r-- | doc/tex/cel-doc.tex | 958 | ||||
-rw-r--r-- | doc/tex/celdriver.tex | 447 |
3 files changed, 1409 insertions, 0 deletions
diff --git a/doc/tex/asterisk.tex b/doc/tex/asterisk.tex index f3a77a52b..e9c9b3275 100644 --- a/doc/tex/asterisk.tex +++ b/doc/tex/asterisk.tex @@ -117,6 +117,10 @@ reference purposes. \input{billing.tex} \input{cdrdriver.tex} +\chapter{CEL: Channel Event Logging} +\input{cel-doc.tex} +\input{celdriver.tex} + \chapter{Voicemail} \section{ODBC Storage} \label{odbcstorage} diff --git a/doc/tex/cel-doc.tex b/doc/tex/cel-doc.tex new file mode 100644 index 000000000..fdda68c37 --- /dev/null +++ b/doc/tex/cel-doc.tex @@ -0,0 +1,958 @@ + +\section{Design Goals} + +CEL, or Channel Event Logging, has been written with the hopes that it will help +solve some of the problems that were difficult to address in CDR records. Some +difficulties in CDR generation are the fact that the CDR record stores three +events: the "Start" time, the "Answer" time, and the "End" time. Billing time is +usually the difference between "Answer" and "End", and total call duration was +the difference in time from "Start" to "End". The trouble with this direct and +simple approach is the fact that calls can be transferred, put on hold, +conferenced, forwarded, etc. In general, those doing billing applications in +Asterisk find they have to do all sorts of very creative things to overcome the +shortcomings of CDR records, often supplementing the CDR records with AGI +scripts and manager event filters. + +The fundamental assumption is that the Channel is the fundamental communication +object in asterisk, which basically provides a communication channel between two +communication ports. It makes sense to have an event system aimed at recording +important events on channels. Each event is attached to a channel, like ANSWER +or HANGUP. Some events are meant to connect two or more channels, like the +BRIDGE\_START event. Some events, like BLINDTRANSFER, are initiated by one +channel, but affect two others. These events use the Peer field, like BRIDGE +would, to point to the target channel. + +The design philosophy of CEL is to generate event data that can grouped together +to form a billing record. This may not be a simple task, but we hope to provide +a few different examples that could be used as a basis for those involved in +this effort. + +There are definite parallels between Manager events and CEL events, but there +are some differences. Some events that are generated by CEL are not generated +by the Manager interface (yet). CEL is optimized for databases, and Manager +events are not. The focus of CEL is billing. The Manager interface is targeted +to real-time monitoring and control of asterisk. + +To give the reader a feel for the complexities involved in billing, please take +note of the following sequence of events: + +Remember that 150, 151, and 152 are all Zap extension numbers, and their +respective devices are Zap/50, Zap/51, and Zap/52. + +152 dials 151; 151 answers. 152 parks 151; 152 hangs up. 150 picks up the park +(dials 701). 150 and 151 converse. 151 flashes hook; dials 152, talks to 152, +then 151 flashes hook again for 3-way conference. 151 converses with the other +two for a while, then hangs up. 150 and 152 keep conversing, then hang up. 150 +hangs up first.(not that it matters). + +This sequence of actions will generate the following annotated list of 42 CEL +events: + +{\it Note that the actual CEL events below are in CSV format and do not include + the ;;; and text after that which gives a description of what the event + represents.} + +\begin{astlisting} +"EV\_CHAN\_START","2007-05-09 12:46:16","fxs.52","152","","","","s","extension","Zap/52-1","","","DOCUMENTATION","","1178736376.3","","" ;;; 152 takes the phone off-hook + +"EV\_APP\_START","2007-05-09 12:46:18","fxs.52","152","152","","","151","extension","Zap/52-1","Dial","Zap/51|30|TtWw","DOCUMENTATION","","1178736376.3" ;;; 152 finishes dialing 151 + +"EV\_CHAN\_START","2007-05-09 12:46:18","fxs.51","151","","","","s","extension","Zap/51-1","","","DOCUMENTATION","","1178736378.4","","" ;;; 151 channel created, starts ringing + +{\it (151 is ringing)} + +"EV\_ANSWER","2007-05-09 12:46:19","","151","152","","","151","extension","Zap/51-1","AppDial","(Outgoing Line)","DOCUMENTATION","","1178736378.4","","" ;;; 151 answers + +"EV\_ANSWER","2007-05-09 12:46:19","fxs.52","152","152","","","151","extension","Zap/52-1","Dial","Zap/51|30|TtWw","DOCUMENTATION","","1178736376.3","","" ;;; so does 152 (???) + +"EV\_BRIDGE\_START","2007-05-09 12:46:20","fxs.52","152","152","","","151","extension","Zap/52-1","Dial","Zap/51|30|TtWw","DOCUMENTATION","","1178736376.3","","Zap/51-1" ;;; 152 and 151 are bridged + +{\it (151 and 152 are conversing)} + +"EV\_BRIDGE\_END","2007-05-09 12:46:25","fxs.52","152","152","","","151","extension","Zap/52-1","Dial","Zap/51|30|TtWw","DOCUMENTATION","","1178736376.3","","" ;;; after 5 seconds, the bridge ends (152 dials \#700?) + +"EV\_BRIDGE\_START","2007-05-09 12:46:25","fxs.52","152","152","","","151","extension","Zap/52-1","Dial","Zap/51|30|TtWw","DOCUMENTATION","","1178736376.3","","Zap/51-1" ;;; extraneous 0-second bridge? + +"EV\_BRIDGE\_END","2007-05-09 12:46:25","fxs.52","152","152","","","151","extension","Zap/52-1","Dial","Zap/51|30|TtWw","DOCUMENTATION","","1178736376.3","","" ;;; + +"EV\_PARK\_START","2007-05-09 12:46:27","","151","152","","","","extension","Zap/51-1","Parked Call","","DOCUMENTATION","","1178736378.4","","" ;;; 151 is parked + +"EV\_HANGUP","2007-05-09 12:46:29","fxs.52","152","152","","","h","extension","Zap/52-1","","","DOCUMENTATION","","1178736376.3" ,"","" ;;; 152 hangs up 2 sec later + +"EV\_CHAN\_END","2007-05-09 12:46:29","fxs.52","152","152","","","h","extension","Zap/52-1","","","DOCUMENTATION","","1178736376.3","","" ;;; 152's channel goes away + +{\it (151 is parked and listening to MOH! now, 150 picks up, and dials 701)} + +"EV\_CHAN\_START","2007-05-09 12:47:08","fxs.50","150","","","","s","extension","Zap/50-1","","","DOCUMENTATION","","1178736428.5","","" ;;; 150 picks up the phone, dials 701 + +"EV\_PARK\_END","2007-05-09 12:47:11","","151","152","","","","extension","Zap/51-1","Parked Call","","DOCUMENTATION","","1178736378.4","","" ;;; 151's park comes to end + +"EV\_ANSWER","2007-05-09 12:47:11","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","" ;;; 150 gets answer (twice) + +"EV\_ANSWER","2007-05-09 12:47:12","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","" ;;; + +"EV\_BRIDGE\_START","2007-05-09 12:47:12","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; bridge begins between 150 and recently parked 151 + +{\it (150 and 151 are conversing, then 151 hits flash)} + +"EV\_CHAN\_START","2007-05-09 12:47:51","fxs.51","151","","","","s","extension","Zap/51-2","","","DOCUMENTATION","","1178736471.6","","" ;;; 39 seconds later, 51-2 channel is created. (151 flashes hook) + +"EV\_HOOKFLASH","2007-05-09 12:47:51","","151","152","","","","extension","Zap/51-1","Bridged Call","Zap/50-1","DOCUMENTATION","","1178736378.4","","Zap/51-2" ;;; a marker to record that 151 flashed the hook + +"EV\_BRIDGE\_END","2007-05-09 12:47:51","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; bridge ends between 150 and 151 + +"EV\_BRIDGE\_START","2007-05-09 12:47:51","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; 0-second bridge from 150 to ? 150 gets no sound at all + +"EV\_BRIDGE\_END","2007-05-09 12:47:51","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; + +"EV\_BRIDGE\_START","2007-05-09 12:47:51","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; bridge start on 150 + +{\it (151 has dialtone after hitting flash; dials 152)} + +"EV\_APP\_START","2007-05-09 12:47:55","fxs.51","151","151","","","152","extension","Zap/51-2","Dial","Zap/52|30|TtWw","DOCUMENTATION","","1178736471.6","","" ;;; 151-2 dials 152 after 4 seconds + +"EV\_CHAN\_START","2007-05-09 12:47:55","fxs.52","152","","","","s","extension","Zap/52-1","","","DOCUMENTATION","","1178736475.7" ,"","" ;;; 152 channel created to ring 152. + +{\it (152 ringing)} + +"EV\_ANSWER","2007-05-09 12:47:58","","152","151","","","152","extension","Zap/52-1","AppDial","(Outgoing Line)","DOCUMENTATION","","1178736475.7","","" ;;; 3 seconds later, 152 answers + +"EV\_ANSWER","2007-05-09 12:47:58","fxs.51","151","151","","","152","extension","Zap/51-2","Dial","Zap/52|30|TtWw","DOCUMENTATION","","1178736471.6","","" ;;; ... and 151-2 also answers + +"EV\_BRIDGE\_START","2007-05-09 12:47:59","fxs.51","151","151","","","152","extension","Zap/51-2","Dial","Zap/52|30|TtWw","DOCUMENTATION","","1178736471.6","","Zap/51-1" ;;; 1 second later, bridge formed betw. 151-2 and 151 + +{\it (152 answers, 151 and 152 convering; 150 is listening to silence; 151 hits flash again... to start a 3way)} + +"EV\_3WAY\_START","2007-05-09 12:48:58","","151","152","","","","extension","Zap/51-1","Bridged Call","Zap/50-1","DOCUMENTATION","","1178736378.4","","Zap/51-2" ;;; another hook-flash to begin a 3-way conference + +"EV\_BRIDGE\_END","2007-05-09 12:48:58","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; -- almost 1 minute later, the bridge ends (151 flashes hook again) + +"EV\_BRIDGE\_START","2007-05-09 12:48:58","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; 0-second bridge at 150. (3 way conf formed) + +"EV\_BRIDGE\_END","2007-05-09 12:48:58","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; + +"EV\_BRIDGE\_START","2007-05-09 12:48:58","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; bridge starts for 150 + +{\it (3way now, then 151 hangs up.)} + +"EV\_BRIDGE\_END","2007-05-09 12:49:26","fxs.50","150","150","","","701","extension","Zap/50-1","ParkedCall","701","DOCUMENTATION","","1178736428.5","","Zap/51-1" ;;; 28 seconds later, bridge ends + +"EV\_HANGUP","2007-05-09 12:49:26","","151","152","","","","extension","Zap/51-1","Bridged Call","Zap/50-1","DOCUMENTATION","","1178736378.4","","" ;;; 151 hangs up, leaves 150 and 152 connected + +"EV\_CHAN\_END","2007-05-09 12:49:26","","151","152","","","","extension","Zap/51-1","Bridged Call","Zap/50-1","DOCUMENTATION","","1178736378.4","","" ;;; 151 channel ends + +"EV\_CHAN\_END","2007-05-09 12:49:26","fxs.51","151","151","","","h","extension","Zap/51-2<ZOMBIE>","","","DOCUMENTATION","","1178736428.5","","" ;;; 152-2 channel ends (zombie) + +{\it (just 150 and 152 now)} + +"EV\_BRIDGE\_END","2007-05-09 12:50:13","fxs.50","150","150","","","152","extension","Zap/50-1","Dial","Zap/52|30|TtWw","DOCUMENTATION","","1178736471.6","","" ;;; 47 sec later, the bridge from 150 to 152 ends + +"EV\_HANGUP","2007-05-09 12:50:13","","152","151","","","","extension","Zap/52-1","Bridged Call","Zap/50-1","DOCUMENTATION","","1178736475.7","","" ;;; 152 hangs up + +"EV\_CHAN\_END","2007-05-09 12:50:13","","152","151","","","","extension","Zap/52-1","Bridged Call","Zap/50-1","DOCUMENTATION","","1178736475.7","","" ;;; 152 channel ends + +"EV\_HANGUP","2007-05-09 12:50:13","fxs.50","150","150","","","h","extension","Zap/50-1","","","DOCUMENTATION","","1178736471.6","","" ;;; 150 hangs up + +"EV\_CHAN\_END","2007-05-09 12:50:13","fxs.50","150","150","","","h","extension","Zap/50-1","","","DOCUMENTATION","","1178736471.6","","" ;;; 150 ends +\end{astlisting} + +In terms of Manager events, the above Events correspond to the following 80 +Manager events: + +\begin{astlisting} +\begin{verbatim} +Event: Newchannel +Privilege: call,all +Channel: Zap/52-1 +State: Rsrvd +CallerIDNum: 152 +CallerIDName: fxs.52 +Uniqueid: 1178801102.5 + +Event: Newcallerid +Privilege: call,all +Channel: Zap/52-1 +CallerIDNum: 152 +CallerIDName: fxs.52 +Uniqueid: 1178801102.5 +CID-CallingPres: 0 (Presentation Allowed, Not Screened) + +Event: Newcallerid +Privilege: call,all +Channel: Zap/52-1 +CallerIDNum: 152 +CallerIDName: fxs.52 +Uniqueid: 1178801102.5 +CID-CallingPres: 0 (Presentation Allowed, Not Screened) + +Event: Newstate +Privilege: call,all +Channel: Zap/52-1 +State: Ring +CallerIDNum: 152 +CallerIDName: fxs.52 +Uniqueid: 1178801102.5 + +Event: Newexten +Privilege: call,all +Channel: Zap/52-1 +Context: extension +Extension: 151 +Priority: 1 +Application: Set +AppData: CDR(myvar)=zingo +Uniqueid: 1178801102.5 + +Event: Newexten +Privilege: call,all +Channel: Zap/52-1 +Context: extension +Extension: 151 +Priority: 2 +Application: Dial +AppData: Zap/51|30|TtWw +Uniqueid: 1178801102.5 + +Event: Newchannel +Privilege: call,all +Channel: Zap/51-1 +State: Rsrvd +CallerIDNum: 151 +CallerIDName: fxs.51 +Uniqueid: 1178801108.6 + +Event: Newstate +Privilege: call,all +Channel: Zap/51-1 +State: Ringing +CallerIDNum: 152 +CallerIDName: fxs.52 +Uniqueid: 1178801108.6 + +Event: Dial +Privilege: call,all +SubEvent: Begin +Source: Zap/52-1 +Destination: Zap/51-1 +CallerIDNum: 152 +CallerIDName: fxs.52 +SrcUniqueID: 1178801102.5 +DestUniqueID: 1178801108.6 + +Event: Newcallerid +Privilege: call,all +Channel: Zap/51-1 +CallerIDNum: 151 +CallerIDName: <Unknown> +Uniqueid: 1178801108.6 +CID-CallingPres: 0 (Presentation Allowed, Not Screened) + +Event: Newstate +Privilege: call,all +Channel: Zap/52-1 +State: Ringing +CallerIDNum: 152 +CallerIDName: fxs.52 +Uniqueid: 1178801102.5 + +Event: Newstate +Privilege: call,all +Channel: Zap/51-1 +State: Up +CallerIDNum: 151 +CallerIDName: <unknown> +Uniqueid: 1178801108.6 + +Event: Newstate +Privilege: call,all +Channel: Zap/52-1 +State: Up +CallerIDNum: 152 +CallerIDName: fxs.52 +Uniqueid: 1178801102.5 + +Event: Link +Privilege: call,all +Channel1: Zap/52-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801102.5 +Uniqueid2: 1178801108.6 +CallerID1: 152 +CallerID2: 151 + +Event: Unlink +Privilege: call,all +Channel1: Zap/52-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801102.5 +Uniqueid2: 1178801108.6 +CallerID1: 152 +CallerID2: 151 + +Event: Link +Privilege: call,all +Channel1: Zap/52-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801102.5 +Uniqueid2: 1178801108.6 +CallerID1: 152 +CallerID2: 151 + +Event: Unlink +Privilege: call,all +Channel1: Zap/52-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801102.5 +Uniqueid2: 1178801108.6 +CallerID1: 152 +CallerID2: 151 + +Event: ParkedCall +Privilege: call,all +Exten: 701 +Channel: Zap/51-1 +From: Zap/52-1 +Timeout: 45 +CallerIDNum: 151 +CallerIDName: <unknown> + +Event: Dial +Privilege: call,all +SubEvent: End +Channel: Zap/52-1 +DialStatus: ANSWER + +Event: Newexten +Privilege: call,all +Channel: Zap/52-1 +Context: extension +Extension: h +Priority: 1 +Application: Goto +AppData: label1 +Uniqueid: 1178801102.5 + +Event: Newexten +Privilege: call,all +Channel: Zap/52-1 +Context: extension +Extension: h +Priority: 4 +Application: Goto +AppData: label2 +Uniqueid: 1178801102.5 + +Event: Newexten +Privilege: call,all +Channel: Zap/52-1 +Context: extension +Extension: h +Priority: 2 +Application: NoOp +AppData: In Hangup! myvar is zingo and accountcode is billsec is 26 and duration is 40 and end is 2007-05-10 06:45:42. +Uniqueid: 1178801102.5 + +Event: Newexten +Privilege: call,all +Channel: Zap/52-1 +Context: extension +Extension: h +Priority: 3 +Application: Goto +AppData: label3 +Uniqueid: 1178801102.5 + +Event: Newexten +Privilege: call,all +Channel: Zap/52-1 +Context: extension +Extension: h +Priority: 5 +Application: NoOp +AppData: More Hangup message after hopping around" +Uniqueid: 1178801102.5 + +Event: Hangup +Privilege: call,all +Channel: Zap/52-1 +Uniqueid: 1178801102.5 +Cause: 16 +Cause-txt: Normal Clearing + +Event: Newchannel +Privilege: call,all +Channel: Zap/50-1 +State: Rsrvd +CallerIDNum: 150 +CallerIDName: fxs.50 +Uniqueid: 1178801162.7 + +Event: Newcallerid +Privilege: call,all +Channel: Zap/50-1 +CallerIDNum: 150 +CallerIDName: fxs.50 +Uniqueid: 1178801162.7 +CID-CallingPres: 0 (Presentation Allowed, Not Screened) + +Event: Newcallerid +Privilege: call,all +Channel: Zap/50-1 +CallerIDNum: 150 +CallerIDName: fxs.50 +Uniqueid: 1178801162.7 +CID-CallingPres: 0 (Presentation Allowed, Not Screened) + +Event: Newstate +Privilege: call,all +Channel: Zap/50-1 +State: Ring +CallerIDNum: 150 +CallerIDName: fxs.50 +Uniqueid: 1178801162.7 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: 701 +Priority: 1 +Application: ParkedCall +AppData: 701 +Uniqueid: 1178801162.7 + +Event: UnParkedCall +Privilege: call,all +Exten: 701 +Channel: Zap/51-1 +From: Zap/50-1 +CallerIDNum: 151 +CallerIDName: <unknown> + +Event: Newstate +Privilege: call,all +Channel: Zap/50-1 +State: Up +CallerIDNum: 150 +CallerIDName: fxs.50 +Uniqueid: 1178801162.7 + +Event: Link +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Newchannel +Privilege: call,all +Channel: Zap/51-2 +State: Rsrvd +CallerIDNum: 151 +CallerIDName: fxs.51 +Uniqueid: 1178801218.8 + +Event: Unlink +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Link +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Unlink +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Link +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Newcallerid +Privilege: call,all +Channel: Zap/51-2 +CallerIDNum: 151 +CallerIDName: fxs.51 +Uniqueid: 1178801218.8 +CID-CallingPres: 0 (Presentation Allowed, Not Screened) + +Event: Newcallerid +Privilege: call,all +Channel: Zap/51-2 +CallerIDNum: 151 +CallerIDName: fxs.51 +Uniqueid: 1178801218.8 +CID-CallingPres: 0 (Presentation Allowed, Not Screened) + +Event: Newstate +Privilege: call,all +Channel: Zap/51-2 +State: Ring +CallerIDNum: 151 +CallerIDName: fxs.51 +Uniqueid: 1178801218.8 + +Event: Newexten +Privilege: call,all +Channel: Zap/51-2 +Context: extension +Extension: 152 +Priority: 1 +Application: Set +AppData: CDR(myvar)=zingo +Uniqueid: 1178801218.8 + +Event: Newexten +Privilege: call,all +Channel: Zap/51-2 +Context: extension +Extension: 152 +Priority: 2 +Application: Dial +AppData: Zap/52|30|TtWw +Uniqueid: 1178801218.8 + +Event: Newchannel +Privilege: call,all +Channel: Zap/52-1 +State: Rsrvd +CallerIDNum: 152 +CallerIDName: fxs.52 +Uniqueid: 1178801223.9 + +Event: Newstate +Privilege: call,all +Channel: Zap/52-1 +State: Ringing +CallerIDNum: 151 +CallerIDName: fxs.51 +Uniqueid: 1178801223.9 + +Event: Dial +Privilege: call,all +SubEvent: Begin +Source: Zap/51-2 +Destination: Zap/52-1 +CallerIDNum: 151 +CallerIDName: fxs.51 +SrcUniqueID: 1178801218.8 +DestUniqueID: 1178801223.9 + +Event: Newcallerid +Privilege: call,all +Channel: Zap/52-1 +CallerIDNum: 152 +CallerIDName: <Unknown> +Uniqueid: 1178801223.9 +CID-CallingPres: 0 (Presentation Allowed, Not Screened) + +Event: Newstate +Privilege: call,all +Channel: Zap/51-2 +State: Ringing +CallerIDNum: 151 +CallerIDName: fxs.51 +Uniqueid: 1178801218.8 + +Event: Newstate +Privilege: call,all +Channel: Zap/52-1 +State: Up +CallerIDNum: 152 +CallerIDName: <unknown> +Uniqueid: 1178801223.9 + +Event: Newstate +Privilege: call,all +Channel: Zap/51-2 +State: Up +CallerIDNum: 151 +CallerIDName: fxs.51 +Uniqueid: 1178801218.8 + +Event: Link +Privilege: call,all +Channel1: Zap/51-2 +Channel2: Zap/52-1 +Uniqueid1: 1178801218.8 +Uniqueid2: 1178801223.9 +CallerID1: 151 +CallerID2: 152 + +Event: Unlink +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Link +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Unlink +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Link +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Unlink +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/51-1 +Uniqueid1: 1178801162.7 +Uniqueid2: 1178801108.6 +CallerID1: 150 +CallerID2: 151 + +Event: Hangup +Privilege: call,all +Channel: Zap/51-1 +Uniqueid: 1178801108.6 +Cause: 16 +Cause-txt: Normal Clearing + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 1 +Application: Goto +AppData: label1 +Uniqueid: 1178801162.7 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 4 +Application: Goto +AppData: label2 +Uniqueid: 1178801162.7 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 2 +Application: NoOp +AppData: In Hangup! myvar is and accountcode is billsec is 0 and duration is 0 and end is 2007-05-10 06:48:37. +Uniqueid: 1178801162.7 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 3 +Application: Goto +AppData: label3 +Uniqueid: 1178801162.7 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 5 +Application: NoOp +AppData: More Hangup message after hopping around" +Uniqueid: 1178801162.7 + +Event: Masquerade +Privilege: call,all +Clone: Zap/50-1 +CloneState: Up +Original: Zap/51-2 +OriginalState: Up + +Event: Rename +Privilege: call,all +Oldname: Zap/50-1 +Newname: Zap/50-1<MASQ> +Uniqueid: 1178801162.7 + +Event: Rename +Privilege: call,all +Oldname: Zap/51-2 +Newname: Zap/50-1 +Uniqueid: 1178801218.8 + +Event: Rename +Privilege: call,all +Oldname: Zap/50-1<MASQ> +Newname: Zap/51-2<ZOMBIE> +Uniqueid: 1178801162.7 + +Event: Hangup +Privilege: call,all +Channel: Zap/51-2<ZOMBIE> +Uniqueid: 1178801162.7 +Cause: 0 +Cause-txt: Unknown + +Event: Unlink +Privilege: call,all +Channel1: Zap/50-1 +Channel2: Zap/52-1 +Uniqueid1: 1178801218.8 +Uniqueid2: 1178801223.9 +CallerID1: 150 +CallerID2: 152 + +Event: Hangup +Privilege: call,all +Channel: Zap/52-1 +Uniqueid: 1178801223.9 +Cause: 16 +Cause-txt: Normal Clearing + +Event: Dial +Privilege: call,all +SubEvent: End +Channel: Zap/50-1 +DialStatus: ANSWER + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 1 +Application: Goto +AppData: label1 +Uniqueid: 1178801218.8 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 4 +Application: Goto +AppData: label2 +Uniqueid: 1178801218.8 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 2 +Application: NoOp +AppData: In Hangup! myvar is and accountcode is billsec is 90 and duration is 94 and end is 2007-05-10 06:48:37. +Uniqueid: 1178801218.8 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 3 +Application: Goto +AppData: label3 +Uniqueid: 1178801218.8 + +Event: Newexten +Privilege: call,all +Channel: Zap/50-1 +Context: extension +Extension: h +Priority: 5 +Application: NoOp +AppData: More Hangup message after hopping around" +Uniqueid: 1178801218.8 + +Event: Hangup +Privilege: call,all +Channel: Zap/50-1 +Uniqueid: 1178801218.8 +Cause: 16 +Cause-txt: Normal Clearing +\end{verbatim} +\end{astlisting} + +And, humorously enough, the above 80 manager events, or 42 CEL events, +correspond to the following two CDR records (at the moment!): + +\begin{astlisting} +""fxs.52" <152>","152","h","extension","Zap/52-1","Zap/51-1","NoOp","More Hangup message after hopping around"","2007-05-09 17:35:56","2007-05-09 17:36:20","2007-05-09 17:36:36","40","16","ANSWERED","DOCUMENTATION","","1178753756.0","" + +""fxs.50" <150>","150","152","extension","Zap/50-1","Zap/51-1","NoOp","More Hangup message after hopping around"","2007-05-09 17:37:59","2007-05-09 17:38:06","2007-05-09 17:39:11","72","65","ANSWERED","DOCUMENTATION","","1178753871.3","" +\end{astlisting} + + +\section{Events \& Fields} + +While CDRs and the Manager are basically both event tracking mechanisms, CEL +tries to track only those events that might pertain to billing issues. + +See table~\ref{event_table} for a list of events raised by CEL and +table~\ref{field_table} for the list of fields passed for each CEL event. + +\begin{table}[h] + \begin{tabular}{ | l | p{10cm} | } + \hline + Event & Description \\ \hline \hline + CHAN\_START & The time a channel was created \\ \hline + CHAN\_END & The time a channel was terminated \\ \hline + ANSWER & The time a channel was answered (ie, phone taken off-hook, etc) \\ \hline + HANGUP & The time at which a hangup occurred. \\ \hline + CONF\_ENTER & The time a channel was connected into a conference room \\ \hline + CONF\_EXIT & The time a channel was removed from a conference room \\ \hline + CONF\_START & The time the first person enters a conference \\ \hline + CONF\_END & The time the last person left a conf (and turned out the lights?) \\ \hline + APP\_START & The time a tracked application was started \\ \hline + APP\_END & the time a tracked application ended \\ \hline + PARK\_START & The time a call was parked \\ \hline + PARK\_END & unpark event \\ \hline + BRIDGE\_START & The time a bridge is started \\ \hline + BRIDGE\_END & The time a bridge is ended \\ \hline + 3WAY\_START & When a 3-way conf starts (usually via attended xfer) \\ \hline + 3WAY\_END & When one or all exit a 3-way conf \\ \hline + BLINDTRANSFER & When a blind transfer is initiated \\ \hline + ATTENDEDTRANSFER & When an attended transfer is initiated \\ \hline + TRANSFER & Generic transfer initiated; not used yet...? \\ \hline + HOOKFLASH & So far, when a hookflash event occurs on a Zap interface \\ \hline + USER\_EVENT & these are triggered from the dialplan, and have a name given by the user. \\ + \hline + \end{tabular} + \caption{List of CEL Events} + \label{event_table} +\end{table} + +\begin{table}[h] + \begin{tabular}{ | l | p{10cm} | } + \hline + Field & Description \\ \hline \hline + eventtype & The name of the event; see the above list; each is prefixed with "EV\_". \\ \hline + eventtime & The time the event happened \\ \hline + cidname & CID name field \\ \hline + cidnum & CID number field \\ \hline + cidani & CID ANI field \\ \hline + cidrdnis & CID RDNIS field \\ \hline + ciddnid & CID DNID field \\ \hline + exten & The extension in the dialplan \\ \hline + context & The context in the dialplan \\ \hline + channame & The name assigned to the channel in which the event took place \\ \hline + appname & The name of the current application \\ \hline + appdata & The arguments that will be handed to that application \\ \hline + amaflags & The AMA flags associated with the event; user assignable. \\ \hline + accountcode & A user assigned datum (string) \\ \hline + uniqueid & Each Channel instance gets a unique ID associated with it. \\ \hline + userfield & A user assigned datum (string) \\ \hline + linkedid & the per-call id, spans several events, possibly. \\ \hline + peer & For bridge or other 2-channel events, this would be the other channel name \\ + \hline + \end{tabular} + \caption{List of CEL Event Fields} + \label{field_table} +\end{table} + +\section{Applications \& Functions} + +\subsection{CEL Function} + +**** THIS IS NO LONGER TRUE. REWRITE. **** + +The CEL function parallels the CDR function, for fetching values from the +channel or event. It has some notable notable differences, though! For +instance, CEL data is not stored on the channel. Well, not much of it, anyway! +You can use the CEL function to set the amaflags, accountcode, and userfield, +which are stored on the channel. + +Channel variables are not available for reading from the CEL function, nor can +any variable name other than what's in the list, be set. CDRs have a structure +attached to the channel, where the CDR function could access the values stored +there, or set the values there. CDRs could store their own variable lists, but +CEL has no such storage. There is no reason to store any event information, as +they are immediately output to the various backends at the time they are +generated. + +See the description for the CEL function from the CLI: core show function CEL + +Here is a list of all the available channel field names: +\begin{verbatim} + cidname userfield + cidnum amaflags + cidani cidrdnis + ciddnid appdata + exten accountcode + context uniqueid + channame appname + peer eventtime + eventtype +\end{verbatim} + +\subsection{CELGenUserEvent Application} + +This application allows the dialplan to insert custom events into the event +stream. + +For more information, in the CLI, type: core show application CELGenUserEvent + +Its arguments take this format: + +\begin{verbatim} + CELGenUserEvent(eventname) +\end{verbatim} + +Please note that there is no restrictions on the name supplied. If it happens to +match a standard CEL event name, it will look like that event was +generated. This could be a blessing or a curse! + +\section{Configuration Files} + +\begin{itemize} +\item cel.conf +\end{itemize} + +\section{Generating Billing Information} + +*** This is the Next Big Task *** + + diff --git a/doc/tex/celdriver.tex b/doc/tex/celdriver.tex new file mode 100644 index 000000000..19224d674 --- /dev/null +++ b/doc/tex/celdriver.tex @@ -0,0 +1,447 @@ +\section{Storage Backends} + +Right now, the CEL package will support CSV, Customized CSV, ODBC, PGSQL, TDS, +Sqlite3, and Radius back ends. See the doc/celdriver.tex file +for how to use these back ends. + +\subsection{Microsoft SQL Server} + + Asterisk can currently store Channel Events into an MSSQL database in + two different ways: cel\_odbc or cel\_tds + + Channel Event Records can be stored using unixODBC (which requires + the FreeTDS package) [cel\_odbc] or directly by using just the + FreeTDS package [cel\_tds] The following provide some + examples known to get asterisk working with mssql. + + NOTE: Only choose one db connector. + +\subsubsection{ODBC using cel\_odbc} + Compile, configure, and install the latest unixODBC package: +\begin{verbatim} + tar -zxvf unixODBC-2.2.9.tar.gz && + cd unixODBC-2.2.9 && + ./configure --sysconfdir=/etc --prefix=/usr --disable-gui && + make && + make install +\end{verbatim} + + Compile, configure, and install the latest FreeTDS package: +\begin{verbatim} + tar -zxvf freetds-0.62.4.tar.gz && + cd freetds-0.62.4 && + ./configure --prefix=/usr --with-tdsver=7.0 \ + --with-unixodbc=/usr/lib && + make && make install +\end{verbatim} + + Compile, or recompile, asterisk so that it will now add support + for cel\_odbc. +\begin{verbatim} + make clean && ./configure --with-odbc && + make update && + make && + make install +\end{verbatim} + + Setup odbc configuration files. These are working examples + from my system. You will need to modify for your setup. + You are not required to store usernames or passwords here. + +\begin{verbatim} + /etc/odbcinst.ini + [FreeTDS] + Description = FreeTDS ODBC driver for MSSQL + Driver = /usr/lib/libtdsodbc.so + Setup = /usr/lib/libtdsS.so + FileUsage = 1 + + /etc/odbc.ini + [MSSQL-asterisk] + description = Asterisk ODBC for MSSQL + driver = FreeTDS + server = 192.168.1.25 + port = 1433 + database = voipdb + tds_version = 7.0 + language = us_english +\end{verbatim} + + Only install one database connector. Do not confuse asterisk + by using both ODBC (cel\_odbc) and FreeTDS (cel\_tds). + This command will erase the contents of cel\_tds.conf +\begin{verbatim} + [ -f /etc/asterisk/cel_tds.conf ] > /etc/asterisk/cel_tds.conf +\end{verbatim} + NOTE: unixODBC requires the freeTDS package, but asterisk does + not call freeTDS directly. + + Now set up cel\_odbc configuration files. These are working samples + from my system. You will need to modify for your setup. Define + your usernames and passwords here, secure file as well. +\begin{verbatim} + /etc/asterisk/cel_odbc.conf + [global] + dsn=MSSQL-asterisk + username=voipdbuser + password=voipdbpass + loguniqueid=yes +\end{verbatim} + And finally, create the 'cel' table in your mssql database. +\begin{verbatim} + CREATE TABLE cel ( + [eventtype] [varchar] (30) NOT NULL , + [eventtime] [datetime] NOT NULL , + [cidname] [varchar] (80) NOT NULL , + [cidnum] [varchar] (80) NOT NULL , + [cidani] [varchar] (80) NOT NULL , + [cidrdnis] [varchar] (80) NOT NULL , + [ciddnid] [varchar] (80) NOT NULL , + [exten] [varchar] (80) NOT NULL , + [context] [varchar] (80) NOT NULL , + [channame] [varchar] (80) NOT NULL , + [appname] [varchar] (80) NOT NULL , + [appdata] [varchar] (80) NOT NULL , + [amaflags] [int] NOT NULL , + [accountcode] [varchar] (20) NOT NULL , + [uniqueid] [varchar] (32) NOT NULL , + [peer] [varchar] (80) NOT NULL , + [userfield] [varchar] (255) NOT NULL + ) +\end{verbatim} + Start asterisk in verbose mode, you should see that asterisk + logs a connection to the database and will now record every + desired channel event at the moment it occurs. + +\subsubsection{FreeTDS, using cel\_tds} + Compile, configure, and install the latest FreeTDS package: +\begin{verbatim} + tar -zxvf freetds-0.62.4.tar.gz && + cd freetds-0.62.4 && + ./configure --prefix=/usr --with-tdsver=7.0 + make && + make install +\end{verbatim} + Compile, or recompile, asterisk so that it will now add support + for cel\_tds. +\begin{verbatim} + make clean && ./configure --with-tds && + make update && + make && + make install +\end{verbatim} + Only install one database connector. Do not confuse asterisk + by using both ODBC (cel\_odbc) and FreeTDS (cel\_tds). + This command will erase the contents of cel\_odbc.conf +\begin{verbatim} + [ -f /etc/asterisk/cel_odbc.conf ] > /etc/asterisk/cel_odbc.conf +\end{verbatim} + Setup cel\_tds configuration files. These are working samples + from my system. You will need to modify for your setup. Define + your usernames and passwords here, secure file as well. +\begin{verbatim} + /etc/asterisk/cel_tds.conf + [global] + hostname=192.168.1.25 + port=1433 + dbname=voipdb + user=voipdbuser + password=voipdpass + charset=BIG5 +\end{verbatim} + And finally, create the 'cel' table in your mssql database. +\begin{verbatim} + CREATE TABLE cel ( + [eventtype] [varchar] (30) NULL , + [eventtime] [datetime] NULL , + [cidname] [varchar] (80) NULL , + [cidnum] [varchar] (80) NULL , + [cidani] [varchar] (80) NULL , + [cidrdnis] [varchar] (80) NULL , + [ciddnid] [varchar] (80) NULL , + [exten] [varchar] (80) NULL , + [context] [varchar] (80) NULL , + [channame] [varchar] (80) NULL , + [appname] [varchar] (80) NULL , + [appdata] [varchar] (80) NULL , + [amaflags] [varchar] (16) NULL , + [accountcode] [varchar] (20) NULL , + [uniqueid] [varchar] (32) NULL , + [userfield] [varchar] (255) NULL , + [peer] [varchar] (80) NULL + ) +\end{verbatim} + Start asterisk in verbose mode, you should see that asterisk + logs a connection to the database and will now record every + call to the database when it's complete. + + +\subsection{MySQL} + +Using MySQL for Channel Event records is supported by using ODBC and the cel\_odbc module. + +\subsection{PostreSQL} + If you want to go directly to postgresql database, and have the cel\_pgsql.so + compiled you can use the following sample setup. + On Debian, before compiling asterisk, just install libpqxx-dev. + Other distros will likely have a similiar package. + + Once you have the compile done, + copy the sample cel\_pgsql.conf file or create your own. + + Here is a sample: +\begin{verbatim} + /etc/asterisk/cel_pgsql.conf + ; Sample Asterisk config file for CEL logging to PostgresSQL + [global] + hostname=localhost + port=5432 + dbname=asterisk + password=password + user=postgres + table=cel +\end{verbatim} + Now create a table in postgresql for your cels + +\begin{verbatim} + CREATE TABLE cel ( + eventtype varchar (30) NOT NULL , + eventtime time NOT NULL , + cidname varchar (80) NOT NULL , + cidnum varchar (80) NOT NULL , + cidani varchar (80) NOT NULL , + cidrdnis varchar (80) NOT NULL , + ciddnis varchar (80) NOT NULL , + exten varchar (80) NOT NULL , + context varchar (80) NOT NULL , + channame varchar (80) NOT NULL , + appname varchar (80) NOT NULL , + appdata varchar (80) NOT NULL , + amaflags int NOT NULL , + accountcode varchar (20) NOT NULL , + uniqueid varchar (32) NOT NULL , + userfield varchar (255) NOT NULL , + peer varchar (80) NOT NULL + ); +\end{verbatim} + +\subsection{SQLite 3} + +SQLite version 3 is supported in cel\_sqlite3\_custom. + +\subsection{RADIUS} + +\subsubsection{What is needed} + +\begin{itemize} + \item FreeRADIUS server + \item Radiusclient-ng library + \item Asterisk PBX +\end{itemize} + +\begin{figure}[h] +\begin{center} +\setlength{\unitlength}{4cm} +\begin{picture}(3,.75) +\put(0,0){\line(0,1){.75}} +\put(0,.75){\line(1,0){1.5}} +\put(1.5,0){\line(0,1){.75}} +\put(0,0){\line(1,0){1.5}} +\put(.1,.4){\makebox(1.3,.3){Asterisk PBX}} +\put(.1,.4){\line(1,0){1.3}} +\put(.1,.1){\line(1,0){1.3}} +\put(.1,.1){\line(0,1){.3}} +\put(1.4,.1){\line(0,1){.3}} +\put(.1,.1){\makebox(1.3,.3){RADIUS Client}} +\put(1.8,0){\line(0,1){.5}} +\put(1.8,.5){\line(1,0){1.1}} +\put(1.8,0){\line(1,0){1.1}} +\put(2.9,0){\line(0,1){.5}} +\put(1.8,.275){\makebox(1.1,.1){RADIUS Server}} +\put(1.8,.125){\makebox(1.1,.1){$(FreeRADIUS)$}} +\thicklines +\put(1.4,.3){\vector(1,0){.4}} +\put(1.8,.2){\vector(-1,0){.4}} +\thinlines +\end{picture} +\end{center} +\caption{Asterisk/RADIUS Integration} +\end{figure} + +\subsubsection{Installation of the Radiusclient library} + Installation: +\begin{verbatim} + Download the sources from: + + http://developer.berlios.de/projects/radiusclient-ng/ + + Untar the source tarball. + root@localhost:/usr/local/src# tar xvfz radiusclient-ng-0.5.5.1.tar.gz + + Compile and install the library. + root@localhost:/usr/local/src# cd radiusclient-ng-0.5.5.1 + root@localhost:/usr/local/src/radiusclient-ng-0.5.5.1# ./configure + root@localhost:/usr/local/src/radiusclient-ng-0.5.5.1# make + root@localhost:/usr/local/src/radiusclient-ng-0.5.5.1# make install +\end{verbatim} + +\subsubsection{Configuration of the Radiusclient library} + + By default all the configuration files of the radiusclient library will + be in /usr/local/etc/radiusclient-ng directory. + + File "radiusclient.conf" + Open the file and find lines containing the following: + + authserver localhost + + This is the hostname or IP address of the RADIUS server used for + authentication. You will have to change this unless the server is + running on the same host as your Asterisk PBX. + + acctserver localhost + This is the hostname or IP address of the RADIUS server used for + accounting. You will have to change this unless the server is running + on the same host as your Asterisk PBX. + + File "servers" + + RADIUS protocol uses simple access control mechanism based on shared + secrets that allows RADIUS servers to limit access from RADIUS clients. + + A RADIUS server is configured with a secret string and only RADIUS + clients that have the same secret will be accepted. + + You need to configure a shared secret for each server you have + configured in radiusclient.conf file in the previous step. The shared + secrets are stored in /usr/local/etc/radiusclient-ng/servers file. + + Each line contains hostname of a RADIUS server and shared secret + used in communication with that server. The two values are separated + by white spaces. Configure shared secrets for every RADIUS server you + are going to use. + + File "dictionary" + + Asterisk uses some attributes that are not included in the + dictionary of radiusclient library, therefore it is necessary to add + them. A file called dictionary.digium (kept in the contrib dir) + was created to list all new attributes used by Asterisk. + Add to the end of the main dictionary file + /usr/local/etc/radiusclient-ng/dictionary + the line: +\begin{verbatim} + \$INCLUDE /path/to/dictionary.digium +\end{verbatim} + +\subsubsection{Install FreeRADIUS Server (Version 1.1.1)} + + Download sources tarball from: + + http://freeradius.org/ + + Untar, configure, build, and install the server: + +\begin{verbatim} + root@localhost:/usr/local/src# tar xvfz freeradius-1.1.1.tar.gz + root@localhost:/usr/local/src# cd freeradius-1.1.1 + root@localhost"/usr/local/src/freeradius-1.1.1# ./configure + root@localhost"/usr/local/src/freeradius-1.1.1# make + root@localhost"/usr/local/src/freeradius-1.1.1# make install +\end{verbatim} + + All the configuration files of FreeRADIUS server will be in + /usr/local/etc/raddb directory. + + +\subsubsection{Configuration of the FreeRADIUS Server} + + There are several files that have to be modified to configure the + RADIUS server. These are presented next. + + File "clients.conf" + + File /usr/local/etc/raddb/clients.conf contains description of + RADIUS clients that are allowed to use the server. For each of the + clients you need to specify its hostname or IP address and also a + shared secret. The shared secret must be the same string you configured + in radiusclient library. + + Example: +\begin{verbatim} + client myhost { + secret = mysecret + shortname = foo + } +\end{verbatim} + + This fragment allows access from RADIUS clients on "myhost" if they use + "mysecret" as the shared secret. + The file already contains an entry for localhost (127.0.0.1), so if you + are running the RADIUS server on the same host as your Asterisk server, + then modify the existing entry instead, replacing the default password. + + File "dictionary" + + Note : as of version 1.1.2, the dictionary.digium file ships with FreeRADIUS. + The following procedure brings the dictionary.digium file to previous versions + of FreeRADIUS. + + File /usr/local/etc/raddb/dictionary contains the dictionary of + FreeRADIUS server. You have to add the same dictionary file + (dictionary.digium), which you added to the dictionary of radiusclient-ng + library. You can include it into the main file, adding the following line at the + end of file '/usr/local/etc/raddb/dictionary': + + \$INCLUDE /path/to/dictionary.digium + + That will include the same new attribute definitions that are used + in radiusclient-ng library so the client and server will understand each + other. + + +\subsubsection{Asterisk Accounting Configuration} + + Compilation and installation: + + The module will be compiled as long as the radiusclient-ng + library has been detected on your system. + + By default FreeRADIUS server will log all accounting requests into + /usr/local/var/log/radius/radacct directory in form of plain text files. + The server will create one file for each hostname in the directory. The + following example shows how the log files look like. + + Asterisk now generates Call Detail Records. See /include/asterisk/cel.h + for all the fields which are recorded. By default, records in comma + separated values will be created in /var/log/asterisk/cel-csv. + + The configuration file for cel\_radius.so module is : + + /etc/asterisk/cel.conf + This is where you can set CEL related parameters as well as the path to + the radiusclient-ng library configuration file. + + +\subsubsection{Logged Values} +\begin{verbatim} + "Asterisk-Acc-Code", The account name of detail records + "Asterisk-CidName", + "Asterisk-CidNum", + "Asterisk-Cidani", + "Asterisk-Cidrdnis", + "Asterisk-Ciddnid", + "Asterisk-Exten", + "Asterisk-Context", The destination context + "Asterisk-Channame", The channel name + "Asterisk-Appname", Last application run on the channel + "Asterisk-App-Data", Argument to the last channel + "Asterisk-Event-Time", + "Asterisk-Event-Type", + "Asterisk-AMA-Flags", DOCUMENTATION, BILL, IGNORE etc, specified on + a per channel basis like accountcode. + "Asterisk-Unique-ID", Unique call identifier + "Asterisk-User-Field" User field set via SetCELUserField + "Asterisk-Peer" Name of the Peer for 2-channel events (like bridge) + +\end{verbatim} |