In the open-source PBX world, one platform is king: Asterisk. Asterisk is an open-source software PBX platform originally created by Mark Spencer of Digium. Because of the open-source nature of Asterisk, many companies have used the Asterisk code as a base for their product and modified the code to suit their needs. There are a host of products built on top of Asterisk, such as Fonality’s products PBXtra and Trixbox, IntuitiveVoice’s Evolution PBX, etc. This post applies to all of them to some degree. Also, there are other PC-based PBX solutions out there that run on Windows, such as 3CX or NCH’s Axon product. These share many of the same pitfalls as described below (but have the additional problems associated with Windows-based instability and security issues).
Open Source.
Asterisk is open-source software. It is controlled by a company named Digium, which issues periodic updates and bug fixes to the code. Because it is open-source software, this means that (1) Asterisk is free to anyone and can be downloaded without charge; (2) Anyone with the proper skills is able to view the original programming code and modify it for their own purposes. There are a number of companies that have grown up around this model and are selling their own “take” on Asterisk.
Hardware.
Most Asterisk builds use off-the-shelf PC hardware. Because there is so much to consider in regards to PC-based phone systems (whether tower-based or rack-based), I can‘t enumerate it all here. Suffice it to say, PC-based phone systems suffer from a slew of drawbacks, including longevity, expandability, security, complexity, migratability, and recoverability issues, and they are more of a headache than they’re worth.
There are also a number of appliance-based Asterisk systems out there. Many of these are PCs in disguise. Others, that are truly appliance-based (you’ll often see the term “embedded” when seeing references to these systems) are generally for the smaller-end market. They feature hardware that has specifically been engineered for that specific product. Many times there is a single circuit board inside that replaces the functionality of multiple boards in other systems. The reliability of these products varies, but is generally good. If something needs to be replaced, however, the whole system usually needs to be swapped out.
Telephony cards.
In the case of PC-based implementations, and some appliance-based installations, the box will require certain telephony cards in most cases. This is to provide support for dialtone (analog lines or T1/PRI lines), as well as other analog devices such as cordless phones, credit card machines or faxes. These cards can be purchased from Digium, but the majority of these are purchased from third-party vendors, such as Sangoma, Rhino, OpenVox, ZapMicro, etc. With all of these choices comes different implementation issues, as each card has its own drivers, idiosyncrasies, implementation, support, reliability, and integration with Asterisk. Some cards are supported better than others. Some companies will only allow certain cards to be used with their implementation.
A note on echo. One of the pervasive challenges with Asterisk is that of echo. This generally happens when a digital signal (like IP) is being converted to an analog signal, or vice versa, and there is an impedance mismatch on the line (there usually is-it’s just the nature of the beast). This causes one or both parties to hear their own voice echo in their ear. While software-based echo cancellers are standard and tend to cut down on this, many users have reported serious echoing issues. The only proper way to minimize echo with Asterisk-based systems is to make sure the cards have HARDWARE based echo cancellation (the Echo Cancellation, or EC, version of any given card is more expensive). The advantages of hardware-based echo cancellation are (1) it can take care of some echoing that software sometimes cannot; (2) it is faster (although you may still have a couple of seconds of echo at the beginning of the call; (3) it frees up precious CPU resources from having to do the echo cancellation.
Telephones.
Digium does not make the telephones for its Asterisk software, nor do the other vendors whose PBX products are based on Asterisk. These are third-party phones from various manufacturers, such as Aastra, Grandstream, Cisco, Snom, and others. Each phone model from each manufacturer has a different look and operation than the others.
While “freedom of choice” is touted by Asterisk proponents, this disparity between phone models, and the integration of phones with Asterisk, is actually one of Asterisk’s greatest drawbacks. By not having proprietary phones, integration with the phone system is looser. Some of the phone manufacturers illustrate some “whiz-bang” applications that can be done on their phones, but the reality is that it’s difficult to incorporate into the Asterisk platform (more on this in a moment), and most IP phones used on Asterisk-based phone systems function little better than plain old analog telephones.
Getting the phones to work with Asterisk in the first place has traditionally been a challenge, although many strides have been made in this respect.
One thing that anyone who has been looking at Asterisk for any length of time will notice is that the phones in general are severely restricted in the number of buttons available for lines and features. This requires people to remember and dial feature codes manually for most anything they would like to do feature-wise, or work their way through on-screen menus.
Features.
Now for a paradox on Asterisk. Asterisk is, admittedly, a platform with perhaps the greatest potential for flexibility, and yet, in practice most people find that they are locked into the features provided out-of-the-box. It is true that because their code is open-source that in theory someone who knows how to program can make it do special things. It is also true that Asterisk has a scripting language that allows for special things to be accomplished. By going into special, text-based configuration files, one can, in theory, open up the flexibility potential. Here are some of the configuration files:
amportal.conf; asterisk.conf; autofs_ldap_auth.conf; capi.conf; cbmysql.conf; cdr_mysql.conf; conman.conf; dhcpd.conf; disa-1.conf; enum.conf; extensions.conf; extensions_additional.conf; extensions_custom.conf; extensions_hud.conf; extensions_override_freepbx.conf; ez-ipupdate.conf; features.conf; features_applicationmap_additional.conf; features_applicationmap_custom.conf; features_featuremap_additional.conf; features_featuremap_custom.conf; features_general_additional.conf; features_general_custom.conf; fxotune.conf; globals_custom.conf; gpm-root.conf; grub.conf; gssapi_mech.conf; host.conf; iax.conf; iax_additional.conf; iax_custom.conf; iax_custom_post.conf; iax_general_additional.conf; iax_general_custom.conf; iax_registrations.conf; iax_registrations_custom.conf; idmapd.conf; indications.conf; initlog.conf; jwhois.conf; krb5.conf; ld.so.conf; ldap.conf; lftp.conf; libaudit.conf; libuser.conf; localprefixes.conf; logger.conf; logrotate.conf; manager.conf; manager_additional.conf; manager_custom.conf; meetme.conf; meetme_additional.conf; mke2fs.conf; modem.conf; modprobe.conf; modules.conf; mtools.conf; multipath.conf; musiconhold.conf; musiconhold_additional.conf; musiconhold_custom.conf; my.cnf; nscd.conf; nsswitch.conf; ntp.conf; oddjobd.conf; op_astdb.cfg; op_buttons.cfg; op_buttons_additional.cfg; op_buttons_custom.cfg; op_lang_de.cfg; op_lang_en.cfg; op_lang_es.cfg; op_lang_it.cfg; op_server.cfg; op_style.cfg; pam_smb.conf; pear.conf; phone.conf; phpagi.conf; privacy.conf; queues.conf; queues_additional.conf; queues_custom.conf; queues_custom_general.conf; queues_general_additional.conf; queues_post_custom.conf; reader.conf; request-key.conf; resolv.conf; rtp.conf; sensors.conf; sestatus.conf; sip.conf; sip_additional.conf; sip_custom.conf; sip_custom_post.conf; sip_general_additional.conf; sip_general_custom.conf; sip_nat.conf; sip_registrations.conf; sip_registrations_custom.conf; smartd.conf; snom.cnf; sysctl.conf; syslog.conf; updatedb.conf; vm_email.inc; vm_general.inc; voicemail.conf; warnquota.conf; wvdial.conf; xinetd.conf; yp.conf; yum.conf; zapata.conf; zapata-auto.conf; zapata-channels.conf; zaptel.conf
Because of this maddening array of configuration files (which are not in one single place on the disk, by the way), several projects (including the makers of Asterisk itself) have developed web-based configuration screens so that you don’t have to delve into all of these. By doing this, however, they are necessarily limiting the number and type of special configurations that can be done.
Asterisk features a special scripting language to tweak the behavior of the phone system. Again, in theory it’s great, but only if you want to learn this:
exten => s,n,Set(FROMCONTEXT=exten-vm)
exten => s,n,Set(VMBOX=${ARG1})
exten => s,n,Set(EXTTOCALL=${ARG2})
exten => s,n,Set(CFUEXT=${DB(CFU/${EXTTOCALL})})
exten => s,n,Set(CFBEXT=${DB(CFB/${EXTTOCALL})})
exten => s,n,Set(RT=${IF($[$["${VMBOX}"!="novm"] | $["foo${CFUEXT}"!="foo"]]?${RINGTIMER}:”")})
exten => s,n,Macro(record-enable,${EXTTOCALL},IN)
exten => s,n,Macro(dial,${RT},${DIAL_OPTIONS},${EXTTOCALL})
exten => s,n,Set(SV_DIALSTATUS=${DIALSTATUS})
exten => s,n,GosubIf($[$["${SV_DIALSTATUS}"="NOANSWER"] & $["foo${CFUEXT}"!="foo"]]?docfu,1) ; check for CFU in use on no answer
exten => s,n,GosubIf($[$["${SV_DIALSTATUS}"="BUSY"] & $["foo${CFBEXT}"!="foo"]]?docfb,1) ; check for CFB in use on busy
exten => s,n,Set(DIALSTATUS=${SV_DIALSTATUS})
exten => s,n,NoOp(Voicemail is ‘${VMBOX}’)
exten => s,n,GotoIf($["${VMBOX}" = "novm"]?s-${DIALSTATUS},1) ; no voicemail in use for this extension
exten => s,n,NoOp(Sending to Voicemail box ${EXTTOCALL})
exten => s,n,Macro(vm,${VMBOX},${DIALSTATUS})
If you do have something custom programmed, you’ll need to do your best to ensure that it doesn’t get overwritten with a software update, or knowledge of it lost if the person who programmed it moves away.
Here is a real-world example of how the practical reality of Asterisk differs from theory. Consider some features that Asterisk-based systems have only recently added in, or that in some cases STILL have not been implemented yet. These are things that traditional phone systems have had for over 20 years:
• Day/night mode button (Fonality just implemented in 2008?)
• BLF, or Busy Lamp Field (Fonality just implemented in 2008?). This is where, by looking at a button on your phone, you can see if another person in your office is on their phone
• Shared Line Appearances (ability to press a specific line button to make a call, and see visually whether that line is in use by looking at the line button). Asterisk just added this capability in the last year, and some Asterisk-based systems still do not have this feature (including Fonality, based on their website).
Support.
Most national Asterisk-based vendors do not hire local support. There is normally an 800 number you can call with the major vendors, some of whom have 24-hour support. Bear in mind, however, that if and when your system goes down, there is only so much that can be troubleshot remotely. If the remote connection is down, then what? Most of these vendors do not have a mechanism in place for same-day parts replacement, let alone getting a body out locally to troubleshoot.

