Hi List I have build an IVR on Asterisk from 1.2 to now 1.4.18 and has already processed more than 10million calls! I have one big challenge which is reporting... it is the requirement to have a web reporting module which should the following info based on selected time frame - Number of calls on specific branch- Done - Number of calls to branch 1 that came from branch 2 (this should be flexible) - talktime on specified branch (say how long caller listened to option 1 before choosing option 2 or hangup) On IVR, it is so important to understand how many callers select a specific branch and how long they spent on that branch. CDR stats can not provide these type of information and on trying freepbx, still can not go so detailed Is there anyone with similar project that is willing to share some information Regards Kili
Am Samstag, den 28.06.2008, 08:15 -0500 schrieb research at businesstz.com:> Hi List > > I have build an IVR on Asterisk from 1.2 to now 1.4.18 and has already > processed more than 10million calls! > > I have one big challenge which is reporting... it is the requirement to > have a web reporting module which should the following info based on > selected time frame > - Number of calls on specific branch- Done > - Number of calls to branch 1 that came from branch 2 (this should be > flexible) > - talktime on specified branch (say how long caller listened to option 1 > before choosing option 2 or hangup) > > On IVR, it is so important to understand how many callers select a > specific branch and how long they spent on that branch. CDR stats can not > provide these type of information and on trying freepbx, still can not go > so detailedDear Kili, in my opinion this is a good application for Database backends. You could, for example, write entries to a DB whenever someone presses a key (or is re-routed in the dialplan, which comes to a similar scheme). In data mining time some SQL logic can produce nearly any data you want, provided the input data is there. Millions of calls sounds a lot though, so be sure to have a reasonable database backend: The asterisk included one might be a bit on the small side here. This is just an idea, I did not implement anything the like (yet). BR Anselm
On Sat, Jun 28, 2008 at 03:37:56PM +0200, Anselm Martin Hoffmeister wrote:> Am Samstag, den 28.06.2008, 08:15 -0500 schrieb research at businesstz.com: > > Hi List > > > > I have build an IVR on Asterisk from 1.2 to now 1.4.18 and has already > > processed more than 10million calls! > > > > I have one big challenge which is reporting... it is the requirement to > > have a web reporting module which should the following info based on > > selected time frame > > - Number of calls on specific branch- Done > > - Number of calls to branch 1 that came from branch 2 (this should be > > flexible) > > - talktime on specified branch (say how long caller listened to option 1 > > before choosing option 2 or hangup) > > > > On IVR, it is so important to understand how many callers select a > > specific branch and how long they spent on that branch. CDR stats can not > > provide these type of information and on trying freepbx, still can not go > > so detailed > > Dear Kili, > > in my opinion this is a good application for Database backends. You > could, for example, write entries to a DB whenever someone presses a key > (or is re-routed in the dialplan, which comes to a similar scheme). In > data mining time some SQL logic can produce nearly any data you want, > provided the input data is there. > > Millions of calls sounds a lot though, so be sure to have a reasonable > database backend: The asterisk included one might be a bit on the small > side here. > > This is just an idea, I did not implement anything the like (yet).Asterisk already has this separate database backend: CDR. -- Tzafrir Cohen icq#16849755 jabber:tzafrir.cohen at xorcom.com +972-50-7952406 mailto:tzafrir.cohen at xorcom.com http://www.xorcom.com iax:guest at local.xorcom.com/tzafrir
Thanks Anselm Its true that is a lot of calls but i have a separate mysql database on different server (HP DL580G5 with 16cores). what am currently doing is capturing the information right after selection and insert that record into mySql. **** [macro-capture-input] ; ; ; Macro that feeds data into mysql through perl script: ; ${ARG1} - MSISDN ; ${ARG2} - src ; ${ARG3} - MainMenu Application ; ${ARG4} - Channel ; ${ARG5} - calldatetime ; ${ARG6} - Sub Menu Application ; ; exten => s,1,System(/var/lib/asterisk/agi-bin/capture.pl ${ARG1} ${ARG2} ${ARG3} ${ARG4} ${ARG5} ${ARG6}) [Data-Services-Options] ; This menu is aimed to provide user with info about data services offered by Vodacom, including ; 1 - SUBMenu 1 ; 2 - SUBMenu 2 ; 3 - SUBMenu 3 ; 4 - SUBMenu 4 ; ; ;SUBMENU 1 ; exten => 1,1,Macro(capture-input,"${MSISDN}","${OPT}","APPLICATION1","${CHANNEL}","now()","SUBMENU1") exten => 1,n,Background(IVR/(1110) MENU 1) ;SUBMENU 2 exten => 2,1,Macro(sendsms,${MSISDN},1,${LANGUAGE}) exten => 2,n,Macro(ivrcdr,"${MSISDN}","${OPT}","APPLICATION2","${CHANNEL}","now()","SUBMENU2") exten => 2,n,Background(IVR/(1120) MENU 2) . . . **** what i will also want to capture is how long a caller took to listen to say SUBMENU1 It should be noted that CDR doesnot capture such detailed info (Tzafrir) Regards Kili> > On Sat, Jun 28, 2008 at 03:37:56PM +0200, Anselm Martin Hoffmeister wrote: >> Am Samstag, den 28.06.2008, 08:15 -0500 schrieb research at businesstz.com: >> > Hi List >> > >> > I have build an IVR on Asterisk from 1.2 to now 1.4.18 and has already >> > processed more than 10million calls! >> > >> > I have one big challenge which is reporting... it is the requirement >> to >> > have a web reporting module which should the following info based on >> > selected time frame >> > - Number of calls on specific branch- Done >> > - Number of calls to branch 1 that came from branch 2 (this should be >> > flexible) >> > - talktime on specified branch (say how long caller listened to option >> 1 >> > before choosing option 2 or hangup) >> > >> > On IVR, it is so important to understand how many callers select a >> > specific branch and how long they spent on that branch. CDR stats can >> not >> > provide these type of information and on trying freepbx, still can not >> go >> > so detailed >> >> Dear Kili, >> >> in my opinion this is a good application for Database backends. You >> could, for example, write entries to a DB whenever someone presses a key >> (or is re-routed in the dialplan, which comes to a similar scheme). In >> data mining time some SQL logic can produce nearly any data you want, >> provided the input data is there. >> >> Millions of calls sounds a lot though, so be sure to have a reasonable >> database backend: The asterisk included one might be a bit on the small >> side here. >> >> This is just an idea, I did not implement anything the like (yet). > > Asterisk already has this separate database backend: CDR. > > -- > Tzafrir Cohen > icq#16849755 jabber:tzafrir.cohen at xorcom.com > +972-50-7952406 mailto:tzafrir.cohen at xorcom.com > http://www.xorcom.com iax:guest at local.xorcom.com/tzafrir >
Greetings Can someone assist to unfold the secret on how to atleast to a count on particular branch, say, if 2 is chosen, then we start count from the time the choice is made to the time the caller hangup or choice another option i.e. exten => s,1,Answer() exten => s,n,Background(PLEASE ENTER YOU OPTION) exten => s,n,XXX ; //IS IT POSSIBLE TO START A STOPWATCH (COUNTER) HERE exten => s,n,WaitExten(10) exten => s,n,Goto(s,1) exten => 1,1,Answer() exten => 1,n,AGI(POPULATE PREVIOUS BRANCH DATA INTO THE DB) exten => 1,n,XXX ;(RE)START A COUNTER HERE exten => 1,n,PLAYBACK(OPTION1 SELECTED);(RE)START A COUNTER HERE exten => 1,n,Hangup exten => 2,1,Answer() exten => 2,n,AGI(POPULATE PREVIOUS BRANCH DATA INTO THE DB) exten => 2,n,XXX ;(RE)START A COUNTER HERE exten => 2,n,PLAYBACK(OPTION2 SELECTED);(RE)START A COUNTER HERE exten => 2,n,Hangup i believe we can set something very powerful here Kili> Thanks Anselm > > Its true that is a lot of calls but i have a separate mysql database on > different server (HP DL580G5 with 16cores). what am currently doing is > capturing the information right after selection and insert that record > into mySql. > > **** > [macro-capture-input] > ; > ; > ; Macro that feeds data into mysql through perl script: > ; ${ARG1} - MSISDN > ; ${ARG2} - src > ; ${ARG3} - MainMenu Application > ; ${ARG4} - Channel > ; ${ARG5} - calldatetime > ; ${ARG6} - Sub Menu Application > ; > ; > exten => s,1,System(/var/lib/asterisk/agi-bin/capture.pl ${ARG1} ${ARG2} > ${ARG3} ${ARG4} ${ARG5} ${ARG6}) > > [Data-Services-Options] > ; This menu is aimed to provide user with info about data services > offered by Vodacom, including > ; 1 - SUBMenu 1 > ; 2 - SUBMenu 2 > ; 3 - SUBMenu 3 > ; 4 - SUBMenu 4 > ; > ; > ;SUBMENU 1 > ; > exten => > 1,1,Macro(capture-input,"${MSISDN}","${OPT}","APPLICATION1","${CHANNEL}","now()","SUBMENU1") > exten => 1,n,Background(IVR/(1110) MENU 1) > > ;SUBMENU 2 > exten => 2,1,Macro(sendsms,${MSISDN},1,${LANGUAGE}) > exten => > 2,n,Macro(ivrcdr,"${MSISDN}","${OPT}","APPLICATION2","${CHANNEL}","now()","SUBMENU2") > exten => 2,n,Background(IVR/(1120) MENU 2) > . > . > . > **** > > what i will also want to capture is how long a caller took to listen to > say SUBMENU1 > > It should be noted that CDR doesnot capture such detailed info (Tzafrir) > > Regards > Kili >> >> On Sat, Jun 28, 2008 at 03:37:56PM +0200, Anselm Martin Hoffmeister >> wrote: >>> Am Samstag, den 28.06.2008, 08:15 -0500 schrieb >>> research at businesstz.com: >>> > Hi List >>> > >>> > I have build an IVR on Asterisk from 1.2 to now 1.4.18 and has >>> already >>> > processed more than 10million calls! >>> > >>> > I have one big challenge which is reporting... it is the requirement >>> to >>> > have a web reporting module which should the following info based on >>> > selected time frame >>> > - Number of calls on specific branch- Done >>> > - Number of calls to branch 1 that came from branch 2 (this should >>> be >>> > flexible) >>> > - talktime on specified branch (say how long caller listened to >>> option >>> 1 >>> > before choosing option 2 or hangup) >>> > >>> > On IVR, it is so important to understand how many callers select a >>> > specific branch and how long they spent on that branch. CDR stats can >>> not >>> > provide these type of information and on trying freepbx, still can >>> not >>> go >>> > so detailed >>> >>> Dear Kili, >>> >>> in my opinion this is a good application for Database backends. You >>> could, for example, write entries to a DB whenever someone presses a >>> key >>> (or is re-routed in the dialplan, which comes to a similar scheme). In >>> data mining time some SQL logic can produce nearly any data you want, >>> provided the input data is there. >>> >>> Millions of calls sounds a lot though, so be sure to have a reasonable >>> database backend: The asterisk included one might be a bit on the small >>> side here. >>> >>> This is just an idea, I did not implement anything the like (yet). >> >> Asterisk already has this separate database backend: CDR. >> >> -- >> Tzafrir Cohen >> icq#16849755 jabber:tzafrir.cohen at xorcom.com >> +972-50-7952406 mailto:tzafrir.cohen at xorcom.com >> http://www.xorcom.com iax:guest at local.xorcom.com/tzafrir >> > >
On Tue, 1 Jul 2008, research at businesstz.com wrote:> Can someone assist to unfold the secret on how to atleast to a count on > particular branch, say, if 2 is chosen, then we start count from the time > the choice is made to the time the caller hangup or choice another option > > i.e. > exten => s,1,Answer() > exten => s,n,Background(PLEASE ENTER YOU OPTION) > > exten => s,n,XXX ; //IS IT POSSIBLE TO START A STOPWATCH (COUNTER) HERE > exten => s,n,WaitExten(10) > exten => s,n,Goto(s,1) > > exten => 1,1,Answer() > exten => 1,n,AGI(POPULATE PREVIOUS BRANCH DATA INTO THE DB) > exten => 1,n,XXX ;(RE)START A COUNTER HERE > exten => 1,n,PLAYBACK(OPTION1 SELECTED);(RE)START A COUNTER HERE > exten => 1,n,Hangup > > exten => 2,1,Answer() > exten => 2,n,AGI(POPULATE PREVIOUS BRANCH DATA INTO THE DB) > exten => 2,n,XXX ;(RE)START A COUNTER HERE > exten => 2,n,PLAYBACK(OPTION2 SELECTED);(RE)START A COUNTER HERE > exten => 2,n,HangupYou could "start" your stopwatch with exten = s,n, set(STOPWATCH=${EPOCH}) instead of your extraneous answer()s and then in your "h" extension, stop the stopwatch with: exten = h,n, set(STOPWATCH=$[${EPOCH} - ${STOPWATCH}]) You could also use resetcdr(w) at the start of each option. This will create a new CDR with the time spent on the previous option at each step in your dialplan. By setting the option number in a CDR variable after each CDR is written, the time spent in each option can be identified. Thanks in advance, ------------------------------------------------------------------------ Steve Edwards sedwards at sedwards.com Voice: +1-760-468-3867 PST Newline Fax: +1-760-731-3000
Oh Edward You are my Hero... Simple but perfect. Option II is ideal but as you know this is Asterisk/*/everything.. Thanks to list Kill>> Can someone assist to unfold the secret on how to atleast to a count on >> particular branch, say, if 2 is chosen, then we start count from the >> time >> the choice is made to the time the caller hangup or choice another >> option >> >> i.e. >> exten => s,1,Answer() >> exten => s,n,Background(PLEASE ENTER YOU OPTION) >> >> exten => s,n,XXX ; //IS IT POSSIBLE TO START A STOPWATCH (COUNTER) HERE >> exten => s,n,WaitExten(10) >> exten => s,n,Goto(s,1) >> >> exten => 1,1,Answer() >> exten => 1,n,AGI(POPULATE PREVIOUS BRANCH DATA INTO THE DB) >> exten => 1,n,XXX ;(RE)START A COUNTER HERE >> exten => 1,n,PLAYBACK(OPTION1 SELECTED);(RE)START A COUNTER HERE >> exten => 1,n,Hangup >> >> exten => 2,1,Answer() >> exten => 2,n,AGI(POPULATE PREVIOUS BRANCH DATA INTO THE DB) >> exten => 2,n,XXX ;(RE)START A COUNTER HERE >> exten => 2,n,PLAYBACK(OPTION2 SELECTED);(RE)START A COUNTER HERE >> exten => 2,n,Hangup > > You could "start" your stopwatch with > > exten = s,n, set(STOPWATCH=${EPOCH}) > > instead of your extraneous answer()s and then in your "h" extension, stop > the stopwatch with: > > exten = h,n, set(STOPWATCH=$[${EPOCH} - ${STOPWATCH}]) > > You could also use resetcdr(w) at the start of each option. This will > create a new CDR with the time spent on the previous option at each step > in your dialplan. By setting the option number in a CDR variable after > each CDR is written, the time spent in each option can be identified. > > Thanks in advance, > ------------------------------------------------------------------------ > Steve Edwards sedwards at sedwards.com Voice: +1-760-468-3867 PST > Newline Fax: +1-760-731-3000 >