As the holiday season gets underway with Thanksgiving, Hanukkah, Christmas, and especially Festivus, we thought it might be interesting to actually provide a running dialog of how a new Asterisk® project is born and what hurdles and solutions are encountered along the way. We mentioned last week that we were dusting off Mark Spencer’s Asterisk-GUI with hopes of transforming it into an updated Asterisk 11 platform for hobbyists and SOHO telephony users with many of the ease-of-use touches that have made Incredible PBX a big hit. So today we officially kick off the adventure with a look back at Week One. Our target, by the way, is a New Year’s Day release to celebrate the arrival of 2015.
Project Development Roadmap
You may be asking, "What’s in it for me?" Well, lots! One of the unfortunate side effects of having always relied upon the FreePBX® GUI for Asterisk administration is you never really learned how Asterisk works. Nor did we ever quite appreciate its lightning-fast performance. We’re as guilty as anyone for over-reliance on a design tool without much appreciation for its interaction with the actual communications server. And, like many things in life, you form some bad habits along the way that are hard to break. Don’t get us wrong. There are thousands of things to like about FreePBX and, for production-level servers hosting dozens or hundreds of users, it remains a very comfortable choice and our hands-down favorite.
We resolved early on to approach the Asterisk-GUI remake a little differently. We plan to actually document why we’re going down certain paths and what the benefits will be for the ultimate user. There won’t be any convoluted code to deter your learning how things actually work. And there won’t be any patent, trademark, or copyright gotchas to hinder your forking or repurposing our code to meet your own requirements. And, finally, there won’t be any license fees, hidden or otherwise. Just comply with the GPL2 license as written and be our guest! From our vantage point, that’s what open source is all about.
Defining Project Objectives
We began the week by sketching out some objectives as well as defining some likes and dislikes. As we mentioned last week, the objective is not to replace FreePBX for those that actually need that horsepower. First and foremost we want to design this product for the target audience: hobbyists, home users, and SOHO businesses. Many of the platforms we are targeting have limited memory and only modest computational ability. Many of the people in the target audience have never used a PBX before and know little to nothing about networks and security. We don’t want anyone blindsided by a $100,000 phone bill because they didn’t know how to implement a firewall so we’ll include a preconfigured one as part of the install. And, like all Incredible PBX systems, an automatic update utility will be included to keep your system current AND safe!
Second, we wanted a product that was incredibly simple to put into production. Ease of configuration was a definite must-have. With many GUIs (think: Microsoft Windows), developers get so enamored with the brilliance of their own creation that they lose sight of the fact that typing a short list of usernames and passwords often is much simpler than navigating through dozens of data entry screens with hundreds of mouse clicks to enter the same information.
We also are steering clear of reinventing the proverbial wheel. Mark Spencer and his colleagues are some of the most talented programmers on the planet. To the extent that the original, feature-rich Asterisk-GUI creation can be implemented without major plumbing changes, that is not only desirable but absolutely essential in bringing this new product to market within weeks, not months or years.
Keep in mind that both FreePBX and Asterisk-GUI are code generators for Asterisk. No call is actually processed by FreePBX or Asterisk-GUI. From a system design standpoint, we wanted Asterisk to be self-sufficient on this new Incredible PBX platform. Stated another way, we didn’t want Asterisk to fail just because Apache or MySQL had system failures since neither of them is required for Asterisk to function reliably in the first place. It’s one thing for your GUI or MySQL database to be inoperable. It’s quite another when it also brings down your entire phone system.
In summary, we are lifelong believers in the KISS principle. Keep It Simple, Stupid. As much as we love FreePBX, its system design is anything but simple. Configuration information is embedded in hundreds of HTML files, Linux templates, Asterisk configuration files including AstDB plus 100+ MySQL tables. By contrast, Asterisk-GUI uses a tiny collection of native Asterisk .conf files to configure virtually all its settings. We wanted to preserve that "pure Asterisk" simplicity.
One of the other real advantages of the Asterisk-GUI design is you can create something in the GUI and then review the Asterisk-generated code in /etc/asterisk to see exactly how the original Asterisk developers intended the feature to work. In addition to the learning experience, it makes it easy to debug coding errors and to make adjustments and customizations to meet individual needs without inadvertently bringing down the whole house of cards.
We wanted a product that was easy for an administrator to maintain, to update, AND to back up. After all, this is a phone system not a rocketship. It shouldn’t take a rocket scientist to maintain it. And it won’t.
Project Design 101: Preconfigured Trunks, Extensions & Routes
With these objectives in mind, we’ve made some design choices on the front end that are worth mentioning. Configuration settings for SIP, IAX, and Google Voice trunks give new users more headaches than any other single feature in a new PBX. So we’re taking much of the pain out of that process by providing 9 preconfigured trunks. Meet the Incredible 9: Google Voice, Vitelity, VoIP.ms, Les.net, IPcomms, DIDlogic, CallCentric, FutureNine, and Anveo Direct. Outbound calling is managed by routes that are tied to individual extensions. These can be adjusted quickly in the GUI. We’ve chosen to set up outbound calling for the Incredible 9 using preconfigured dialing prefixes. No prefix or a 1-prefix sends the call out through Google Voice and, if Google Voice isn’t available, then the call is routed through the next working outbound trunk in the order shown above. A prefix of 2-9 sends the call out through one of the preconfigured trunks. We’ve also included support for free worldwide iNum calling using either VoIP.ms or CallCentric. Both vendors will also provide you with a free iNum DID. Just dial your iNum prefix of 0 (CallCentric) or 90 (VoIP.ms) followed by the last 7 digits of any assigned iNum DID to place a free call. As usual, Lenny stands ready to provide 24/7 technical support through his iNum DID: And, of course, all of these settings can be modified or tweaked to your liking using Asterisk-GUI!
A word about the "Incredible 9″ providers. The major prerequisite for inclusion was communications compatibility with Asterisk without any firewall exposure of Asterisk ports. That means the provider had to support outbound and/or inbound calling without any port exposure of Asterisk to the Internet. Vitelity and Google have been major financial supporters of our projects over the years so they made the short list. Both also offer incredible pricing and feature-rich VoIP implementations. The others made the cut based upon great user satisfaction reports, free services of one type or another, or dirt cheap pricing. Can you add additional providers using Asterisk-GUI? Absolutely. But the "Incredible 9″ each can be activated in under 10 seconds after you’ve signed up for an account with your choice of providers. In the VoIP world, there’s little reason not to choose several since you only pay for the services you actually use, and we would encourage you to do so.
Incoming call processing also is preconfigured with some extensions, a ring group, a Stealth AutoAttendant, DISA, and an IVR with an assortment of Incredible PBX applications for Asterisk. All can be modified or embellished to meet your own requirements.
Bottom Line: You get a turnkey PBX that’s ready to go. It’s also easily configurable to meet your most demanding requirements. Incredible PBX delivers The Best of Both Worlds using native Asterisk code.
A Fresh Look at Managing Credentials
One of the more exasperating realities of password management with FreePBX is the number of places you have to look to find or change passwords. Some are stored in various Asterisk .conf files. Voicemail passwords are hidden away in text strings in voicemail.conf. Others are stored in MySQL tables. Some are encrypted, and some aren’t. Asterisk-GUI took a different approach and stores all passwords in the Asterisk .conf files in /etc/asterisk.
As talented as the FreePBX and Asterisk-GUI programmers are, we don’t trust any web-based application to remain secure if it’s directly exposed to the Internet. If you do, you’re either nuts or have plenty of money to burn. GUIs should be reserved for administrator use behind a secure firewall, period. In our new design, you need firewall whitelist privileges plus root or asterisk user privileges plus GUI admin user access to gain access to passwords. If all of these layers are compromised, passwords are the least of your worries.
We’ve taken password management one step further. As best we can given the design choices in Asterisk 11 and Asterisk-GUI, we’ve aggregated as many passwords as possible into new credentials config files: credentials-sip.conf, credentials-googlevoice.conf, and credentials-extensions.conf. There’s one for the "Incredible 9″ SIP providers. There’s one for Google Voice. And there’s a catchall for various passwords, PINs, and predefined CallerID numbers for various trunks. These are straight-forward text files that can be quickly edited using any text editor. Plug in your account names, passwords, and PINs. Optionally, adjust the providers’ server addresses as required. And you’re done. If you can tie your shoes, you can do this. Quick and functional, not fancy!
Redesigned Conferencing Solution for Asterisk 11
MeetMe conferencing as originally implemented in Asterisk-GUI required an external timing source. This timing source was provided by analog boards on some of the commercial hardware platforms on which Asterisk-GUI was deployed. For our target audience, we’re assuming that most people probably want to ditch Ma Bell and costly landlines as part of the migration to a new PBX platform. So, even though Asterisk-GUI still supports analog trunks, we have chosen to offer the Asterisk 11 Conference Bridge option which does not require an external timing source. The new Conference Bridge is preconfigured out of the box. Set up user and admin PINs. And you’re done. Dial C-O-N-F (3663) to join the conference.
The Baker’s Dozen Incredible PBX Apps: Alive and Well
We closed out Week One with some minor tweaking of several of our favorite Incredible PBX applications to accommodate the new Asterisk-GUI platform. We’re pleased to report that everything still works. Because of changes imposed by Google, you’ll need to jump through a few hoops to implement Speech Recognition support on this new Asterisk platform. All of the necessary software has already been put in place so all you need is an API key from Google. Once you obtain it, simply plug it into line 70 of speech-recog.agi. No other configuration is required. The affected applications are marked with an asterisk (*) below. But the good news is, if you’ve used these Nerd Vittles applications in the past, you’ll feel right at home.
Stay tuned for more and… HAPPY THANKSGIVING!
Originally published: Monday, November 24, 2014
Need help with Asterisk? Visit the PBX in a Flash Forum.
Special Thanks to Our Generous Sponsors
FULL DISCLOSURE: ClearlyIP, Skyetel, Vitelity, DigitalOcean, Vultr, VoIP.ms, 3CX, Sangoma, TelecomsXchange and VitalPBX have provided financial support to Nerd Vittles and our open source projects through advertising, referral revenue, and/or merchandise. As an Amazon Associate and Best Buy Affiliate, we also earn from qualifying purchases. We’ve chosen these providers not the other way around. Our decisions are based upon their corporate reputation and the quality of their offerings and pricing. Our recommendations regarding technology are reached without regard to financial compensation except in situations in which comparable products at comparable pricing are available from multiple sources. In this limited case, we support our sponsors because our sponsors support us.
BOGO Bonaza: Enjoy state-of-the-art VoIP service with a $10 credit and half-price SIP service on up to $500 of Skyetel trunking with free number porting when you fund your Skyetel account. No limits on number of simultaneous calls. Quadruple data center redundancy. $25 monthly minimum spend required. Tutorial and sign up details are here.
The lynchpin of Incredible PBX 2020 and beyond is ClearlyIP components which bring management of FreePBX modules and SIP phone integration to a level never before available with any other Asterisk distribution. And now you can configure and reconfigure your new Incredible PBX phones from the convenience of the Incredible PBX GUI.
VitalPBX is perhaps the fastest-growing PBX offering based upon Asterisk with an installed presence in more than 100 countries worldwide. VitalPBX has generously provided a customized White Label version of Incredible PBX tailored for use with all Incredible PBX and VitalPBX custom applications. Follow this link for a free test drive!
Special Thanks to Vitelity. Vitelity is now Voyant Communications and has halted new registrations for the time being. Our special thanks to Vitelity for their unwavering financial support over many years and to the many Nerd Vittles readers who continue to enjoy the benefits of their service offerings. We will keep everyone posted on further developments.
Some Recent Nerd Vittles Articles of Interest…