[asterisk-users] Experience with Vicidial

Matt Florell astmattf at gmail.com
Thu Jul 17 19:24:40 CDT 2008


On 7/17/08, Alex Balashov <abalashov at evaristesys.com> wrote:
> Matt Florell wrote:
>
>  > But seriously, Asterisk is a better example of doing things right more
>  > recently, a couple of years ago all sorts of stuff went into the
>  > "stable" releases of Asterisk without  enough testing resulting in
>  > some pretty big bugs (like in asterisk 1.2.10-12) And even further
>  > back the code conventions of Asterisk 6 years ago were in many places
>  > about as good as VICIDIAL is today. I think it's the evolution of a
>  > project from being in its early years as opposed to its more mature
>  > years like Asterisk has started to enter. If I were to start writing
>  > VICIDIAL today I would have done many things a lot differently from
>  > how they are, but then again if I started from scratch today it
>  > wouldn't be a functioning product for many months.
>
>
> I know this dilemma well, and sympathise.
>
>  In my experience, with some projects a gradual evolution to more
>  sophisticated approaches is possible, but with others the work involved
>  in making that happen would be greater - and the result less elegant and
>  cohesive - than simply rewriting the thing.  It depends on a lot of
>  things, some of them important - but intangible - aesthetic judgments.
>
>
>  > There are a few large companies that have adopted VICIDIAL and
>  > internalized the maintenance of the code for their systems, so we know
>  > that the state of the code has not been a road-block for all
>  > companies.
>
>
> Oh, sure, and I doubt that anything is a roadblock with sufficient
>  spiritual commitment.
>
>  The ViciDIAL code *is* modifiable and maintainable, logically;  it's
>  code, after all.  At the end of the day, it is still Perl or PHP.  The
>  issues I've run into have been with the willingness of developers and
>  managers to dive into code that looks like that.  The claim is never
>  that it's conceptually too complicated, just that any semblance of
>  organisation, structure, readability, modularisation or abstraction is
>  conspicuously absent.  For that reason, it is seen as too much work to
>  deal with it.
>
>
>  > Most companies will do some degree of basic lead loading and lead
>  > exporting integration on the back-end along with integration with
>  > web-based CRM systems on the agent front-end. And this has proven to
>  > usually be not too difficult for many companies to accomplish.
>
>
> A lot depends on the size and scope of the operation and the intended
>  application of the dialer.
>
>  "It uses an open database, and you can put your stuff into the database"
>  is a surprisingly ineffective integration path in settings with either
>  high volume or dense business rules requirements.  This is actually one
>  of the biggest obstacles I ran into in the previously mentioned endeavours.
>
>  For one, by requiring that leads be entered into ViciDIAL's lead table,
>  you force the source to shoehorn its data exactly to your schema for
>  leads, which usually results in some degree of information loss and
>  redundancy.  And any derivative consequences elsewhere in the database
>  arising from those importations must also be dealt with, e.g., managing
>  IDs used for keying the rows, etc.
>
>  For another, unless the data used by the company conveniently resides in
>  MySQL - yea, the same instance of it - as ViciDIAL's, some sort of
>  synchronisation job or process will be necessary to refresh the lead
>  table by pumping in new data.  This is not really feasible in situations
>  with a very, very large amount of leads.  It creates yet another
>  scheduled, recurring potential point of failure (the sync job).  The
>  data simply may not be possible to load to keep pace with the dials.  It
>  consumes bandwidth and resources and time.
>
>  If a company does most of its lead management, qualification and other
>  applications of business rules in its own database (which may or may not
>  be something Linux/open-source based, btw!), that database becomes a
>  redundant middle storage layer for the data since the goal is simply to
>  get it into ViciDIAL.  But then, some persistent information about the
>  leads must be stored, as a lot of companies tend to call leads back and
>  follow up... etc, etc, etc.
>
>  In my experience, this led to attempts to bifurcate the ViciDIAL lead
>  table and join on some other custom tables containing needed
>  supplemental information.  Then it was discovered that this will require
>  more code changes (many of redundant, duplicated statements) in ViciDIAL
>  than miles in the width of Heaven.  That's usually the point at which
>  hats were thrown down and, "Damn it, we might as well just write
>  something ourselves" was said.
>
>  Anyway, my real point here is that I think relatively easy, turn-key
>  integration and customisation on a software and data interchange level
>  may prove to be the most significant issue in determining the success
>  and future of ViciDIAL, at least if my experience is any indication.
>
>  (And what my experience suggests is that almost nobody uses it straight
>  out of the box.  I could be very wrong on that.  Perhaps some of the
>  most happy adopters are companies with very different business models
>  from those that use predictive dialers traditionally.)
>
>  It's the main reason why companies with existing, proprietary dialers
>  are often looking to leave them and consider ViciDIAL as a replacement;
>   the proprietary dialer is a hindrance, in terms of cost and/or
>  features, to the use of sophisticated custom logic.
>
>
>
>  > We have actually do now have a agent-side API that allows outside
>  > processes to have very limited control over agent interface functions.
>  > As it's features grow we will also work on more back-end API
>  > functionality not directly related to the agent.
>
>
> As suggested above, I think this is absolutely crucial.
>
>
>  > Yes, I agree, modularization is a future goal of ours that
>  > unfortunately we do not have the time to work on at the moment, but it
>  > is something that we have talked about a great deal.
>
>
> I'm glad you're aware of it.  :)
>
>  The problem one always runs into is that the bigger the code base grows,
>  the less likely that any retroactive
>  refactoring/reorganisation/rewriting is going to happen, or is even
>  possible.
>
>  That's why I was bringing up the possibility of a rewrite.
>
>
>  > On the other hand, if you want to
>  > significantly alter the schema or layout of the agent interface, then
>  > you are in for a lot of work.
>
>
> I think this is quite high on the list of importance, though.
>
>  It shouldn't be a lot of work;  to the extent that it's going to be
>  work, I think most adopters are willing to do the work.  But the work
>  needs to not require changing extremely obfuscated code in 50 different
>  places.  There should be one place where these things are respectively
>  defined and built.
>
>
>  >
>  > Having a centralized system with universal data access has really
>  > helped us in scalability and integration with other systems. Initially
>  > I did not start out with MySQL handling everything, but as I ran tests
>  > and worked more with it, it proved to be extremely reliable and very
>  > fast, so I built everything around it and it has proven that it can
>  > handle the job. It might not be the best or most efficient tool for
>  > the job, and we may look into other methods of handling IPC in the
>  > future, but for now it has proven to be one of the most stable
>  > elements of a VICIDIAL system, with some databases running for over a
>  > year without restart while still handling 5000+ queries per second.
>
>
> I realise it's currently doable, but that does not mean it is
>  methodologically correct, formally viable, or ultimately scalable.  Much
>  of why what you are saying is true is accounted for by the continuous
>  and rapid evolution of computing hardware - no matter how woefully
>  inefficient, it still works OK.  This is the same argument used by folks
>  who mis-apply XML, or Java, or other things considered "very
>  heavyweight" unnecessarily but have beefy hardware that seems to let
>  them wing it without disruptive performance penalties anyway.
>
>  Just because it can be done does not mean it should be done.
>
>  I think this may be what separates programming methodologies into
>  radically different classes;  there's Just Making It Work (even to
>  relatively demanding standards of robustness), and then there's Doing
>  Things The Right Way.
>
>  There's a reason why using the database as an IPC mechanism is
>  considered an antipattern.
>
>  ( http://www.bookrags.com/wiki/Database_as_an_IPC )
>
>
>  >>  Also, you don't necessarily have to develop a custom IPC protocol for
>  >>  communication amongst components;  there are plenty of workable
>  >>  distributed service architectures out there.
>  >
>  > Is there a specific IPC protocol that you would recommend I take a look at?
>
>
> No, I don't have any recommendations in this area per se.  There are
>  lots of different approaches you could take, from the web services
>  approach to the Java RMI-style approach.  The Perl runtime environment
>  offers a very advanced level of symbol table introspection, resulting in
>  plethoric attempts to fashion distributed object/process architectures
>  for it.
>
>  If a lot of the IPC happens between the agent portal side and the dialer
>  side, I would recommend considering a SOAP / XML-RPC type approach,
>  although by very virtue of being XML I have often criticised them for
>  being unnecessarily heavyweight.  Ah well.
>
>
>  >
>  > After the next full release we will do away with MySQL 4.0 and 4.1
>  > support and require 5.0+ so we can do a lot of what you suggest. We
>  > have hundreds of systems out there with 4.X MySQL and we have always
>  > tried to stay backwards compatible, but we have started to put notes
>  > into the documentation and in the forums that we will be dropping
>  > support for these older versions so that we can add new functions and
>  > increase efficiency in future versions.
>
>
> Ah, good deal!
>
>
>  > As for the schema, we are cleaning up the code to better handle
>  > modifications to the schema, but it is a big job. We are updating code
>  > as we work on newer features or go into files for bug fixes. After the
>  > next major release we will be doing code cleanup to finally remove any
>  > use of fixed data structures in the programming.
>
>
> Awesome.  Glad to hear.  I'm glad you've got this stuff in mind.
>
>  -- Alex

Thank you very much for your suggestions and points you have made. I
will be putting the text of this email thread in my development notes
directory so that I can reference back to it in the future as we
address these elements that we have discussed.

MATT---



More information about the asterisk-users mailing list