[asterisk-users] Experience with Vicidial

Alex Balashov abalashov at evaristesys.com
Thu Jul 17 12:02:10 CDT 2008


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


-- 
Alex Balashov
Evariste Systems
Web    : http://www.evaristesys.com/
Tel    : (+1) (678) 954-0670
Direct : (+1) (678) 954-0671
Mobile : (+1) (706) 338-8599



More information about the asterisk-users mailing list